Press a button. The street you're standing on tells you its story: ninety seconds, out loud, from real sources. The most ordinary street you know isn't.

Judges: try it in 60 seconds. Install poqui from the App Store (free, no account, no login). Skip the tour, tap Agree and continue, allow Location, then press the big button: a story about exactly where you stand starts in seconds. No location? Choose Don't Allow and type any place, e.g. Piazza Navona, Rome. Three stories a day are free; poqui Plus unlocks everything and starts with a 7-day free trial (Settings, the gear on Today, then poqui Plus). Then try Ask about this place, and the Guides tab: type any city.

Inspiration

We love to travel. And we miss an old machine you used to find in museums and beside monuments: a telephone. You picked up the receiver, and a voice told you the story of what you were looking at. It made you stop and look. But it stayed where it was, and few places had one.

poqui is that telephone made modern: always in your pocket, and with you as you move around. Press the button anywhere, and the place tells you its story.

That is the gap poqui fills. Landmarks have guides; the street you live on does not. And most of what is written about a small Italian town is in Italian Wikipedia, not English: within 250 m of Piazza Rossetti in Vasto, the Italian edition has 10 geotagged articles and the English one 4; in Milan's Isola quarter, 8 against 1. An app that reads only English cannot see the place.

poqui began in August as a different app under the same name. On Aug 31 I killed it and started over on the same engineering chassis (Expo, EAS, a signed Vercel proxy, RevenueCat, an App Intents module, a MapKit points-of-interest module) with a product only AI makes possible: a spoken, sourced story about exactly where you stand, composed on demand for any coordinate on Earth. Nothing from the first concept was ever released, so poqui's first public release falls inside the Shipaton window.

What it does

The button. Today has one button: the talking face, a profile on a paper disc with three speech arcs in front of its mouth, captioned with a question, "What's around you?", and the name of the place nearest you. Press it: the arcs light up one by one while poqui finds your corner and reads what has been written about it, and within seconds a voice starts, the mouth moving with it. About ninety seconds on exactly this spot: why the street has that name, what the building on the corner replaced, what happened on this square. Then it stops and points your eyes at one real thing ("Look closer: count the corners. Two bastions still swell at the edges. There were four."). No map, no route. The same button lives on the Action Button, on Back Tap and in Siri ("What's here?").

Ask poqui. After a story, ask a follow-up, typed or spoken (hold to talk; the phone transcribes it). The answer comes from the story's own sources and is read aloud; when they don't cover it, poqui says "Not in my sources" instead of guessing. It works on guide places and on stories you heard weeks ago.

"Any city, on request." The Guides tab is a search. Type a city and poqui writes its guide while you watch ("Reading Wikipedia · 3 of 9 places"), in thirty to sixty seconds: an introduction, then up to nine places, nearest first; when one ends, the next starts by itself after five seconds. Two new cities a day are free, ten with Plus, and a city someone already asked for opens at once. A guide written in English is rewritten on the fly for an Italian listener, and the other way round. Two guides are written by hand, Vasto and Rome, in English and Italian.

"Today, near you." If you want it, one story a morning about wherever you wake up: one local notification a day at the hour you choose ("This morning: a story from around Vasto."), never more.

Postcards. Every story you hear for thirty seconds becomes a postcard: the title, the town, a line worth keeping, and where you stopped ("Heard", or "Continue · 0:46"). Share sends it as an image. "Collect towns, not streaks."

Go deeper. At the end of a story: a five-minute chapter on the same place (Plus), or "More about the history · the art · the food · the legend" to hear the spot again through one lens.

Private, zero setup. No account, no sign-up, no ads, no tracking, no paywall before the first story. Three permissions, all optional, each explained before iOS asks ("explain before ask"): deny location and type a place; deny the microphone and type the question; deny notifications and the morning story waits on Today. The first name it greets you with stays on the phone.

