An agentic AI concierge — and three connected marketplaces — for stays, dining, rides & travel across Morocco.
OMNIA inverts the usual "super-app" of forms. You don't search — you make a wish. Describe what you want in plain language — "plan my weekend in Marrakech for two: a stay, dinner and an airport ride, under 3,000 MAD" — and the agent decomposes it, compares real options across three genuinely separate marketplaces, respects your budget, and assembles a confirm-ready plan.
Designed, built, deployed & documented end-to-end (product, frontend, backend, AI, infra) by El Asmi Ilyas Daoud.
| Surface | URL |
|---|---|
| 🪄 OMNIA Agent | https://omnia-vert.vercel.app |
| 🏠 OMNIA Stays | https://omnia-stays.vercel.app |
| 🍽️ OMNIA Eats | https://omnia-eats.vercel.app |
| 🚗 OMNIA Rides | https://omnia-rides.vercel.app |
| App | What it is | Theme | Frontend | Backend |
|---|---|---|---|---|
| 🪄 OMNIA Agent | AI concierge — chat + live agent activity | Gold / black | ai-agent-hub/ (5180) |
ai-agent-hub/backend/ (3000) |
| 🏠 OMNIA Stays | Airbnb-style stays marketplace | Blue | omnia-stays/frontend/ (5181) |
omnia-stays/backend/ (3001) |
| 🍽️ OMNIA Eats | Food-delivery marketplace | Orange | omnia-eats/frontend/ (5182) |
omnia-eats/backend/ (3002) |
| 🚗 OMNIA Rides | Ride-hailing marketplace | Green | omnia-rides/frontend/ (5183) |
omnia-rides/backend/ (3003) |
Plus omnia-e2e/ — a Playwright end-to-end suite covering all four apps.
It serves six Moroccan cities: Rabat, Casablanca, Marrakech, Tanger, Oujda, Agadir. Currency is MAD.
- Natural-language ordering & booking — "order a Margherita and a Coca-Cola from Napoli in Rabat" → a confirm-ready receipt that creates a real order (tagged via OMNIA Agent).
- Full-trip planning across all three marketplaces — stay + ride + meals assembled into one itinerary, with a hard budget cap.
- A live menu cart — suggested restaurants open their real menu in-chat; add several dishes with quantity steppers, then review one combined order.
- Manage existing orders — cancel, modify nights/guests, change a ride's pickup, edit order items, reorder "your usual".
- Recurring tasks — "order my usual from Dar Tagine every Friday at 7pm"; a cron fires it while you're away.
- Memory & context — remembers the conversation; follow-ups like "just a water please" keep the active restaurant.
- Scope guardrails — politely declines off-topic requests and unsupported cities.
- Reviews, an OMNIA Rewards wallet, live ride tracking, maps, and a per-user request meter.
┌──────────────────────── shared Clerk identity ────────────────────────┐
│ │
OMNIA Agent ──HTTP──▶ OMNIA Stays / Eats / Rides marketplaces (each its own DB)
(chat + planner) book / order / ride → real rows, "via OMNIA Agent" badge
│
Groq (Llama 3.3 70B) with multi-key failover
- Frontend: React 19 + Vite + TypeScript + TailwindCSS + Framer Motion + Zustand + React Query.
- Backend: NestJS + Prisma + PostgreSQL (Neon), one database per app.
- AI: Groq (Llama 3.3 70B) via a provider-agnostic layer, with automatic multi-key rotation and transient-failure retries.
- Auth: Clerk (shared across all four apps) with Google sign-in.
- Realtime: the agent streams its plan, steps, tokens and checkout drafts over Server-Sent Events.
- Infra: front-ends on Vercel, the four Dockerised backends on Hugging Face Spaces, databases on Neon — auto-deployed from this repo via GitHub Actions. The whole production stack runs on a $0 budget.
The agent is a hybrid: the LLM plans and phrases, but a large deterministic engine resolves every real order — so it never hallucinates a price, a place, or a booking.
See OMNIA_OVERVIEW.md for the full architecture, run guide, and security checklist.
Each app needs its own .env (copy from the .env.example in each backend/frontend and fill in your own keys — Neon database URLs, Clerk keys, and a Groq API key).
# 1. Install deps (per app)
npm --prefix ai-agent-hub install && npm --prefix ai-agent-hub/backend install
# …repeat for omnia-stays, omnia-eats, omnia-rides (frontend + backend)
# 2. Push the Prisma schema + seed each backend's database
npm --prefix ai-agent-hub/backend run prisma:push
# 3. Build + start the backends under PM2
npm --prefix ai-agent-hub/backend run build # repeat per backend
pm2 start ecosystem.config.cjs
# 4. Start the frontends (Vite dev), ports 5180–5183
npm --prefix ai-agent-hub run dev- All real secrets live in per-app
.envfiles, which are gitignored — only.env.exampletemplates are committed. - Per-user (or per-IP) rate limiting on the agent endpoint: 20/min + a daily cap persisted in Postgres (survives free-host restarts).
- Helmet headers, exact CORS allow-lists, per-user request keying by Clerk
sub, and strict input validation at every API boundary.
Built with ♥ in Morocco by El Asmi Ilyas Daoud — full-stack engineer · AI agents · product design.






