Skip to content

Commit 5af80a9

Browse files
committed
wiping history to remove old photos
0 parents  commit 5af80a9

46 files changed

Lines changed: 6210 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"extends": "next/core-web-vitals"
3+
}

.github/workflows/nextjs.yml

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Sample workflow for building and deploying a Next.js site to GitHub Pages
2+
#
3+
# To get started with Next.js see: https://nextjs.org/docs/getting-started
4+
#
5+
name: Deploy Next.js site to Pages
6+
7+
on:
8+
# Runs on pushes targeting the default branch
9+
push:
10+
branches: ["main"]
11+
12+
# Allows you to run this workflow manually from the Actions tab
13+
workflow_dispatch:
14+
15+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
16+
permissions:
17+
contents: read
18+
pages: write
19+
id-token: write
20+
21+
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
22+
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
23+
concurrency:
24+
group: "pages"
25+
cancel-in-progress: false
26+
27+
jobs:
28+
# Build job
29+
build:
30+
runs-on: ubuntu-latest
31+
steps:
32+
- name: Checkout
33+
uses: actions/checkout@v4
34+
- name: Detect package manager
35+
id: detect-package-manager
36+
run: |
37+
if [ -f "${{ github.workspace }}/yarn.lock" ]; then
38+
echo "manager=yarn" >> $GITHUB_OUTPUT
39+
echo "command=install" >> $GITHUB_OUTPUT
40+
echo "runner=yarn" >> $GITHUB_OUTPUT
41+
exit 0
42+
elif [ -f "${{ github.workspace }}/package.json" ]; then
43+
echo "manager=npm" >> $GITHUB_OUTPUT
44+
echo "command=ci" >> $GITHUB_OUTPUT
45+
echo "runner=npx --no-install" >> $GITHUB_OUTPUT
46+
exit 0
47+
else
48+
echo "Unable to determine package manager"
49+
exit 1
50+
fi
51+
- name: Setup Node
52+
uses: actions/setup-node@v4
53+
with:
54+
node-version: "20"
55+
cache: ${{ steps.detect-package-manager.outputs.manager }}
56+
- name: Setup Pages
57+
uses: actions/configure-pages@v5
58+
with:
59+
# Automatically inject basePath in your Next.js configuration file and disable
60+
# server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized).
61+
#
62+
# You may remove this line if you want to manage the configuration yourself.
63+
static_site_generator: next
64+
- name: Restore cache
65+
uses: actions/cache@v4
66+
with:
67+
path: |
68+
.next/cache
69+
# Generate a new cache whenever packages or source files change.
70+
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
71+
# If source files changed but packages didn't, rebuild from a prior cache.
72+
restore-keys: |
73+
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-
74+
- name: Install dependencies
75+
run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
76+
- name: Build with Next.js
77+
run: ${{ steps.detect-package-manager.outputs.runner }} next build
78+
- name: Upload artifact
79+
uses: actions/upload-pages-artifact@v3
80+
with:
81+
path: ./out
82+
83+
# Deployment job
84+
deploy:
85+
environment:
86+
name: github-pages
87+
url: ${{ steps.deployment.outputs.page_url }}
88+
runs-on: ubuntu-latest
89+
needs: build
90+
steps:
91+
- name: Deploy to GitHub Pages
92+
id: deployment
93+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
/.pnp
6+
.pnp.js
7+
.yarn/install-state.gz
8+
9+
# testing
10+
/coverage
11+
12+
# next.js
13+
/.next/
14+
/out/
15+
16+
# production
17+
/build
18+
19+
# misc
20+
.DS_Store
21+
*.pem
22+
23+
# debug
24+
npm-debug.log*
25+
yarn-debug.log*
26+
yarn-error.log*
27+
28+
# local env files
29+
.env*.local
30+
31+
# vercel
32+
.vercel
33+
34+
# typescript
35+
*.tsbuildinfo
36+
next-env.d.ts

