Compare commits

...

3 Commits

Author SHA1 Message Date
a9936afba2 Maybe recruiters will notice me now 2026-02-25 04:19:07 -05:00
704ffd280b New token prefixes 2026-02-25 04:15:03 -05:00
b054fb7fd5 Update some dependencies 2026-02-25 04:14:42 -05:00
9 changed files with 172 additions and 49 deletions

78
app/routes/proj-disp.tsx Normal file
View File

@@ -0,0 +1,78 @@
import {
Card,
CardFooter,
Container,
Divider,
Heading,
Image,
Link,
Stack,
Text,
} from "@chakra-ui/react";
import projects from "../../data/public-projects.json";
export function meta() {
return [
{
title: "For Hiring Teams - Car Crushers",
},
{
name: "robots",
content: "noindex",
},
];
}
export default function () {
return (
<Container maxW="container.xl">
<Heading textAlign="start">About Evan</Heading>
<br />
<Text textAlign="start">
Hello! Thank you for your interest in me as a candidate. Are you
wondering if I did all those things I mentioned on my resume? If so,
yes, I did. Below is a list of some things I have worked on during my
time here, some of them more strongly related than others. Thank you for
taking the time to look at a history of my past and current work.
</Text>
<br />
<div
style={{
display: "grid",
gap: "1rem",
gridTemplateColumns: "repeat(auto-fill, minmax(16rem, 1fr))",
justifyItems: "center",
}}
>
{projects.map((project) => (
<Card borderRadius="36px" key={project.name} p="12px" w="100%">
<Image
alt={`Logo for ${project.name}`}
borderRadius="36px"
src={`/files/${project.image}`}
/>
<Stack mb="8" mt="6" spacing="3">
<b>
<Heading size="md">
{project.name} ({project.timespan})
</Heading>
</b>
<Text>Time Span: {project.timespan}</Text>
<br />
<Text>{project.description}</Text>
</Stack>
<Divider />
<CardFooter gap="16px" justifyContent="center">
{project.work_link ? (
<Link href={project.work_link}>Project Work</Link>
) : null}
{project.landing_link ? (
<Link href={project.landing_link}>Project Home Page</Link>
) : null}
</CardFooter>
</Card>
))}
</div>
</Container>
);
}

40
data/public-projects.json Normal file
View File

@@ -0,0 +1,40 @@
[
{
"name": "RoVer",
"image": "public-projects-icons/rover.webp",
"work_link": "https://github.com/evaera/RoVer/commits?author=Regalijan",
"landing_link": "https://rover.link/",
"timespan": "2020 - 2021",
"description": "I contributed to RoVer, a Discord bot that links Roblox accounts to manage server access. Working on the very first version gave me hands-on experience shipping production software and collaborating in an open-source project. The current iteration supports 370k+ servers and 15M+ users, underscoring the importance of maintainable, scalable code."
},
{
"name": "Car Crushers Web (This Website)",
"image": "logo512.png",
"landing_link": "/about",
"timespan": "2021 - Present",
"description": "A full-stack web platform I designed and built end-to-end, evolving from a basic HTML/Bootstrap prototype into a modern Remix v2 + React application powered by Cloudflare Workers. It supports internal and community tools for scheduling events, handling moderation workflows (reports, bans, and appeals), and managing time-off requests, with access control driven by Discord roles following the principle of least privilege."
},
{
"name": "Noblox.js",
"image": "public-projects-icons/noblox.png",
"work_link": "https://github.com/noblox/noblox.js",
"landing_link": "https://noblox.js.org/",
"timespan": "2023 - 2025",
"description": "Noblox is an open-source JavaScript library designed to simplify interactions with the Roblox API. My work on this project focused on improving functionality, code reliability, and documentation for the developer community. In 2024, I became a maintainer, taking on responsibilities such as reviewing pull requests, managing contributions, and coordinating with other developers to ensure code quality and consistency. Through this experience, I strengthened my skills in asynchronous JavaScript, API design, and open-source collaboration workflows. While active development has slowed as Robloxs official APIs and documentation have matured, the project remains a valuable tool for developers and a meaningful example of community-driven software maintenance."
},
{
"name": "Car Crushers Forum",
"image": "public-projects-icons/cc-forums.png",
"landing_link": "https://ccdiscussion.com/",
"timespan": "2019 - Present",
"description": "I set up and operated a Discourse forum on GCP using Debian, handling both application-level configuration and cloud infrastructure. Managed deployments, upgrades, and performance tuning while ensuring a secure, stable, and scalable environment for active users."
},
{
"name": "Various Discourse Forum Plugins",
"image": "public-projects-icons/discourse.png",
"work_link": "https://github.com/Regalijan?tab=repositories&language=ruby",
"landing_link": "https://meta.discourse.org/search?expanded=true&q=%40Wolftallemo%20%23plugin%20in%3Afirst",
"timespan": "2021 - Present",
"description": "While operating the Car Crushers Forum, I authored and maintained multiple Discourse plugins, and contributed patches upstream. Publicly available on Discourse Meta, these plugins improved user experience, made life better for forum administrators, and showcased a strong commitment to community-driven software."
}
]

