The template builds a static Vite project; anywhere that serves static files works.
Four concrete walkthroughs below — each uses the same site.json +
items.json + public/photos/ under the hood, so you can
move between them later.
The free tiers on these hosts are real. A digital yard sale is a few hundred KB of HTML and a few MB of photos; none of the free plans here will come close to their limits. You don't need to pay any of them.
If you'd rather not run anything yourself, the
hosted version is about $0.10 per sale
per month, you get a short URL like yrdsl.app/you/sale, and we handle
the hosting, rebuilds, and updates.
Free static hosting on github.io (or a custom domain). A GitHub Action
builds and publishes on every push.
site.json (title, contact, theme) and items.json; drop photos in
public/photos/.git push. Live in under a minute at
https://<you>.github.io/<repo>/.Add a CNAME file at the repo root with your domain, point a CNAME DNS
record at <you>.github.io, and add the domain in Pages settings.
Remove the GH_PAGES_BASE env var in .github/workflows/deploy.yml
so Vite builds with base /.
Import the template repo in the Vercel dashboard. No config file needed — Vercel detects Vite and builds automatically.
pnpm build. Output
directory: dist. (Vercel fills these in.)<project>.vercel.app; add a custom domain from the project's
Domains tab.On every git push, Vercel rebuilds and redeploys. To skip the
GitHub Pages base-path handling, just leave GH_PAGES_BASE unset —
Vite defaults to / which is what Vercel wants.
Same idea as Vercel; connect the repo, Netlify detects Vite.
pnpm build. Publish directory: dist.
(Netlify pre-fills these for Vite.)<site>.netlify.app; add a custom domain
under Domain management.Cloudflare's equivalent of Vercel/Netlify. Also free, generous bandwidth.
pnpm build.
Output: dist.The template outputs a static dist/ directory. Anything that can serve
static files works: S3 + CloudFront, Fly.io static, Render, Surge, an
nginx VM, a USB stick on a lab server. Build locally with
pnpm install && pnpm build, then serve dist/.
Regardless of which of the four self-hosted options you picked, you now have a
git repository with site.json, items.json, and
public/photos/. Two ways to make changes:
Clone, edit, preview, push. The host rebuilds automatically on every push (under a minute for all four).
git clone https://github.com/<you>/<your-repo>.git
cd <your-repo>
pnpm install
pnpm dev # live preview at http://localhost:5173
# edit site.json and items.json, drop photos in public/photos/
pnpm validate # catch schema errors before you push
git add -A
git commit -m "add toaster"
git push
The self-hosted template ships an MCP server that talks to your clone on disk. Install it once; after that, talk to Claude.
cd <your-repo>
pnpm install
# Claude Code (easiest):
claude mcp add yrdsl \
-e YRDSL_REPO=$(pwd) \
-- npx -y @yrdsl/mcp@latest
# Claude Desktop: see the instructions in the template's README.
Then ask Claude things like:
When you ask Claude to commit or push, the MCP runs git commit and
git push in your clone. The host sees the push and rebuilds.
Every mode reads the same three things: site.json, items.json,
and public/photos/. To migrate:
site.json,
items.json, and public/photos/ folder, upload it on
app.yrdsl.app/profile under Import a sale. There's also a
pnpm import script in the template that does the reverse direction.