Yeeted

HOSTING FOR AI-BUILT APPS

Deploy a static Astro site on Yeeted

A two-page palette contrast report built by Astro as plain HTML, with no Dockerfile: Yeeted detects Astro from package.json, sees no server adapter, runs npm ci from the lockfile and npm run build (astro build), and serves dist/ from nginx. The pages ship no JavaScript; every ratio is computed once, at build time.

The math in src/lib/contrast.js is the same module the Vue and Svelte examples run in the browser, so the black-on-white row reading 21.00:1 proves the build ran it. This is Astro's static output only: adding @astrojs/node turns the project into a server, which Yeeted deploys through a different path that this example does not cover.

Tests: npm test (node:test on the contrast math) · ./smoke.sh https://... against a deployment.

Run locally

Use Node 22.12 or newer. From node/contrast-astro:

npm ci
npm test
npm run dev

Open the URL Astro prints. Edit the palette list at the top of src/pages/index.astro to report on other color pairs. npm run build writes dist/index.html and dist/about/index.html; the deployed image serves the whole dist/ folder.

Deploy and verify

Follow the deployment walkthrough. Deploy this folder, including package-lock.json, astro.config.mjs and yeeted.yaml, with no database. Do not upload node_modules/, .astro/ or dist/; the build runs on Yeeted. The manifest routes to port 80, where nginx listens.

sh smoke.sh "$PREVIEW_URL"

The script checks that the report page is served at / and carries ratios and grades that only exist once the build has run, and that /about/ serves the second page from its own folder.

What the site does not do

The report is fixed at build time: changing the palette means a new deploy. The page shows when it was built, which makes a redeploy easy to confirm. Unknown paths are answered with the report page rather than a 404, because the generated nginx configuration falls back to index.html for every single-page app and static generator alike.

All examples · Deploy an example