Single-page teaser site for Nomad: the next generation wearable.
Built with Next.js 15 (App Router) and exported as a fully static site,
deployed to Netlify from the main branch.
- Next.js 15 — App Router, static export (
output: 'export') - Tailwind CSS 3 — styling
- Adobe Fonts (Typekit) — Halyard Display (kit
tmp2ytw) - @fontsource — Newsreader (self-hosted, italic accents only)
- Netlify — hosting (publishes the
out/folder)
npm install
npm run dev # http://localhost:3000
npm run build # static export → ./outapp/
layout.jsx Root layout, metadata, font loading
page.jsx The landing page
globals.css Tailwind + base styles
sitemap.js Generates out/sitemap.xml
components/
early-access.jsx "Too early" early-access interaction (client)
public/
nomad_logo.svg Brand mark
favicon.svg Favicon (the logo)
assets/images/
background.jpg Hero background
_headers Security headers + caching (Netlify)
_redirects SPA-style fallback (Netlify)
robots.txt
Halyard Display is licensed via Adobe Fonts. It loads from the web project
linked in app/layout.jsx (ADOBE_FONTS_KIT_ID). The Adobe Fonts domains are
allow-listed in the Content-Security-Policy in public/_headers.
Hardening lives in public/_headers: a strict Content-Security-Policy,
HSTS, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, a locked-down
Permissions-Policy, and Cross-Origin isolation headers.
Pushing to main triggers a Netlify build (npm run build, publish out/),
per netlify.toml.