View File

@@ -15,6 +15,7 @@
"DEVIL-DOGS",
"DOUBT",
"DREADNOUGHT",
"DRUM-SHOW",
"DUNDEE",
"DYING-IN-LA",
"EMERGENCY-CONTACT",
@@ -23,6 +24,7 @@
"FLAWLESS-EXECUTION",
"FLU-GAME",
"FORMIDABLE",
"FROZEN-PISS-2",
"GATES-OF-GLORY",
"GIRLS-GIRLS-BOYS",
"GONER",
@@ -47,8 +49,11 @@
"NOT-TODAY",
"NO-CHANCES",
"OVERCOMPENSATE",
"P.A.R.T.Y.",
"POLARIZE",
"PSYCHO",
"RAINBOW-VEINS",
"RAWFEAR",
"ROMANCE",
"SAD-CLOWN",
"SATURDAY",

92
package-lock.json generated
View File

@@ -15,10 +15,10 @@
"@remix-run/cloudflare": "^2.17.4",
"@remix-run/cloudflare-pages": "^2.17.4",
"@remix-run/react": "^2.17.4",
"@sentry/react": "^10.38.0",
"@sentry/react": "^10.40.0",
"aws4fetch": "^1.0.20",
"dayjs": "^1.11.19",
"framer-motion": "^12.34.0",
"framer-motion": "^12.34.3",
"react": "^18.3.1",
"react-big-calendar": "^1.19.4",
"react-dom": "^18.3.1"
@@ -626,9 +626,9 @@
}
},
"node_modules/@cloudflare/workers-types": {
"version": "4.20260214.0",
"resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20260214.0.tgz",
"integrity": "sha512-qb8rgbAdJR4BAPXolXhFL/wuGtecHLh1veOyZ1mK6QqWuCdI3vK1biKC0i3lzmzdLR/DZvsN3mNtpUE8zpWGEg==",
"version": "4.20260304.0",
"resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20260304.0.tgz",
"integrity": "sha512-oQ0QJpWnCWK9tx5q/ZHQeSsf5EcQWa4KqdDMY/R5Ln0ojFzv6UYO0RWsfDPsoXUAwK671VwaXqAW0Mx0uWz7yw==",
"license": "MIT OR Apache-2.0",
"peer": true
},
@@ -2073,88 +2073,88 @@
]
},
"node_modules/@sentry-internal/browser-utils": {
"version": "10.38.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.38.0.tgz",
"integrity": "sha512-UOJtYmdcxHCcV0NPfXFff/a95iXl/E0EhuQ1y0uE0BuZDMupWSF5t2BgC4HaE5Aw3RTjDF3XkSHWoIF6ohy7eA==",
"version": "10.40.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.40.0.tgz",
"integrity": "sha512-3CDeVNBXYOIvBVdT0SOdMZx5LzYDLuhGK/z7A14sYZz4Cd2+f4mSeFDaEOoH/g2SaY2CKR5KGkAADy8IyjZ21w==",
"license": "MIT",
"dependencies": {
"@sentry/core": "10.38.0"
"@sentry/core": "10.40.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/feedback": {
"version": "10.38.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.38.0.tgz",
"integrity": "sha512-JXneg9zRftyfy1Fyfc39bBlF/Qd8g4UDublFFkVvdc1S6JQPlK+P6q22DKz3Pc8w3ySby+xlIq/eTu9Pzqi4KA==",
"version": "10.40.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.40.0.tgz",
"integrity": "sha512-V/ixkcdCNMo04KgsCEeNEu966xUUTD6czKT2LOAO5siZACqFjT/Rp9VR1n7QQrVo3sL7P3QNiTHtX0jaeWbwzg==",
"license": "MIT",
"dependencies": {
"@sentry/core": "10.38.0"
"@sentry/core": "10.40.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay": {
"version": "10.38.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.38.0.tgz",
"integrity": "sha512-YWIkL6/dnaiQyFiZXJ/nN+NXGv/15z45ia86bE/TMq01CubX/DUOilgsFz0pk2v/pg3tp/U2MskLO9Hz0cnqeg==",
"version": "10.40.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.40.0.tgz",
"integrity": "sha512-vsH2Ut0KIIQIHNdS3zzEGLJ2C9btbpvJIWAVk7l7oft66JzlUNC89qNaQ5SAypjLQx4Ln2V/ZTqfEoNzXOAsoQ==",
"license": "MIT",
"dependencies": {
"@sentry-internal/browser-utils": "10.38.0",
"@sentry/core": "10.38.0"
"@sentry-internal/browser-utils": "10.40.0",
"@sentry/core": "10.40.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay-canvas": {
"version": "10.38.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.38.0.tgz",
"integrity": "sha512-OXWM9jEqNYh4VTvrMu7v+z1anz+QKQ/fZXIZdsO7JTT2lGNZe58UUMeoq386M+Saxen8F9SUH7yTORy/8KI5qw==",
"version": "10.40.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.40.0.tgz",
"integrity": "sha512-wzQwilFHO2baeCt0dTMf0eW+rgK8O+mkisf9sQzPXzG3Krr/iVtFg1T5T1Th3YsCsEdn6yQ3hcBPLEXjMSvccg==",
"license": "MIT",
"dependencies": {
"@sentry-internal/replay": "10.38.0",
"@sentry/core": "10.38.0"
"@sentry-internal/replay": "10.40.0",
"@sentry/core": "10.40.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry/browser": {
"version": "10.38.0",
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.38.0.tgz",
"integrity": "sha512-3phzp1YX4wcQr9mocGWKbjv0jwtuoDBv7+Y6Yfrys/kwyaL84mDLjjQhRf4gL5SX7JdYkhBp4WaiNlR0UC4kTA==",
"version": "10.40.0",
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.40.0.tgz",
"integrity": "sha512-nCt3FKUMFad0C6xl5wCK0Jz+qT4Vev4fv6HJRn0YoNRRDQCfsUVxAz7pNyyiPNGM/WCDp9wJpGJsRvbBRd2anw==",
"license": "MIT",
"dependencies": {
"@sentry-internal/browser-utils": "10.38.0",
"@sentry-internal/feedback": "10.38.0",
"@sentry-internal/replay": "10.38.0",
"@sentry-internal/replay-canvas": "10.38.0",
"@sentry/core": "10.38.0"
"@sentry-internal/browser-utils": "10.40.0",
"@sentry-internal/feedback": "10.40.0",
"@sentry-internal/replay": "10.40.0",
"@sentry-internal/replay-canvas": "10.40.0",
"@sentry/core": "10.40.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry/core": {
"version": "10.38.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.38.0.tgz",
"integrity": "sha512-1pubWDZE5y5HZEPMAZERP4fVl2NH3Ihp1A+vMoVkb3Qc66Diqj1WierAnStlZP7tCx0TBa0dK85GTW/ZFYyB9g==",
"version": "10.40.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.40.0.tgz",
"integrity": "sha512-/wrcHPp9Avmgl6WBimPjS4gj810a1wU5oX9fF1bzJfeIIbF3jTsAbv0oMbgDp0cSDnkwv2+NvcPnn3+c5J6pBA==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry/react": {
"version": "10.38.0",
"resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.38.0.tgz",
"integrity": "sha512-3UiKo6QsqTyPGUt0XWRY9KLaxc/cs6Kz4vlldBSOXEL6qPDL/EfpwNJT61osRo81VFWu8pKu7ZY2bvLPryrnBQ==",
"version": "10.40.0",
"resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.40.0.tgz",
"integrity": "sha512-3T5W/e3QJMimXRIOx8xMEZbxeIuFiKlXvHLcMTLGygGBYnxQGeb8Oz/8heov+3zF1JoCIxeVQNFW0woySApfyA==",
"license": "MIT",
"dependencies": {
"@sentry/browser": "10.38.0",
"@sentry/core": "10.38.0"
"@sentry/browser": "10.40.0",
"@sentry/core": "10.40.0"
},
"engines": {
"node": ">=18"
@@ -4198,12 +4198,12 @@
}
},
"node_modules/framer-motion": {
"version": "12.34.0",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.0.tgz",
"integrity": "sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg==",
"version": "12.34.3",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.3.tgz",
"integrity": "sha512-v81ecyZKYO/DfpTwHivqkxSUBzvceOpoI+wLfgCgoUIKxlFKEXdg0oR9imxwXumT4SFy8vRk9xzJ5l3/Du/55Q==",
"license": "MIT",
"dependencies": {
"motion-dom": "^12.34.0",
"motion-dom": "^12.34.3",
"motion-utils": "^12.29.2",
"tslib": "^2.4.0"
},
@@ -6573,9 +6573,9 @@
}
},
"node_modules/motion-dom": {
"version": "12.34.0",
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.0.tgz",
"integrity": "sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q==",
"version": "12.34.3",
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.3.tgz",
"integrity": "sha512-sYgFe+pR9aIM7o4fhs2aXtOI+oqlUd33N9Yoxcgo1Fv7M20sRkHtCmzE/VRNIcq7uNJ+qio+Xubt1FXH3pQ+eQ==",
"license": "MIT",
"dependencies": {
"motion-utils": "^12.29.2"

View File

@@ -16,10 +16,10 @@
"@remix-run/cloudflare": "^2.17.4",
"@remix-run/cloudflare-pages": "^2.17.4",
"@remix-run/react": "^2.17.4",
"@sentry/react": "^10.38.0",
"@sentry/react": "^10.40.0",
"aws4fetch": "^1.0.20",
"dayjs": "^1.11.19",
"framer-motion": "^12.34.0",
"framer-motion": "^12.34.3",
"react": "^18.3.1",
"react-big-calendar": "^1.19.4",
"react-dom": "^18.3.1"
@@ -35,7 +35,7 @@
"typescript": "^5.9.3"
},
"overrides": {
"@cloudflare/workers-types": "^4.20260214.0"
"@cloudflare/workers-types": "^4.20260304.0"
},
"prettier": {
"endOfLine": "auto"

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB