Product Design · Game Design · Full-Stack Engineering

Ehoro Village

A lo-fi music companion with a spirit collection game. It rewards you for doing nothing. I designed it, engineered it, and shipped it — solo.

Role Designer & Solo Developer
Timeline Jan – Feb 2026
Stack Vanilla JS · Supabase · GitHub Pages
Status Live
Try Ehoro Village
Ehoro Village — desktop view with Lofi Girl stream and spirit collection sidebar

The Spark

I like games. I like lo-fi. I like maximizing my time.

I've always loved games — especially Pokémon — and cozy gaming experiences. I'm also the kind of person who has a lo-fi stream running in the background of basically everything I do. At some point I thought: what if the music could give me something back?

Not in a productivity-app-that-guilts-you way. More like a quiet little world that grows while you work. You listen, eggs appear, spirits hatch, and your village slowly comes to life. You don't have to pay attention. That's the whole point.

I also wanted to teach people about Yoruba culture through the game — the spirit names, the lore, the world-building. Games are one of the best ways to introduce someone to a culture without making it feel like homework.

How It Works

Companion, not competition.

Ehoro Village is built around a single idea: reward presence, not attention. You open it, press play, and let it run. The app does the rest.

🎧
Stream & Earn
Lo-fi music plays in the background. Every 60 minutes of listening, you earn an egg. First-timers get one in 4 minutes.
🥚
Hatch Spirits
Place eggs in your hatchery. They hatch into spirits — each with a name, personality, traits, and moods. Six unique species to discover.
Evolve & Cultivate
Feed your spirits pills crafted from ingredients. Evolve them through three stages. Choose alignments — wicked or heavenly — that change their abilities.
🏘️
Grow Your Village
Your listening time, spirits, and crafting all contribute to your village rank. Progress from Stone to Bronze and beyond. It's passive — like a garden.
Ehoro Village login screen
Professor Mowang onboarding tutorial
Choose your first spirit companion

Sign in → Meet Professor Mowang → Pick your first spirit

Design Philosophy

Most apps want your full attention. This one doesn't.

Every design decision in Ehoro Village comes back to one principle: don't steal people's time. Modern apps are built to keep you scrolling, tapping, engaging. Ehoro is the opposite — it's designed to sit quietly in the background while you do your actual work.

That constraint shaped everything. The UI is a sidebar, not a full-screen takeover. The game loop runs on timers, not skill checks. There's no FOMO mechanic, no daily login punishment. If you miss a day, your spirits are just a little sleepy when you come back. That's it.

"I enforced the companion-first philosophy by keeping everything in a single file. If the whole app can live in one HTML document, it can't get too complicated."

The dark theme isn't just an aesthetic choice — the app is meant to run alongside whatever you're actually doing. A dark, glassy interface disappears into your workspace instead of fighting it. Light theme exists too, styled like warm parchment for daytime vibes.

Ehoro Village on mobile
Items tab — hatchery, ingredients, and crafting

Responsive on mobile · Items tab with hatchery, ingredients, and crafting

Building It

One HTML file, one database, zero frameworks.

The entire frontend is a single HTML file. No React, no build tools, no npm. Just vanilla JavaScript, CSS, and a Supabase backend for auth, data, and real-time game logic. The constraint was intentional — I wanted to ship fast and keep it simple.

Frontend
Single HTML file · Vanilla JS · CSS
Backend
Supabase (PostgreSQL + Auth + RPC)
Auth
Email/password · Google OAuth · Guest mode
Hosting
GitHub Pages — free, instant deploys
Security
Row-Level Security · 32 RPCs · CSP · XSS sanitization
Assets
19 custom PNG sprites — all made by me
1
HTML File
1,800+
Lines of Code
11
Database Tables
32
Server RPCs
Supabase dashboard — e-village project, status healthy

The Supabase backend — healthy, running on free tier, ready for ~1,000 concurrent users

The Hard Parts

Debugging a database at 2am teaches you things.

This wasn't a weekend project that went smoothly. I went through 10+ development sessions, multiple database migrations, and a debugging saga that taught me more about PostgreSQL than any course could.

01

The 404 Mystery

After deploying V2.0, all 8 new server functions returned 404 errors. Expeditions, pills, cultivation — everything broke. Turns out PostgREST returns 404 for runtime SQL errors, not just missing functions. The actual bug? I was using JSONB operators on a native PostgreSQL array column. Took 6 SQL patches to fix.

02

Schema Drift

After multiple sprint iterations, column names and constraints were inconsistent. A CHECK constraint on the emblems table only allowed 3 types but the app had 5. Every new feature required verifying the actual schema before writing any SQL.

03

Security at Scale

V1.0 stored game state in localStorage — no validation, easy to cheat. V2.0 moved everything to server-side RPCs with Row-Level Security, rate limiting, and XSS sanitization. The migration broke most features temporarily, but the app is now production-ready for real users.

Working With AI

I built this with Claude. The manifesto is what made it work.

I used Claude as my coding partner for this entire project. But here's the thing — AI doesn't remember your last session. Every new conversation starts from zero. So I wrote a manifesto.

The manifesto is a living technical document that I carry into every AI session. It has the database schema, the coding rules, the design philosophy, the session history — everything an AI needs to pick up exactly where the last one left off. No wasted time re-explaining context.

"Having a clear manifesto is essential. It gives the AI a reference point to maintain consistency throughout development."

This ended up being one of the biggest lessons from the project. The manifesto isn't just documentation — it's a collaboration protocol. It grew from a one-page overview to a detailed technical spec with 12 sections, session logs, and explicit rules for what AI assistants should and shouldn't do.

Takeaways

Three things I'd tell past me.

Design your database schema like your life depends on it.
Schema drift caused 80% of my bugs. Column names changed, constraints didn't match, types were wrong. If I started over, I'd spend a full day just on the schema before writing any frontend code.
Constraints breed creativity.
One HTML file. No frameworks. No build step. These weren't limitations — they forced me to think harder about architecture and kept scope manageable. The app shipped because of the constraints, not despite them.
If you're building with AI, write the manual first.
The manifesto changed everything. Suddenly every AI session was productive from the first message. No re-explaining, no contradictions, no regressions. The document IS the product — the code just implements it.

What's Next

This thing's still growing.

Ehoro Village is live and playable right now. I'm actively working on adding original lo-fi music (I make beats — so this one's personal), expanding the spirit roster, and refining the monetization model so the game stays accessible to everyone regardless of income.

The target? First 100 real users. College students ages 17–20 who already have lo-fi running while they study. If I can make them close one other tab and open Ehoro Village instead, I've won.

Vanilla JS Supabase PostgreSQL Game Design UI/UX Glassmorphism AI-Assisted Dev Lo-Fi Yoruba Culture