site
Warmbly's public marketing site. Astro 5 + Tailwind v4, separate from the
in-product dashboard at web/ and the admin app at admin/.
Run it locally
pnpm install
pnpm dev # boots on http://localhost:4321
pnpm build # static output into ./dist
pnpm preview # serve the production build locally
From the repo root you can also use make site, which is a shortcut for
cd site && pnpm dev. make app does not start this site — it lives
outside the docker compose stack and ships on its own cadence.
The installer
public/install.sh is the one-command self-host installer, served verbatim at
https://warmbly.com/install.sh. It is a static asset, so what ships is exactly
what a curl | sh executes.
Two things the host has to get right:
- serve it as
text/plain(orapplication/x-sh), nevertext/html, so reading it in a browser works and nothing tries to render it - serve
public/install.sh.sha256alongside it, unmodified
Editing it means regenerating the checksum, and CI fails when the two disagree:
make installer-sha # regenerate site/public/install.sh.sha256
make installer-check # everything CI runs: POSIX parse, shellcheck, dry runs
make installer-demo # walk the wizard; installs nothing, needs no Docker
make installer-demo is the fastest way to see a UI change: it runs the real
questions and the real review with the pull, the container creation and the
health wait played, and writes nothing anywhere. It takes about half a minute;
WARMBLY_DEMO_FAST=1 make installer-demo cuts that to under ten seconds while
you iterate.
Layout
site/
├── astro.config.mjs # sitemap integration + Tailwind v4 Vite plugin
├── public/ # static assets served as-is
├── scripts/ # build-time helpers
└── src/ # pages, layouts, components, content