46
.gitea/workflows/build.yaml
Normal file
@ -0,0 +1,46 @@
|
||||
name: Build Full Stack
|
||||
run-name: ${{ gitea.actor }} is building 🚀
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
release-image:
|
||||
runs-on: docker
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
env:
|
||||
DOCKER_ORG: yaemiku
|
||||
DOCKER_LATEST: latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker BuildX
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: git.yaemiku.dev
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Get Meta
|
||||
id: meta
|
||||
run: |
|
||||
echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}') >> $GITHUB_OUTPUT
|
||||
echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
platforms: |
|
||||
linux/amd64
|
||||
push: true
|
||||
tags: |
|
||||
git.yaemiku.dev/${{ env.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}
|
||||
git.yaemiku.dev/${{ env.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ env.DOCKER_LATEST }}
|
65
Dockerfile
Normal file
@ -0,0 +1,65 @@
|
||||
FROM node:alpine AS base
|
||||
|
||||
# Install dependencies only when needed
|
||||
FROM base AS deps
|
||||
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
|
||||
RUN apk add --no-cache libc6-compat
|
||||
WORKDIR /app
|
||||
|
||||
# Install dependencies based on the preferred package manager
|
||||
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
|
||||
RUN \
|
||||
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
|
||||
elif [ -f package-lock.json ]; then npm ci; \
|
||||
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
|
||||
else echo "Lockfile not found." && exit 1; \
|
||||
fi
|
||||
|
||||
|
||||
# Rebuild the source code only when needed
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
|
||||
# Next.js collects completely anonymous telemetry data about general usage.
|
||||
# Learn more here: https://nextjs.org/telemetry
|
||||
# Uncomment the following line in case you want to disable telemetry during the build.
|
||||
# ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
RUN yarn build
|
||||
|
||||
# If using npm comment out above and use below instead
|
||||
# RUN npm run build
|
||||
|
||||
# Production image, copy all the files and run next
|
||||
FROM base AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV production
|
||||
# Uncomment the following line in case you want to disable telemetry during runtime.
|
||||
# ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
RUN addgroup --system --gid 1001 nodejs
|
||||
RUN adduser --system --uid 1001 nextjs
|
||||
|
||||
COPY --from=builder /app/public ./public
|
||||
|
||||
# Set the correct permission for prerender cache
|
||||
RUN mkdir .next
|
||||
RUN chown nextjs:nodejs .next
|
||||
|
||||
# Automatically leverage output traces to reduce image size
|
||||
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENV PORT 3000
|
||||
# set hostname to localhost
|
||||
ENV HOSTNAME "0.0.0.0"
|
||||
|
||||
CMD ["node", "server.js"]
|
175
app/cv/page.tsx
Normal file
@ -0,0 +1,175 @@
|
||||
import { Metadata, NextPage } from 'next';
|
||||
import Image from 'next/image';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Curriculum Vitae',
|
||||
description: '',
|
||||
}
|
||||
|
||||
const Page: NextPage = () => {
|
||||
return (
|
||||
<div className="max-w-screen-lg mx-auto mt-6 p-2 flex flex-col gap-4">
|
||||
<main className="prose w-full lg:max-w-screen-lg mx-auto prose-h1:text-center prose-h1:mb-2 prose-h2:mt-0 mb-10 flex flex-col">
|
||||
<div className="flex">
|
||||
<div>
|
||||
<h1 className="mt-2">Nikola Kubiczek</h1>
|
||||
<h2>Full-stack developer</h2>
|
||||
</div>
|
||||
<Image
|
||||
src={'/pfp_formal_comp.jpg'}
|
||||
width={200}
|
||||
height={200}
|
||||
alt="My Picture"
|
||||
className="w-40 mt-0 mb-0 mr-0 ml-auto rounded-3xl shadow-2xl"
|
||||
priority
|
||||
/>
|
||||
</div>
|
||||
<div className="grid grid-cols-2 prose-p:mt-0 prose-p:mb-0 gap-4">
|
||||
<div>
|
||||
<h2 className="mb-0">Contact</h2>
|
||||
<div className="border-l-4 pl-2">
|
||||
<p>
|
||||
<b>Email:</b> me@yaemiku.dev
|
||||
</p>
|
||||
<p>
|
||||
<b>Phone numer:</b> +48 797407620
|
||||
</p>
|
||||
<p>
|
||||
<b>LinkedIn:</b>{' '}
|
||||
<a href="https://linkedin.com/in/yaemiku">
|
||||
linkedin.com/in/yaemiku
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<b>Website:</b>{' '}
|
||||
<a href="http://www.yaemiku.dev">www.yaemiku.dev</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-0">Education</h2>
|
||||
<p className="border-l-4 pl-2">
|
||||
<strong>Bachelor of Mathematics</strong>
|
||||
<br />
|
||||
University of Warsaw, Faculty of Mathematics, Informatics and
|
||||
Mechanics
|
||||
<br />
|
||||
Since 10.2023, currently studying
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-0">Skills / Technologies</h2>
|
||||
<div className="flex border-l-4 px-2">
|
||||
<ul className="font-semibold list-outside list-none">
|
||||
<li>Analytical and creative thinking</li>
|
||||
<li>Docker</li>
|
||||
<li>Git</li>
|
||||
<li>Proficiency in GNU/Linux</li>
|
||||
<li>Django</li>
|
||||
<li>TailwindCSS</li>
|
||||
<li>NextJS</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-0">Interests</h2>
|
||||
<p className='border-l-4 pl-2 text-justify'>
|
||||
Knitting, crocheting, detailed makeup, listening to music, walking,
|
||||
playing with linux and many more. As for the last one, I've been a poweruser
|
||||
since 2020 and am self-hosting a few services - mainly media related ones.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<h1>Summary</h1>
|
||||
<p className="text-justify">
|
||||
I am a student on my second year of studying mathematics. I have been
|
||||
interested in IT since elementary school, when my father showed me how
|
||||
to create a simple website. Throughout the years I have gained
|
||||
practical experience regarding full-stack development with projects
|
||||
listed below. Nearing the end of high school I have made a decision to
|
||||
pursue mathematics, which has been my passion for a long time,
|
||||
realizing it will be more beneficial to my career taking into
|
||||
consideration my experience in IT. While not having a strictly
|
||||
computer science based education, I am a quick learner, I can
|
||||
fundamentally grasp complex ideas rather quickly, adapt to new
|
||||
environments, analyse edge cases and implement previously known ideas
|
||||
under new circumstances.
|
||||
</p>
|
||||
<hr className="print:break-before-page" />
|
||||
<h1>Experience</h1>
|
||||
<p>
|
||||
Throughout the years I have completed a few projects, some of them listed below:
|
||||
</p>
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="border-l-4 pl-2">
|
||||
<p className="text-xl mb-0 mt-0">
|
||||
<b>ikubi_pracownia</b>:{' '}
|
||||
<a href="https://ikubi.pl">https://ikubi.pl</a>
|
||||
</p>
|
||||
My first project. A portfolio website for my mother
|
||||
<br />
|
||||
<i>Technologies used: Docker, Django, 11ty, BulmaCSS</i>
|
||||
</div>
|
||||
<div className="border-l-4 pl-2">
|
||||
<p className="text-xl mb-0 mt-0">
|
||||
<b>Puchar LO V w Bielsku-Białej</b>:{' '}
|
||||
<a href="https://puchar.lo5.bielsko.pl">
|
||||
https://puchar.lo5.bielsko.pl
|
||||
</a>
|
||||
</p>
|
||||
A website for a mathematical contest organized by my high school
|
||||
<br />
|
||||
<i>Technologies used: Django, BulmaCSS</i>
|
||||
</div>
|
||||
<div className="border-l-4 pl-2">
|
||||
<p className="text-xl mb-0 mt-0">
|
||||
<b>eParafia</b>:{' '}
|
||||
<a href="https://eparafia.eu">https://eparafia.eu</a>
|
||||
</p>
|
||||
A website which main functionality is to allow local churches to
|
||||
have opt-in pastoral visits by submitting a form online
|
||||
<br />
|
||||
<i>Technologies used: NextJS, TailwindCSS, PocketBase</i>
|
||||
</div>
|
||||
<div className="border-l-4 pl-2">
|
||||
<p className="text-xl mb-0 mt-0">
|
||||
<b>Podlaski Związek Brydża Sportowego</b>:{' '}
|
||||
<a href="https://podlzbs.pl">https://podlzbs.pl</a>
|
||||
</p>
|
||||
A website for Podlaskie Voivodeship's bridge association
|
||||
<br />
|
||||
<i>Technologies used: Docker, Django, TailwindCSS</i>
|
||||
</div>
|
||||
<div className="border-l-4 pl-2">
|
||||
<p className="text-xl mb-0 mt-0">
|
||||
<b>TechTIR App</b> (only an article in polish is available:{' '}
|
||||
<a href="https://techtir.pl/relacja-i-podsumowanie-kongresu-sdcm/">
|
||||
https://techtir.pl/relacja-i-podsumowanie-kongresu-sdcm/
|
||||
</a>
|
||||
)
|
||||
</p>
|
||||
A website which was crucial for TechTIR's presentation during
|
||||
an automotive congress. It operated as a quiz for the participants
|
||||
to revise their knowledge after the talk (think kahoot.it)
|
||||
<br />
|
||||
<i>Technologies used: Docker, Django, TailwindCSS</i>
|
||||
</div>
|
||||
{/* <div className="border-l-4 pl-2">
|
||||
<p className="text-xl mb-0 mt-0">
|
||||
<b>Kod Pamięci</b>:{' '}
|
||||
<a href="https://kod-pamieci.pl">https://kod-pamieci.pl</a>
|
||||
</p>
|
||||
A website I am currently working on, it allows users to generate
|
||||
unique QR codes designed to be put on gravestones in order to
|
||||
preserve memories of their loved ones
|
||||
<br />
|
||||
<i>Technologies used: Docker, Django, TailwindCSS</i>
|
||||
</div> */}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Page;
|
@ -2,20 +2,6 @@
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
:root {
|
||||
--background: #ffffff;
|
||||
--foreground: #171717;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--background: #0a0a0a;
|
||||
--foreground: #ededed;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
color: var(--foreground);
|
||||
background: var(--background);
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
ul {
|
||||
@apply flex flex-row gap-x-4 flex-wrap list-inside items-center justify-center
|
||||
}
|
||||
|
@ -1,20 +1,10 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Geist, Geist_Mono } from "next/font/google";
|
||||
import "./globals.css";
|
||||
|
||||
const geistSans = Geist({
|
||||
variable: "--font-geist-sans",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
const geistMono = Geist_Mono({
|
||||
variable: "--font-geist-mono",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
import type { Metadata } from 'next';
|
||||
import { Geist, Geist_Mono } from 'next/font/google';
|
||||
import './globals.css';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Create Next App",
|
||||
description: "Generated by create next app",
|
||||
title: 'Nikola Kubiczek',
|
||||
description: 'Personal website',
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
@ -24,11 +14,7 @@ export default function RootLayout({
|
||||
}>) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<body
|
||||
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
||||
>
|
||||
{children}
|
||||
</body>
|
||||
<body className="antialiased">{children}</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
|
257
app/page.tsx
@ -1,100 +1,173 @@
|
||||
import Image from "next/image";
|
||||
'use client';
|
||||
|
||||
import Image from 'next/image';
|
||||
import useSWR, { Fetcher } from 'swr';
|
||||
|
||||
type ListenBrainz = {
|
||||
payload: {
|
||||
listens: {
|
||||
track_metadata: {
|
||||
track_name: string;
|
||||
artist_name: string;
|
||||
release_name: string;
|
||||
};
|
||||
}[];
|
||||
};
|
||||
};
|
||||
|
||||
const fetcher: Fetcher<ListenBrainz, string> = (...args) =>
|
||||
fetch(...args).then((res) => res.json());
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
|
||||
<main className="flex flex-col gap-8 row-start-2 items-center sm:items-start">
|
||||
<Image
|
||||
className="dark:invert"
|
||||
src="/next.svg"
|
||||
alt="Next.js logo"
|
||||
width={180}
|
||||
height={38}
|
||||
priority
|
||||
/>
|
||||
<ol className="list-inside list-decimal text-sm text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
|
||||
<li className="mb-2">
|
||||
Get started by editing{" "}
|
||||
<code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
|
||||
app/page.tsx
|
||||
</code>
|
||||
.
|
||||
</li>
|
||||
<li>Save and see your changes instantly.</li>
|
||||
</ol>
|
||||
const { data, isLoading } = useSWR(
|
||||
'https://api.listenbrainz.org/1/user/yaemiku/listens?count=1',
|
||||
fetcher
|
||||
);
|
||||
|
||||
<div className="flex gap-4 items-center flex-col sm:flex-row">
|
||||
<a
|
||||
className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
|
||||
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
className="dark:invert"
|
||||
src="/vercel.svg"
|
||||
alt="Vercel logomark"
|
||||
width={20}
|
||||
height={20}
|
||||
/>
|
||||
Deploy now
|
||||
</a>
|
||||
<a
|
||||
className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:min-w-44"
|
||||
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Read our docs
|
||||
</a>
|
||||
return (
|
||||
<div className="prose prose-stone mx-auto mt-6 p-4">
|
||||
<header className="text-center">
|
||||
<Image
|
||||
src={'/pfp_fb_cropped.jpg'}
|
||||
width={200}
|
||||
height={200}
|
||||
alt="My Picture"
|
||||
priority
|
||||
className="mx-auto rounded-full m-2 shadow-md"
|
||||
/>
|
||||
<h1>Nikola Kubiczek</h1>
|
||||
{isLoading ? (
|
||||
<></>
|
||||
) : (
|
||||
<samp className="lead">
|
||||
<em>Last song I have listened to:</em> <br />
|
||||
<b>{data?.payload.listens[0].track_metadata.track_name}</b>
|
||||
<br />- {data?.payload.listens[0].track_metadata.artist_name} <br />
|
||||
</samp>
|
||||
)}
|
||||
</header>
|
||||
<main>
|
||||
<div>
|
||||
<h2>About me</h2>
|
||||
<p>
|
||||
Currently studying pure mathematics at the University of Warsaw and
|
||||
doing commissions on the side. I had been considering studying
|
||||
computer science but decided not to - mathematics is the love of my
|
||||
life and an absolute passion.
|
||||
</p>
|
||||
<p>
|
||||
In my free time I love listening to music - be it on headphones,
|
||||
speakers or by going to a local concert. I'm very into various
|
||||
brews, almost anything apart from alcohol could be my cup of tea.
|
||||
Green and white teas, matcha, yerba mate, etc. You name it. I quite
|
||||
like to knit/crochet, but find myself always not having enough time.
|
||||
I also tinker with my servers a lot - I have a few services set up
|
||||
and I love to play with configuring them or adding new ones.
|
||||
</p>
|
||||
<p>
|
||||
I think self-expression and emotional maturity are really important.
|
||||
I live to love. To experience life with the ones I love.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2>Contact</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="public.asc" target="_blank">
|
||||
me<span>@</span>yaemiku.dev
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
nikola.kubiczek<span>@</span>proton.me
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div>
|
||||
Feel free to message me. Here are a few links, that might prove
|
||||
useful sometimes
|
||||
<ul>
|
||||
<li>
|
||||
<a
|
||||
href="https://listenbrainz.org/user/yaemiku/"
|
||||
target="_blank"
|
||||
>
|
||||
listenbrainz
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a
|
||||
href="https://www.instagram.com/kicia_kocia_core/"
|
||||
target={'_blank'}
|
||||
>
|
||||
instagram
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://stats.foldingathome.org/donor/id/711660268"
|
||||
target={'_blank'}
|
||||
>
|
||||
folding@home
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/cv/" target={'_blank'}>
|
||||
cv
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://git.yaemiku.dev/yaemiku" target={'_blank'}>
|
||||
git
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
And if you'd want to send me any crypto
|
||||
<ul className='block list-outside'>
|
||||
<li>cosmos1gy6tg8jaf4qwmpug8jp8kqnyy9en3lmjxq0twf</li>
|
||||
<li className='break-all'>46MiubQK8psbDWys429WvTQ71DyDiLkKmSLznoDYYFQbA6MfTvuVRJzSAbCCA17n8RGjCojx5GcpKH3q1DbpKJaQPCVcabi</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center">
|
||||
<a
|
||||
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
||||
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
aria-hidden
|
||||
src="/file.svg"
|
||||
alt="File icon"
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
Learn
|
||||
</a>
|
||||
<a
|
||||
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
||||
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
aria-hidden
|
||||
src="/window.svg"
|
||||
alt="Window icon"
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
Examples
|
||||
</a>
|
||||
<a
|
||||
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
||||
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
aria-hidden
|
||||
src="/globe.svg"
|
||||
alt="Globe icon"
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
Go to nextjs.org →
|
||||
</a>
|
||||
<footer>
|
||||
<hr />
|
||||
|
||||
<em>
|
||||
Nikola Kubiczek © <span id="year">2024</span>
|
||||
</em>
|
||||
<br />
|
||||
|
||||
<em>
|
||||
Made with{' '}
|
||||
<a href="https://nextjs.org" target="_blank">
|
||||
NextJS
|
||||
</a>
|
||||
, and{' '}
|
||||
<a href="https://tailwindcss.com" target="_blank">
|
||||
TailwindCSS
|
||||
</a>{' '}
|
||||
</em>
|
||||
<figure>
|
||||
<blockquote className="text-justify">
|
||||
Oh, wretched memory that compels us to remember the paths we took to
|
||||
arrive at the present state of affairs! Further: as I lay awake but
|
||||
still half dreaming, I felt that my body was not homogeneous, that
|
||||
some parts were still those of a boy, and that my head was laughing
|
||||
at my leg and ridiculing it, that my leg was laughing at my head,
|
||||
that my finger was poking fun at my heart, my heart at my brain,
|
||||
that my nose was thumbing itself at my eye, my eye chuckling and
|
||||
bellowing at my nose — and all my parts were wildly raping each
|
||||
other in an all-encompassing and piercing state of pan-mockery. Nor
|
||||
did my fear lessen one iota when I reached full consciousness and
|
||||
began reflecting on my life. On the contrary, it intensified even as
|
||||
it was interrupted (or accentuated) by a giggle my mouth could not
|
||||
hold back. I was halfway down the path of my life when I found
|
||||
myself in a dark forest.
|
||||
</blockquote>
|
||||
<figcaption>——— Witold Gombrowicz, Ferdydurke</figcaption>
|
||||
</figure>
|
||||
</footer>
|
||||
</div>
|
||||
);
|
||||
|
167
app/public.asc/route.ts
Normal file
@ -0,0 +1,167 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
export async function GET(_request: NextRequest) {
|
||||
const pk = `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
826qgOE=
|
||||
=PoyA
|
||||
-----END PGP PUBLIC KEY BLOCK-----`
|
||||
return new NextResponse(pk, {
|
||||
headers: {
|
||||
'Content-Type': 'text/plain; charset=utf-8'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
71
deployment.yaml
Normal file
@ -0,0 +1,71 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: hamburger
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: hamburger
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: hamburger
|
||||
spec:
|
||||
containers:
|
||||
- name: hamburger
|
||||
image: registry.yaemiku.dev/yaemiku/hamburger
|
||||
ports:
|
||||
- name: app-port
|
||||
containerPort: 3000
|
||||
resources:
|
||||
requests:
|
||||
memory: "64Mi"
|
||||
cpu: "250m"
|
||||
limits:
|
||||
memory: "128Mi"
|
||||
cpu: "500m"
|
||||
imagePullSecrets:
|
||||
- name: regcred
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: hamburger
|
||||
spec:
|
||||
ports:
|
||||
- name: app-svc-port
|
||||
port: 80
|
||||
targetPort: app-port
|
||||
selector:
|
||||
app: hamburger
|
||||
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: hamburger
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
rules:
|
||||
- host: yaemiku.dev
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: hamburger
|
||||
port:
|
||||
number: 80
|
||||
- host: www.yaemiku.dev
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: hamburger
|
||||
port:
|
||||
number: 80
|
14
package.json
@ -9,19 +9,21 @@
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"next": "15.1.2",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
"next": "15.1.2"
|
||||
"react-dom": "^19.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5",
|
||||
"@eslint/eslintrc": "^3",
|
||||
"@tailwindcss/typography": "^0.5.15",
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^19",
|
||||
"@types/react-dom": "^19",
|
||||
"postcss": "^8",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"eslint": "^9",
|
||||
"eslint-config-next": "15.1.2",
|
||||
"@eslint/eslintrc": "^3"
|
||||
"postcss": "^8",
|
||||
"swr": "^2.2.5",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
|
58
pnpm-lock.yaml
generated
@ -21,6 +21,9 @@ importers:
|
||||
'@eslint/eslintrc':
|
||||
specifier: ^3
|
||||
version: 3.2.0
|
||||
'@tailwindcss/typography':
|
||||
specifier: ^0.5.15
|
||||
version: 0.5.15(tailwindcss@3.4.17)
|
||||
'@types/node':
|
||||
specifier: ^20
|
||||
version: 20.17.10
|
||||
@ -39,6 +42,9 @@ importers:
|
||||
postcss:
|
||||
specifier: ^8
|
||||
version: 8.4.49
|
||||
swr:
|
||||
specifier: ^2.2.5
|
||||
version: 2.2.5(react@19.0.0)
|
||||
tailwindcss:
|
||||
specifier: ^3.4.1
|
||||
version: 3.4.17
|
||||
@ -322,6 +328,11 @@ packages:
|
||||
'@swc/helpers@0.5.15':
|
||||
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
|
||||
|
||||
'@tailwindcss/typography@0.5.15':
|
||||
resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==}
|
||||
peerDependencies:
|
||||
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
|
||||
|
||||
'@types/estree@1.0.6':
|
||||
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
|
||||
|
||||
@ -1116,6 +1127,12 @@ packages:
|
||||
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
lodash.castarray@4.4.0:
|
||||
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
|
||||
|
||||
lodash.isplainobject@4.0.6:
|
||||
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
|
||||
|
||||
lodash.merge@4.6.2:
|
||||
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
||||
|
||||
@ -1310,6 +1327,10 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.2.14
|
||||
|
||||
postcss-selector-parser@6.0.10:
|
||||
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
|
||||
engines: {node: '>=4'}
|
||||
|
||||
postcss-selector-parser@6.1.2:
|
||||
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
|
||||
engines: {node: '>=4'}
|
||||
@ -1536,6 +1557,11 @@ packages:
|
||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
swr@2.2.5:
|
||||
resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==}
|
||||
peerDependencies:
|
||||
react: ^16.11.0 || ^17.0.0 || ^18.0.0
|
||||
|
||||
tailwindcss@3.4.17:
|
||||
resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
@ -1606,6 +1632,11 @@ packages:
|
||||
uri-js@4.4.1:
|
||||
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
|
||||
|
||||
use-sync-external-store@1.4.0:
|
||||
resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==}
|
||||
peerDependencies:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
|
||||
util-deprecate@1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
|
||||
@ -1872,6 +1903,14 @@ snapshots:
|
||||
dependencies:
|
||||
tslib: 2.8.1
|
||||
|
||||
'@tailwindcss/typography@0.5.15(tailwindcss@3.4.17)':
|
||||
dependencies:
|
||||
lodash.castarray: 4.4.0
|
||||
lodash.isplainobject: 4.0.6
|
||||
lodash.merge: 4.6.2
|
||||
postcss-selector-parser: 6.0.10
|
||||
tailwindcss: 3.4.17
|
||||
|
||||
'@types/estree@1.0.6': {}
|
||||
|
||||
'@types/json-schema@7.0.15': {}
|
||||
@ -2873,6 +2912,10 @@ snapshots:
|
||||
dependencies:
|
||||
p-locate: 5.0.0
|
||||
|
||||
lodash.castarray@4.4.0: {}
|
||||
|
||||
lodash.isplainobject@4.0.6: {}
|
||||
|
||||
lodash.merge@4.6.2: {}
|
||||
|
||||
loose-envify@1.4.0:
|
||||
@ -3052,6 +3095,11 @@ snapshots:
|
||||
postcss: 8.4.49
|
||||
postcss-selector-parser: 6.1.2
|
||||
|
||||
postcss-selector-parser@6.0.10:
|
||||
dependencies:
|
||||
cssesc: 3.0.0
|
||||
util-deprecate: 1.0.2
|
||||
|
||||
postcss-selector-parser@6.1.2:
|
||||
dependencies:
|
||||
cssesc: 3.0.0
|
||||
@ -3345,6 +3393,12 @@ snapshots:
|
||||
|
||||
supports-preserve-symlinks-flag@1.0.0: {}
|
||||
|
||||
swr@2.2.5(react@19.0.0):
|
||||
dependencies:
|
||||
client-only: 0.0.1
|
||||
react: 19.0.0
|
||||
use-sync-external-store: 1.4.0(react@19.0.0)
|
||||
|
||||
tailwindcss@3.4.17:
|
||||
dependencies:
|
||||
'@alloc/quick-lru': 5.2.0
|
||||
@ -3453,6 +3507,10 @@ snapshots:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
||||
use-sync-external-store@1.4.0(react@19.0.0):
|
||||
dependencies:
|
||||
react: 19.0.0
|
||||
|
||||
util-deprecate@1.0.2: {}
|
||||
|
||||
which-boxed-primitive@1.1.1:
|
||||
|
@ -1 +0,0 @@
|
||||
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
Before Width: | Height: | Size: 391 B |
@ -1 +0,0 @@
|
||||
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
Before Width: | Height: | Size: 1.0 KiB |
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
public/pattern.png
Normal file
After Width: | Height: | Size: 193 KiB |
BIN
public/pfp_fb_cropped.jpg
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
public/pfp_formal_comp.jpg
Normal file
After Width: | Height: | Size: 262 KiB |
@ -1 +0,0 @@
|
||||
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
|
Before Width: | Height: | Size: 128 B |
@ -1 +0,0 @@
|
||||
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
|
Before Width: | Height: | Size: 385 B |
@ -14,5 +14,5 @@ export default {
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
plugins: [require('@tailwindcss/typography')],
|
||||
} satisfies Config;
|
||||
|