gnarlybob.net is a high-performance, static personal landing page built with Astro 5 and a cyberpunk/HUD aesthetic. The site is fully static (no client-side JavaScript), uses strict TypeScript, and relies on Vanilla CSS with CSS variables for theming.
- Framework: Astro 5.16.1 (static output, no hydration)
- Language: TypeScript (strict)
- Styling: Vanilla CSS only with CSS custom properties (no Tailwind or utility frameworks)
- Fonts: Google Fonts (Inter + JetBrains Mono)
- No tests/linters: none configured
src/pages/:index.astro(landing page),health.json.ts(health endpoint)src/layouts/:BaseLayout.astro(root HTML layout)src/components/:Header.astro,Hero.astro,Footer.astro(scoped styles only)src/styles/:global.css(CSS variables, utilities, breakpoints)public/: static assets
- Vanilla CSS only — never introduce Tailwind/UnoCSS or utility frameworks
- CSS variables for theming — do not hardcode colors or spacing; use variables in
src/styles/global.css - Component-scoped styles — use
<style>blocks within.astrofiles - Static output only — no client-side hydration, no framework components
- Astro config is intentionally minimal — keep
astro.config.mjsempty
- Colors:
--color-bg,--color-panel,--color-primary,--color-accent,--color-success,--color-text-main,--color-text-muted - Fonts:
--font-sans,--font-mono - Spacing:
--space-xsthrough--space-xl
.hud-panel: glass effect + bracket corners via::before/::after.hud-text: monospace, uppercase, cyan.text-gradient: blue → cyan gradient text.container: max-width 1400px with responsive padding
npm run dev # Start dev server (localhost:4321) with HMR
npm run build # Production build → dist/
npm run preview # Preview production build locally
npx astro check # TypeScript type checkingGitHub Actions workflow (.github/workflows/deploy.yml) deploys on push to main:
npm ci→npm run buildrsyncdist/to/var/www/gnarlybob.net/via SSH
Required secrets: SSH_PRIVATE_KEY, VPS_HOST, VPS_USER.
Server: Debian 12 + Nginx + Certbot.
When ending a work session, you MUST complete ALL steps below. Work is NOT complete until git push succeeds.
- Run quality gates (if code changed) — tests/linters/builds as applicable
- Push to remote:
- Push to remote:
git pull --rebase git push git status # Must show "up to date with origin" - Clean up — clear stashes, prune remote branches
- Verify — all changes committed and pushed
- Hand off — provide context for next session
Critical rules:
- Work is NOT complete until
git pushsucceeds - Never stop before pushing
- Never say "ready to push when you are" — you must push
- If push fails, resolve and retry until it succeeds
The travel pitch deck section was removed (PR #5). References to /travel or pitch decks are outdated. Legacy artifacts:
.cursorrules(old/travelconfig).agent/directory (pitch deck workflows)public/slide-images/(unused images)
- Do not add Tailwind/UnoCSS or any CSS framework
- Do not add client-side JavaScript or framework components
- Do not hardcode colors or spacing (use CSS variables)
- Do not commit to
maindirectly (use a feature branch)