💛

Empathly

Feel deeply. Live openly.
67 emotions · 15 languages · 9 game modes · 5 AI guides

mikelninh.github.io/Empathly

Open with this question

"What do you call the feeling of missing a home that no longer exists — or maybe never did?"

🇩🇪 Heimweh 🇷🇺 Toska 🇵🇹 Saudade 🇯🇵 Mono no aware 🇰🇷 Han 🇦🇪 Ya'aburnee 🇬🇧 ...sad?

Language shapes what you can feel — or at least, what you can name.

The Problem

Talking about feelings is hard. In any language.

  • Most people have fewer than 10 words for emotions (happy, sad, angry, tired…)
  • Families across language barriers have no shared emotional vocabulary
  • Emotional literacy is the foundation of therapy, education, and relationships — and nobody teaches it
  • Translation apps handle words. None handle felt meaning.
The Solution

A multilingual emotional vocabulary game

67
Emotions
15
Languages
9
Game Modes
40
Human Needs
30
Detective Cases
5
AI Guides
9 Game Modes

Every mode is a different kind of learning

🃏
Classic Memory
Match emotion pairs across languages. 5 difficulty levels.
🔍
Emotion Detective
Read a scenario. Find the hidden emotion. 30 psychological cases.
🗺️
Needs Map
Emotion → 4 real needs → 3 micro-actions you can do right now.
🌅
Word of the Day
Deep psychological, cultural & etymological insights daily.
💬
Conversation
Draw a card. Answer the reflection question. For groups.
📖
Emotion Journal
Write entries. AI finds patterns after 3+ entries.
AI Engineering

Where AI actually adds value

🧠
RAG Cultural Bridge
Knowledge base of untranslatable emotion vocabulary. Retrieved by context. AI explains cultural felt-meaning, not just definitions.
🌊
SSE Streaming
Server-sent events from FastAPI. Real-time word-by-word output. A spinner kills the magic.
🗣️
Language Enforcement
System prompt + user message both specify language. Double enforcement — single instruction isn't reliable enough.
💾
Persona Memory
Your guide remembers which emotions resonated with you. Contextual, personal responses over time.
🔀
Model Routing
GPT-4o Mini via backend (free for users). Falls back to OpenRouter free models. Cost optimization built in.
📊
Journal Analysis
Pattern recognition after 3+ entries. Which emotions repeat. What's shifting. No cloud required.
5 AI Guides

Not a chatbot. A teacher with a personality.

🌸 Hana Kyoto mono no aware · komorebi
🌿 Nadia Moscow → Berlin toska · dusha · Weltschmerz
🌙 Karim Marrakech ya'aburnee · tarab · Sufi poetry
📚 Lena Frankfurt etymology · untranslatability
🍃 Soo Seoul nunchi · han · jeong

Each guide has a system prompt shaped by their cultural background, emotional specialty, and voice.

Architecture

Zero framework. Zero npm. Zero build step.

Frontend Pure HTML + CSS + JS — open index.html, it works
Backend FastAPI + SQLite — optional, enables AI features
AI GPT-4o Mini → OpenRouter fallback (Gemma, Mistral)
Offline PWA + Service Worker — installable, works without internet
Data 67 emotions × 15 languages = 1,005 emotion-language pairs
Needs 268 real emotion→need connections (not random)
Detective 30 psychological scenarios with expert insights

The deliberate constraint: no React, no Vue, no TypeScript, no bundler — forces deep understanding of what frameworks actually solve.

Needs Map — The Key Feature

From feeling to action in 3 taps

Step 1
😔 Pick emotion
All 67 emotions, filtered by category. All languages.
Step 2
🌱 See needs
4 real psychological needs mapped to that emotion. Each with a one-line insight.
Step 3
✓ Take action
3 concrete micro-actions you can do right now. Journal pre-filled.

"This is what AI usefulness looks like — not a chatbot, but a 3-tap path from feeling to doing."

Why Empathly?

What no other app does

Other appsEmpathly
Translate a wordExplain the cultural felt-meaning
One language15 languages — natively
Chatbot UIGame mechanics: memory, detective, flashcards, streak
English-firstDesigned for non-English speakers and language gaps
Requires internetWorks offline, no account needed
Generic AI advice40 mapped needs + 3 concrete micro-actions per emotion
Open Source

Everything is open. Fork it, extend it, translate it.

github.com/mikelninh/Empathly

  • Add your language — 30 minutes, no code needed
  • Write a Detective scenario from your culture
  • Add cultural insights for untranslatable words
  • Improve accessibility, add audio, extend the backend
📝
Data-first architecture
Adding a language = adding one key per emotion object in data.js. No code required. The knowledge base is plain markdown anyone can edit.
🌍
Languages we'd love next
Hindi · Portuguese · Italian · Persian · Swahili · Dutch
🧩
Good first issues
5 emotions in your language, one Detective scenario, one cultural insight. Each one makes the app meaningfully better.
What we learned — About AI
  • The hardest part isn't the API call — it's prompt engineering for consistent output
  • Language enforcement needs redundancy: system prompt + user message
  • RAG makes AI feel like an expert, not a generator. The knowledge base is the product.
  • Streaming changes the experience completely — 2 seconds of "thinking" kills immersion
  • A feature only lands when it changes user behavior. The Needs Map failed until micro-actions were added.
About Engineering
  • Zero-dependency doesn't mean zero complexity — it means intentional complexity
  • 67 emotions × 15 languages is a design problem before it's an engineering problem
  • Good CSS architecture is worth more than any library
  • Graceful degradation is a feature, not a fallback — "works offline" is a trust signal
  • Game mechanics (streak, rank, daily) make repetitive content feel fresh every day
💛
We built a game. But underneath it is a serious claim: that emotional vocabulary is a human right. That not having words for what you feel is a kind of poverty. And that AI — when used well — can help give those words back.

mikelninh.github.io/Empathly

github.com/mikelninh/Empathly · MIT License · Contributions welcome

F — fullscreen