MIRROR Life
Korean-founded AI self-reflection SaaS featuring guided interviews, user-reviewed AI hypotheses, personalized exercises, and…
- Revenue
- $0
- Stage
- MVP
- Since
- 2026
Living nature soundscapes in the browser. Rain, ocean, wind, a creek, birdsong, thunder, crickets, a fire, a waterfall, rain on a tent, night frogs, wind chimes and binaural tones are synthesised in real time with the Web Audio API, placed around the listener in 3D.
The business
Terra Studio is a production-ready relaxation and focus platform sold as a single codebase that produces both a web application and an Android application. It is not a medical product (see `INTENDED-PURPOSE.md`). It synthesises living nature soundscapes in real time in the listener's browser using the Web Audio API, places them in 3D around the listener, and pairs them with a reactive water surface that ripples with the sound. It includes a private end-to-end encrypted journal, 18 visual themes, a full monetisation tier system, and a compliance pipeline covering WCAG 2.2 AA, OWASP Top 10, hearing safety, and flash sensitivity.
---
The Three Plans
Seedling (no account) gives access to the Playground at `/play`, where listeners can play three scenes using rain, ocean, and binaural tones (three standard carrier tones, beats up to 13 Hz). They can move sounds around them in 3D, and sessions fade out after 15 minutes. There is no account, no journal, no presets, and no history.
Grove (free account) unlocks every standard scene (11 total), adds wind, creek, and birdsong to the sound library, and introduces per-sound volume, warmth, and placement control. The sleep timer extends to 30 minutes with fade options of 30 seconds or 2 minutes. Listeners get the Wake Gently feature, up to 3 presets, listening history with notes, one private journal (10 entries of up to 1,000 words each), offline journal writing, and 8 themes (Moss, Spring, Summer, Night Rain, Moonlit, Autumn, Winter, Deep Forest, Storm). Any Grove account can also buy Canopy as a gift.
Canopy (paid) unlocks all 18 scenes and the full sound library (adding thunder, dawn chorus, crickets, hearth, waterfall, rain on a tent, night frogs, and wind chimes). Sound shaping is extended with height control and slow drifting paths (circle, figure eight, wander). Binaural tones support custom carrier tones and beats up to 30 Hz. The sleep timer runs up to 8 hours with fades up to 10 minutes. Presets are unlimited, with revocable share links. The journal expands to 10 journals, 10,000 entries of up to 10,000 words each, with the ability to send entries to Notion. Listeners can save their current mix as a 10, 30, or 60-minute WAV file, access the offline app, and choose from 18 themes (adding Arctic, Coral Lagoon, Lavender, Golden Hour, Sea Glass, Cyberpunk, Pilot HUD, Tidepool, Ember Dusk, and Midnight Fern).
All limits are enforced by the server and the database; the interface only displays them.
---
The Sounds (14 total + binaural tones)
All sounds are synthesised in real time in the listener's browser using the Web Audio API, running in a background worker. There are no audio files served from the server. Each sound loops seamlessly every 20–30 seconds.
| Sound | Plan |
|-------|------|
| Rain | Seedling |
| Ocean | Seedling |
| Binaural tones | Seedling |
| Wind | Grove |
| Creek | Grove |
| Birdsong | Grove |
| Thunder | Canopy |
| Dawn chorus | Canopy |
| Crickets | Canopy |
| Hearth (fire) | Canopy |
| Waterfall | Canopy |
| Rain on a tent | Canopy |
| Night frogs | Canopy |
| Wind chimes | Canopy |
Code location:
- Free sounds: `src/lib/synth.ts`
- Premium sounds: `src/premium/*.ts`
- Premium module delivery: `src/app/api/premium/module/[name]` — the server hands premium synthesis code only to entitled listeners. Non-entitled users never receive the code.
Critical architectural fact: An hour of listening costs the server nothing. No bandwidth, no streaming, no CDN for audio.
---
The 3D Environments (Two Full Scenes)
Home Page:
A living 3D pond at first light (or dusk in dark mode) featuring:
- Water surface
- Water lilies
- Wildflowers
- Birds (appearing occasionally)
- Pollen (light mode) or fireflies (dark mode)
- Mist
- Rain
- A 20-second taste of rain audio
- Covers every feature and every plan
The Studio:
- A water surface that ripples in sync with the sound
- Scroll-driven camera movement (cinematic 3D interactive background that moves with scroll)
- 3D spatial audio visualisation
- The water stops drawing in Bedtime mode to save battery
Tech: three.js with react-three-fiber.
---
Spatial Audio
---
The Mixer
---
Scenes & Moods
---
Previews
---
Sleep & Rest
Sleep Timer
- Fades out on the audio clock, so it works with the screen locked
- Can be extended or cancelled
- Playground's 15-minute session fades out the same way
- Code: `src/components/SleepTimerPanel.tsx`
Bedtime Mode
- One tap starts a long fade-out
- Screen turns almost black, showing only the time and how long the sound has left
- The 3D water stops drawing to save battery
- A tap or any key brings the Studio back; the sound carries on
- Code: `src/components/studio/BedtimeScreen.tsx`
Wake Gently
- Choose a time and a scene; it fades in from silence over 1.5 minutes
- Works while the page stays open
- Some phones stop sound in the background; the panel says so
- Code: `src/components/studio/WakeGently.tsx`
Keeps Playing (Background Playback)
- Sound carries on between pages (journal, history, library, home)
- A small player follows it: play, pause, volume, time left, link back to Studio
- Lock-screen and headphone controls work
- Code: `src/components/site/NowPlaying.tsx`, `src/lib/useBackgroundPlayback.ts`
---
The Journal
Encryption
- AES-256-GCM encryption on the listener's device before saving
- Under a passphrase only they know
- A one-time recovery code is generated
- Nobody else can read it, including the site's owner (true end-to-end)
- Code: `src/lib/journalCrypto.ts`
Features
- Quick journal: The Journal button in the Studio opens a journal beside the sound, on a fresh page ready to type, saving as you write
- Full vault: "Open the full vault" leads to the whole journal
- Moods, prompts, and the scene: An optional word for how you feel, gentle writing prompts, and a note of what was playing. All encrypted with the entry
- Your rhythm: A quiet count of days written this week (never a streak), and "on this day" links to entries from a week, month, or year ago
- Search and filters: Search entries, filter by mood; Canopy can search every journal at once
- Several journals (Canopy): Up to 10, each with an encrypted name and colour. Entries can move between journals
- Print or save as PDF (any account)
- Send to Notion (Canopy)
- Write about this: Every session in listening history has a link that opens a new journal entry about it
- What we can see: The journal explains, in plain words, what the site can and cannot see of it
- Writing offline: An entry written without a connection is kept on the device, encrypted exactly as it would be sent, and saved when the connection returns
- Code: `src/components/journal/JournalPopup.tsx`, `src/lib/journalOutbox.ts`
Plan Limits
- Code: `src/lib/journalPlans.ts` and the database
---
Personalisation
Themes
- Each theme colours the water and the whole Studio
- 18 themes total, half light and half dark (each plan has equal light and dark themes)
- The picker sorts them
- Code: `src/lib/themes.ts`, `src/premium/themes.ts`
Light & Dark Mode
- For the whole site
Comfort / Accessibility
- Larger text, on every page
- The sounds as a list, with on/off switches and buttons to move each sound
- Full keyboard control
- Calm visuals and reduced motion: The water and home page scene become still; nothing flashes
- Code: `src/lib/listenerPrefs.ts`, `src/components/studio/SoundList.tsx`, `src/lib/visualPrefs.ts`
Install
- Add to home screen where the browser allows it, with a how-to for iPhone and iPad
- Canopy adds the offline app
- Code: `src/components/site/InstallApp.tsx`
---
Presets & Sharing
---
Listening History
---
Save as Sound File (Canopy)
---
Gifting System
---
Safety & Privacy
Hearing Safety:
- Output capped at −12 dBFS with a hard limiter
- Every session fades in gently
- Any error fades the sound to silence
- A safety notice before the first sound
No Tracking:
- No analytics, no advertising
- Only the cookies needed to sign in
Accounts:
- Email and password
- Email links (magic links)
- Social sign-in
- Two-step sign-in (2FA)
- A list of signed-in devices
- Download everything (data export)
- Delete the account
Accessibility:
- WCAG 2.2 AA in every theme
- Tested automatically
- Includes a check that nothing flashes
Error Reports (Opt-in):
- Off unless turned on (Studio → Info)
- A report says what broke, on which page, in which browser, on what kind of device
- Never who, what was written, or what was playing
- Kept 30 days
- Grouped on the admin page
- Code: `src/lib/errorReport.ts`
Paywall Restraint:
- Mentions of Canopy are capped at twice per user, each once ever:
1. When a free journal has two entries left
2. After three nights in a row of listening to the end of the free timer
---
The Site (Marketing + Platform)
Public Pages:
- Home page (3D scene + feature/plan overview)
- The Playground (`/play`) — listen without an account
- Plans
- About
- Safety
- Privacy
- Terms
- Accessibility
Owner Tools:
- Admin page: Plan changes, security events, waitlist, tester invites, error reports (grouped)
- Private preview mode for before launch
- Demo mode for a public demo copy
- Stripe payments, switched off until keys are added
- `/setup` checklist page showing what is configured and what is not
- Plan limits in one file: `src/lib/planLimits.json`, with the database's copy generated by `npm run db:limits`
---
## Tech Stack
| Layer | Technology |
|-------|-----------|
| Framework | Next.js (App Router) |
| Language | TypeScript (strict mode) |
| UI | React |
| 3D | three.js with react-three-fiber |
| Styling | Tailwind CSS |
| State | Zustand |
| Validation | Zod |
| Database | Supabase (Postgres, Auth, Storage) |
| Row Level Security | Supabase RLS (enforces all plan limits at the database level) |
| Rate Limiting | Upstash Redis |
| Bot Protection | Cloudflare Turnstile |
| Payments | Stripe (web) + Google Play Billing (Android) |
| Audio | Web Audio API (synthesis in a background worker) |
| Encryption | AES-256-GCM (client-side, for journal) |
| Android | Capacitor (or similar wrapper) + native Play-specific work |
| Hosting | Runs on free tiers to start |
Single codebase produces both the web app and the Android app. Feature parity is automatic.
---
## Android App
---
## Documentation (All Included in the Package)
| File | What It Covers |
|------|---------------|
| `docs/SETUP.md` | Start here. From nothing to a live site, step by step, with fixes for common problems |
| `docs/FEATURES.md` | Every feature, by plan, and where it lives in the code |
| `docs/ANDROID.md` | The Android app: building, signing, Digital Asset Links, Google Play Billing, Play listing |
| `docs/CUSTOMISING.md` | Name, logo, colours, fonts, words, plans, limits, new sounds |
| `SECURITY.md` | How it is protected (OWASP Top 10 mapping, threat model), and reporting a problem |
| `docs/SCALING.md` | Costs and limits as you grow |
| `docs/BACKUPS.md` | Weekly encrypted database backups and restoring them |
| `docs/DEMO.md` | Running a public demo copy |
| `INTENDED-PURPOSE.md` | Why it must never make health claims |
| `BUYER-NOTES.md` | What you are responsible for before launch |
| `CHANGELOG.md` | What changed in each version |
---
## Setup Process
```
npm run setup
```
---
## Testing & CI Pipeline
### Local Commands
```
npm run lint && npm run typecheck && npm run test:unit
npm run db:test # database security tests (needs the local database)
npm run test:e2e # end-to-end, accessibility, hearing-safety and flash tests
```
### CI (runs on every push)
- Lint
- Typecheck
- Unit tests
- Database security tests
- E2E tests
- Accessibility tests (WCAG 2.2 AA)
- Hearing-safety tests
- Flash sensitivity tests
- `npm audit`
- Gitleaks secret scan
- OWASP ZAP baseline scan
---
## Security Architecture
---
## Key Architectural Differentiators (for market positioning)
1. Zero server audio cost — all 14 sounds are synthesised client-side. An hour of listening costs the server nothing. No bandwidth, no CDN, no streaming.
2. Two full 3D environments (home page + studio) built with three.js/react-three-fiber. The home page has water lilies, wildflowers, birds, pollen/fireflies, mist, and rain. The studio has a water surface that ripples in sync with the sound and a scroll-driven cinematic camera.
3. True end-to-end encrypted journal — AES-256-GCM on the client, one-time recovery code, the server cannot read it.
4. WCAG 2.2 AA (not 2.1) in every theme, with automated flash and hearing-safety tests in CI.
5. OWASP Top 10 mapped with a formal threat model.
6. Single codebase for web + Android. One maintenance cost, automatic feature parity.
7. Free-tier-first architecture — $0 to launch.
8. `npm run setup` as the only setup guide. Interactive, guided, with a self-diagnostic `/setup` page.
9. Drifting paths (circle, figure eight, wander) for 3D sound placement — no comparable in the market.
10. Gifting system built in.
11. Offline app (Canopy) — trivially achievable because sounds are synthesised client-side.
12. No tracking, no analytics, no advertising — only the cookies needed to sign in.
13. Paywall mentions capped at 2 per user, ever.
14. `INTENDED-PURPOSE.md` — legal liability shield baked into the product.
15. `BUYER-NOTES.md` — pre-empts the "what do I still need to do?" conversation.
---
## What the Buyer Gets (Full IP Handover)
---
## What the Buyer Must Do Before Launch (per `BUYER-NOTES.md`)
---
## Licence
The buyer's licence is the one they bought, on the platform they bought it from. The full texts are in `licenses/` in the release package.
For this sale: full IP handover. The seller retains no rights, no royalties, no support obligation. The buyer owns everything.
I'm a freelancer that builds products to sell on the side, this one is an industry grade product that definitely deserves a place in the industry, which is why I intend to sell it to an entity that can make it bloom.
Free · no account
We pass your message to the seller and email you when they reply, and you can follow the conversation from a private link. Neither of you sees the other's email address.
Before you pay
Sell Micro SaaS does not check the numbers on this page. Before you pay anything:
Work through the due diligence checklist before you agree a price.
Keep browsing
Korean-founded AI self-reflection SaaS featuring guided interviews, user-reviewed AI hypotheses, personalized exercises, and…
Finished, tested software for Canada and the U.S.: a guided questionnaire produces a Word/PDF business plan, a nine-sheet Excel…
AI-powered fragrance discovery platform offering personalized perfume recommendations based on mood, style, season, occasion,…
Orbinza is an all-in-one business management platform that helps teams and agencies manage employees, clients, tasks, deadlines,…