This is a dependency-free portfolio app built with static HTML, CSS, and browser JavaScript because the current shell does not have node or npm installed. Open index.html directly in a browser.
index.html: app shell.styles.css: blue/black visual system and responsive layout.src/data.js: portfolio content, projects, skills, timeline, FIRST media slots, hobbies.app.js: rendering, skill filters, project demos, timer, and interactions.assets/: local visual placeholders copied from public robotics/drill workspaces.
Add one object to projects in src/data.js:
{
id: "new-project",
title: "New Project",
eyebrow: "Short positioning line",
period: "Month Year - Month Year",
status: "Public project",
summary: "What it does.",
impact: "Measured result or user value.",
stack: ["Tech", "Tech"],
skills: ["fullstack", "python"],
media: [{ type: "image", src: "assets/new-project.png", alt: "Screenshot" }],
demo: null
}Use existing skill ids from skills, or add a new skill object once and reference it from projects, timeline items, hobbies, or experiences.
- Handkerchief public launch target date, if you want a more specific date than "Coming soon."
- Any additional FIRST robot media dates, competition names, or performance metrics.
See DEPLOYMENT.md for an EC2 + Nginx launch path, including domain, DNS, HTTPS, and a lower-friction temporary URL option.
- "Add screenshots from these file paths and wire them into the right project cards."
- "Convert this static portfolio to Astro once Node is installed."
- "Add a case-study page for Novi Drill Client using only public, non-source details."
- "Make the FIRST section more competition-focused with these robot videos."
- "Tighten the copy for recruiter skim speed and remove anything too informal."