Ilyas Ouhnine RAG · Intelligence documentaire
All work

Lbassi · Wadrari

Two mobile products designed, built and shipped solo

What these two apps prove comes down to one word: I finish. A client handing over a document system fears receiving an impressive notebook and nothing that runs.

Shippednot a prototype · Kotlin · Expo · Supabase RLS
Role
Design, development and distribution
Period
Personal projects

Stack

  • Kotlin
  • Jetpack Compose
  • ML Kit
  • Room
  • Hilt
  • Expo
  • React Native
  • TypeScript
  • Supabase
  • RLS
Lbassi — explainable recommendation, offline cutout, the wardrobe
Lbassi. The recommendation shows the reasoning behind its score instead of asking you to trust it. The cutout runs with the phone in airplane mode — the status bar is the proof. The wardrobe is built entirely from work done on the device.
Wadrari — real-time chat, leaderboard, quests
Wadrari. The interesting part isn’t the feature list, it’s where the rules live. Scores, quest progress and message access are decided by Postgres row-level policies and RPC functions: the client can request, it cannot decide.

Lbassi — on-device AI first

A wardrobe app implies photos of your clothes and of you. Most send everything to the cloud. Here, image cutout and recommendation run offline, on the device, and the network is only used for what genuinely requires it.

The routing rule — what stays local, what goes remote — is the real design decision. It is exactly the question you face on an enterprise RAG system: what has to leave the perimeter, and why? Recommendations are explainable: the user sees what the suggestion rests on.

Kotlin, Jetpack Compose, Room, Hilt, ML Kit, routed Gemini assistance, virtual try-on via FastAPI.

Wadrari — real-time social

Chat, quests, mini-games, leaderboards, moderation. The professionally interesting part is not the product, it is the authorisation model: RLS policies and RPC functions, so that a compromised mobile client cannot read what it does not own.

It is the same discipline as BidTender’s tenant isolation, applied to a consumer context — the security boundary lives in the database, not the client. Shipped through to Android distribution.

Expo, React Native, TypeScript, Supabase (Postgres, Realtime, RLS, RPC), EAS.

Results

  • Security in the database, not the client — RLS and RPC here, tenant isolation elsewhere
  • Local execution by default, remote when it earns its place: the same cost / latency / privacy trade-off as any LLM system
  • Shipped to distribution, not to prototype

What to take from this

These are not client engagements, and they are not the core of what I sell. They answer one question, the one nobody asks out loud: will this system end up in production, or in a demo?

Got a corpus that fights back?