Import Plans Before the App Opens
A GPT mini model on the web, deep links into the app, and the same pipe reused for Couch to 5K.
I wrote about onboarding before onboarding on Ascend: capture intent on the web, generate a plan, only ask for an account once someone decides to stay. That flow assumed a conversation. Someone types what they want, the system turns it into identities, habits, and milestones, and they preview the result before downloading anything.
The next piece was more literal. People were already arriving with plans written somewhere else. ChatGPT output. Notes app bullet lists. A journal entry from last Tuesday. They didn’t want to re-explain their life in a chat box. They wanted to paste the thing they already had and see it become a habit system.
So we added an import section to the site: paste your plan, hit analyse, get a structured preview. A small GPT mini model handles the transformation. Not because it’s the smartest model available. Because anonymous visitors paste a wall of text, we need something fast and cheap enough to run on every attempt, and the job is narrow: map messy human prose into the structured objects Ascend already understands.

Paste your plan. We’ll turn it into a habit system.
The web does the thinking, the app does the saving
The hard part of pre-app onboarding was never the UI. It was the handoff. Ascend is a mobile app. The website can’t finish the job. It can only produce a plan worth importing.
That meant building a deep link path into the app: structured payload, preview on the web, tap through, land in Ascend with identities and habits already configured. Once that pipe existed, the paste box and the in-app import flow stopped being separate features. Same mechanism, different front door. Freeform text on the website, curated bundles elsewhere, both ending in the same deep link.
The website is a transformer. The app is where persistence, reminders, widgets, and Health Connect sync actually live. I can swap the model or tighten the prompt without shipping a new app build, as long as the import schema stays stable.
Then Couch to 5K showed up
The paste box is general-purpose. That’s a strength and a weakness. General-purpose tools are hard to market. “Turn any plan into habits” is true and vague. Nobody searches for vague.
Couch to 5K is specific. The NHS programme is nine weeks, three runs a week, walk-run intervals until you can do a 5K. People actually search for it. Obvious beginner intent. And a gap in how most fitness apps treat it: they log the run. They don’t help you become a runner when motivation dips in week two.
I’d already built the deep link import for the app. The C25K page doesn’t need GPT. It ships a preconfigured plan: Runner, Mindful Eater, and Good Sleeper identities, three weekly runs, stretching, nutrition, sleep, a weekly review. Tap import, open Ascend, start week one. The NHS podcast or app still runs the intervals. Ascend handles showing up, tracking runs from Apple Health or Health Connect, and not drifting off after week three.
Same plumbing as the paste box, completely different acquisition story. One is “bring your plan.” The other is “we already know your plan, here’s the button.” I’m hoping to corner the second kind: habit tracking for people mid-search for a programme they already half believe in.
What the model is actually good at
GPT mini turned out to be enough for the paste flow. The task is bounded: extract themes, propose identities, suggest habits, don’t invent a twelve-month roadmap unless the text asks for one. It fails in predictable ways. Generic wellness habits. Identity labels that sound like a template. Plans that are really three unrelated goals jammed into one paragraph and come back as three unrelated identities with no thread between them.
The preview step matters more than the model choice. Users can reject a habit, tweak an identity, add something the model missed. Same lesson as the conversational onboarding piece: confidence beats completeness. One wrong proposed identity and they assume the whole thing was generated from a template. Curated imports sidestep that entirely. Couch to 5K doesn’t need to understand your prose. It needs to be right once, for everyone searching for that programme. Less magic. Higher trust on first open.
What I’d do again
Build the import pipe before you build the marketing pages. Deep links, schema, preview UI. Once that exists, you can add a GPT mini endpoint, a C25K landing page, a “marathon training” bundle, whatever niche shows up in search console next. Each new surface is content plus a payload, not a new app feature.
Keep the model small until the schema is stable. Ascend doesn’t need literary analysis. It needs reliable mapping into identities and habits. Cheaper models punish sloppy prompts, which is annoying and useful.
And treat SEO landing pages as imports, not blog posts. The Couch to 5K page earns its length because beginners have real questions: does this work with the NHS programme, does it track runs automatically, what happens after week nine. The CTA isn’t “learn more.” It’s import the plan.
What still breaks
The paste flow depends on people having a plan worth pasting. Plenty of visitors don’t. They have a mood and a hope. The chat-style onboarding still wins there. Curated pages don’t scale for free either. Every niche import is someone deciding what identities and habits belong, writing the SEO copy, and maintaining the deep link payload when the app schema changes.
I’m still learning which niches deserve a page versus which ones should stay in the generic paste box. Couch to 5K was an obvious bet. The next ten might not be.
Onboarding before onboarding was about catching the motivated moment. Plan import is the same bet with less typing: meet people where their plan already lives, hand them something concrete, and let the app finish the job when they’re ready to commit.