Skip to content

feat(onboarding): make the first page a try-voice step - #552

Closed
sol-wizard wants to merge 7 commits into
mainfrom
feat/onboarding-voice-first-task
Closed

sol-wizard wants to merge 7 commits into
mainfrom
feat/onboarding-voice-first-task

Conversation

@sol-wizard

Copy link
Copy Markdown
Owner

Summary

~31% of signed-in users never create a task or note, and onboarding only described voice. The first page now has the user hold the mic, say one thing to do today, and save the drafted task with "Add & continue", so Today is not empty on arrival.

  • Reuses the AI sheet's flow: extracted useSaveAiResults, useHoldToTalk, resolveMicPermission; useAiTaskGenerator gains optional onComplete/onError. Sheet behaviour unchanged.
  • IntroCarousel: swipe lock, per-item primary button, keyboardShouldPersistTaps.
  • Never blocks: mic refused → typing; no speech, no task or network error → inline next step; Skip always works.
  • Analytics: four onboarding_voice_* events, task_created.source = "onboarding_ai".

Tested on a real iPhone: typed flow to a DB row and the Today list, hold-vs-swipe, Skip, server unresponsive, sheet regression. Not exercised: spoken audio, mic-refusal prompt.

Release note

New to Blotz? Onboarding now lets you create your first task by voice before you even reach the app.

Status:

  • User-facing — announce it
  • Beta / partial — announce, but tagged as beta
  • Hidden in production (feature-flagged / not enabled for users) — don't announce
  • Internal only (refactor / infra / tests / CI / deps) — don't announce

🤖 Generated with Claude Code

sol-wizard and others added 7 commits September 18, 2026 19:42
Adds the four onboarding_voice_* events and an onboarding_ai task source.
Nothing calls them yet.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Moves draft saving and the task_created tracking out of handleAddAll so
onboarding can reuse it. The sheet's behaviour is unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Pulls the hold-to-talk press handling and the mic permission check out of
the AI sheet so onboarding can reuse them. The sheet's behaviour is unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
useAiTaskGenerator takes optional onComplete and onError callbacks, so a
screen can react to an empty result or a failure instead of only a toast.
The AI sheet passes neither and behaves as before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
IntroCarousel gains scrollEnabled, getPrimaryAction and a navigation source
on onItemViewed. Defaults keep onboarding and What's New as they are.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The first onboarding page now asks the user to hold the mic and say one
thing to do today, shows the drafted task, and saves it from an
"Add & continue" button. Mic refusal falls back to typing, and empty
results or network errors show what to do next; Skip always works.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Send needed two taps with the keyboard open (carousel now persists taps)
- A failure notice from voice mode stayed up after switching to typing
- The text field had no visible background
- The draft panel filled the page for a single card; it now hugs the cards

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Test Results

126 tests   126 ✅  8s ⏱️
  1 suites    0 💤
  1 files      0 ❌

Results for commit 9f400ef.

@github-actions

Copy link
Copy Markdown
Contributor
Package Line Rate Branch Rate Complexity Health
BlotzTask 4% 34% 2743
BlotzTask 4% 34% 2743
Summary 4% (4584 / 113766) 34% (968 / 2830) 5486

@sol-wizard

Copy link
Copy Markdown
Owner Author

Superseded by #554. Same goal, but it guides the user to the real AI sheet after onboarding instead of building a second voice UI inside the carousel.

@sol-wizard sol-wizard closed this Sep 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant