Personal landing page at gnarlybob.net — a static site with a cyberpunk/HUD aesthetic.
- Framework: Astro 5 (static output, no client-side JS)
- Language: TypeScript (strict)
- Styling: Vanilla CSS with CSS custom properties (no utility frameworks)
- Fonts: Google Fonts (Inter + JetBrains Mono)
- Deployment: Debian 12 VPS with Nginx & Certbot (SSL)
- CI/CD: GitHub Actions
- Node.js (v20 or higher)
- npm
npm install # Install dependencies
npm run dev # Start dev server (localhost:4321)
npm run build # Production build → dist/
npm run preview # Preview production build
npx astro check # TypeScript type checkingsrc/
├── pages/
│ ├── index.astro # Landing page
│ └── health.json.ts # Health check endpoint
├── layouts/
│ └── BaseLayout.astro # Root HTML layout
├── components/
│ ├── Header.astro
│ ├── Hero.astro
│ └── Footer.astro
├── styles/
│ └── global.css # CSS variables, utilities, breakpoints
public/
└── favicon.svg
GitHub Actions workflow deploys on push to main:
npm ci→npm run build- Deploys
dist/to/var/www/gnarlybob.net/via SSH
SSH_PRIVATE_KEY: Private key for VPS accessVPS_HOST: IP address or domain of the VPSVPS_USER: SSH username
- OS: Debian 12
- Web Server: Nginx
- SSL: Certbot / Let's Encrypt