Selected work

Ascend · 03 / 05 · 2026

One next step, for the moment you freeze.

Ascend is an AI app for executive-dysfunction freeze. You say or type what’s stuck, and it gives back one small step. I designed, built and shipped it alone, and it has been on the App Store since June 2026.

The Ascend landing page. A pill reads 'For the days your brain won't cooperate' above the headline 'You know what to do. You still can't start.' and the line 'Finally set it down. The rest of your day feels lighter.' A green button reads 'Show me my first step', with 'Free to start. No card.' beneath it and a trust row: Private by default · No streaks, no guilt · Nothing to keep up with. A phone frame on the right shows a completed loop reading 'Lunch is made. You're back in the morning with them. Nothing else is owed right now.'
The first loop runs on the landing page, before signup and with no account.
21 Junlive on the App Store, now version 1.1.1
4subscription products through App Store review
5things the app can’t do to a user, each enforced in code
430test files behind it, counted on 31 Jul 2026

These are results of the build. There has been no user testing, and usage is small. Every design decision here came from me using my own product.

Role
Solo design, build and product
Timeline
Feb 2026 – present
Platforms
iOS and web; native Expo port in progress
Status
Live at justascend.app and on the App Store

The problem

For some people, the list is what causes the freeze

Productivity tools assume you know where to start. For people with ADHD or burnout, a fifty-item backlog is the trigger: every item is a decision, and too many decisions end in shutdown. I’m one of those people. I kept abandoning the tools, so I built the one I needed.

Decision 01

One step, never a list

The model must return exactly one action. A validator reads each answer and rejects compound steps, numbered sub-steps and timers. An earlier version hid the rest of the path, and that caused its own freeze. So now the whole path shows, with one step lit and the rest marked as held for later.

A list can’t reach the screen. If the model can’t produce one small step, the turn fails visibly.

Ascend on a phone. The user has written 'three things are due friday and i've been staring at the same tab for an hour'. A line reads 'This is the Witness, reflecting you back. Your one step is just below.' Under a soft blue orb labelled WITNESS: 'An hour on the same tab is not laziness. That is your system stalling at the point where it has to pick one. You do not have to solve Friday right now.' Below, a card headed NEXT STEP reads 'Open the Friday doc and read the last line you wrote', with the note 'Open it and read the last line. Do not write anything yet' and a Begin button.
First the app reflects back what you said. Then it gives one step.
The visible path in Ascend: a card headed YOUR PATH explains 'The whole path is here so you can see it. You only have to do the one in front of you. The rest is held.' The lit rung reads 'IN FRONT OF YOU (STEP 1 OF 3) — Read the last line you wrote' with a Begin button and a 'Make this smaller' link. The rung below is greyed and headed 'NOT YET. HELD FOR LATER'.
The whole path is visible. Only the step in front of you is lit.

Decision 02

The model picks from five moves

Every step is one of five types: Next Step, Small Habit, Breathe First, Clear Your Head and Let It Go. A schema keeps the model inside that set. The card doesn’t name the type, because a stuck person has no attention to spare for the app explaining itself.

Panic gets a body reset. Exhaustion gets permission to drop something.

Ascend on a phone. The user wrote 'everything is too much i can't breathe i'm panicking about all of it'. The Witness replies 'Your system is running hot. Nothing about the list changes until that comes down. Nothing on that list needs you in the next minute.' The card below, headed NEXT STEP, reads 'Put both feet flat on the floor and press down' with the note 'Press your feet into the floor until you can feel the pressure. Then stop' and a Begin button. Two chips sit beneath: Make it smaller, Different step.
Panic: the step is feet on the floor, and nothing is asked of the list.
Ascend on a phone. The user wrote 'i'm completely exhausted and burned out and i can't hold all of this'. The Witness replies 'You are not stalling because you are lazy. You are holding three things and you have room for one. Two of these can wait, and you are allowed to say which.' The NEXT STEP card reads 'Let Friday's third thing go until Monday' with the note 'Pick the one you care least about and decide it is not happening this week', and the button reads 'Let It Go' rather than 'Begin'. The same two chips sit beneath.
Exhaustion: the step is letting one thing go, and the button says so.

Decision 03

Progress that a bad week can’t take away

I wanted a sense of progress without a streak, because a streak punishes a bad week. Rank comes only from the total number of loops you’ve closed, so it can only go up. Badges come from facts about loops already closed. Unearned badges are blank coins, with no padlocks and no “3 of 15” count.

Nothing in the app can be lost, so there is nothing to feel guilty about keeping up.

Ascend's Journey screen: 'Every loop you have closed, and where it has taken you.' A struck green medallion with a mountain glyph sits above the rank name SURE FOOTING, the number 37 'loops closed', a short progress bar and '23 loops to Open Air'. Below, a BADGES grid: earned medals for 'Ten Closed' and 'Twenty-Five Closed' rendered as struck coins, and unearned ones for 'Fifty Closed' and 'A Hundred Closed' rendered as blank discs — no padlock icons and no collected-count anywhere on the screen.
The Journey screen. The 37 loops are seeded demo data.

Decision 04

Charge for finishing, never for talking

The free tier counts completed loops. Abandoned loops and follow-up messages cost nothing. If the app reads that someone is very distressed, the daily limit is skipped and the step is generated anyway. When the limit does apply, you get the reflection first and the limit second.

The person in the worst state never hits a paywall.

Ascend's free-tier limit screen. Above the card, a reflection reads 'The thing isn't the problem. The standard you're holding it to is. You can keep polishing or you can ship. Both are real choices, and only one of them ends the loop.' The card below shows a crescent-moon icon and reads 'You've used today's free room. It opens again tomorrow. There's no rush to come back.' with a 'Back to your space' button and a quiet line offering options.
The free limit, after the reflection. Shot from web, since the iOS build hides pricing.
Ascend's completion screen: 'Loop closed. Nothing is left open.' over a blue orb with a checkmark, the headline 'That's the hard part.' and 'Starting is what stalls, and you started. The rest is just carrying it.' Below, the completed step, then YOU ARRIVED WITH quoting the user's own opening words back to them, and YOU JUST naming what they did. Two buttons: 'I'm good for now' and 'There's more I want to sort'.
The close quotes your own opening words back to you.

The system

Rules wired to checks

The design rules live in lint and tests. Animations may not move layout. Touch targets are at least 44 pixels. Product copy never says how long a loop takes, and one validator checks every step the app can show, fallbacks included. A CI gate keeps the native port’s theme identical to the web theme, in light and dark.

Ascend's transition-cue authoring screen, headed TRANSITION and 'Set a gentle bridge': 'Name the switch now, while it is easy. When the time comes, we softly remind you, then hand you the first small step into the next thing.' Fields: Switch to — 'homework with Iris'; At — 05:00 PM, noted 'Today, or tomorrow if the time has already passed'; If-then (optional) — 'Then I close the laptop lid and leave it on the table'; Body bridge (optional) — 'Stand up and fill a glass of water.' A 'Set transition' button sits below.
Push notifications are written by the user: your words, your time, and the first physical move.

Reflection

What I’d do differently

  • Build payments later. I built Stripe, then App Store purchases, before anyone had been asked to pay.
  • Check the analytics, not just add them. My dashboard counted charges as loops and overstated use by about a third.
  • Plan distribution with the build. Being on the App Store is different from being found there.

No user testing yet; every finding came from my own use. A keyword screen sends crisis messages to the 988 Lifeline before any model call, and it is a floor, not a safety net.