cue

designed and built an ios app that brings saved tiktoks back at the moment you can act on them

timeline

august 2026

role

sole designer & builder

built with

claude code

gpt api

google places api

ffmpeg & yt-dlp

I saved Oslo, then forgot all of it.

In the weeks leading up to a trip to Oslo, I saved every café, restaurant, and guide I came across. By the time I got there, I didn't remember saving any of them, and I missed most of the recommendations I wanted to try.

six saved tiktoks about oslo and bergen: cafes, restaurants, and travel guides

Cue is an iPhone app I designed and built on my own. Share a TikTok to it, and it brings the post back when you can actually act on it.

problem

This is a surfacing problem, not an organizational one.

the backlog

Hundreds of saved posts, and nothing to bring the right one back.

Conventional folders assume you'll remember to look back for posts. The feed is built to make you save, and nothing is built to make you act.

So the design question became: when is a save relevant enough to interrupt you, and how?

goal
Visit the restaurant
signal
Location

solution

Share once. Cue waits for the moment it's useful.

pipeline stages, share to trigger
7
things extracted from 28 saves
149
places ready to nudge
104
confidence needed to interrupt
0.7

01capture

Saving takes one share, like sending a post to a friend.

Sharing a post doesn't disrupt the flow of scrolling. With more time, I'll use the TikTok API to pull straight from the saved posts page, but for now, I'm using a ShareExtension.

02understand

Frames, audio, and caption are read together.

Photo carousels broke the extraction at first because subsequent frames after the cover were hidden behind a login. Now every slide is pulled from a video recording, the audio is transcribed, and each place comes back typed, geocoded, and scored.

03surface

A nudge arrives when you're a short walk away and it's open.

Cue watches the saved places nearest you, and checks walking time, opening hours, and your calendar before it interrupts.

04control

Interruptions are capped, and every place can be tuned.

A daily limit, nothing mid-meeting, and a per-place override from inferred to nearby, event, or never.

nudge settings

per-place override

05browse

The map and library show what's worth doing nearby.

Pins, per-place cards, and a list you can sort by distance and filter to what's open now. This makes it easy to find what you're looking for at any point in the app.

edge cases

How Cue handles uncertainty, notification fatigue, and more

the nudges screen reading quiet right now

nothing relevant → stay quiet

a place flagged with confidence 0.31, below 0.7

low confidence → never nudged

how this was extracted: source, frames sampled, model, and tokens

why it fired → how it was read

a post's menu with re-run the model and re-hydrate

bad extraction → rerun the model

an already saved alert with open the save and re-run the model

already saved → open or rerun

two shared links waiting in the ingest queue

several shares → queued in order

takeaways

  • 01

    Surface rarely, surface right

    Every nudge spends trust. A daily cap and a confidence threshold did more for the experience than another trigger would have.

  • 02

    Finding the right interface

    Maps made sense for location-based posts, but I thought a lot about what interface or headless structure could support deadline-based posts

  • 03

    Build the risky part first

    I nearly cut real geofencing as too hard. It turned out to be the one thing the idea needed to be true.