Marvin Rühe's personal website — a bilingual (English/German) static site built with React Router 7 and deployed to GitHub Pages at ruehe.me.
The site is prerendered (ssr: false, prerender: true), so the production build is plain static HTML and assets — there is no runtime server.
The application lives in src/, not the repository root. Run all npm commands from there.
src/
├── app/
│ ├── routes.ts # route configuration (config-based)
│ ├── root.tsx # document shell + language detection
│ ├── routes/ # thin page components (en under /, de under /de)
│ ├── welcome/ project/ profiles/ footer/ imprint/ # shared components
│ └── app.css # hand-written CSS (variables + dark mode)
└── public/ # static assets + CNAME
Requires Node 24 (pinned via engines).
cd src
npm install
npm run dev # Vite dev server with HMR at http://localhost:5173Other scripts (from src/):
npm run build— production build intosrc/build/clientnpm run typecheck—react-router typegenthentscnpm start— serve a built app locally
Pushing to main triggers .github/workflows/deploy.yml, which builds the site and publishes src/build/client to GitHub Pages. Pull requests build but do not deploy.