Case file № 001 · Product build · Coordination tools
The sign-up sheet, without the ads
- System
- SignUpCity
- Client
- Product · built for people who run the office
- Live
- signupcity.app ↗
- Status
- Live · opened September 13, 2026
Sign-up sheets, scheduling polls, and event pages for the person who organizes everyone else: free, ad-free, and nobody who signs up ever needs an account. Built for executive assistants first, because I was one, and the tools we were handed showed our colleagues ads or paywalled the time zones.
The evidence
Screens of the running thing

Captured during the pre-launch review, with a seeded sheet and poll. No participant data is real.
The system
How the parts connectBefore & after
The account, both columnsBefore
- An assistant running a potluck list, a shift sign-up, or a meeting poll had three kinds of tool to choose from: the one that shows every participant ads, the one that makes them create an account, and the one that charges to handle time zones.
- Most of them end the loop early. The poll closes, and the meeting invitation still has to be built and sent by hand.
- None of them print well, export cleanly to Excel, or land in the participant’s calendar without a copy-and-paste.
After
- Three surfaces from one place: sign-up sheets with slots and capacity, scheduling polls across time zones, and event pages with RSVP. Participants get a personal signed link and a “me” page to change or cancel their own answer. No account, ever.
- Every sheet prints as a sheet, exports as a CSV that opens correctly in Excel and cannot run a formula, carries a QR code, and produces calendar files; organizers get one subscribable feed for everything they run.
- Every email carries one-click unsubscribe as the mail standard defines it, and the link is built so a corporate mail scanner following it cannot unsubscribe someone by accident.
- Time zones are handled properly, which turned out to mean refusing to schedule things at times that don’t exist. A spring-forward gap is rejected in the schema and in the editor; a fall-back overlap resolves to the earlier instant and says so. The inherited conversion had been silently moving a Denver 3 a.m. by an hour.
- Capacity is enforced in a single database round trip, tested with fifty people racing for three places. A waitlist promotion claims the place before it counts, so two simultaneous cancellations can never hand out the same slot twice.
- An organizer can describe a sheet in a sentence and have a draft built for them by a language model. When the model fails, the typed text is kept and nothing is lost; measured on the release candidate it parsed 85% of sheets and 96% of polls correctly.
- A weekly encrypted copy of the database leaves the hosting platform entirely, so a lost account is an inconvenience rather than an ending.
The verdict
The framework is the least interesting part. The work was finding the failure modes before a user did: an hour-off daylight-saving shift, a scheduled job with nothing to run, a sheet that broke quietly past eight rows because the local test database didn’t enforce a limit the real one does, and reminder queries whose date format would never have matched. Each one is now a test.
Bill of materials
What was used, and the job it did| 01 | SvelteKit on Cloudflare Workers | the application, at the edge |
|---|---|---|
| 02 | D1 + Drizzle | the database, 34 tables under migration |
| 03 | Workers AI · Claude | “describe your sheet” drafting, with a fallback |
| 04 | Magic-link sign-in | organizers only; participants never sign in |
| 05 | Resend · Brevo | mail, with bounce and complaint handling |
| 06 | Vitest · Playwright | 365 checks before every release |