@@ -0,0 +1,32 @@ | |||
# Install dependencies only when needed | |||
FROM node:lts-alpine AS deps | |||
WORKDIR /opt/app | |||
COPY package.json package-lock.json ./ | |||
RUN npm install --frozen-lockfile | |||
# Rebuild the source code only when needed | |||
# This is where because may be the case that you would try | |||
# to build the app based on some `X_TAG` in my case (Git commit hash) | |||
# but the code hasn't changed. | |||
FROM node:lts-alpine AS builder | |||
ENV NODE_ENV=production | |||
WORKDIR /opt/app | |||
COPY . . | |||
COPY --from=deps /opt/app/node_modules ./node_modules | |||
RUN npm run build | |||
# Production image, copy all the files and run next | |||
FROM node:lts-alpine AS runner | |||
EXPOSE 3000 | |||
ARG X_TAG | |||
WORKDIR /opt/app | |||
ENV NODE_ENV=production | |||
COPY --from=builder /opt/app/next.config.js ./ | |||
COPY --from=builder /opt/app/public ./public | |||
COPY --from=builder /opt/app/.next ./.next | |||
COPY --from=builder /opt/app/node_modules ./node_modules | |||
CMD ["node_modules/.bin/next", "start"] |
@@ -3,7 +3,7 @@ import * as React from "react"; | |||
function CloudCard3(props: React.SVGProps<SVGSVGElement>) { | |||
return ( | |||
<svg | |||
style={{ width: '100%', height: 'auto' }} | |||
style={{ width: '100%', height: '25vw' }} | |||
viewBox="180.139 338.183 487.88 514.547" | |||
xmlns="http://www.w3.org/2000/svg" | |||
{...props} | |||
@@ -32,7 +32,7 @@ function CloudCard3(props: React.SVGProps<SVGSVGElement>) { | |||
d="M636.238 593.566c56.54-39.714 34.157-142.5-40.765-140.418v10.754c3.082-14.28 3.004-30.437-1.344-44.406-8.477-27.258-37.067-41.707-64.121-38.527a58.974 58.974 0 00-8.524 2.004c-6.449 1.78-4.086-.325-5.129-6.094-1.097-6.082-3.996-11.672-7.222-16.86-6.551-10.542-17.703-17.14-29.371-20.378-12.867-3.586-26.489-.211-37.707 6.34-5.578 3.261-9.97 8.167-13.844 13.242-3.84 5.02-3.695 1.21-7.469-2.723-2.777-2.898-6.07-5.254-9.328-7.582-22.8-16.258-53.851-12.727-75.242 3.707-5.117 3.934-9.184 9.02-12.867 14.25a62.447 62.447 0 00-3.875 6.723c-3.024 5.644-5.633 2.004-11.332.379-14.907-4.211-31.098-1.387-44.907 4.91-41.222 18.832-48.054 77.5-23.136 111.535v-10.754c-36.922 17.922-44.684 69.715-18.457 100.117v-10.754c-29.922 12.457-42.34 39.625-41.41 70.59 1.242 41.652 37.773 70.711 78.625 62.817V691.68c-.965 11.976-.75 24.21 2.832 35.75 7.515 24.152 32.68 39.656 57.316 38.402 0-3.516-.012-7.047-.012-10.562-1.715 27.636 3.684 53.382 23.45 74.074 27.984 29.281 74.167 30.3 106.038 7.336 7.458-5.38 13.497-12.457 18.711-19.953 3.184-4.559 3.653-12.907 8.493-7.067 3.613 4.344 8.261 7.66 12.945 10.742 17.289 11.348 39.887 9.891 57.426.36 24.402-13.254 29.933-41.04 27.445-66.332v10.754c36.395-7.137 49.688-45.215 39.117-77.68v10.754c49.543-14.574 60.766-81.906 23.664-115.446 1.746 1.567-1.828 9.094 0 10.754 16.989 15.36 25.32 36.094 17.133 58.188-6.64 17.969-22.902 30.496-40.797 35.75-.379.121-.312 9.777 0 10.754 8.801 27.031-13.46 51.14-39.117 56.172-.402.078-.102 9.68 0 10.754 2.766 28.097-27.48 49.898-52.027 52.382-15.957 1.625-31.223-5.207-42.867-15.636-3.754-3.364-4.188-9.133-7.38-2.735-1.769 3.528-4.035 6.778-6.285 10.004-4.5 6.465-10.336 11.852-16.46 16.727-24.18 19.258-58.11 20.703-85.344 7.683-23.953-11.468-45.781-41.18-44.114-67.968.06-.996-.02-10.563-.02-10.563-27.065 1.379-62.624-21.855-60.147-52.64.09-1.098-.27-10.711 0-10.758-30.743 5.949-59.723-8.367-73.196-36.742-14.558-30.641 7.438-63.266 35.98-75.153.329-.133.528-10.148 0-10.754-10.816-12.547-16.94-27.289-12.53-43.781 4.21-15.797 16.699-27.895 30.988-34.828.425-.203.515-10.063 0-10.754-14.493-19.797-17.121-40.938-5.657-62.762 9.946-18.93 29.633-30.57 50.293-33.574 6.094-.883 12.25-.336 18.309.383 6.16.738 13.563 6.887 16.43.637 4.87-10.622 13.472-19.032 23.004-25.485 19.597-13.242 45.34-12.168 65.554-1.324 4.739 2.543 8.836 6.094 12.754 9.715 6.207 5.722 4.403 6.73 9.813-.348 7.222-9.445 18.351-14.789 29.695-17.176 21.727-4.546 42.703 8.63 52.5 27.38 2.32 4.437 3.406 9.378 4.277 14.25-.793 4.406.684 5.187 4.457 2.366a58.475 58.475 0 018.524-2.007c11.914-2.34 24.3.484 35.117 5.48 20.383 9.422 35.14 33.652 30.348 55.945-.223 1.032.07 10.747 0 10.754 28.336-.793 53.238 15.575 65.84 40.524 14.625 29.004-.125 60.851-25.075 78.387-1.738 1.218 1.633 9.601 0 10.753" | |||
fill="#231f20" | |||
/> | |||
<foreignObject x="180" y="435" className="flex justify-center items-center self-center md:w-8/12 w-full h-full"> | |||
<foreignObject x="270 " y="400" className="flex justify-center items-center self-center w-8/12 h-full"> | |||
{props.children} | |||
</foreignObject> | |||
</svg> |
@@ -4,7 +4,7 @@ import { FaHeart } from 'react-icons/fa' | |||
export default function Footer() { | |||
return ( | |||
<footer className="flex justify-around"> | |||
<footer className="flex justify-around md:text-sm text-xs p-3"> | |||
<Link href="/legal"> | |||
<a >Impressum</a> | |||
</Link> |
@@ -20,24 +20,24 @@ export default function NextEpisode() { | |||
<article className="flex flex-col items-center content-evenly"> | |||
<h1 className="text-2xl font-bold underline flex-none mb-2.5 ">Nächste Episode</h1> | |||
<h2 className="text-xl text-gray ml-3">{nextEpisode.date.toDateString}</h2> | |||
<p className="text-sm text-center text-gray ml-3 "> | |||
<div className="text-sm text-center text-gray ml-3 "> | |||
<label className="text-lg font-bold">Genre:</label> | |||
<div className="capitalize p-3"> | |||
{nextEpisode.genre} | |||
</div> | |||
</p> | |||
<p className="text-sm text-center ml-3"> | |||
</div> | |||
<div className="text-sm text-center ml-3" > | |||
<label className="text-lg font-bold">Judge:</label> | |||
<div className="capitalize p-3"> | |||
{nextEpisode.judge} | |||
</div> | |||
</p> | |||
<p className=" text-sm text-center ml-3"> | |||
</div> | |||
<div className="text-sm text-center ml-3"> | |||
<label className="text-lg font-bold">Spieler:</label> | |||
<div className="capitalize p-3"> | |||
{nextEpisode.player.join(' & ')} | |||
</div> | |||
</p> | |||
</div> | |||
</article> | |||
</CloudCard3> | |||
) |
@@ -4,8 +4,8 @@ import NextEpisode from '../components/next-episode'; | |||
export default function Home() { | |||
return ( | |||
<div className="flex flex-col content-around justify-around md:grid md:grid-flow-col md:grid-cols-2 "> | |||
<article className="p-1"> | |||
<div className="grid md:grid-cols-3 grid-cols-2 gap-3 p-3"> | |||
<article className="col-span-full md:col-span-2"> | |||
<SpotifyPlayer | |||
uri="spotify:episode:0nzzRPNa4j01gl0limItJG" | |||
size={{ | |||
@@ -16,10 +16,10 @@ export default function Home() { | |||
theme='black' | |||
/> | |||
</article> | |||
<article className="p-1"> | |||
<article className=" col-span-1 h-3/4"> | |||
<NextEpisode /> | |||
</article> | |||
<article className="p-1"> | |||
<article className=" col-span-1 h-3/4"> | |||
<AboutLink /> | |||
</article> | |||
</div> |
@@ -1 +1 @@ | |||
{"version":3,"file":"sw.js","sources":["../../../../tmp/d0164319e6b61d0970d3669d4d54acf4/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/home/cziermann/Projects/nerdbrawl.de/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/home/cziermann/Projects/nerdbrawl.de/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/home/cziermann/Projects/nerdbrawl.de/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkOnly","plugins"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE2I;EAC3I;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAGAA,aAAa;EAUbC,IAAI,CAACC,WAAL;AAEAC,sBAAyB;AAIzBC,uBAA6B,CAAC,KAAD,EAAQ,IAAIC,mBAAJ,CAAmC;EAAE,eAAY,KAAd;EAAqBC,EAAAA,OAAO,EAAE;EAA9B,CAAnC,CAAR,EAAgF,KAAhF,CAA7B;;"} | |||
{"version":3,"file":"sw.js","sources":["../../../../tmp/09c544407856780e57e6dc7053332ea4/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/home/cziermann/Projects/nerdbrawl.de/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/home/cziermann/Projects/nerdbrawl.de/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/home/cziermann/Projects/nerdbrawl.de/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkOnly","plugins"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE2I;EAC3I;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAGAA,aAAa;EAUbC,IAAI,CAACC,WAAL;AAEAC,sBAAyB;AAIzBC,uBAA6B,CAAC,KAAD,EAAQ,IAAIC,mBAAJ,CAAmC;EAAE,eAAY,KAAd;EAAqBC,EAAAA,OAAO,EAAE;EAA9B,CAAnC,CAAR,EAAgF,KAAhF,CAA7B;;"} |
@@ -3,6 +3,7 @@ module.exports = { | |||
darkMode: 'class', // or 'media' or 'class' | |||
theme: { | |||
extend: { | |||
backgroundColor: theme => ({ | |||
...theme('colors'), | |||
'primary': '#ad4932', |