English and Italian. The app and its stories speak both, anywhere in the world, in two natural voices, a woman's and a man's, both free. Underneath, poqui reads the place's own Wikipedia as well as yours: an English listener in Vasto hears Vasto told from Italian Wikipedia too.

"Local for free, Wanderer for Plus." Three stories a day are free. poqui Plus, $6.99 a month or $49.99 a year with a 7-day free trial on the yearly plan, gives many more stories a day (fair use), every city guide, the Go deeper chapters and ten new cities a day. For the first seven days after install every guide is open; after that, the hand-picked guides are part of Plus.

How we built it

  • App: React Native 0.86 on Expo SDK 57, expo-router, iOS only. The talking face is static SVG layers that Reanimated 4 moves as native view transforms and opacity; nothing animates an SVG prop, the lesson of a crash on the UI thread. expo-haptics carries a small vocabulary: a deep tap on press, a soft double heartbeat while poqui looks around, one warm knock on the first spoken word. Two local Expo modules in Swift: App Intents ("What's here?" for the Action Button, Back Tap, Siri and Spotlight, in English and Italian) and a MapKit MKLocalPointsOfInterestRequest lookup that hands nearby venue names to the grounding. On-device speech recognition for Ask. History, postcards, listening progress and settings live in SQLite, on the phone only.
  • Story engine (Vercel functions, TypeScript): the phone sends an HMAC-signed request with the coordinate, the listener's language, the place's own language (from the reverse geocode's country) and the nearby venue names. The server searches three Wikipedia editions (the place's, the listener's, English) within 1,200 m, merges them on Wikidata IDs, keeps about six finalists and fetches each one's full text, then picks a rung: exact spot, street, quarter, town, or an honest quiet mode for a corner with little on record.
  • Compose: gemini-2.5-flash through OpenRouter with structured output, prompt v3.2: the poqui voice (hook first, people over stones, exactly one dry aside, a banned-word list, a title that names the place and its turn, a look-closer at the end). Code checks every draft: the numeral guard (a number of three or more digits must appear in the sources), the name guard (a proper name must appear in the sources, in their spelling), and lore only where a source calls it legend. A failed draft gets a named repair, then a deterministic trim, then one safe pass under a closed list; only after all three, a refusal. Stories are cached per ~150 m cell, language and depth for 45 days, so a popular corner costs nothing after its first press.
  • Voice: MiniMax Speech 2.8 HD through OpenRouter's audio endpoint (one key, one proxy, one bill). The two voices are MiniMax's own woman and man in each language, chosen by ear from an audition of 84 takes. A story is requested in two pieces at once, the opening paragraph and the rest, so the voice starts while the rest is still being rendered. Every reading is stored in Vercel Blob under a hash of model, voice, language and text: a reading is paid for once, ever.
  • Cities on request: POST /v1/guides/build grounds the city, writes the introduction first, then at most three places per call while the app polls and shows the real count. A town with fewer than six usable places gets an honest "not enough written about this place yet", having spent nothing.
  • Money: RevenueCat runs the offerings (one placement per paywall moment), purchases, restore, the Customer Center and offer-code redemption. The server checks entitlements through RevenueCat's API and keys every limit on RevenueCat's anonymous app user ID, so there are no accounts anywhere. Counters live in Redis; a monthly budget meter trips a kill switch before the AI bill can run away.
  • Built with Claude Code. One person directing Claude Code agents under a binding documentation protocol: a STATUS task board, 44 architecture decision records, an architecture doc updated in the same change as the code. Design was decided on rendered pixels before code: every screen was drawn in HTML/CSS, rendered as a PNG, approved on the phone, then built from the same tokens. 1,422 unit tests (app 631, backend 609, shared packages 182), all green on the branch that ships.

Challenges we ran into

  1. The numeral guard fought the voice. "No number that isn't in the sources" is what makes poqui trustworthy, and it broke the first production stories: the model rounded distances in digits (a source said 587 m, the story "about 580 metres") and wrote decades, and two of three presses in Vasto ended in a refusal. We didn't weaken the check. The repair hint now names the offending numerals and lists the allowed ones, a deterministic trim drops a sentence that still carries one before a last safe pass, and the prompt writes distances and centuries in words. Measured after: 13 compositions across Vasto, Brooklyn, Milan and a Texas suburb, 13 direct, 0 refusals, about $0.03 in total.
  2. A launch crash we could only see in a device crash log. The first preview build died at launch with nothing in the JavaScript console. The .ips showed a SIGABRT inside a CADisplayLink callback: a plain helper called from a Reanimated UI-thread worklet. One line, found in minutes once we read the right log, and the reason the face moves only native view transforms today. It happened once more, on the last test build: a default parameter in a UI-thread function, invisible everywhere except on the phone. Now a test compiles every worklet the way the release bundle does and fails on that pattern.
  3. Three redesigns, each decided on the phone. Build #4 was a glass "listening orb" that read as a meditation app; poqui is a witty city companion, so it became the Field Guide: flat cream paper with a dot grid, warm ink, one hard shadow on the things you press. Its compass button then failed a device pass ("it doesn't look like a button"); the talking face says "press me and someone talks". Last, the honesty badges on every paragraph came off the page: the checks stayed in the engine, only the badges left.
  4. A city in a minute, without seven stories about one castle. The first guide written on demand, Lecce, came back with seven of nine stories about the castle: grounding at a place's coordinate finds the strongest source nearby, and in a dense centre that is one building. Now each place's own Wikipedia article leads its sources; the second run gave nine places, nine subjects, for $0.06.
  5. Thin places. A residential street in Plano, Texas has one school within a kilometre. The story says you can't see the school from here, points at the flat land the city is named for, and stays honest. Across 17 places, from Rome to four villages whose only article is the village itself, the engine never fell to its quiet rung.

Accomplishments that we're proud of

  • Honesty in code, not in a disclaimer. Every figure of three or more digits, years included, and every proper name in a story must appear in its sources, or the draft is repaired before anyone hears it; a corner with little on record gets a short, honest story instead of an invented one. "Report an error" is one tap; three reports send a story back to be written again.
  • The talking face: one control you can name, which shows listening and speaking without a word of UI.
  • Any city in about a minute. Lecce: the introduction written in 15 seconds, nine places ready after three more calls, $0.06 in total.
  • A reading paid for once. A cached reading starts streaming in 2 ms and costs nothing, so every popular corner and every guide place gets cheaper with each listener.
  • Zero setup. No account, no login, no paywall before the first story, and every denied permission has a working path.
  • A business you can say in one sentence: "Local for free, Wanderer for Plus."

What we learned

  • The place's own edition is the product. Italian Wikipedia has 10 articles within 250 m of Vasto's main square where English has 4. Reading the local edition underneath the listener's language is what makes a small town speak.
  • Decide design on rendered pixels, not in code. Every redesign came from holding the phone.
  • Honesty rules must be mechanical, and the prompt must learn to live with them. A guard alone produces refusals; a voice alone produces inventions. It takes both, and a repair that names the problem.
  • Recency beats length in prompts. Rules stated 4,000 tokens earlier were the ones the model ignored; one "remember" line at the end of the user turn roughly halved the style violations.
  • Ship less. Maps, routes, AR, a camera mode, events, even a finished-looking "Suggestions" screen marked "coming soon": everything that wasn't press → story → postcard + paywall was cut. App Review rejects placeholders anyway.

What's next

  • "Nice to visit" everywhere. Home's rail of nearby places shows only in Vasto and Rome today; the server's /v1/nearby already answers for any spot.
  • A postcard worth sending: a photo and a line of your own, and a shared page that plays the story, which turns sharing into a growth loop.
  • Spanish, French, German and Portuguese. The engine already composes and voices them; they stay hidden until a native speaker has read them.
  • "What's here?" on the Lock Screen and in Control Center.

Built With

Share this project:

Updates

Submission history