Feature Specification
This catalogue translates the stack specification and product brief into implementation-facing feature records. It is deliberately broader than v1: the Release lane column separates MVP commitments from post-v1 candidates without losing traceability.
ID conventions
- Feature IDs use
FEAT-<AREA>-<NNN>. - Journey IDs in User Journey Flows reference these feature IDs.
- UI IDs are not canonical yet. Any UI references here use reserved
UI-*placeholders that should be replaced by the post-Phase 5 UI inventory.
Feature catalogue
| ID | Name | Release lane | Description | User value | Dependencies | Technical constraints | High-level acceptance criteria |
|---|---|---|---|---|---|---|---|
| FEAT-ONB-001 | Animated welcome | MVP | First-run welcome surface showing the outcome of colouring rather than a feature tour. | Users understand the product emotionally before being asked for data or account details. | FEAT-CAN-001, FEAT-LIB-001, FEAT-OBS-001. | Must respect reduce-motion settings and avoid blocking first launch. | A new install sees the welcome once; animation is replaced by a still or instant transition when reduce motion is enabled; the next step is reachable with one clear action. |
| FEAT-ONB-002 | Cultural theme personalisation | MVP | Multi-select preference capture for cultural themes: textiles, carnival, portraits, family, children, symbols, traditions, and landscapes. | Users receive a library that feels relevant from the first session. | FEAT-ID-001, FEAT-LIB-002, FEAT-DATA-001. | At least one theme required; values must match the profile taxonomy in the data model. | Selected themes persist to profiles.cultural_themes; the library reveal uses those themes; users can later update the preference in settings. |
| FEAT-ONB-003 | Audience selection and child mode | MVP | Captures whether the app is for self, a child, or both, and sets child-mode defaults. | Parents and children get safer defaults without creating a separate child profile system. | FEAT-ID-001, FEAT-SET-003, FEAT-OBS-003. | Child mode must restrict behavioural analytics; advanced child profiles are out of MVP. | Audience persists to profiles.audience; child-mode analytics policy is applied when relevant; users can change the setting later. |
| FEAT-ONB-004 | Accessibility quick-set | MVP | Captures always-show-numbers, reduce-motion inheritance, and pattern-fill preference during onboarding. | Users with accessibility needs do not have to hunt through settings before colouring. | FEAT-ACC-001, FEAT-ACC-002, FEAT-ACC-003, FEAT-ID-001. | Always-show-numbers defaults on; reduce motion inherits from the OS by default. | Preferences persist to profiles.accessibility; canvas and palette read the saved values; defaults match the product brief. |
| FEAT-ONB-005 | Personalised library reveal | MVP | Shows the user what their onboarding answers unlocked, with a featured starter artwork. | The first library view feels tailored and gives users an immediate next step. | FEAT-ONB-002, FEAT-LIB-001, FEAT-LIB-002, FEAT-CONT-001. | Must not depend on a slow network path during the first reveal; starter content should be available without visible spinner delay. | Library reveal includes personalised copy or rows; one free starter artwork is prominent; selecting it opens the guided first-play path. |
| FEAT-ONB-006 | Guided first taps | MVP | Lightweight in-canvas guidance for palette selection and first cell fill. | Users learn by doing rather than reading a feature tour. | FEAT-CAN-001, FEAT-PAL-001, FEAT-CAN-003. | Guidance must be dismissible, accessible, and limited to the starter path. | First play shows no more than two instructional prompts; prompts do not block colouring after completion or dismissal; repeat users do not see the same guidance unnecessarily. |
| FEAT-ONB-007 | Founder’s note | MVP | A short founder message shown after first completion or a large-artwork milestone. | Builds trust at the moment value has already been experienced. | FEAT-PROG-003, FEAT-OPEN-001. | Copy and signature treatment are tracked as OD-10; must be dismissible. | Note appears after the first qualifying milestone; dismissal persists; it never appears before the aha moment. |
| FEAT-ONB-008 | Soft account prompt | MVP | Offers account creation for sync and persistence after first value. | Users understand why an account helps without being forced into sign-up before play. | FEAT-ID-002, FEAT-PROG-004. | Must be non-blocking; purchase still requires authenticated state. | Prompt appears after value is delivered; users can dismiss and keep playing; accepting opens the account upgrade flow. |
| FEAT-ONB-009 | Notification pre-permission | MVP | Explains the value of new-artwork notifications before the OS prompt. | Users can make an informed opt-in decision. | FEAT-NOT-001, FEAT-ONB-002, FEAT-OPEN-003. | OS prompt only fires after explicit in-app opt-in; copy is tracked as OD-12. | Sample notification references selected themes; decline path is clear; OS prompt is not triggered on decline. |
| FEAT-RET-001 | First-steps checklist | MVP | Library panel with first-session and early-retention tasks. | Gives returning users a simple path back into value. | FEAT-LIB-001, FEAT-PROG-003, FEAT-NOT-001, FEAT-IAP-001. | Must survive app restarts for the first three sessions unless dismissed. | Checklist tracks completed tasks; dismissal persists; tasks deep-link to relevant surfaces. |
| FEAT-LIB-001 | Library home | MVP | Browsable catalogue with featured, new, category, downloaded, in-progress, and completed groupings. | Users can find content quickly and resume work. | FEAT-DATA-002, FEAT-ID-001, FEAT-OBS-001. | Catalogue reads require an anonymous JWT and RLS-published rows only. | Published artworks render for anonymous users; continue/downloaded rows reflect local state; screen-reader labels include title, category, premium status, and progress. |
| FEAT-LIB-002 | Personalised ranking | MVP | Reorders or highlights artworks using cultural theme and audience preferences. | Users see relevant artwork without manual filtering. | FEAT-ONB-002, FEAT-ONB-003, FEAT-DATA-002. | Ranking must not expose draft or unpublished artwork; child mode must respect age/content filters. | Chosen themes affect featured rows; child audience filters age-inappropriate items; changing preferences updates future ranking. |
| FEAT-LIB-003 | Category and theme browsing | MVP | Lets users browse by category, cultural theme, difficulty, premium status, and availability. | Users can intentionally explore the catalogue. | FEAT-DATA-002, FEAT-CONT-001. | Filters must work against local and remote catalogue states. | Applying filters updates the visible list; empty states are helpful and recoverable; filters do not hide active in-progress work unexpectedly. |
| FEAT-LIB-004 | Downloaded artworks surface | MVP | Dedicated view or row for offline-ready artworks. | Users know what they can play without connectivity. | FEAT-DL-002, FEAT-CACHE-001, FEAT-NET-001. | Must be backed by local cache index, not only remote catalogue flags. | Downloaded items remain visible offline; broken cache entries are repaired or removed during reconciliation; opening a downloaded artwork does not require a network round-trip. |
| FEAT-ART-001 | Artwork detail | MVP | Detail page with title, preview, category, difficulty, estimated time, region count, premium badge, progress, and artist credit. | Users can decide what to play or buy before opening. | FEAT-LIB-001, FEAT-DATA-002, FEAT-DL-001, FEAT-IAP-001. | Detail must clearly separate free, owned premium, and locked premium states. | All required metadata renders; primary action changes between download, play, buy, or restore path; artist credit is present. |
| FEAT-ART-002 | Artist credit and cultural context | MVP | Displays artist attribution and relevant cultural context on artwork detail. | Representation feels intentional and credited. | FEAT-CONT-001, FEAT-CULT-001. | Context must be approved through cultural review before publication. | Artist credit appears for each artwork; approved cultural notes can be displayed; unapproved draft content is not visible to regular users. |
| FEAT-DL-001 | Artwork download request | MVP | Requests download URLs for free or entitled premium artwork. | Users can get artwork bundles on demand. | FEAT-DATA-002, FEAT-API-001, FEAT-IAP-003. | Premium downloads must be authorised server-side; signed URLs expire after 15 minutes. | Free artwork returns public URLs; premium owned artwork returns signed URLs; locked premium returns sign-in or paywall errors as specified. |
| FEAT-DL-002 | Bundle download and verification | MVP | Downloads manifest, region data, preview, thumbnail, and optional line art, then verifies checksum. | Users get reliable offline-ready content. | FEAT-DL-001, FEAT-CACHE-001, FEAT-DATA-003. | Downloads must be resumable; corrupt bundles must be discarded. | Successful download persists the bundle atomically; checksum mismatch retries once and then shows a recoverable error; completion is tracked. |
| FEAT-CACHE-001 | Local artwork cache | MVP | Stores downloaded bundles under app-support and maintains a current-version pointer. | Downloaded artwork survives restarts and works offline. | FEAT-DL-002, FEAT-DATA-003. | Cache may be removed by OS storage pressure; reconciliation must handle dangling pointers. | Cached artwork opens offline; temp files older than 24 hours are cleaned; invalid cache entries are removed or re-downloaded. |
| FEAT-CACHE-002 | Content version reconciliation | MVP | Detects newer artwork versions and maps progress where possible. | Users keep progress when content is updated safely. | FEAT-CACHE-001, FEAT-PROG-001, FEAT-DATA-003. | Region mapping can fail; old version may need to be kept until next launch. | Compatible updates preserve progress; incompatible updates prompt the user to continue old version or restart; failed updates do not corrupt local progress. |
| FEAT-CAN-001 | Custom colouring canvas | MVP | CustomPainter-based rendering surface for unfilled outlines, filled regions, labels, highlights, and feedback. | Users get the core colouring experience. | FEAT-DATA-003, FEAT-CACHE-001, FEAT-ACC-001. | One painter per canvas surface; do not create one widget per region; must meet Phase 0 budgets. | F-small, F-typical, and F-stress fixtures render; pan and zoom remain responsive; canvas respects accessibility settings. |
| FEAT-CAN-002 | Zoom and pan | MVP | Interactive navigation around the artwork surface. | Users can colour detailed regions comfortably. | FEAT-CAN-001. | Must maintain frame-time target during scripted pan/zoom on F-stress. | Users can zoom and pan smoothly; labels remain legible; no interaction is blocked by network state. |
| FEAT-CAN-003 | Tap-to-colour hit testing | MVP | Converts screen taps to canvas coordinates, finds candidate regions, and validates selected colour. | Colouring feels precise and satisfying. | FEAT-CAN-001, FEAT-PAL-001, FEAT-PROG-001. | Use spatial index plus precise path hit test; 32 x 32 grid is MVP default. | Correct taps fill the region; wrong taps show gentle feedback; F-stress tap latency and accuracy meet Phase 0 thresholds. |
| FEAT-CAN-004 | Region feedback | MVP | Visual and haptic response for correct and incorrect taps. | Users understand whether the interaction succeeded. | FEAT-CAN-003, FEAT-ACC-003. | Must be calm, brief, and reduce-motion aware. | Correct fill commits visually; incorrect tap pulses the correct palette swatch or area without harsh interruption; haptics can be disabled by OS setting. |
| FEAT-PAL-001 | Numbered palette | MVP | Ordered palette with numbered colours, display names, selected state, and remaining-count context. | Users can choose colours and understand what remains. | FEAT-DATA-003, FEAT-ACC-002, FEAT-CAN-003. | Palette must be accessible to screen readers and not rely on colour alone. | Swatches expose number, name, and remaining cells; selected state is clear; completed colours are dimmed and moved to the end. |
| FEAT-PAL-002 | Highlight remaining regions | MVP | Optional gentle highlight for unfilled cells matching the selected colour. | Helps users find small or scattered remaining regions. | FEAT-PAL-001, FEAT-CAN-001, FEAT-ACC-003. | Must be reduce-motion aware and avoid heavy animation. | Activating highlight marks matching unfilled regions briefly; it does not affect progress state; it is available from the canvas palette controls. |
| FEAT-PROG-001 | Local progress bitset | MVP | Stores completed regions, counts, percentage, last selected colour, and timestamps locally. | Users never lose colouring progress during normal play. | FEAT-CAN-003, FEAT-DATA-004. | Store completed regions as a bitset, not JSON; progress is monotonic. | Filling a region updates bitset, count, percentage, and last-played timestamp; progress reloads after app restart. |
| FEAT-PROG-002 | Opportunistic progress sync | MVP | Syncs local progress to backend and merges via bitset union. | Progress can follow the user across devices after account upgrade. | FEAT-ID-001, FEAT-ID-002, FEAT-API-002. | No colouring interaction may wait on sync; retry with exponential backoff. | Offline changes queue locally; server returns merged progress; sync failures are logged and recoverable. |
| FEAT-PROG-003 | Completion state | MVP | Detects completed artworks and records completion timestamp. | Users get closure and the app can trigger follow-on moments. | FEAT-PROG-001, FEAT-ONB-007, FEAT-RET-001. | Completion must be derived from bitset/count consistency. | Artwork marks complete at 100%; library and detail surfaces update; founder note and checklist can respond to completion. |
| FEAT-ID-001 | Anonymous identity | MVP | Creates an anonymous authenticated session and profile on first launch. | Users can browse, colour, and sync locally without sign-up friction. | FEAT-DATA-001, FEAT-API-001. | There is no signed-out catalogue surface; all reads use JWT and RLS. | First launch creates a profiles row with is_anonymous = true; anonymous users can browse, download free artworks, and save progress. |
| FEAT-ID-002 | Account upgrade | MVP | Promotes anonymous users to signed-in accounts or merges with existing accounts. | Users can keep progress across devices and purchases. | FEAT-ID-001, FEAT-PROG-002, FEAT-API-003. | Existing-account merge must union progress bitsets and remove orphan anonymous data. | New account promotion preserves auth.uid() when applicable; existing account sign-in merges progress; user returns to the prior task after completion. |
| FEAT-ID-003 | Sign-in providers | MVP | Email, Apple, and Google sign-in through InsForge Auth. | Users can choose familiar account methods. | FEAT-ID-002, FEAT-API-003. | Platform sign-in must meet App Store and Google Play requirements. | Supported providers complete successfully; failures show recoverable errors; tokens are stored securely. |
| FEAT-IAP-001 | Content pack catalogue | MVP | Displays content packs and artwork membership. | Users can understand the value of a pack before purchasing. | FEAT-DATA-005, FEAT-LIB-001, FEAT-ART-001. | Content packs are the only paid model at launch. | Pack cards list included artworks or theme; owned status is clear; subscription copy does not appear in MVP. |
| FEAT-IAP-002 | Paywall sheet | MVP | Presents pack purchase options when locked premium content is requested. | Users can unlock content at the moment of intent. | FEAT-IAP-001, FEAT-ID-002, FEAT-OBS-002. | Paywall belongs at premium download intent, not onboarding. | Locked premium tap opens paywall; anonymous users are prompted to sign in before purchase; restore action is available. |
| FEAT-IAP-003 | Native purchase flow | MVP | Executes Apple StoreKit 2 or Google Billing purchase for packs. | Users can buy premium content through trusted platform flows. | FEAT-IAP-002, FEAT-API-004, FEAT-ID-002. | Receipt validation is exclusively server-side; client never grants entitlement by itself. | Purchase start, success, failure, and cancellation are handled; receipt is sent to backend; UI reflects entitlement after validation. |
| FEAT-IAP-004 | Restore purchases | MVP | Restores existing platform purchases and reconciles entitlements. | Users recover purchases on new devices or reinstalls. | FEAT-IAP-003, FEAT-API-004, FEAT-ID-002. | Anonymous users cannot restore until signed in. | Restore path is available from paywall and settings; successful restore unlocks covered artwork; failed restore explains next action. |
| FEAT-SET-001 | Settings home | MVP | Central settings for account, accessibility, preferences, notifications, restore purchases, and support/reporting links. | Users can manage the app without hunting through surfaces. | FEAT-ID-001, FEAT-ACC-001, FEAT-NOT-001, FEAT-IAP-004. | Child mode must gate external links and purchase-sensitive actions where required. | Settings reflect current profile state; changes persist; inaccessible or restricted actions explain why. |
| FEAT-SET-002 | Accessibility settings | MVP | Lets users update always-show-numbers, pattern fills, and reduce-motion behaviour. | Users can tune the canvas to their needs after onboarding. | FEAT-ACC-001, FEAT-ACC-002, FEAT-ACC-003. | Canvas must apply changes without corrupting progress. | Changing each setting updates the next canvas render; settings persist across app restarts. |
| FEAT-SET-003 | Child mode setting | MVP | Lets users review or change child-mode state and audience preference. | Parents can correct onboarding choices. | FEAT-ONB-003, FEAT-OBS-003. | Behavioural analytics policy must update immediately when child mode changes. | Enabling child mode strips behavioural analytics identifiers; disabling it resumes normal analytics only after explicit setting change. |
| FEAT-NOT-001 | New-artwork notifications | MVP | Opt-in push notifications for new artworks in selected themes. | Users can return when relevant new content arrives. | FEAT-ONB-009, FEAT-DATA-001, platform push services. | Strictly opt-in; OS prompt only follows pre-permission screen. | Users can opt in or out; notifications reference selected themes where possible; disabled permission state is handled gracefully. |
| FEAT-ACC-001 | Always-show numbers | MVP | Region number labels are visible and legible at every zoom level. | Users who cannot rely on colour can still play. | FEAT-CAN-001, FEAT-DATA-003. | Numbers cannot be hidden by canvas zoom; halo contrast is required. | Every region with a label point shows a readable number; labels remain readable during zoom; setting defaults on. |
| FEAT-ACC-002 | Screen-reader semantics | MVP | Exposes palette, library, detail, and canvas completion information to assistive technologies. | Screen-reader users can understand state and available actions. | FEAT-LIB-001, FEAT-ART-001, FEAT-PAL-001, FEAT-CAN-001. | Canvas semantics must avoid overwhelming region-by-region noise. | Palette swatches announce number, name, and remaining cells; library cards announce title/category/premium/progress; canvas exposes region count and completion percentage. |
| FEAT-ACC-003 | Motion, contrast, and tap accessibility | MVP | Reduce-motion support, pattern fills, colour-blind validation, and snap-to-nearest small region. | Users with varied sensory and motor needs can play reliably. | FEAT-CAN-001, FEAT-CONT-003, FEAT-SET-002. | Validator flags tiny regions and palette issues; snap radius is 16 px for small regions. | Pattern fills can be enabled; reduce motion replaces animation with instant transitions; tiny-region taps are forgiving; palette passes colour-vision simulations or requires sign-off. |
| FEAT-CONT-001 | Curated artwork library | MVP | Launch library of approximately 25 culturally reviewed artworks. | Users get enough high-quality content to evaluate and return. | FEAT-CULT-001, FEAT-ART-002, FEAT-CONT-002. | Cultural review is a publish gate; no user-generated content in MVP. | Launch-ready artworks have metadata, preview, thumbnail, bundles, artist credit, and approved cultural review. |
| FEAT-CONT-002 | Artwork publishing pipeline | MVP | Internal workflow from concept to authoring, segmentation, validation, review, upload, preview, and publish. | The team can ship new content without manual database surgery. | FEAT-CONT-003, FEAT-CULT-001, FEAT-ADMIN-001. | Full admin dashboard is out of MVP; tooling-only flow is acceptable. | Valid artwork can be uploaded and previewed internally; approved content can be published; rejected content returns notes to the artist. |
| FEAT-CONT-003 | Bundle validator | MVP | Validates path closure, indices, palette references, tap-target flags, assets, manifest version, and colour-vision simulations. | Reduces broken artwork and inaccessible content before users see it. | FEAT-DATA-003, FEAT-ACC-003, FEAT-CONT-002. | Errors block publish; warnings require explicit sign-off. | Invalid bundles are rejected with actionable errors; warnings are recorded; published bundles have required files and metadata. |
| FEAT-CULT-001 | Cultural review workflow | MVP | Named cultural reviewer reviews artwork and metadata before publication. | Protects representation quality and cultural trust. | FEAT-CONT-001, FEAT-CONT-002, FEAT-DATA-006. | Review status must gate publish; reviewer/admin access controlled by roles. | Artwork cannot publish without approved status; reviewer notes are stored; changes-requested state returns content to production. |
| FEAT-ADMIN-001 | Admin upload tooling | MVP | Tooling for metadata creation, upload URL generation, draft updates, preview, publish, and unpublish. | Operators can manage content safely for launch. | FEAT-API-005, FEAT-CONT-002, FEAT-CULT-001. | Admin endpoints require admin role; service-role keys never reach clients. | Admin can create draft, upload assets, request review, publish approved artwork, and unpublish when needed. |
| FEAT-OBS-001 | Product analytics taxonomy | MVP | Tracks a small set of events for opening, browsing, downloading, colouring, completion, paywall, purchase, and sync failure. | The team can evaluate activation, reliability, and monetisation without blanket tracking. | FEAT-LIB-001, FEAT-DL-002, FEAT-CAN-003, FEAT-IAP-002. | Child mode disables behavioural analytics; EU-region/self-hostable PostHog preferred. | Events match the initial taxonomy; child-mode users only emit allowed events; event properties avoid sensitive content. |
| FEAT-OBS-002 | Purchase and paywall analytics | MVP | Tracks paywall views, purchase starts, successes, and failures. | Product can understand pack conversion and failure points. | FEAT-IAP-002, FEAT-IAP-003. | Must not duplicate store receipt data into analytics. | Paywall and purchase events fire once per action; failure reasons are coarse and non-sensitive. |
| FEAT-OBS-003 | Crash and performance monitoring | MVP | Sentry crash reporting, performance traces, and custom canvas timers. | Engineering can catch regressions before rollout expands. | FEAT-CAN-001, FEAT-DL-002, FEAT-PROG-002. | Child mode may send crash signals but strips user identifiers. | Crash-free sessions are visible; canvas timers report key budgets; backend function errors are logged. |
| FEAT-NET-001 | Offline and retry handling | MVP | Handles offline browsing of cached content, download failures, and sync retries. | Users can keep colouring calmly through poor connectivity. | FEAT-CACHE-001, FEAT-PROG-002, FEAT-DL-002. | Colouring interactions never depend on network round-trips. | Offline downloaded artwork opens; failed downloads can retry; sync queue backs off and recovers. |
| FEAT-REL-001 | CI/CD and release gates | MVP | Build, test, release, Sentry, analytics, accessibility, and store-compliance gates. | Reduces release risk and makes quality measurable. | FEAT-OBS-003, FEAT-ACC-003, FEAT-CAN-001. | Phase 0 pass is required before full production implementation. | Release build can be produced; Phase 0 metrics recorded; accessibility and compliance checks are completed before store submission. |
| FEAT-DEEP-001 | Native deep links | Post-v1 candidate | Native universal links and app links for artwork, pack, or notification entry points. | Users can land directly on relevant content. | FEAT-LIB-001, FEAT-ART-001, FEAT-NOT-001. | Attribution providers are deferred; native links preferred. | Supported links route to the correct surface; missing or locked content recovers to detail/paywall; invalid links land on library. |
| FEAT-ADS-001 | Ad-supported free tier | Roadmap candidate | Optional ad-funded access model. | Could widen access without immediate purchase. | FEAT-OBS-001, FEAT-SET-003, ad-network compliance. | Open decision OD-01 recommends omitting at launch; child mode cannot load behavioural ads. | No implementation before first-cohort retention data; any later version must obey child-mode privacy policy. |
| FEAT-SUB-001 | Subscription tier | Roadmap candidate | Recurring access to premium content. | Could support heavier content investment after pack demand is proven. | FEAT-IAP-003, FEAT-IAP-004, FEAT-DATA-005. | OD-02 resolved subscription out of MVP; store notification handling needed. | No subscription appears in MVP UI; future subscription must not break pack entitlements. |
| FEAT-UGC-001 | User-generated content | Roadmap candidate | Users submit or create artwork. | Could increase content volume and community value. | FEAT-CULT-001, moderation, reporting, storage quotas. | Explicitly out of MVP; must follow the same review pipeline as commissioned work. | No public UGC in MVP; future UGC cannot bypass review or safety controls. |
| FEAT-ACH-001 | Achievements | Roadmap candidate | Badges, streaks, or advanced completion goals. | May increase retention for motivated users. | FEAT-PROG-003, FEAT-OBS-001. | Must not make the product feel noisy or overly game-like. | MVP only supports lightweight first-steps checklist; any future achievement system remains optional and calm. |
| FEAT-SOC-001 | Social and sharing | Roadmap candidate | Sharing completed artwork or social profile mechanics. | Could support organic discovery. | FEAT-PROG-003, privacy review, content rights. | Public profiles are out of MVP; child-mode sharing needs strict controls. | No social graph in MVP; future sharing must respect child mode and artist rights. |
| FEAT-CHILD-001 | Advanced child profiles | Roadmap candidate | Multiple child profiles, parental controls, and age-specific libraries. | Families could manage distinct children and preferences. | FEAT-SET-003, legal review, profile model changes. | Explicitly out of MVP; current MVP uses child-mode flag only. | No multi-child management in MVP; future design requires privacy and compliance review. |
| FEAT-AUDIO-001 | Audio narration | Roadmap candidate | Audio guidance, story narration, or cultural context narration. | Could deepen educational value and accessibility. | FEAT-ART-002, media storage, accessibility review. | Out of MVP; must not affect canvas performance budgets. | No audio surface in MVP; future audio must be downloadable or gracefully streamable. |
| FEAT-AI-001 | AI artwork generation | Roadmap candidate | AI-assisted or generated artwork. | Could increase content production speed. | Legal review, cultural review, content pipeline changes. | Explicitly out of MVP; cultural authenticity risk is high. | No AI-generated launch content unless approved by a future policy and review process. |
| FEAT-MERCH-001 | Merchandise | Roadmap candidate | Physical or digital merchandise tied to completed artwork. | Could create additional revenue paths. | Commerce platform, fulfilment, rights clearance. | Out of MVP and unrelated to the initial canvas risk. | No merchandise flows in MVP; future commerce must be separated from colouring performance-critical paths. |
Supporting infrastructure dependencies
The MVP catalogue above references additional FEAT-* IDs in its “Depends on” column that do not have standalone rows in the feature table because they are implementation primitives specified in the stack specification rather than user-facing product surfaces. They are nonetheless part of v1 scope and bind the v1 freeze packet by reference. Each ID below points at the spec section that defines its behaviour and acceptance criteria. Treat these as MVP-lane work.
| ID | Concern | Defined in |
|---|---|---|
| FEAT-DATA-001 | profiles data model — anonymous identity, child mode, cultural themes, accessibility defaults | /spec/06-data-model/, /spec/07-data-layer/ §7.8 |
| FEAT-DATA-002 | Catalogue data model — artworks, categories, cultural_themes, pack_artworks | /spec/06-data-model/ |
| FEAT-DATA-003 | Artwork bundle data model — manifest, regions, palettes, label points, version | /spec/06-data-model/ §6.2 (CLRX v1) |
| FEAT-DATA-004 | Progress data model — user_artwork_progress.completed_regions bitset, timestamps | /spec/07-data-layer/ §7.4 |
| FEAT-DATA-005 | Entitlements data model — packs, entitlements, receipts, Family Sharing propagation | /spec/07-data-layer/ §7.5 |
| FEAT-DATA-006 | Editorial data model — artists, moderation_reviews, cultural review status | /spec/07-data-layer/ §7.7 |
| FEAT-API-001 | Catalogue read APIs — PostgREST-style endpoints with RLS-published rows only | /spec/08-api/ |
| FEAT-API-002 | Progress sync API — bitset union merge | /spec/08-api/, /spec/07-data-layer/ §7.4 |
| FEAT-API-003 | Auth and profile APIs — anonymous session, account promotion, sign-in providers | /spec/08-api/, /spec/07-data-layer/ §7.8 |
| FEAT-API-004 | Purchase validation API — Apple ASSN v2 / Google Play Developer API | /spec/08-api/, /spec/04-features/ §4.7 |
| FEAT-API-005 | Admin APIs — upload URL generation, draft/publish/unpublish, review state | /spec/08-api/ |
| FEAT-PROG-004 | Soft account-prompt trigger — fires after first satisfying fill or completion | /spec/09-user-flows/ §9.7 (screen 10) |
| FEAT-OPEN-001 | Founder’s note copy resolution (tracks OD-10) | /spec/20-open/ OD-10 |
| FEAT-OPEN-003 | Pre-permission notification copy resolution (tracks OD-12) | /spec/20-open/ OD-12 |
Counted as 14 supporting-infrastructure records alongside the 53 user-facing catalogue rows above. The freeze packet binds both sets.
Feature dependency map
flowchart TD
ID["FEAT-ID-001 Anonymous identity"] --> LIB["FEAT-LIB-001 Library home"]
ID --> ONB["FEAT-ONB-002/003/004 Onboarding preferences"]
ONB --> RANK["FEAT-LIB-002 Personalised ranking"]
LIB --> ART["FEAT-ART-001 Artwork detail"]
ART --> DL["FEAT-DL-001 Download request"]
DL --> CACHE["FEAT-CACHE-001 Local cache"]
CACHE --> CAN["FEAT-CAN-001 Custom canvas"]
CAN --> PAL["FEAT-PAL-001 Numbered palette"]
PAL --> HIT["FEAT-CAN-003 Tap-to-colour"]
HIT --> PROG["FEAT-PROG-001 Local progress bitset"]
PROG --> SYNC["FEAT-PROG-002 Progress sync"]
ART --> PAY["FEAT-IAP-002 Paywall sheet"]
PAY --> BUY["FEAT-IAP-003 Native purchase"]
BUY --> ENT["FEAT-IAP-004 Restore / entitlement reconciliation"]
ENT --> DL
CONT["FEAT-CONT-002 Publishing pipeline"] --> VAL["FEAT-CONT-003 Bundle validator"]
VAL --> CULT["FEAT-CULT-001 Cultural review"]
CULT --> LIB
Technical constraint register
| Constraint ID | Applies to | Constraint | Source |
|---|---|---|---|
| TC-001 | Canvas, palette, progress | The canvas uses a single CustomPainter; region-per-widget rendering is rejected. | Engineering considerations |
| TC-002 | Canvas, downloads, cache | Phase 0 performance budgets must pass on the same release build before production implementation advances. | Development phases |
| TC-003 | Progress | Completed regions are stored as a bitset; JSON storage is rejected. | Data layer & RLS |
| TC-004 | Identity, catalogue | Every install has an anonymous authenticated session; there is no signed-out catalogue. | Data layer & RLS |
| TC-005 | Premium content | Client never grants premium access; entitlement and receipt validation are server-side. | API & function surface |
| TC-006 | Downloads | Premium bundles use signed URLs with 15-minute expiry; resumed downloads request fresh URLs. | API & function surface |
| TC-007 | Accessibility | Numbers remain visible at every zoom level; colour alone cannot be the only signal. | Accessibility |
| TC-008 | Child mode | Behavioural analytics are disabled in child mode except app_opened and crash signals. | Observability & analytics |
| TC-009 | Content | Cultural review gates publication; review is process infrastructure, not marketing copy. | Cultural authenticity |
| TC-010 | Monetisation | MVP has content packs only; subscription, rewarded ads, and behavioural advertising are omitted. | Core features |
V1 reduction summary
The MVP should include the anonymous-first onboarding, personalised library, artwork detail, download/cache, custom canvas, palette, progress, accessibility baseline, content packs, restore purchases, content pipeline, cultural review, observability, and release gates. The following remain candidate features after v1 reduction: ads, subscriptions, user-generated content, complex achievements, social, advanced child profiles, audio narration, AI artwork generation, merchandise, and a full admin dashboard.