Selam Wellness
AI wellness platform built for Ethiopia
- Role
- Solo build, ALX Ethiopia hackathon
- Timeline
- May–June 2026
- Built with
- React · TypeScript · Express · MongoDB Atlas · Gemini · Docker

The problem
Wellness apps give generic, Western-centred advice that ignores which therapists, products and retreats are actually available in Ethiopia, and in which language. At the same time, skin-lightening products containing mercury, hydroquinone or steroids are sold openly, and shoppers have no quick way to check what is in them.
What I built
Selam turns a three-minute assessment into a personal wellness plan across mind, skin and body, in English or Amharic.
- Three-phase onboarding
- Mental wellness (including the clinical PHQ-4 screening questions), skin and products, and wellness goals. A crisis-level score skips the plan entirely and routes to a dedicated crisis support page.
- Profile reveal
- An animated sequence that presents the result one pillar at a time: the therapist match and why, a safety audit of the products the user owns, and a retreat recommendation.
- Therapist and retreat matching
- The profile is embedded with Gemini and matched by vector search in MongoDB Atlas against local therapists (filtered by language and approach) and Kuriftu retreat packages. Each match comes with a written reason and a score.
- Product safety scanner
- Search by name, scan a barcode or photograph the label. It checks a curated Ethiopian product database first, then Open Beauty Facts, then reads the label with a vision model, and flags ingredients that conflict with the user's skin profile.
- Dashboard
- Wellness score, daily mood check-in, weekly review, matched care, scanner, retreats, and a Data Vault that shows the user an audit log of every AI call and data access.
- Demo resilience
- Preset personas run the full flow from static data, so the product still works with no AI provider and no database.
My role
Solo developer. I defined the product, designed the UI, built the React front end and the Express API, wrote the AI provider layer and matching pipeline, modelled the data, seeded the therapist, product and retreat datasets, and set up Docker deployment.
Cutting voice before the demo
The project started with a two-model voice pipeline. Before the demo I removed voice and consolidated to a single AI service to make it reliable.
Tech stack
- Front end
- React 19, TypeScript, Vite 6, Tailwind CSS v4, Motion, Lenis, Shepherd.js (guided tour), html5-qrcode (barcode scanning), Axios
- Back end
- Node.js, Express 5, Mongoose, Multer (image upload)
- Data
- MongoDB Atlas with Vector Search
- AI
- OpenRouter for text generation, Gemini for embeddings and label reading, behind one provider module with fallbacks
- External APIs
- Open Beauty Facts, Open-Meteo (Addis Ababa weather)
- Security
- JWT, bcrypt, Helmet, rate limiting, audit-log middleware, crisis-detection middleware
- Deployment
- Multi-stage Dockerfile, Docker Compose, Procfile
Screenshots



What I'd improve next
- Bring the live backend back
- Only the static demo path runs today. I'd restore the database, re-run the seed and embedding scripts, and host a public demo.
- Break up the dashboard
- Splitting it by pillar would make it testable and faster to load.
- Automated tests
- The first ones cover PHQ-4 scoring, the crisis routing and the ingredient flagging, since those are the places a bug could hurt someone.
- Clinical and regulatory review
- The screening logic, the crisis flow and the banned-ingredient list should be checked by a clinician and against Ethiopian regulator data before real users rely on them.
- Real provider data
- Therapists and retreats are seeded samples. The product needs verified listings and an actual booking handoff.
- More languages
- Afaan Oromo and Tigrinya alongside English and Amharic, and voice check-ins once Amharic speech support is good enough.