New version!
Some checks failed
Build Full Stack / release-image (push) Failing after 2m9s

This commit is contained in:
2024-12-22 01:37:41 +01:00
parent 740088fa0f
commit f85a2cc0c5
19 changed files with 764 additions and 140 deletions

View 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
View 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
View 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&apos;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&apos;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&apos;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;

View File

@ -2,20 +2,6 @@
@tailwind components; @tailwind components;
@tailwind utilities; @tailwind utilities;
:root { ul {
--background: #ffffff; @apply flex flex-row gap-x-4 flex-wrap list-inside items-center justify-center
--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;
} }

View File

@ -1,20 +1,10 @@
import type { Metadata } from "next"; import type { Metadata } from 'next';
import { Geist, Geist_Mono } from "next/font/google"; import { Geist, Geist_Mono } from 'next/font/google';
import "./globals.css"; import './globals.css';
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Create Next App", title: 'Nikola Kubiczek',
description: "Generated by create next app", description: 'Personal website',
}; };
export default function RootLayout({ export default function RootLayout({
@ -24,11 +14,7 @@ export default function RootLayout({
}>) { }>) {
return ( return (
<html lang="en"> <html lang="en">
<body <body className="antialiased">{children}</body>
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
</body>
</html> </html>
); );
} }

View File

@ -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() { export default function Home() {
return ( const { data, isLoading } = useSWR(
<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)]"> 'https://api.listenbrainz.org/1/user/yaemiku/listens?count=1',
<main className="flex flex-col gap-8 row-start-2 items-center sm:items-start"> fetcher
<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>
<div className="flex gap-4 items-center flex-col sm:flex-row"> return (
<a <div className="prose prose-stone mx-auto mt-6 p-4">
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" <header className="text-center">
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" <Image
target="_blank" src={'/pfp_fb_cropped.jpg'}
rel="noopener noreferrer" width={200}
> height={200}
<Image alt="My Picture"
className="dark:invert" priority
src="/vercel.svg" className="mx-auto rounded-full m-2 shadow-md"
alt="Vercel logomark" />
width={20} <h1>Nikola Kubiczek</h1>
height={20} {isLoading ? (
/> <></>
Deploy now ) : (
</a> <samp className="lead">
<a <em>Last song I have listened to:</em> <br />
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" <b>{data?.payload.listens[0].track_metadata.track_name}</b>
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" <br />- {data?.payload.listens[0].track_metadata.artist_name} <br />
target="_blank" </samp>
rel="noopener noreferrer" )}
> </header>
Read our docs <main>
</a> <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&apos;d want to send me any crypto
<ul className='block list-outside'>
<li>cosmos1gy6tg8jaf4qwmpug8jp8kqnyy9en3lmjxq0twf</li>
<li className='break-all'>46MiubQK8psbDWys429WvTQ71DyDiLkKmSLznoDYYFQbA6MfTvuVRJzSAbCCA17n8RGjCojx5GcpKH3q1DbpKJaQPCVcabi</li>
</ul>
</div>
</div> </div>
</main> </main>
<footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center"> <footer>
<a <hr />
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" <em>
target="_blank" Nikola Kubiczek &copy; <span id="year">2024</span>
rel="noopener noreferrer" </em>
> <br />
<Image
aria-hidden <em>
src="/file.svg" Made with{' '}
alt="File icon" <a href="https://nextjs.org" target="_blank">
width={16} NextJS
height={16} </a>
/> , and{' '}
Learn <a href="https://tailwindcss.com" target="_blank">
</a> TailwindCSS
<a </a>{' '}
className="flex items-center gap-2 hover:underline hover:underline-offset-4" </em>
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" <figure>
target="_blank" <blockquote className="text-justify">
rel="noopener noreferrer" 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
<Image still half dreaming, I felt that my body was not homogeneous, that
aria-hidden some parts were still those of a boy, and that my head was laughing
src="/window.svg" at my leg and ridiculing it, that my leg was laughing at my head,
alt="Window icon" that my finger was poking fun at my heart, my heart at my brain,
width={16} that my nose was thumbing itself at my eye, my eye chuckling and
height={16} bellowing at my nose and all my parts were wildly raping each
/> other in an all-encompassing and piercing state of pan-mockery. Nor
Examples did my fear lessen one iota when I reached full consciousness and
</a> began reflecting on my life. On the contrary, it intensified even as
<a it was interrupted (or accentuated) by a giggle my mouth could not
className="flex items-center gap-2 hover:underline hover:underline-offset-4" hold back. I was halfway down the path of my life when I found
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" myself in a dark forest.
target="_blank" </blockquote>
rel="noopener noreferrer" <figcaption> Witold Gombrowicz, Ferdydurke</figcaption>
> </figure>
<Image
aria-hidden
src="/globe.svg"
alt="Globe icon"
width={16}
height={16}
/>
Go to nextjs.org
</a>
</footer> </footer>
</div> </div>
); );

167
app/public.asc/route.ts Normal file
View 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
View 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

View File

@ -9,19 +9,21 @@
"lint": "next lint" "lint": "next lint"
}, },
"dependencies": { "dependencies": {
"next": "15.1.2",
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0"
"next": "15.1.2"
}, },
"devDependencies": { "devDependencies": {
"typescript": "^5", "@eslint/eslintrc": "^3",
"@tailwindcss/typography": "^0.5.15",
"@types/node": "^20", "@types/node": "^20",
"@types/react": "^19", "@types/react": "^19",
"@types/react-dom": "^19", "@types/react-dom": "^19",
"postcss": "^8",
"tailwindcss": "^3.4.1",
"eslint": "^9", "eslint": "^9",
"eslint-config-next": "15.1.2", "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
View File

@ -21,6 +21,9 @@ importers:
'@eslint/eslintrc': '@eslint/eslintrc':
specifier: ^3 specifier: ^3
version: 3.2.0 version: 3.2.0
'@tailwindcss/typography':
specifier: ^0.5.15
version: 0.5.15(tailwindcss@3.4.17)
'@types/node': '@types/node':
specifier: ^20 specifier: ^20
version: 20.17.10 version: 20.17.10
@ -39,6 +42,9 @@ importers:
postcss: postcss:
specifier: ^8 specifier: ^8
version: 8.4.49 version: 8.4.49
swr:
specifier: ^2.2.5
version: 2.2.5(react@19.0.0)
tailwindcss: tailwindcss:
specifier: ^3.4.1 specifier: ^3.4.1
version: 3.4.17 version: 3.4.17
@ -322,6 +328,11 @@ packages:
'@swc/helpers@0.5.15': '@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} 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': '@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
@ -1116,6 +1127,12 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'} 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: lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@ -1310,6 +1327,10 @@ packages:
peerDependencies: peerDependencies:
postcss: ^8.2.14 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: postcss-selector-parser@6.1.2:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'} engines: {node: '>=4'}
@ -1536,6 +1557,11 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'} 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: tailwindcss@3.4.17:
resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -1606,6 +1632,11 @@ packages:
uri-js@4.4.1: uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 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: util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@ -1872,6 +1903,14 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 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/estree@1.0.6': {}
'@types/json-schema@7.0.15': {} '@types/json-schema@7.0.15': {}
@ -2873,6 +2912,10 @@ snapshots:
dependencies: dependencies:
p-locate: 5.0.0 p-locate: 5.0.0
lodash.castarray@4.4.0: {}
lodash.isplainobject@4.0.6: {}
lodash.merge@4.6.2: {} lodash.merge@4.6.2: {}
loose-envify@1.4.0: loose-envify@1.4.0:
@ -3052,6 +3095,11 @@ snapshots:
postcss: 8.4.49 postcss: 8.4.49
postcss-selector-parser: 6.1.2 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: postcss-selector-parser@6.1.2:
dependencies: dependencies:
cssesc: 3.0.0 cssesc: 3.0.0
@ -3345,6 +3393,12 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {} 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: tailwindcss@3.4.17:
dependencies: dependencies:
'@alloc/quick-lru': 5.2.0 '@alloc/quick-lru': 5.2.0
@ -3453,6 +3507,10 @@ snapshots:
dependencies: dependencies:
punycode: 2.3.1 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: {} util-deprecate@1.0.2: {}
which-boxed-primitive@1.1.1: which-boxed-primitive@1.1.1:

View File

@ -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

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

BIN
public/pfp_fb_cropped.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
public/pfp_formal_comp.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

View File

@ -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

View File

@ -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

View File

@ -14,5 +14,5 @@ export default {
}, },
}, },
}, },
plugins: [], plugins: [require('@tailwindcss/typography')],
} satisfies Config; } satisfies Config;