Hacker
GautamTalksDev
@gautamtalksdev
Projects
- ZerOps Credits
Ephemera
The Zerops ChallengeAug 2026
Ephemera gives every pull request its own full stack. Open a PR and you get an API, a database, and a live URL. Close it and the whole thing disappears. Frontend teams have had this for years with Vercel and Netlify. Backend teams haven't. The full stack options I found (Bunnyshell, Northflank, Qovery) assume Kubernetes and sell upmarket, so small teams and open source maintainers running docker compose are left sharing one staging database and queueing up behind each other. Ephemera is preview environments for the people who are never going to run Kubernetes. One preview.yml, ten minutes, real infrastructure. The architecture is the part I care most about. The GitHub webhook verifies its HMAC signature, writes down what state the environment should be in, and returns in about 40 milliseconds. That's all it does. A separate worker then reconciles what should be true against what is true, taking exactly one idempotent step per tick: pending, provisioning, deploying, ready, destroying. Provisioning infrastructure is slow and fails halfway through, so every step has to be resumable. I killed the worker mid provision over and over while building this; it always converged instead of leaving half created environments lying around. The control plane itself runs on Zerops as five services: a static React dashboard, a Hono API, a private worker, Postgres, and Valkey. Preview environments land in a second Zerops project, created with zcli service import, deployed with zcli push, and exposed on generated subdomains. A cron reaper destroys anything past its TTL, because a forgotten preview environment is just a bill you haven't seen yet. A few things I'm glad I got right. An environment is only marked ready once an HTTP request to its public URL actually succeeds, because "the container exists" and "the app works" are very different claims. Readiness survives a transient 502 instead of giving up on one bad poll. Concurrent provisioning waits for Zerops' per service process queue to drain before enabling subdomains, which was the last real bug I chased down. Dashboard mutations need a bearer token while viewing stays public. And the provider sits behind a four method interface, so Zerops is the first adapter rather than something the project is welded to. Measured end to end: pull request opened to live URL in roughly 100 seconds. There's also a docker compose to preview.yml importer, because setup friction is the real reason small teams don't already have preview environments. Demo video: https://youtu.be/bmVL_aqa034 Judges: viewing the dashboard is public, but the destroy, retry, extend TTL, and run demo buttons need this admin token: f2d58a1908f4d0e802a538e3cecf8b5f2c008a343fe7d73fe325454e2c33316f Paste it into the Admin token field at the top of the dashboard. If the live demo environment has expired by the time you look, press Run live demo and a fresh one comes up in about 90 seconds. The repo being previewed is github.com/GautamTalksDev/ephemera-demo-app. AI tools used: Cursor with Claude for writing code, and Claude for architecture and debugging. The design calls and the platform level diagnoses were mine: the Postgres minimum disk floor, zcli needing the noGit flag, Zerops running start commands through exec so shell operators don't work, cross service environment variable translation, and the subdomain process queue race. The commit history shows how that went.