Batoul Hodroj, home
All work
Live

Lead Full-Stack & AI Engineer · 2026

AI-Powered POS

A point-of-sale that answers your questions.

  • Rust
  • Flutter
  • Claude API
  • actix-web
  • MySQL
The till screen: product categories on the left and the current bill on the right, with the total shown in both US dollars and Lebanese lira, and every label in English and Arabic.

The problem

Small cafés and shops in Lebanon trade in two currencies at once, at an exchange rate that keeps moving. A basic till can't tell the owner what they actually earned this week, what is about to run out, or who still owes them money.

What I built

A cloud point-of-sale for many shops at once. One app runs both as a Windows till and as a web app, with a café version for table service. It keeps every shop's sales, stock, expenses and debts in one place, in dollars and lira, and turns them into plain answers.

  • Till with categories, bill, discounts, refunds and receipts
  • Dollars and lira everywhere: prices, totals, debts, part-payments and two cash drawers
  • End-of-day cash close: expected against counted cash for each currency, with profit and warnings
  • Customer debts and supplier bills, paid in either currency
  • Stock, expenses, and profit between any two dates
  • Café table service with an open tab per table
  • Staff roles for owner, manager and cashier
  • Every label in English and Arabic side by side, for owners and staff who read different languages
  • Six automatic insight reports, built on clear business rules: margins, stock running out, reorder timing, unusual refunds, overdue debts and currency exposure

The AI inside

Two features use Anthropic's Claude. With "Ask about your shop", the owner types a question like "how did we do last week?" in English or Arabic and gets a short answer about their own shop. Only totals ever leave the server — never customer names, staff names or single sales — and each shop has a daily limit so costs stay predictable. With invoice scanning, the owner photographs a supplier invoice in Arabic, French or English; the AI reads the lines, is instructed never to guess a number it can't read, and nothing is saved until the owner has checked it.

Results

  • Many shops share one system, and each shop's data is kept apart — proven by 39 tests that pit two shops against each other
  • 413 automated server tests, all passing (September 2026)
  • Stock can't go negative, even when two cashiers sell the last item at the same moment
  • Payments and checkouts are saved completely or not at all, and a café table can't be charged twice

What I was responsible for

  • Product planning: turning shop owners' requests into a phased plan, such as the cash close and profit by date
  • Architecture: the multi-shop data model, role and business-type permissions, and the dollar-and-lira ledger
  • Backend development in Rust with actix-web and MySQL
  • Flutter app development for the web and Windows
  • AI integration: plain-language questions and invoice scanning on Anthropic's Claude, with the privacy guard, daily limits and usage records
  • Security and data-integrity audit and fixes: shop isolation, crash fixes, stock and money integrity
  • Testing strategy: integration tests against a real MySQL database and two-shop isolation tests
  • Deployment and operations: Linux server, nginx, database migrations and rollbacks
  • Documentation and handover: setup and deployment guides, a runbook, and Arabic and English user guides for shop owners

Have an idea? Let's plan it.

Plan your project