All projects

Multi-tenant SaaS for residential buildings

Recebe Avisa

Receives, logs and notifies. On its own.

Year
2026
Role
Product · Backend · Frontend · Infrastructure · Observability
Status
MVP in development

Private repository — this case study is the project's public record. A public demo is being prepared with an isolated environment and fictional data.

The problem

Package handling in residential buildings still runs on notebooks, spreadsheets and group chats. The doorman writes by hand at peak hours, the resident only learns a package arrived when they walk past the desk, and when something goes missing there is no record of who received it or who picked it up. The friction is daily and it lands on the front desk.

The solution

The doorman photographs the label straight from the phone's browser. The API reads the text with OCR, finds the resident through fuzzy search and fires the notification on their preferred channel — WhatsApp, Telegram or e-mail — falling back automatically if the first one fails. Pickup closes the loop and leaves an auditable record.

Technical decisions

  1. 01

    OCR never blocks the record

    The scan route always answers success. If OCR fails, comes back unreadable or low-confidence, the flow degrades: the label is recorded anyway and the doorman confirms the resident from ranked suggestions or manual search. A front desk at peak hour cannot stall over a crumpled label — and that is the difference between a system that gets used and one that gets abandoned in week one.

  2. 02

    Fuzzy search instead of exact matching

    The name printed on a label almost never matches the registry: it arrives abbreviated, under the buyer's name, without accents or misspelled by the sender. Matching uses trigram similarity plus per-resident aliases, returning ranked suggestions rather than a binary hit or miss.

  3. 03

    Multi-tenant by column, filtered in every query

    Every table carries the building identifier and no query ever crosses tenants — that's an architecture rule, not a convention. A building-management SaaS that leaks data between clients does not get a second commercial chance.

  4. 04

    Personal data out of telemetry, with an automated gate

    Telemetry is OpenTelemetry collected by an agent that strips PII inside the VM, before anything leaves it. A PII checker runs in CI and breaks the build if personal data shows up in a span, metric or log. The gate isn't theoretical: a real leak, caused by how the ORM interpolates values inside SQL, is what drove query normalization before they become span attributes.

  5. 05

    Zero cost as an architectural requirement

    The whole MVP runs on free tiers: an ARM VM on Oracle Cloud, a thousand OCR requests a month, WhatsApp Cloud API and free-tier observability. Managed queues and paid services only enter past fifty buildings. Declaring the cost constraint up front avoids the architecture that gets expensive before it has a customer.

What shipped

  • API with role-based auth, resident registry with aliases, full intake and pickup flow, and a manager dashboard
  • 27 automated tests over the API (Jest + supertest)
  • Full CI/CD: ARM64 image published to the registry, deploy over a private network without opening a single new port, smoke test and automatic rollback
  • Observability as code: versioned dashboards and 13 alerts, notified over Telegram
  • Infrastructure in Terraform on Oracle Cloud, with 30-day object expiry and a budget alert
  • Working front-desk app running in a test environment

Stack

  • React 18
  • Vite
  • Node.js 20
  • Express
  • Sequelize
  • PostgreSQL 15 · pg_trgm
  • Cloud Vision OCR
  • WhatsApp Cloud API
  • Terraform · OCI