Breathwork session
Listen to the Earth session
Product · Sonetra AI

An immersive wellness app and a liquid glass web experience.

Visit sonetra.ai ↗

React Native · Skia
Next.js · WebGL

About Sonetra

Sonetra is a guided wellness app for mindfulness, body practices, and personal reflection, set in a visual world of skies, water, and slow movement.

I built it on two surfaces: a React Native app and a Next.js website. Most of the engineering went into making that visual language hold up as a working product, from the first animated screen to a saved session someone can come back to.

  • 07Session formats
  • 03Home directions
  • 04Sign-in methods
  • 02Surfaces: app & web
01 — Onboarding

Start with a moment of pause

The intro screens open on ocean, sand, and breath. Controls sit as translucent glass over animated imagery, so the first thing a new person does in the app is slow down.

Sign-in supports passkeys, Google, Apple, and email.

  • Passkey
  • Apple
  • Google
  • Email
Splash screen: a cloud of flowers inside the Sonetra ring
Sign-in screen with Apple, Google, and email options
Welcome to Sonetra: a jellyfish drifting over the wordmark
02 — Home

Choose a direction

Home splits into Mind, Body, and Custom. Each direction has its own palette and imagery, so you can tell where you are before reading a label. Inside a direction, practices sit in a swipeable carousel.

Home screen greeting Jade, with the Mind direction selected
HomeWhat would you like to work on today?
Method carousel cycling through Intention Setting and Breathwork
Find your calmPick a method that feels right
Shape your journey: choosing goals, with Tapping selected
Shape your journeyGoals for body and mind
03 — Sessions

Make each session feel considered

Mood check-ins, gratitude prompts, journaling, grounding, breathwork, body scans, and photo capture. Each one asks for a different kind of input, but they share a frame: a title, a gentle instruction, and one clear next step.

  1. Mood check-in with flowers for happy, lazy, excited, sad, and confused

    01Mood check-in

  2. Daily gratitude prompt with a journaling field

    02Daily gratitude

  3. Breathwork session with a progress arc and playback controls

    03Breathwork

  4. Grounding exercise: identify four things you feel

    04Grounding

  5. Listen to the Earth: an audio session over a mountain lake

    05Listen to the Earth

  6. Body scan session with a guided progress arc

    06Body scan

  7. Session length picker set to five minutes

    07Session length

  8. Voice reflections answering journaling prompts

    08Voice reflection

  9. Capture a moment: photo of something you enjoy

    09Capture a moment

  10. Post-session feedback set to neutral

    10Feedback

The glass is part of the renderer

In the app, the glass is drawn by custom Skia runtime shaders in React Native. Decoded video frames are the image source for the effect, so the glass bends whatever footage is playing behind it.

The stage below is a WebGL version of the same idea, written for this page. Move across it to push the lens around.

Sonetra website hero: the wordmark over clouds and a mountain shaped like a guitarMove across the image

On this page: WebGL fragment shader, written for this pageIn the app: React Native Skia runtime shader over video frames

04 — Continuity

Build for the next visit

Favorites, activity history, and session progress persist, so someone can stop halfway through a practice and pick it up later. On the device, session state lives in Zustand and is saved with MMKV and AsyncStorage. Convex keeps the synced record, and Clerk handles identity.

Your Favorites: saved Mind and Body practices
Profile with sessions completed and current streak
DeviceZustand · session stateMMKV · AsyncStorageresume where you left offConvexfavoritesactivity historysession progressClerkidentitypasskeysOAuthsyncsign-in
05 — Web

Carry the experience onto the web

The marketing site uses the same imagery at a larger scale. It's built with Next.js and React, GSAP for scroll motion, displacement-based glass, and WebGL chroma keying so cut-out video sits cleanly on the page.

Visit sonetra.ai ↗
sonetra.ai
The full Sonetra marketing page, from the cloud hero to the footer wordmark
06 — Stack

What it runs on

One codebase per surface, sharing the visual language.

Mobile

  • React Native
  • Expo
  • TypeScript
  • Expo Router
  • React Native Skia
  • Reanimated
  • Gesture Handler
  • Expo Video

State & services

  • Zustand
  • MMKV
  • AsyncStorage
  • Convex
  • Clerk
  • AWS
  • React Hook Form
  • Zod

Web

  • Next.js
  • React
  • HeroUI
  • GSAP
  • WebGL
  • SVG displacement filters
Sonetra AI

A personalized sanctuary that breathes with you.

Visit sonetra.ai