The home page for flexaccess.dev — open-source tunneling and VPN utilities from the flexaccessdev organization.
A fully prerendered static site: React 19 + React Router v7 (framework mode, ssr: false with an explicit prerender route list), Vite, TypeScript, and vanilla CSS. No server runtime.
npm install
npm run dev # http://localhost:5173npm run build # output in build/client
npm run preview # serve the built site locallyThe build runs react-router build, then two post-build steps:
scripts/flatten-html.mjs— renames prerenderedroute/index.htmlfiles toroute.htmlso Cloudflare Pages serves clean URLs without trailing slashesscripts/generate-sitemap.mjs— writessitemap.xmlfrom the route list insite.config.mjs
site.config.mjs— site URL and the list of prerendered routes (drives prerendering, the sitemap, and canonical URLs). Any new route must be added here or it won't be emitted as static HTML.src/data.ts— all product content (taglines, features, install commands, client apps, shared repos, comparison table)src/routes/— page components;src/components/product-page.tsxrenders both product pages,src/components/install-block.tsxrenders install commandssrc/index.css— design tokens;src/app.css— component styles
Deployed on Cloudflare Pages via the Git integration:
- Build command:
npm run build - Build output directory:
build/client
public/_headers and public/_redirects configure caching and the 404 page.