Source for the Astraios website and pitch deck. The built site lives in
site/, which is what nginx serves at https://astraios.tech (fronted by
Cloudflare).
Astraios is a quantitative ML platform: ranked market signals for retail traders and a paper-first auto-trading API for developers.
.
βββ app/ # React source (the thing you actually edit)
β βββ index.html # Vite entry template
β βββ src/
β βββ App.jsx # Sections, copy, team, nav
β βββ styles.css # Design tokens (dark theme), layout, responsive
β βββ main.jsx # React root
βββ public/ # Raw assets copied verbatim into site/ by the build
β βββ astraios-*-mask.png, astraios-system-map.png, favicons, icons
β βββ deck/
β βββ index.html # Standalone 11-slide pitch deck (keyboard + mouse)
β βββ astraios-pitch-deck.pdf # Exported PDF, linked from the deck footer
βββ scripts/
β βββ generate-visual-assets.mjs
βββ site/ # Build output β what nginx serves. Committed.
β βββ index.html # Regenerated every build
β βββ assets/index-*.{css,js} # Hashed bundles; old ones wiped each build
β βββ (public/ contents copied here verbatim)
βββ package.json # Vite + React 19
βββ vite.config.js
npm install
npm run dev # vite dev server on 127.0.0.1Edits go into app/src/ (or public/ for raw assets and the deck). Never
hand-edit anything in site/ β it's regenerated every build.
npm run buildVite writes the build directly into site/ with emptyOutDir: true, so
stale bundles from previous builds get wiped. Commit the regenerated
site/ tree β nginx serves it directly, no reload needed.
/deck/ is a single hand-written HTML file β no build step. Edit
public/deck/index.html directly; the build copies it into site/deck/.
Keyboard: β / Space / PageDown advance Β· β / PageUp go back Β·
Home / End jump to first/last.
Deep-links: /deck/#4 opens slide 4.
Headless Chrome prints the deck against the site's own origin so the
mask-based logo and wordmark resolve correctly. Build first so site/deck/
is up to date:
# 0. Ensure site/ is current
npm run build
# 1. Serve site/ on a local port
python3 -m http.server 8731 --bind 127.0.0.1 --directory site &
# 2. Print to PDF (written back into the source copy under public/)
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--headless=new \
--disable-gpu \
--no-pdf-header-footer \
--hide-scrollbars \
--virtual-time-budget=2500 \
--print-to-pdf=public/deck/astraios-pitch-deck.pdf \
http://127.0.0.1:8731/deck/
# 3. Stop the server, then rebuild so site/deck/ picks up the new PDF
pkill -f "python3 -m http.server 8731"
npm run buildOutput is 11 pages at 1200Γ675 pt (16:9). The deck's @media print rules
hide the header/footer chrome and force every grid back to its intended
column count.
- Dark palette β
--paper: #050505,--ink: #ffffff,--muted: #9a9a97,--line: #2a2a2a. - Georgia serif for display type (h1 / h2 / stat values); Inter for body.
- 96px vertical grid-line background across the
.siteand.deckshells. - Numbered section labels with a trailing rule (
.section-label,.slide__label). - 1px-gap split grids for multi-panel sections (architecture, protocol,
team, roadmap) β no shadows, no corner radii beyond
--radius: 6pxon action buttons and app-icon tiles. - Status pill with pulsing dot in the header.
site/ is what nginx serves on astraios.tech. The server config lives
at /etc/nginx/sites-available/static-site.conf with
root /home/ubuntu/astraios-dev/site. TLS is terminated at nginx via a
Let's Encrypt certificate (auto-renewed by certbot's systemd timer);
Cloudflare fronts the site with SSL mode set to Full (strict). After
npm run build the site is live β no additional deploy step. Commit the
updated site/ tree together with your source edits under app/ or
public/.
The repo is tagged at each known-good state. To roll back the served site:
git reset --hard v1.0-dark-themev1.0-dark-theme captures the dark-theme site + deck + PDF export as of the
initial commit. Add a new tag (git tag -a vX.Y -m "...") before any risky
change you want a one-command restore path to.
node_modules/β runnpm installto recreate..claude/settings.local.jsonβ per-machine Claude Code permissions..backups/β local-only tarball backups, if any..DS_Storeβ macOS cruft.