The official website for VURT: infrastructure for intelligent systems.
Single-page marketing/technical site. Next.js App Router, React Server Components by default, Tailwind CSS v4, Motion for React for the small amount of animation that carries meaning. No CMS, no database, no analytics SDK, no backend.
- Node.js 20.9+ (Node 22 recommended)
- npm 10+
npm install
npm run dev # http://localhost:3000
npm run build # production build
npm start # serve the production buildnpm run typecheck runs tsc --noEmit on its own.
app/
layout.tsx root layout, fonts, metadata, Organization JSON-LD
page.tsx homepage composition
globals.css design tokens (@theme) + base + custom utilities
robots.ts robots.txt
sitemap.ts sitemap.xml
fonts/ self-hosted woff2 (Archivo Variable, Azeret Mono)
components/
navigation/ SiteHeader, RuntimeRail
sections/ Hero, Thesis, Layers, Architecture, Principles,
OpenDevelopment, SiteFooter
graphics/ RuntimeLattice (hero), ArchitectureGraph (interactive)
ui/ Wordmark, SectionHeader, Reveal
lib/site.ts canonical URL, GitHub org, copy, section registry
public/ icon.svg, favicon.ico, apple-icon.png, opengraph-image.png
Copy lives in lib/site.ts (layers, principles, nav, section addresses) and in
components/sections/Architecture.tsx (module detail). Edit there rather than in
markup.
Tokens are declared once in app/globals.css under @theme and are used through
Tailwind utilities (text-bone, border-rule, fill-vurt, …).
| Token | Value | Role |
|---|---|---|
--color-ink | #08090a | page surface |
--color-ink-raised | #0d0f10 | panels, boxes |
--color-ink-sunken | #050606 | runtime interior |
--color-rule | #1c2022 | hairlines |
--color-rule-strong | #2b3134 | structural rules |
--color-bone | #e9eaea | primary text |
--color-slate | #8b9296 | secondary text |
--color-slate-dim | #5d6467 | annotations |
--color-vurt | #ffd100 | accent — state, activity, current path |
Yellow is treated as information, not decoration: it marks the active runtime module, the routed path, resident state, and current scroll position.
Type: Archivo Variable (display and body) and Azeret Mono (technical
annotation only). Both are self-hosted via next/font/local, so there is no
external font request and no network dependency at build time.
The site is static — every route prerenders — so no configuration is required.
From the dashboard
- Push this directory to a repository under
github.com/vurtai. - In Vercel, Add New → Project, import the repository.
- Framework preset: Next.js. Leave build command (
next build) and output directory as detected. No environment variables are needed. - Deploy, then add
vurt.aiunder Settings → Domains and point the registrar's records at Vercel. Setwww.vurt.aito redirect to the apex so the canonical URL stayshttps://vurt.ai.
From the CLI
npm i -g vercel
vercel # preview deployment
vercel --prod # production deploymentIf the production domain ever changes, update SITE.url in lib/site.ts — it
drives the canonical link, Open Graph URLs, sitemap, robots host, and JSON-LD.
- Semantic landmarks (
header,nav,main,footer), oneh1, ordered headings. - Skip link, visible focus rings on every interactive element, keyboard-operable accordion and architecture selector.
- The architecture graph is reachable by keyboard through its module buttons; hovering the diagram is an enhancement, not the only path.
prefers-reduced-motion: reducedisables reveals, the routed hero packet, and the active-edge animation, and turns off smooth scrolling. The page is complete without any of it.
- The two hero/architecture graphics are hand-written SVG. The hero graphic ships as a Server Component with a CSS-only animation; only the architecture graph, header, rail, and accordion are Client Components.
- Fonts were extracted from the
@fontsource-variable/archivoand@fontsource/azeret-monopackages and vendored intoapp/fonts/. They are not runtime dependencies. - No product availability, customers, benchmarks, funding, partnerships, or repository metrics are claimed anywhere on the site.