The Idea β’ The Living Book β’ The Daily Loop β’ Little Wins β’ Memory Walk β’ AWS Architecture β’ Engineering β’ Verification β’ Quickstart
MIMORY turns what you do, what you achieve, and what you remember into a little world you can revisit.
The Problem β’ The Living World β’ Product Transformation β’ Real Experience β’ The Emotional Loop β’ Memory Walk β’ System Architecture β’ RevenueCat Monetization β’ Verification β’ Quickstart
We regularly keep memories of the people who matter to us.
Photos. Trips. Birthdays. Inside jokes. Messages. Small everyday moments.
Yet those memories usually end up scattered across camera rolls, endless chat histories, and forgotten folders.
And relationships naturally have quiet moments:
- Life gets busy.
- People move away.
- Communication slows down.
- Sometimes there is a small misunderstanding.
In those moments, it is easy to focus entirely on what is happening right now and temporarily forget the much larger story that came before it.
MIMORY is built around a simple thought:
MIMORY does not judge the relationship.
MIMORY does not diagnose conflict.
MIMORY does not calculate relationship health.
MIMORY simply remembers with you.
When a world becomes quiet, MIMORY can gently surface a meaningful memory from the past:
"Your world has been a little quiet. Here's a little moment worth remembering. β‘"
The intention is not to pressure anyone. It is simply to remember the good that already exists.
Instead of leaving memories trapped inside flat chronological lists, MIMORY gives each meaningful relationship its own dedicated, living world:
Camera Roll βββ Living Storybook World
Photo βββ Heartfelt Story Keepsake
Memory βββ Interactive Physical Landmark
Relationship βββ Dedicated World (Partner, Best Friend, Family)
Timeline βββ Scenic Journey You Can Walk Through
When you create a world for someone important, you design customizable chibi avatars and choose an evocative storybook aesthetic (Cozy Town, Starlit Forest, Blooming Meadow, or Sunlit Valley).
As you add milestones and everyday moments, they take root as interactive physical landmarks along cobblestone walking paths.
MIMORY transforms scattered digital files into a spatial, living sanctuary you can walk through together:
01. CAMERA ROLL βββ Photos and messages scattered across endless folders
02. MEMORY βββ A meaningful moment chosen with intention and care
03. KEEPSAKE βββ Preserved with photo, story vignette, and exact calendar date
04. LANDMARK βββ Planted as an interactive physical anchor along walking paths
05. LIVING WORLD βββ Atmospheric time of day, changing weather, and wildlife bloom
06. MEMORY WALK βββ A shared 2.5D journey walked together holding hands
MIMORY guides you through five cohesive stages of relationship memory keeping:
Create separate, personal worlds for each relationship (Partner, Best Friend, Family). Design customizable chibi avatars with individualized hairstyles, hair colors, skin tones, and outfits that represent you and your person.
Welcome βββ Choose Relationship βββ Customize Avatars βββ Select Storybook Theme
Preserve milestones as photo keepsakes or written story vignettes. Photos are captured and persisted in app-controlled local sandbox storage (/mimory_photos/), surviving device restarts and operating system updates.
Add Memory βββ Attach Photo βββ Write Milestone Note βββ Set Date βββ Save Keepsake
Stroll through your world using a responsive 360Β° virtual joystick. Cobblestone paths wind past scenic landmarks, directional signposts point toward past milestones, and companion characters walk side-by-side with toggleable hand-holding.
Enter World βββ Virtual Joystick βββ Follow Path βββ Hold Hands βββ Share Umbrella
As you approach memory landmarks in the world, they illuminate with subtle proximity glows (< 45px). Tapping any landmark smoothly opens its keepsake sheet with the original photo, personal story, and calendar date. When a world has been quiet, MIMORY gently surfaces an older memory to restore perspective.
Approach Landmark βββ Proximity Glow βββ Open Keepsake Sheet βββ Relive the Moment
Subscribing to MIMORY+ unlocks unlimited relationship worlds, dynamic living weather conditions (soothing rain, winter snowfall, starry night sky), and storybook garden companions (rabbit companions and paired wildlife).
MIMORY+ Paywall βββ RevenueCat Purchase βββ Verified Entitlement βββ "World Just Grew"
MIMORY's main interface isn't a dashboard.
It's a book.
A book that changes as you live.
You open it and move through the different parts of your story:
TODAY
β
GOALS
β
LITTLE WINS
β
MOMENTS
β
CHAPTERS
β
MY WORLD
<br/>
---
## The Emotional Loop
MIMORY's emotional loop is designed to protect perspective during quiet seasons without pressure, judgment, or surveillance:
<br/>
<div align="center">
<img src="assets/docs/emotional_loop.svg" alt="The Emotional Loop of MIMORY" width="100%"/>
</div>
<br/>
A meaningful moment β saved in MIMORY β becomes part of the world β life continues β the world becomes quiet β MIMORY gently resurfaces an older memory β the bigger story comes back β remember what matters
MIMORY does not claim to fix relationships or enforce communication. It simply preserves what you have built together, so that in quiet times, the warmth of the bigger story is never lost.
---
## Signature Experience: Memory Walk
Instead of scrolling through your memories, **Memory Walk** lets you walk through them.
Memories become physical landmarks along scenic paths. Direction signposts point the way toward milestones, and both characters explore in real timeβsharing an umbrella when it rains, wearing warm scarves in winter snow, or holding hands along the journey.
<br/>
<div align="center">
<img src="assets/docs/memory_walk_diagram.svg" alt="Memory Walk Spatial Engine" width="100%"/>
</div>
<br/>
### Under the Hood: Spatial Projection & Math
Memory Walk uses a custom programmatic canvas renderer built on Flutter's `CustomPainter`, designed for smooth mobile canvas rendering without heavy 3D asset bundles:
1. **3D Perspective Camera (`Camera3D`)**: Mathematically projects 3D world coordinates `(x, y, z)` into screen coordinates `(dx, dy)` using focal length (`500.0`) and pitch angles (`0.35 rad`), applying painter's algorithm depth sorting and distance scaling:
$$\text{scale} = \frac{\text{focalLength}}{y_{\text{camera}} + \text{focalLength}}$$
2. **Smooth Follow with Soft Dead-Zone**: A cinematic camera dead-zone (`dx: 20`, `dy: 25`) absorbs small joystick micro-movements, preventing camera jitter while smoothly tracking characters via damped lag interpolation (`lagT = 0.15`).
3. **Synchronized Paired Controller**: Custom character models synchronize leg swing cycles, direction facing, shared umbrella holding during rain, and hand-holding positions based on 360Β° virtual joystick input.
---
## System Architecture
MIMORY is engineered as a local-first, modular Flutter application with strict domain separation, reactive service orchestration, and verified entitlement monetization:
<br/>
<div align="center">
<img src="assets/docs/system_architecture.svg" alt="MIMORY System Architecture" width="100%"/>
</div>
<br/>
### Architectural Layers
- **Presentation & Feature Modules (`lib/features/`)**: Self-contained feature packages (`auth`, `world`, `memory`, `monetization`) managing screen lifecycles, user inputs, and navigation without coupling to data storage mechanisms.
- **Domain State Singletons (`lib/services/`)**: `WorldService` orchestrates active user session, world management, and 1:N memory relations. `RevenueCatService` evaluates verified entitlement streams.
- **Local-First Core & Media Sandbox (`StorageService`)**: `SharedPreferences` serializes structured JSON worlds and memories, while `path_provider` sandboxes high-resolution photos in `/mimory_photos/`, eliminating mandatory cloud dependencies.
- **Monetization Infrastructure (`purchases_flutter`)**: Official RevenueCat Flutter SDK handles offerings delivery, receipt verification, and entitlement evaluation.
### AWS Cloud Architecture (Phase 4 Integration)
While MIMORY operates locally, it is architected for seamless future integration with Amazon Web Services. The data layer will synchronize transparently with AWS when connected.
```text
Flutter App
β
Amazon Cognito (Auth & Identity)
β
Amazon API Gateway
β
AWS Lambda (Serverless Compute)
β
βββ Amazon DynamoDB
β βββ Users
β βββ Worlds
β βββ Moments
β βββ Goals
β βββ Achievements
β βββ Chapters
β
βββ Amazon S3
β βββ Photos
β βββ Videos
β βββ Audio
β
βββ Amazon Bedrock
βββ Memory Echo (Generative AI Pattern Discovery)
MIMORY integrates the official RevenueCat Flutter SDK (purchases_flutter: ^10.12.0) to power the MIMORY+ premium experience for the RevenueCat Shipaton:
- Entitlement-Driven Access: Premium status is strictly evaluated via RevenueCat's verified
CustomerInfo.entitlements['mimory_plus'].isActive. Premium access is controlled by entitlement state, not a local boolean. - Truthful Capability Model (
MimoryPlusCapability): Paywalls and celebration screens dynamically queryMimoryPlusCapability.unlockedForPlus, presenting only genuinely implemented capabilities (implemented == true). - Reactive State Propagation:
RevenueCatServiceextendsChangeNotifier, broadcasting instant entitlement updates across the UI upon purchase or restore. - Sandbox & Test Store Ready: Fully configured for instant sandbox and Test Store evaluation without requiring live App Store or Google Play merchant accounts.
- What we did: All worlds, memories, and photos persist locally on device via
SharedPreferencesand sandboxed document storage. - Why we did it: Memories are deeply personal. The core experience does not require a cloud backend or account creation to create worlds, save memories, or revisit them.
- What we did: Every memory is bound to a persistent
worldIdusing deterministic UUIDv4 identifiers. - Why we did it: Guarantees that memories never leak between separate relationships (Partner, Best Friend, Family), maintaining absolute privacy and data integrity.
- What we did: Built a lightweight 2.5D perspective engine using Flutter's native
CustomPainterand mathematical vector projection. - Why we did it: Designed for smooth mobile canvas rendering on iOS and Android without the overhead, download size, and battery drain of heavy 3D game engines.
- What we did: Services expose clean async interfaces (
createWorld,purchasePackage,persistPhoto) and emit reactive notifications viaChangeNotifier. - Why we did it: Keeps UI widgets completely decoupled from storage mechanisms, SDK implementation details, and network lifecycles.
MIMORY enforces a clean, deterministic relational model between worlds, memories, and customized characters:
βββββββββββββββββββββββββββββββββββββ
β World β
βββββββββββββββββββββββββββββββββββββ€
β id: String (UUID) β
β name: String β
β relationshipType: String β (Partner | Best Friend | Family)
β personName: String β
β nickname: String? β
β userAvatarId: String β
β companionAvatarId: String β
β worldStyle: String β (Cozy Town | Forest | Meadow | Valley)
β createdAt: DateTime β
βββββββββββββββββββ¬ββββββββββββββββββ
β
β 1 : N (via worldId)
βΌ
βββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββββ
β Memory β β Character β
βββββββββββββββββββββββββββββββββββββ€ βββββββββββββββββββββββββββββββββββββ€
β id: String (UUID) β β id: String β
β worldId: String βββββββββ€ worldId: String β
β type: MemoryType (photo | story) β β personName: String β
β title: String β β hairStyle: String β
β description: String β β hairColor: Color β
β imagePath: String? β β skinTone: Color β
β memoryDate: DateTime β β outfitColor: Color β
β createdAt: DateTime β β isCurrentUser: bool β
βββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββββ
| Layer | Technology | Architectural Rationale |
|---|---|---|
| Framework | Flutter 3.x / Dart SDK | Cross-platform codebase designed for smooth mobile canvas rendering on iOS and Android. |
| Monetization | RevenueCat (purchases_flutter: ^10.12.0) |
Verified entitlement evaluation, offerings delivery, and cross-platform purchase handling. |
| Local Persistence | shared_preferences: ^2.5.5 |
Fast, lightweight local key-value persistence for structured JSON worlds, memories, and sessions. |
| Document Storage | path_provider: ^2.1.6 |
App-controlled sandboxed document directory for persistent keepsake photo storage. |
| Typography | google_fonts: ^6.2.1 |
Curated storybook typography pairing Playfair Display headings with Plus Jakarta Sans body copy. |
| Media Capture | image_picker: ^1.0.7 |
Native gallery image selection with safe sandbox persistence. |
| Identity | uuid: ^4.3.3 |
Cryptographically secure UUIDv4 generation for deterministic entity relationships. |
lib/
βββ core/
β βββ theme/ # Storybook typography, color palettes, elevation tokens
β βββ widgets/ # Tactile buttons, text fields, cards, branding icons
βββ features/
β βββ auth/ # Welcome screen, mock session persistence
β βββ memory/ # Keepsake creation wizard, photo picker, detail sheet
β βββ monetization/ # MIMORY+ paywall, celebration screen, capability cards
β βββ world/ # World creation wizard, avatar selector, world overview
βββ models/
β βββ avatar_definition.dart # Preset chibi avatar profiles and palettes
β βββ character.dart # Living character state (hair, skin, outfit)
β βββ memory.dart # Photo and story keepsake data models
β βββ mimory_plus_capability.dart# Truthful monetization capability catalog
β βββ user_session.dart # Local session and authentication identity
β βββ world.dart # World metadata, style, and companion bindings
β βββ world_environment_config.dart # Atmospheric lighting, time, season tokens
β βββ world_point.dart # 3D spatial vector and distance math
βββ services/
β βββ revenue_cat_config.dart # SDK configuration and entitlement identifiers
β βββ revenue_cat_service.dart # Purchases SDK singleton & entitlement stream
β βββ storage_service.dart # SharedPreferences and document directory storage
β βββ world_service.dart # Core application state manager
βββ widgets/
β βββ anime_character_widget.dart# CustomPainter storybook character renderer
β βββ couple_character_pair_widget.dart # Paired couple walking & hand holding
β βββ memory_walk/ # 3D perspective terrain, camera, landmarks, animals
βββ main.dart # Application bootstrap & service initialization
MIMORY maintains an automated test suite verifying data persistence, memory boundary isolation, 3D camera projection, atmospheric weather algorithms, and RevenueCat integration:
test/
βββ product_functionality_test.dart # World/memory persistence, session isolation, routing (8 tests)
βββ living_world_test.dart # Time-of-day/season algorithms, ambient weather layers (12 tests)
βββ stable_memory_walk_test.dart # Memory Walk joystick, hand holding, signboard constraints (3 tests)
βββ third_person_world_test.dart # Camera3D perspective math, deadzone follow, depth sorting (8 tests)
βββ revenue_cat_service_test.dart # Entitlement matching, singleton consistency, capability truthfulness (5 tests)
βββ widget_test.dart # App bootstrap and smoke test (1 test)
$ flutter analyze
Analyzing mimory...
No issues found! (ran in 13.4s)
$ flutter test
β test/living_world_test.dart: All 12 tests passed!
β test/product_functionality_test.dart: All 8 tests passed!
β test/revenue_cat_service_test.dart: All 5 tests passed!
β test/third_person_world_test.dart: All 8 tests passed!
β test/stable_memory_walk_test.dart: All 3 tests passed!
β test/widget_test.dart: All 1 tests passed!
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 37 / 37 tests passed
- Persistence & Isolation: Confirms that memories and worlds are saved with stable identifiers and never cross-contaminate separate relationships.
- Memory Walk Spatial Engine: Validates Camera3D coordinate projection, dead-zone lag interpolation, signboard constraints, and hand-holding toggles.
- Living Atmosphere: Validates atmospheric lighting, weather particle layer rendering (rain and snow), and shared accessory logic.
- RevenueCat Integration: Validates entitlement matching for
mimory_plus, singleton consistency, and that only genuinely implemented capabilities appear in the paywall.
To ensure complete transparency and trustworthiness, here is the verified status of each capability in the repository:
| Capability / Component | Implementation Status | Notes |
|---|---|---|
| Flutter Mobile App | β Implemented | Built with Flutter 3.x & Dart |
| World Creation & Avatars | β Implemented | 4 world styles, customizable avatar pairs |
| Keepsake Memory Storage | β Implemented | Photos & written stories with persistent local storage |
| Interactive Memory Walk | β Implemented | 2.5D perspective terrain, virtual joystick, paired couple walk |
| Living Atmosphere | β Implemented | Time cycles, rain with shared umbrella, winter snow, fireflies |
| RevenueCat MIMORY+ Flow | β Implemented | Monthly, Yearly, Lifetime packages & verified entitlement checks |
| RevenueCat Test Store | β Configured | Ready for sandbox evaluation |
| Cloud Synchronization | β Planned | Current architecture is local-first |
| Audio Memory Echoes | β Planned | Roadmap capability explicitly tagged in capability model |
- Flutter SDK (matching Dart SDK
^3.13.3) - Android Studio / Xcode (for device deployment or simulators)
# 1. Clone the repository
git clone https://github.com/Noufalthecoder/mimory.git
cd mimory
# 2. Install dependencies
flutter pub get
# 3. Run automated tests to verify your environment
flutter test
# 4. Launch the application
flutter runMIMORY is ready out-of-the-box for evaluation with RevenueCat.
- Launch MIMORY on a physical device or emulator.
- Tap the MIMORY+ button in the header or world screen.
- Select any offering (Monthly, Yearly, or Lifetime).
- Complete the transaction using RevenueCat's sandbox/test sheet.
- The application immediately evaluates the verified
mimory_plusentitlement and transitions into the "Your little world just grew. β‘" celebration screen.
- Create a project at app.revenuecat.com.
- Create an Entitlement with identifier
mimory_plus. - Set up your products and attach them to a default offering.
- Add your public SDK keys in
lib/services/revenue_cat_config.dart.
- Local-First Storage: MIMORY is currently local-first. All world details, memory photos, notes, and avatars are stored locally on your device.
- Media Sandbox: Photos are saved in the app-controlled local document directory, isolated from external app access.
- No Third-Party Ad Trackers: Photos and personal stories are not shared with advertising networks.
- Secure Purchases: Subscription receipts and customer info are validated securely through RevenueCat and official platform payment channels.
This project is created for evaluation and personal memory keeping. All rights reserved.