Iteration Log
Use this page to keep launch work from disappearing into chat, PRs, or one-off audits.2026-08-03: Business Model Change + Launch Schedule
Summary
Founder review of launch readiness, pricing, and timeline. The monetization model changed from freemium-with-trial to a hard paywall at full price, and a 26-week execution schedule was set with three fixed dates.Decisions
- Hard paywall, full price, no trial and no intro offer. Pro is 99.99/yr. Rationale: launch exists to learn whether a stranger will pay full price; a discount buys conversions and destroys that signal. Recorded as a launch experiment with a defined review date (v1.1, late November), not a permanent commitment.
- The website is the free tier.
thisiswhyimhigh.comalready serves 2,525 researched strains publicly. The app does not duplicate free browsing. - Guest access in the app is browse-only — strain browse/search/detail, High Families, music, rate-capped label scanner. Nothing saved, no AI.
- All personal data and all AI moves to Pro — stash, favorites, collection, manual upload, rankings, and badges re-tier from Free to Pro.
- Data retention: 30 days for never-subscribed accounts; 12 months read-only for lapsed subscribers, so a canceling customer’s history survives as a win-back asset.
- Historical Import is Pro-included with caps. The
highiq_historical_importSKU is retired. - Annual is the retention strategy for a weekly-use product — pre-selected on the paywall, target mix 50%+.
- September App Store release behind an invite gate instead of TestFlight, so friends and family install from a normal link. Not launch day; no marketing.
- Push notifications move to v1.1 (November), with a weekly email digest covering the retention job for launch.
Findings
- Notebook generation is off in production.
NOTEBOOK_GENERATION_ACTIONS_ENABLEDresolves false for production builds andisNotebookArtifactRouteEnabled()returns false unconditionally. Under the hard-paywall model this means a paying subscriber could not reach the feature they paid for. Now launch gate 4. - The notebook stack shipped.
packages/notebook-engine, tenconvex/notebook*.tsmodules, and the notebook screens are onmain. Prior docs describing PRs #1253–1259 as unmerged draft branches were stale. - Google
gmail.readonlyrestricted-scope verification was untracked in every launch gate, risk register, and certification list despite gating both Gmail sync and Historical Import. Added as the longest external lead time in the plan. - No paywall exists as a sales surface.
SubscriptionBillingScreenis a billing screen; the post-onboarding sales screen is unbuilt. - Apple compliance items were undocumented: paywall auto-renewal disclosures, EULA/Privacy links on the paywall, Restore Purchases on the paywall, and monthly/annual sharing one subscription group.
- The $4.99 recommendation in
docs/business/[plan]-pricing-strategy-projections-nov30.mdpredates the AI-first product and is superseded. - 46 open pull requests, mostly
auto/*drafts past the 7-day staleness rule. Recommendation: triage and pause routine automations until submission.
Docs Updated
- Created
planning/launch-readiness/execution-plan— 26-week week-by-week plan - Rewrote
planning/pricing/strategy— hard-paywall model of record - Rewrote
planning/launch-readiness/overview— new gates and phases - Updated
planning/launch-readiness/feature-matrix— new tiers and blockers
Next Actions
- App Store Connect agreements, banking, tax, Small Business Program enrollment.
- Determine the exact Google restricted-scope verification requirement and start whatever can start now.
- Re-tier the feature-flag registry to the hard-paywall model.
- Build the paywall as a sales surface with Apple’s required disclosures.
- Turn on notebook generation in production and certify runbook Phase 7.
2026-08-01: Comprehensive Mobile Launch-Debt Hardening
Summary
Completed a repository-wide Mobile consistency and resilience pass across navigation, scrolling, screen layouts, design tokens, accessibility, async actions, native privacy configuration, Safari extension state sync, and bundled assets. Existing feature surfaces were preserved while shared primitives and behavior were normalized.Product and UX Improvements
- Hardened tab retap and scroll-to-top behavior, including the Stash experience, nested scroll containers, deferred tab scenes, refresh behavior, and safe-area spacing.
- Normalized shared layouts, headers, cards, actions, empty/loading/error states, typography, geometry, and screen transitions across the Mobile app.
- Improved profile-photo flows and interaction labels for shared search, chat composers, and Gmail selection controls.
- Added same-frame async action gates to notebook generation/cancellation and strain submission; added abort, timeout, stale-result, and unmount protection to suggest-strain submission.
- Removed unused native permissions, disabled Android backup, tightened permission copy, deduplicated the iOS privacy manifest, aligned the production Expo profile, and set the installed app name to High IQ.
- Aligned Safari App Group identifiers and serialized extension-state writes so a late authenticated write cannot overwrite sign-out clearing.
- Removed an unused 6.9 MB mascot asset and right-sized bundled logo and splash artwork while retaining production-quality source resolution.
Validation Evidence
- Mobile lint and TypeScript: pass.
- Mobile unit: 279 files / 2,196 tests pass.
- Convex: 42 files / 566 tests pass.
- Mobile UI: 28 suites / 77 tests pass.
- Safari extension: 23 tests pass.
- Storybook lint, TypeScript, and tests: pass (2 files / 5 tests).
- Hermes compatibility and privacy-safe diagnostics: pass.
- Mobile design-system validation: pass at the intentional 72/72 color baseline; all other tracked raw-design categories are zero.
- Mobile geometry validation: pass across 1,604 shipping files; no missing continuous border curves or raw z-index values.
- Dependency audit: 98 direct dependencies, 93 source-referenced, five provider/config-only, and zero unclassified.
- Production Expo web export: pass with 8,852 modules and 74 assets; the previous 7.2 MB unused mascot output is gone.
- React Doctor: 272 diagnostics (46 error-level compiler findings and 226 warnings). The remaining error-level groups are primarily unsupported
try/finally, deliberate effect synchronization, and test-harness mutation; broad automatic rewriting was rejected as unsafe.
Remaining External Certification
- Argent and simulator/device QA were intentionally deferred at product direction.
- Revyl validation requires a configured
REVYL_API_KEYin this environment. - Apple Developer registration and provisioning must include
group.com.highiq.app.databefore Safari extension distribution. - RevenueCat/App Store products, purchase, restore, and webhook synchronization remain the paid-beta blocker.
- Candidate builds still need the Gate 2–4 route, journey, permission, small/large-device, and StoreKit certification runs before readiness states can advance.
2026-06-03: Initial Launch Readiness Audit
Summary
First end-to-end launch-readiness pass across mobile routes, feature flags, testing coverage, recent PRs, Revyl/Argent status, docs, and pricing.Evidence
- Raw audit created at
docs/mobile/[audit]-launch-readiness-jun03.md. - Local mobile typecheck passed.
- Local mobile unit + Convex tests passed.
- Local mobile lint passed with warnings.
- Revyl YAML validation passed.
- React Doctor reported 0 errors / 720 warnings.
- Latest checked Revyl smoke workflow failed 7/8.
Decisions
- Do not public-launch yet.
- Do not start paid launch yet.
- Move into a certification sprint for friends/family TestFlight.
- Use one paid SKU for paid beta: Pro at 99.99/year.
- Defer Studio, Founder/lifetime, Basic, AI media add-ons, and broad historical import pricing.
Blockers Found
useFeatureAccessis broken open and returns accessible unconditionally.- Guest/free/Pro model is not implemented consistently.
- Onboarding is not a complete first-run route flow.
- Revyl validates YAML but is not yet launch certification.
- Mobile screen/integration tests under
apps/mobile/test/**are excluded from normal unit tests. - Strain detail needs UI/device polish.
- Gmail and historical import need beta treatment and production proof.
- Docs/site pricing and feature promises conflict.
Next Actions
- Fix feature access and tier model.
- Add access decision tests.
- Freeze v1.0 feature flags.
- Build onboarding.
- Polish strain detail.
- Add route smoke tests for missing launch surfaces.
- Stabilize Revyl fixtures.
- Reconcile docs/site pricing and feature promises.
2026-06-04: Feature Access Gating PR Opened
Summary
Opened PR #806 to fix the first P0 launch-readiness blocker: feature access was broken open becauseuseFeatureAccess always returned accessible.
PR
https://github.com/jmegan/tiwih/pull/806
Changes
- Adds a pure feature-access resolver for disabled flags, login-required features, free-tier features, and Pro subscription-required features.
- Marks signed-in free vs Pro tiers in the mobile feature flag registry.
- Aligns label scanner as a Pro feature, matching the existing screen-level upgrade gate and AI vision cost.
- Removes the global main-layout subscription guard that blocked signed-in non-subscribers from all main app surfaces.
- Adds unit coverage for access decisions and tier metadata.
Validation
pnpm --filter @highiq/mobile typecheckpnpm --filter @highiq/mobile testpnpm --filter @highiq/mobile lintpassed with existing warningspnpm test:revyl:validate
Remaining Work
- Review and merge PR #806.
- Add direct-route Revyl/Argent tests for guest, free signed-in, Pro, disabled, and lapsed states.
- Continue feature-by-feature certification, starting with onboarding and strain detail.
2026-06-04: First-Run Onboarding Entry PR Opened
Summary
Opened PR #807 to add the smallest launch-ready onboarding path: signed-in users with no orders, stash, notebooks, or favorites get a short first-value setup instead of landing directly in the main app.PR
https://github.com/jmegan/tiwih/pull/807
Changes
- Adds a dedicated
/onboardingroute. - Routes newly signed-in and cold-launch first-time users into onboarding.
- Points users toward the existing first-order upload path instead of adding a large wizard.
- Lets users browse strains with completion persisted through
STORAGE_KEYS.ONBOARDING_COMPLETE. - Updates
useFirstTimeUserso anonymous users are not classified as first-time signed-in users. - Keeps
Skip for Nowtemporary instead of permanently completing onboarding for empty users.
Validation
pnpm --filter @highiq/mobile typecheckpnpm --filter @highiq/mobile testpnpm --filter @highiq/mobile lintpassed with existing warningspnpm test:revyl:validate
Remaining Work
- Review and merge PR #807 after PR #806 is reviewed.
- Add Revyl/Argent proof for sign-in -> onboarding -> log first order -> review -> save -> stash payoff.
- Add screenshot QA for the onboarding screen on mobile viewports.
2026-06-04: Active i18n Test Gate PR Opened
Summary
Opened PR #808 to start closing the mobile test coverage gap where files underapps/mobile/test/** are excluded from the active Vitest gate.
PR
https://github.com/jmegan/tiwih/pull/808
Changes
- Expands the active mobile Vitest include pattern to support
src/**/*.test.tsx. - Adds an active i18n key audit under
src/_i18n. - Replaces the older shell/grep callback test with a Node/Vitest scan for literal
tx,labelTx, andtranslate()keys.
Validation
pnpm --filter @highiq/mobile test:unitpnpm --filter @highiq/mobile typecheckpnpm --filter @highiq/mobile testpnpm --filter @highiq/mobile lintpassed with existing warningspnpm test:revyl:validate
Remaining Work
- Migrate or replace stale screen/integration tests under
apps/mobile/test/**. - Add active TSX tests for onboarding, locked/pro access states, and first-order upload UI where practical.
- Decide whether to install
@testing-library/react-nativeor keep screen coverage in Revyl/Argent plus focused pure-view-model tests.
2026-06-04: Launch Route Smoke PR Opened
Summary
Opened PR #813 to close the missing-route-smoke definition gap in Gate 2.PR
https://github.com/jmegan/tiwih/pull/813
Changes
- Adds P0 Revyl route-smoke definitions for High Family discovery, music/now-playing, subscription billing, profile edit/preferences, analytics/stats, dispensaries, notebook daily story/video, and Professor High gated state.
- Wires the new route smokes into nightly regression and release-gate workflows.
- Leaves the fast pre-merge smoke workflow unchanged so routine mobile PRs do not inherit the expanded route suite yet.
- Updates
docs/testing/revyl/mobile-feature-coverage-matrix.mdanddocs/testing/revyl/test-catalog.md.
Validation
pnpm test:revyl:validategit diff --check
Remaining Work
- Run PR #813’s expanded route-smoke set against the current candidate build.
- Add access/tier direct-route checks after PR #806 lands.
- Add fixture contracts for deterministic
new,power-with-dispensary,rich, andlapsedpersonas.