app/about/page.tsx

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
'use client'
2+
3+
import Image from "next/image";
4+
import { motion } from "framer-motion";
5+
import { PageWrapper } from "@/components/PageWrapper";
6+
import Scoresaber from "@/public/linkicons/sslogo.svg";
7+
import { UnderLink } from "@/components/MotionLink";
8+
import { MotionLogo } from "@/components/MotionLogo";
9+
import Carousel from "react-multi-carousel";
10+
import 'react-multi-carousel/lib/styles.css';
11+
import { useEffect } from "react";
12+
13+
export default function Home() {
14+
return (
15+
<PageWrapper>
16+
<main className="flex flex-col">
17+
<Contents />
18+
</main>
19+
</PageWrapper>
20+
);
21+
}
22+
23+
const carouselResponsive = {
24+
superLargeDesktop: {
25+
// the naming can be any, depends on you.
26+
breakpoint: { max: 4000, min: 3000 },
27+
items: 1
28+
},
29+
desktop: {
30+
breakpoint: { max: 3000, min: 1024 },
31+
items: 1
32+
},
33+
tablet: {
34+
breakpoint: { max: 1024, min: 464 },
35+
items: 1
36+
},
37+
mobile: {
38+
breakpoint: { max: 464, min: 0 },
39+
items: 1
40+
}
41+
};
42+
const carouselHeight = 300;
43+
44+
const sections = [
45+
{
46+
title: "UMass Cybersecurity Club",
47+
contents: (
48+
<p>I play CTFs with <UnderLink href="https://ctftime.org/team/78233">SavedByTheShell</UnderLink>,
49+
and am currently exploring web, osint, and pwn (and misc as well!)
50+
</p>
51+
),
52+
images: (
53+
<Image
54+
src="/aboutme/cybersec.png"
55+
alt="JSA performance"
56+
width={1000}
57+
height={1000}
58+
className="object-cover w-full h-auto"
59+
/>
60+
)
61+
},
62+
{
63+
title: "UMass TASC",
64+
contents: (
65+
<p>I play diabolo and perform in various events around campus. Subscribe to <UnderLink href="https://www.youtube.com/@umasstasc">@umasstasc</UnderLink> for performance recaps.</p>
66+
),
67+
images: (
68+
<Image
69+
src="/aboutme/bo.jpg"
70+
alt="AASA 2025 performance"
71+
width={1000}
72+
height={1000}
73+
className="object-cover w-full h-auto"
74+
/>
75+
)
76+
},
77+
{
78+
title: "Tetris",
79+
contents: (
80+
<p>I play modern tetris
81+
on <UnderLink href="https://jstris.jezevec10.com/">Jstris</UnderLink> and <UnderLink href="https://tetr.io/">tetr.io</UnderLink>
82+
(but not tetra league!), and follow classic tetris. <br />
83+
Feel free to friend me on
84+
tetr.io <UnderLink href="https://ch.tetr.io/u/atch2203">@atch2203</UnderLink>.</p>
85+
),
86+
images: (
87+
<Image
88+
src="/aboutme/tetrio.png"
89+
alt="JSA performance"
90+
width={1000}
91+
height={1000}
92+
className="object-cover w-full h-auto"
93+
/>
94+
)
95+
},
96+
{
97+
title: "Beat Saber",
98+
contents: (
99+
<>
100+
<p>I enjoy playing Beat Saber often, and am currently top 900 global/400 US.<br />
101+
I also play challenge maps, and am currently CS level 12.<br />
102+
You can find my scoresaber and beatleader profile below.<br /></p>
103+
<div className="flex md:justify-end">
104+
<MotionLogo className="px-2 inline" href="https://scoresaber.com/u/76561198246352688">
105+
<Image src={Scoresaber}
106+
className="inline"
107+
alt="scoresaber"
108+
width={50}
109+
height={100}
110+
priority
111+
/>
112+
</MotionLogo>
113+
<MotionLogo className="px-2 inline" href="https://beatleader.xyz/u/76561198246352688">
114+
<Image src="/linkicons/bltransparent.png"
115+
className="inline"
116+
alt="beatleader"
117+
width={50}
118+
height={100}
119+
priority
120+
/>
121+
</MotionLogo>
122+
</div>
123+
</>
124+
),
125+
images: (
126+
<div className="w-full h-auto">
127+
<Carousel responsive={carouselResponsive}
128+
swipeable={false}
129+
draggable={false}
130+
showDots={true}
131+
infinite={true}
132+
keyBoardControl={true}
133+
transitionDuration={500}
134+
containerClass={`w-full h-full`}
135+
dotListClass="custom-dot-list-style"
136+
>
137+
<div>
138+
<iframe src="https://replay.beatleader.xyz/?scoreId=14800412" style={{aspectRatio:3/2}} className="w-full object-contain" />
139+
</div>
140+
<div>
141+
<iframe src="https://replay.beatleader.xyz/?scoreId=14734317" style={{aspectRatio:3/2}} className="w-full object-contain" />
142+
</div>
143+
</Carousel>
144+
</div>
145+
)
146+
},
147+
{
148+
title: "Other stuff",
149+
contents: (
150+
<p>
151+
I follow the CS2 esports scene, and occasionally watch Valorant, R6, and Rocket League.<br />
152+
I also sometimes watch Osu! and Beat Saber tournaments.
153+
</p>
154+
),
155+
images: (
156+
<Image
157+
src="/aboutme/cs2.png"
158+
alt="JSA performance"
159+
width={1000}
160+
height={1000}
161+
className="object-cover w-full h-auto"
162+
/>
163+
)
164+
},
165+
// {
166+
// title: "",
167+
// contents: (
168+
169+
// )
170+
// },
171+
];
172+
173+
function Contents() {
174+
return (
175+
<>
176+
<h1>About Me</h1>
177+
{
178+
sections.map((obj, i) => (
179+
<div key={i} className={"my-4 flex max-md:flex-col " + (i % 2 === 1 && "md:text-right md:flex-row-reverse")}>
180+
<div className="flex flex-col md:w-[45%] my-auto">
181+
<h2>{obj.title}</h2>
182+
{obj.contents}
183+
</div>
184+
<div className="md:w-[55%] p-8">
185+
{obj.images}
186+
</div>
187+
</div>
188+
))
189+
}
190+
</>
191+
)
192+
}

app/footer.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import Socials from "@/components/Socials";
2+
3+
export default function Footer(){
4+
return (
5+
<footer className="mt-5 w-full py-5 text-center text-gray-900 bg-gray-300 flex">
6+
<div className="m-auto">
7+
<Socials />
8+
</div>
9+
</footer>
10+
);
11+
}

app/globals.css

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
@tailwind base;
2+
@tailwind components;
3+
@tailwind utilities;
4+
@tailwind apply;
5+
6+
:root{
7+
--foreground-rgb: 0, 0, 0;
8+
--background: #ffffff;
9+
}
10+
.box {
11+
width: 200px;
12+
height: 80px;
13+
border-radius: 50px;
14+
background: #555555;
15+
cursor: pointer;
16+
}
17+
18+
body {
19+
color: rgb(var(--foreground-rgb));
20+
background: var(--background);
21+
}
22+
23+
h1{
24+
@apply text-6xl py-4
25+
}
26+
27+
h2{
28+
@apply text-4xl py-4
29+
}
30+
31+
p{
32+
@apply text-xl leading-loose
33+
}
34+
35+
@layer utilities {
36+
.text-balance {
37+
text-wrap: balance;
38+
}
39+
}

app/head.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export default function Head() {
2+
return (
3+
<>
4+
<meta content="width=device-width, initial-scale=1" name="viewport" />
5+
<link rel="icon" href="/favicon.png" />
6+
</>
7+
);
8+
}

0 commit comments

Comments
 (0)