Skip to content
Menu
Back

Ombrah

Founder & Solo Developer

A conversational AI day-planner for Italian cities. Users describe their day in natural Italian (text or voice), and the agent plans, books restaurants, coworking, events, and activities, then writes everything to Apple Calendar. Bologna-first, mobile-first, built on Expo, Next.js, tRPC, Supabase, and Gemini 2.5 Flash.

Expo, React Native, Next.js 15, TypeScript, tRPC v11, Zod, Supabase, PostgreSQL, Tailwind, NativeWind, Gemini 2.5 Flash, Vercel AI SDK, Turborepo

Overview

Ombrah is an AI chief of staff for your day in an Italian city. You describe what you want — naturally, in Italian — and Ombrah plans, books, and confirms everything. You just show up.

The canonical example: a user says “Domani sono a Bologna. Pranzo poke, coworking dalle 3 alle 6, cena sushi per 4 alle 20.” Ombrah replies with a stack of cards (restaurant, coworking space, sushi place) with times and addresses. One tap on “Conferma tutto” writes three events to Apple Calendar and fires off booking requests — 30 seconds later, the day is planned.

The Wedge

Big assistants (Google, Apple, ChatGPT) are weak on local Italian supply and weak on the last-mile booking step. They can suggest a restaurant; they can’t reliably reserve a table. They know Milan; they don’t know which sushi place in Bologna takes a party of 4 at 8pm on a Tuesday. Ombrah’s positioning:

  • Italy-first local supply — restaurants, coworking, events, activities, curated for Italian cities
  • Booking that actually works — the agent owns the last mile, falling through API → web form → WhatsApp → email → human as needed
  • One city deep, not 50 cities shallow — Bologna fully wired before any expansion

Architecture

Turborepo monorepo with two apps and shared packages:

  • apps/web — Next.js 15 (SSR, SEO landing pages, tRPC HTTP handler)
  • apps/mobile — Expo / React Native (the primary product surface)
  • packages/ai — planner agent, extraction, booking logic
  • packages/shared — Zod schemas, types, constants
  • packages/api-client — tRPC v11 + TanStack Query hooks
  • packages/supabase — Supabase client, auth helpers, generated DB types

How the Agent Works

User input (text or voice, Italian) flows into a planner LLM (Gemini 2.5 Flash via Vercel AI SDK) with a hand-curated bologna-places.json context. The model returns a Zod-validated Plan — an ordered list of PlanItems with place, time window, party size, and notes. The mobile app renders them as a stack of tappable cards. “Conferma tutto” writes the plan to Apple Calendar via expo-calendar and dispatches booking requests by email for manual fulfillment in v0.

A two-tier model routing strategy keeps costs predictable: Gemini 2.5 Flash for agentic planning and user-visible reasoning (~97% reliability tier, generous free tier), and DeepSeek V3.2 for high-volume low-stakes work like scraping cleanup and classification where prompt caching dominates economics.

Current Phase — Demo Sprint

The goal is a 60-second video that makes a friend say “wait, that worked?” before any real booking integrations are built:

  • Mobile-only Expo app with a chat-first home screen
  • Hand-curated Bologna places dataset (~15–20 restaurants, coworking, events)
  • Planner function with Zod-validated structured output
  • Voice input via expo-speech-recognition (Italian locale)
  • Apple Calendar write-through
  • Fake fulfillment via email-to-self (Resend)

Roadmap

  • Phase 1 — Replace fakes with real integrations: TheFork API for restaurants, TicketOne / Eventbrite for events, Supabase Auth for user accounts and booking history
  • Phase 2 — Replace the curated JSON with a maintained data pipeline: Firecrawl discovery, DeepSeek extraction, human curation, freshness scoring
  • Phase 3 — Milan as the second city, add categories (cinema, museums, day trips, transit), Italian SEO funnel
  • Phase 4 — Monetization via featured listings, affiliate commissions (TheFork, TicketOne), optional convenience fees on complex bookings

Technical Highlights

  • Turborepo + pnpm workspace with shared TypeScript packages across web and mobile
  • tRPC v11 end-to-end type safety between Expo mobile client and Next.js API routes
  • Zod schemas as the single source of truth for agent outputs, API contracts, and database types
  • Vercel AI SDK with structured output generation and model routing
  • Supabase (PostgreSQL) with pgvector and Italian tsvector for hybrid semantic + keyword search
  • Expo Router with NativeWind and react-native-reusables for a shadcn-equivalent mobile UI
  • Immutable data patterns throughout, files < 400 lines, functions < 50 lines, TDD for packages and tRPC procedures