Echo is a small, privacy-focused app for couples to share their emotional “vibes”, send glows (appreciations), and open up talk topics.
It’s built as a fun side project and a gift, but the codebase is fully open-source and easy to self‑host.
- Track vibes together: Each person sets their current vibe so everyone has a sense of the room.
- Send glows: Lightweight appreciations that accumulate over time.
- Talk prompts: Soft entry points for deeper conversations.
- Weekly connections: Once per week both people check on each other and their current feelings with a 15 minute custom made bonding activity.
- Shared space model: Everything is scoped to a family / space (multi-tenant via Supabase).
- Framework: Next.js App Router (
/app) - Runtime: React 19, TypeScript
- Auth & DB: Supabase (Postgres + Auth + RLS)
- UI: Tailwind CSS, custom components, a bit of 3D via
three/@react-three/fiber - PWA & Notifications:
@ducanh2912/next-pwa- Web Push (
web-push) with VAPID keys
git clone https://github.com/Splestule/Echo.git
cd Echo
npm installCreate a .env.local file in the project root:
cp .env.example .env.localThen fill in your own values:
- Supabase
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY
- App base URL
NEXT_PUBLIC_BASE_URL(e.g.http://localhost:3000in dev, your URL in prod)
- Web Push
NEXT_PUBLIC_VAPID_PUBLIC_KEYVAPID_PRIVATE_KEY
You can generate VAPID keys with web-push (see comments in the SQL files under sql/ or the web-push docs).
Point a Supabase project at this app and run the root schema file in the Supabase SQL editor:
- Open
schema.sql(root of the repo). - Paste it into the Supabase SQL editor and run it.
This script will:
- Create the core tables (
profiles,families, vibes, glows, checkins, notifications, etc.) - Set up RLS policies so each user only sees data for their family
- Add necessary RPC helpers for the app
Under the sql/ folder you’ll also find the same schema split into smaller files (policies, notifications, check-ins, realtime, etc.) if you prefer to inspect or run parts of it.
npm run devThen open http://localhost:3000.
The first user to sign up will be prompted to create a space (family); later users can join an existing space via an invite code (the family UUID).
The app is designed to run on platforms like Railway or Vercel, with Supabase as the external database.
- Set environment variables in your hosting platform (same as
.env.local). - Build & start:
npm run build
npm startThe build script creates a standalone Next.js server bundle suitable for hosting on Railway (.next/standalone).
User data and sessions live in Supabase, not in the app container, so you can redeploy safely without losing data or logins (as long as you keep the same Supabase project and env vars).
Echo works as a Progressive Web App (PWA) and can be installed on your phone's home screen for quick access.
- Open Echo in Safari (not Chrome or other browsers).
- Tap the Share button (square with arrow pointing up) at the bottom of the screen.
- Scroll down and tap "Add to Home Screen".
- Customize the name if you want, then tap "Add".
The app will appear on your home screen and open in a standalone window without the Safari browser UI.
- Open Echo in Chrome.
- You may see a banner at the bottom prompting you to "Add Echo to Home screen" — tap it.
- If you don't see the banner:
- Tap the menu (three dots) in the top right.
- Select "Add to Home screen" or "Install app".
- Confirm by tapping "Add" or "Install".
The app will appear on your home screen and can be launched like a native app.
After installing Echo to your home screen, you can enable push notifications to receive alerts when your partner sends you a glow or updates their vibe.
iOS:
- Open Echo from your home screen.
- Click the notification bell on top of the screen.
Android:
- Open Echo from your home screen.
- Click the notification bell on top of the screen.
Once enabled, you'll receive notifications even when the app isn't open, keeping you connected with your partner throughout the day.
src/app– App Router pages, layouts, and server actionsauth/– login, signup, setup, signout actions and callback routeactions/– server actions for vibes, glows, talk, notifications, etc.
src/componentsfeatures/– feature-level components: vibes dashboard, check-ins, talk widgets, setup formlayout/– layout pieces likeLogoandNotificationBellui/– simple stateless UI components (Button,Card,Input, …)
src/hooks– client hooks for glows, vibes, notifications, talkssrc/utils/supabase– Supabase client helpers and schema typespublic– icons, manifest, service worker (sw.js,push-sw.js)
The debug/ folder under components is kept minimal and can be safely ignored or removed if you don’t need it.
Contributions are very welcome – this is a small but opinionated codebase, and I’d love to see improvements.
- Read
CONTRIBUTING.mdfor guidelines. - For small fixes (typos, docs, small UI tweaks), feel free to open a PR directly.
- For larger changes, please open an issue first so we can align on scope.
This project is open source under the MIT License.
See LICENSE for details.
Made by Eduard Šimon