Skip to content
Lubo Bali
Featured by Neon (Databricks)

Case study · my own product, built solo

LuBot.ai: An AI analyst that learns you

Small businesses have their numbers everywhere and no analyst to ask what they mean.

LuBot answers questions about your website, your files and your stock portfolio in plain English, with charts and the reasons behind them. The more you use it, the better it knows what you care about.

  • 260,000+ lines of code, built solo
  • 83 stock analysis tools
  • 36 AI workers learning in the background

Visit LuBot.ai Read the Neon article

LuBot stock view: Apple daily candles with the 50-day average, volume and RSI, and a Buy signal
Real LuBot screen · demo data

Before and after

Without LuBot
  1. Export data from each toolAnalytics, spreadsheets, brokerpain point
  2. Build the report by handSpreadsheetspain point
  3. Guess what the numbers meanNo analyst on the teampain point
  4. Decide days laterMeetings
With LuBot

LuBot

  1. Ask in plain English
  2. Answer from your own data
  3. Charts and the why behind them
  4. It remembers what you care about

A day with LuBot

Alex runs a small online shop and invests on the side. No data team, no analyst. Here is a day with LuBot (an example, every feature is real).

  1. Morning

    LuBot noticed before Alex asked

    LuBot is built to watch the website on its own: a spike, a page that suddenly carries all the traffic, a cause hiding inside the averages. Alex gets a short card, not a dashboard to dig through.

    Behind this: 36 background AI workers, built in

    LuBot 'AI noticed' cards: a segment move, 5 pages driving 91% of clicks, Thursday as the biggest day, and a soft warning about Monday
    Real LuBot screen · demo website
  2. Mid-morning

    “Can I sleep well with my portfolio?”

    Alex asks in plain English. LuBot answers with a Sleep Well Score from 0 to 100 and the reasons, compares the stocks the way legendary investors would, and gently points out when a question sounds driven by fear or greed.

    Behind this: 83 stock analysis tools, brokerage sync via Plaid (read-only)

    LuBot portfolio table: 6 stocks with shares, average cost, current price, value and profit, total value $63,944.50
    Real LuBot screen · sample portfolio
  3. Afternoon

    “What sold best last month?”

    Alex drops in a spreadsheet and a PDF. LuBot draws the chart, flags duplicate and empty rows, and shows exactly where each answer came from.

    Behind this: One private database just for Alex. The reason Neon wrote about LuBot

  4. Next day

    It already knows Alex

    Shorter answers, because Alex likes them short. Suggestions for what to look at next, the way Netflix suggests a show. Every number is computed by code, never guessed by the AI.

    Behind this: Memory of each user + 12,000+ automated tests

    • Predict next week's traffic
    • What pages are losing traffic?
    • Compare this week to last week

The full build, by the numbers

  • 260,000+ lines of code
  • 12,000+ automated tests
  • 1,800+ commits since March 2026
  • 169 API endpoints
  • 84 database tables
  • 83 stock analysis tools
  • 36 background AI workers
  • 24 specialist chat handlers
  • 9 tools inside Claude (MCP)
  • 3 MCP directories list it
  • 1 database per customer
  • 1 engineer: me

3 hard problems I solved

  1. Every customer's data stays apart

    Each customer gets their own database, so nobody can ever see someone else's numbers, even by mistake.

    Neon (Databricks) wrote a case study about this design.

  2. The right AI for each job, and it never goes down

    Each question goes to the model that does that job best: Claude, GPT or NVIDIA. If a provider is down, LuBot switches to a backup by itself.

    One company's outage doesn't stop the answers.

  3. The AI never does the math

    Python calculates every number first. The AI only explains it in plain words.

    The numbers in the chat always match the numbers on the screen.

My role
Founder and only engineer
When
Built solo, 2026
Built with
Python · FastAPI · PostgreSQL (Neon) · React · OpenRouter · DeepInfra · MCP · AWS S3
For engineers: how it is built

One FastAPI backend, a React app and an MCP server for Claude. The decisions that matter:

  1. You ask
    • Web app (React)
    • Inside Claude (MCP)
  2. Backend
    • FastAPI · 169 endpoints
    • 36 background workers
  3. AI
    • OpenRouter: Claude · GPT · Nemotron
    • Backups: Groq · OpenAI · NVIDIA NIM
    • Embeddings: DeepInfra (text + images)
  4. Data
    • Clerk (sign-in)
    • Supabase (admin)
    • Neon: 1 database per customer
    • AWS S3 + Parquet + DuckDB (files)
  • Database per tenant: one Neon Postgres per customer. Plain Postgres SQL only, and all Neon-specific code lives in one file, so the data can move to any Postgres host.
  • Best model per task, chosen by benchmark (the SQL planner was tested on 25 real cases before picking). OpenRouter first, with a backup provider when it fails.
  • Multimodal embeddings (NVIDIA Nemotron, served by DeepInfra), so pictures inside a PDF can be found too.
  • Files live in S3 as Parquet and are queried with DuckDB, with a local disk cache for speed.
  • Numbers are computed in Python and handed to the model as labeled fields. The model only writes the words around them.
  • 12,000+ automated tests run on every push. CI mirrors production.

Want a plan like this for your business? Get your free AI blueprint in about a minute.

Tell me your problem. I'll find a way to build the solution.

Available now

Book a free 30-min call (opens Calendly in a new tab)

No obligation. Pick a time that suits you.

Prefer email?data@lubobali.com