Terra Studio – Living nature soundscapes in the browser

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.

SaaS Pre-launch Pre-revenue Listed November 2026 Terra Studio · terra-sonic-studio.vercel.app

The business

About this 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

  • Place each sound by dragging, arrow keys, or buttons in the list view
  • Canopy adds height (above/below) and slow drifting paths (circle, figure eight, wander)
  • Headphones: Full 3D spatialisation
  • Speakers: Clean left/right panning
  • Code: `src/components/SpatialControlCanvas.tsx`, `src/components/SceneEditor.tsx`, `src/lib/spatial.ts`

---

The Mixer

  • Volume and warmth (a soft filter) for each sound individually
  • Master volume and master warmth
  • Level meter
  • The row of sounds scrolls sideways with faded edges when it doesn't fit
  • Code: `src/components/studio/Mixer.tsx`

---

Scenes & Moods

  • 18 ready-made scenes (e.g., Forest Rain, Frog Pond), available by plan
  • One-tap moods: Sleep, Focus, Unwind — each starts the best scene the listener can play
  • Sleep mood also starts a sleep timer with a long fade-out
  • Code: `src/lib/presets.ts`

---

Previews

  • A 6-second preview of every sound the listener does not yet have
  • Plays through the same volume cap as everything else
  • Never adds the sound to the mix
  • Previews are plain audio files rendered at build time (`scripts/build-previews.mjs`, `public/previews/`) so no Canopy synthesis code is exposed

---

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

  • Save your own mixes: 3 on free, unlimited on Canopy
  • Library manages them: rename, favourite, delete, restore from trash for 30 days
  • Share links (Canopy): Anyone with the link can listen to that mix without an account, until the link is revoked
  • Favourite scenes: Star any scene; favourites come first (on this device)
  • Pick up where you left off: The last mix comes back when the listener returns on the same device (stored on that device only)

---

Listening History

  • How long they listened, when, and to what
  • With notes
  • Available on any account (Grove and Canopy)

---

Save as Sound File (Canopy)

  • 10, 30, or 60 minute WAV of the current mix
  • Under the same volume cap as live playback

---

Gifting System

  • Any account can buy Canopy as a gift (3 months or 1 year)
  • Pass on a link; whoever opens it gets Canopy on their own account
  • Time adds to any Canopy they already have, with an end date
  • The link works once, for one year
  • Stays on the buyer's account page
  • Code: `src/server/dal/gifts.ts`

---

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

  • Full Android app (not just a WebView)
  • Code: `docs/ANDROID.md` covers:
  • Building
  • Signing
  • Digital Asset Links
  • Google Play Billing
  • Play Store listing
  • Offline app available on Canopy tier
  • Lock-screen and headphone controls work
  • Background playback supported (with platform caveats noted in UI)

---

## 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
```

  • Asks whether you want to try Terra Studio on your computer or put it online
  • Does the technical work and tells you exactly what to do next
  • Afterwards, `/setup` on your site shows what is set up and what is not
  • Without a database, the site runs as a Playground only (no sign-up or sign-in)
  • Setting up a database is what turns accounts on
  • Stripe keys stay off until the buyer adds their own

---

## 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

  • OWASP Top 10 mapped with a threat model (`SECURITY.md`)
  • Row Level Security on the database enforces all plan limits
  • Server-gated premium modules — premium synthesis code is never delivered to non-entitled users
  • Cloudflare Turnstile for bot protection
  • Upstash Redis for rate limiting
  • Two-step sign-in
  • Gitleaks in CI (secret scanning)
  • OWASP ZAP baseline scan in CI
  • Weekly encrypted database backups (`docs/BACKUPS.md`)
  • Error reports are opt-in, anonymous, and auto-expire after 30 days

---

## 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)

  • All source code (web + Android)
  • The synthesis engine (all 14 sounds + binaural tones)
  • Both 3D environments (home page + studio)
  • The journal (E2E encryption, offline outbox, Notion integration)
  • The full platform (auth, Stripe, Google Play Billing, RLS, admin, gifting, share links, rate limiting)
  • The compliance pipeline (OWASP, WCAG 2.2 AA, hearing safety, flash, CI)
  • The marketing site (landing, plans, about, safety, privacy, terms, accessibility)
  • All documentation (11 files)
  • The CI/CD pipeline
  • The test suite
  • The brand (name, logo, colours, fonts)
  • The right to resell, acquire, raise funding, or do whatever they want
  • No ongoing relationship, no royalties, no support obligation from the seller

---

## What the Buyer Must Do Before Launch (per `BUYER-NOTES.md`)

  • Add their own Stripe keys
  • Add their own Supabase project
  • Set up their own domain
  • Configure their own social sign-in providers
  • Review and update legal pages for their jurisdiction
  • Set gift prices
  • Configure their own email provider
  • (The full list is in `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.

Details Seller-reported Reported by the seller. Sell Micro SaaS does not verify revenue. Ask for proof before you buy.

Asset type
SaaS · SaaS
Stage
Pre-launch
What's included
Source code, Design files, Store listing, Documentation, Content / blog, Brand & logo
Tech stack
nextjs, supabase, upstash, stripe, typescript, react, tailwind css, zustand, cloudflare turnstile
Revenue model
Subscription
Payment processor
Stripe

Deal terms

Price type
Open to offers
Earn-out or financing
No
Escrow preferred
Yes
NDA required
Yes
Post-sale support
15 days

Why the seller is selling

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

Contact the seller

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

Verify before you buy

Sell Micro SaaS does not check the numbers on this page. Before you pay anything:

  1. Ask for a live screen share of the payment dashboard, not screenshots.
  2. Get read-only dashboard access (payments and analytics).
  3. Match payouts to bank statements.
  4. Check the customer list against the MRR.
  5. Pay through escrow, never a direct transfer.

Work through the due diligence checklist before you agree a price.

Report this listing

Keep browsing

Similar listings

More saas businesses
Pre-revenue

Korean-founded AI self-reflection SaaS featuring guided interviews, user-reviewed AI hypotheses, personalized exercises, and…

Asking $32,000
Revenue
$0
Stage
MVP
Since
2026
  • react
  • typescript
  • vite
Pre-revenue

Finished, tested software for Canada and the U.S.: a guided questionnaire produces a Word/PDF business plan, a nine-sheet Excel…

Asking $14,900
Revenue
$0
Stage
Pre-launch
Since
2026
  • python
  • fastapi
  • sqlalchemy/sqlite
SaaS

Orbinza

Pre-revenue

Orbinza is an all-in-one business management platform that helps teams and agencies manage employees, clients, tasks, deadlines,…

Asking $3,900
Revenue
$0
Stage
MVP
Since
2026
  • Subscription
  • html
  • css