Skip to the case study
ELALFY.

سَدِيمًاArabic-first conversational AIIn development

SADEEMAN AI

A conversational assistant that asks before it assumes and cites what it finds.

An Arabic-first AI assistant for travel planning and everyday questions, with grounded web research, opt-in voice and consent-based memory on a Fastify and Next.js monorepo.

My part
Product design, full-stack and agent engineering
Status
In development
Built with
  • TypeScript
  • Fastify
  • Next.js
  • React
  • Zod
  • Supabase
  • PostgreSQL
  • Gemini
  • Groq
  • Three.js
Private GitHub repositoryNo public demo — this page is the full write-up.

Why it exists

Build an assistant that handles real travel planning — budgets, group size, changing constraints — without inventing facts, and answers off-topic questions plainly instead of forcing everything into a sales flow.

My part: product design, full-stack and agent engineering.

How it is built

A pnpm monorepo: apps/api is Fastify 5 with strict TypeScript and server-only provider credentials; apps/web is Next.js 16 with React 19 and Three.js; packages/contracts holds Zod 4 schemas shared by both. Supabase migrations define the schema and RLS; embedded PGlite runs the same SQL locally. The browser never holds provider or service keys — Next proxies a configured loopback API origin.

What is implemented

  • One agent that chooses to ASK, ACT or ANSWER, with action-specific requirements and a single validated correction
  • Gemini-primary / Groq-fallback routing with immediate failover on timeouts or quota
  • Tavily research with an exact-source citation check before an answer is committed
  • Multi-turn trip context: unknown optional facts stay absent and rejected proposals never become facts
  • Opt-in voice: browser recording, Groq Whisper transcription, editable transcript and Gemini speech playback
  • Consent-based memory; Supabase row-level security with the same SQL running locally on PGlite
  • Shared Zod contracts between API and web app
  • A Three.js presence driven by recording and playback, with a static fallback and reduced-motion support

Hard parts and decisions

Never inventing a fact

Typed tool arguments go through all-field validation and exact-source grounding. Optional details such as ages stay unknown until they matter instead of being guessed.

Bounded voice input

Ten-second, independently decodable recording segments, a two-item queue and hard size limits. A provider failure stops the turn and marks partial text for review — no silent retries.

Scope discipline

When the product scope changed, the CRM routes, tools, UI and migration were removed rather than left half-alive; the retired migration was never applied to the cloud database.

Where it stands today

In development

Active development in a private repository. The production API is deliberately kept closed until security and privacy acceptance, so there is no public deployment. SADEEMAN is intentionally not a CRM: it cannot book, pay, create customer records or contact anyone.