Inspiration

The best things to do with friends and family show up everywhere — a link someone texts you, an email from your kid's swim team, an event you stumble on while scrolling. And they die everywhere too: buried in your inbox, lost in a screenshot, scattered across three group chats. Calendar apps assume you already know the time. Polling apps assume you already know the activity. Nothing takes "I saw this cool thing" all the way to "we're actually going Saturday." I built Tuhdun to close that gap.

What it does

Tuhdun turns the things you spot into real plans — Capture. Plan. Go.

  • Capture from anywhere: share any link from your phone, or forward any email to your personal Tuhdun address. Claude reads the source and extracts the event — venue, date, time, location — with no typing. One email can become several events (a multi-day camp, a newsletter).
  • Plan it: add an idea to a trip, find restaurants or coffee nearby to slot between stops, and see the whole thing on a map.
  • Coordinate: invite friends or family by email, propose times with accept/decline/counter, and everyone sees travel times from their own front door.
  • Go: one tap to navigate there, or drop it straight onto your calendar.

How I built it

Tuhdun was built end to end with Claude Code — architecture, database schema, and every line of TypeScript — and every single pull request was reviewed by Novus AI before merge, typically with several substantive comments each, all addressed.

The stack: Expo / React Native (iOS), Cloudflare Workers (Hono) for the API, Neon Postgres with Drizzle, Clerk for auth, Anthropic Claude (Opus, with web search) for extraction, Mapbox for geocoding and directions, and Resend for inbound email. Production discipline throughout: a strict repository pattern, hard file-size caps, conventional commits, and lint/typecheck/test gating every change. It's live on TestFlight.

Challenges I ran into

The hard parts were exactly where AI capture meets the messy real web:

  • Timezones. Extracted events were showing up a day early for everyone — even viewers in the event's own timezone — because dates were being anchored to midnight UTC. Fixing it meant reworking the whole pipeline to store and render event times as "wall-clock," consistently across extraction, the date pickers, and display.
  • JavaScript-rendered pages. School calendars, park-district registration, and ticketing sites render their content in the browser, so a server-side fetch sees an empty shell — the AI never even sees the address or date.
  • Extraction tuning. Pushing to Claude Opus for quality surfaced real limits ("schema too complex," grammar-compilation timeouts) that forced me to simplify the output schema and make the email handler process asynchronously so a heavy extraction wouldn't get killed mid-run.
  • Production reality. Standing up a production auth instance, wiring DNS, fixing an OTA pipeline that was silently dropping every update, and getting an iOS build through App Review — the unglamorous work that separates a demo from something people can actually install.

Accomplishments that I'm proud of

  • It's real and shipped — live on TestFlight with a production backend, not a prototype.
  • AI capture works from two very different sources — a shared URL and a forwarded email — turning messy real-world content into structured, geocoded, often multi-event plans.
  • Per-viewer travel times: the same trip shows each person their own commute — something no calendar or planning app does cleanly.
  • Built solo at production quality, with discipline most weekend hacks skip: every PR adversarially reviewed, no god files, no shortcuts I'd have to rebuild later.

What I learned

  • Extraction quality is the product. A fast-but-wrong extraction the user has to correct defeats the purpose; the real bar is "did this save me more time than just typing it into my calendar?" That reframed a lot of decisions toward accuracy over latency and cost.
  • The real web is hostile to capture. Many of the most valuable sources — schools, parks, ticketing — are JavaScript-rendered or bot-protected. Solving that, more than the AI itself, is the frontier. These are key next steps to increase functionality.
  • Adversarial review changes how you build. Having Novus challenge every pull request caught a steady stream of subtle bugs — silent state divergence, timezone edge cases, copy that over-promised — that I may otherwise have shipped, or which would have required greater iteration.

What's next for TuhDun

  • Family & co-parenting calendars: shared household calendars with drop-off/pickup coordination, plus one-tap import of a school's calendar (already validated against a real Fairfax County school feed).
  • Capture coverage: headless rendering and PDF support so JavaScript-heavy pages and flyers "just work" from a single share. Image-based extraction
  • School & family calendars: one-tap import of your kid's entire school calendar — already validated against a live Fairfax County Public Schools feed — as the on-ramp to shared household calendars with drop-off and pickup coordination.
  • Shopping & errands: capture products, cluster them by store, and build an errand run on the same trip engine.
  • A path to revenue a founders pre-sale, then a Plus tier.

Built With

Share this project:

Updates