All projects

№ 530303

inTouch

An app to save any post, find the place, book it with friends.
The inTouch home: a cream-toned map of Manhattan dotted with saved-place pins, a dark search bar at the bottom, and a row of filter chips for when and what.

Problem

I saw so many interesting things to do on Instagram, but had no way to save these or actually motivate me to go next time.

Solution

inTouch takes any social post, works out which real place it is, and files it on a map with menus, hours, and booking links. Intelligent search and UI helps you easily find the best place for any occasion.

The pipeline to save a post

Share a link and inTouch works out which real place it is, step by step, while you watch.

Every save is a linear state machine: classify the source, fetch the post, then cascade through readers while fields are missing. Claude reads the caption, Gemini watches the media, Google Places geocodes, and menu, booking and review passes fill the rest. Each step lands as a row the live card polls into five rungs; runs end when the draft completes or a cent budget is spent. A 'ten best' post fans out: an enumeration pass lists every venue, code reconciles it against the caption and Gemini, and each entry becomes a child run with its own geocode, photo and page. A collision gate catches two children landing on one place id; the best name match keeps it, the others retry.

An AI concierge can search for you

3 months before personal AI assistants blew up, you could use a decent version of inTouch to plan for you

The concierge is a Claude tool-use loop with one search tool. That tool climbs three tiers and stops when a tier yields at least five results that pass every hard filter: your saved venues, then places other members have saved, then Google Places Text Search, which fires only when the free pool is thin. Distance, open-at and price are computed in code, while the free-text query is scored by Voyage embeddings over venue descriptions and post captions, so 'tikka masala' finds Indian places. Web hits stage in a candidates table for seven days and become real venues only when you save or plan with them. The route streams NDJSON so the chat narrates each tier as it runs.

Share sheet to server in one second

All consumer apps need usability and speed. It was a fun challenge to solve for here.

The iOS app is a Capacitor shell around the live deploy plus a native Share Extension. Extensions get a tight time budget and no cookie jar, so on every cold open the app fetches a per-user save token and writes it into the App Group's shared defaults through a custom plugin, because no stock Capacitor plugin writes that suite. The extension reads the shared URL (or regex-scans shared text), POSTs it with that token, gets a 202 carrying a pre-created run id, and dismisses in about a second. The pipeline runs inside Next's after() hook, and because nobody is watching a page, an APNs push, hand-rolled over node:http2 with an ES256 JWT, reports success or failure when it finishes.