Live site: vjroy.github.io
A clean, gallery-style portfolio built with Astro: hero, a
drag-to-navigate work carousel, about, and contact — plus a hidden terminal
easter egg at /terminal (the previous
version of this site), reachable from a subtle footer link.
- Framework: Astro (static output), TypeScript
- Motion: Lenis smooth scroll,
Embla drag carousel, IntersectionObserver
scroll-reveals, a custom cursor, and an intro loader. All gated behind
prefers-reduced-motionand pointer capability. - Type: General Sans (Fontshare) — closest free match to PP Neue Montreal
- Hosting: GitHub Pages via GitHub Actions
npm install
npm run dev # local dev server
npm run build # static build → dist/
npm run preview # preview the production buildPushing to main triggers .github/workflows/deploy.yml, which builds with
withastro/action and publishes dist/ to GitHub Pages.
One-time setup: in the repo Settings → Pages, set Source to GitHub Actions.
src/pages/index.astro— single-page site (composes the components below)src/pages/terminal.astro— self-contained terminal easter eggsrc/components/—Nav,Hero,WorkCarousel,About,Footer,Cursor,Loadersrc/data/projects.ts— project content (single source for the carousel)src/scripts/app.ts— smooth scroll, loader, reveals, cursor, carouselsrc/styles/global.css— design tokens, reset, typographypublic/— images, PDFs, fonts, favicon,terminal.js
Email: usroyvj@gmail.com