A tiny, shippable growth experiment built on Val Town.
This project is intentionally small: one email, two links, and a fully-instrumented mini web app. It demonstrates how I approach growth engineering at dev-tool companies—ship fast, measure everything, and wire feedback loops end-to-end.
pillChoice is a two-path experience inspired by the classic “choose your pill” metaphor:
- Red pill → a public, role-tailored CV page + concrete growth ideas
- Blue pill → a hidden route that triggers a server-side automation
Both paths log events to a shared SQLite database so behavior is observable immediately.
This was built as an application experiment for a Growth Engineer role at Val Town.
Rather than sending a traditional cover letter, I wanted to:
- Build inside the platform
- Show how I think about activation, instrumentation, and growth loops
- Demonstrate comfort with Val Town’s execution model (Deno, Hono, stdlib)
-
Single-page React app
-
No router library — routing is done via
window.location.pathname -
Client-side event tracking on:
- page views
- pill selection
- Hono HTTP app (
index.ts) - Val Town
std/sqlitefor persistence - Optional email + webhook triggers on the blue-pill route
Events are stored in SQLite with:
- timestamp
- event type
- pill choice (if applicable)
- path
- user-agent + referrer
You can inspect recent events at:
/api/events?limit=50
| Route | Description |
|---|---|
/ | Landing page with pill choice |
/red | Public CV + growth plan |
/blue | Hidden route that triggers automation |
/api/events | JSON event log |
These are not required, but enable extra proof points:
WEBHOOK_URL— POSTs a JSON payload when/blueis visitedNOTIFY_EMAIL_SUBJECT— subject line for notification emailNOTIFY_EMAIL_TO— recipient (if supported by plan)
There is no local dev server.
Instead:
vt watch # sync changes continuously vt browse # open the live site vt tail # view logs
The deployed site is the development environment.
- Minimal surface area — fewer moving parts, clearer intent
- Observable by default — every meaningful action emits an event
- Fast to iterate — new experiments should take minutes, not days
Thanks for taking the time 🙏
This project is small on purpose. The goal isn’t polish—it’s to show how quickly I can:
- understand a platform
- build within its constraints
- and turn an idea into a measurable experiment
— Andy