Case Study · 02 / AI Society Management

NandyAI

An AI-Native Operating System For Housing Societies: Billing, Payments, Complaints, Notices And The Gate In One App, With AI That Reconciles Bank Statements Against Every Flat.

Product Design & Full-Stack Engineering ·

01 · Product
Nandy AI
02 · Category
PropTech SaaS
03 · Timeline
5 Weeks · 2026
04 · Market
Indian Societies
05 · Platforms
Web · PWA · Gate
Nandy AI officer dashboard with dues, collections, complaints, tools, announcements and activity, screenshot of the NandyAI product
Nandy AI officer dashboard with dues, collections, complaints, tools, announcements and activity. Screenshot of the live product.

01 · By The Numbers

The Build,
By The Numbers

Counted Straight From The Codebase And Git History. No Vanity Metrics, No Projections.

  • 46

    Assistant Tools

    Allowlisted, Tool-Calling

  • 8

    User Roles

    Committee · Residents · Staff

  • 50

    SQL Migrations

    PostgreSQL 16 + RLS

  • 77

    Test Files

    Vitest + Property Tests

02 · Overview

From Spreadsheets
To Autopilot

01  The Challenge

Society Payments Arrive Split Across UPI, Bank Transfers And Cheques. Committees Reconciled Them By Hand, Weekends Lost To Spreadsheets.

02  Our Approach

We Paired An AI Extractor With A Deterministic Matcher: The Model Reads Statements, Code Decides Matches, And An Officer Confirms Before Anything Is Written.

03  The Outcome

One Installable App For Dues, Payments, Complaints, Notices And The Gate, With An Assistant That Answers Only From The Society’s Own Records.

03 · What We Built

One App For
The Whole Society

Committees, Residents And Gate Staff Share One System. Each Role Sees Exactly The Pages It Should.

Nandy Reconcile

Upload A Bank Statement; AI Extracts Every Row And A Deterministic Matcher Tags It Matched, Unmatched Or Ambiguous Against Each Flat.

  • PDF · CSV · XLSX
  • DeepSeek
  • Officer Review

Nandy Assistant

46 Allowlisted Tools Answer From Society Records; Any Change Comes Back As A Proposal To Confirm Or Decline.

  • Tool Router
  • Proposals

Billing & Dues

Recurring Maintenance Plans, One-Off Charges, Fines, Late Fees, Credits And Payment Proofs.

  • Plans
  • Fines
  • Credits

Visitors & Gate

A Gate Console With QR Passes, Photo Capture, Pre-Registration And Live Arrival Alerts To Residents.

  • QR Passes
  • Web Push

Tenant Isolation

Session → Tenant → RBAC Middleware Plus Postgres Row-Level Security And A Trigger-Backed Audit Log.

  • RLS
  • RBAC
  • Audit Log

04 · Architecture

Two Walls Around
Every Society

Every Request Passes Session → Tenant → RBAC And Runs In A Transaction Scoped To One Society, With Postgres RLS As The Second Wall.

NandyAI system architecture01 · ClientsResident AppAstro · Installable PWAGate ConsoleQR · Photo CaptureVisitor PortalPre-Registration02 · EdgeCloudflare WorkerAstro SSR · API ProxyExpress APISession · Tenant · RBAC03 · ServicesReconciliationExtract · Match · ReviewAssistant46 Tools · ProposalsBillingPlans · Fines · CreditsVisitorsPasses · AlertsAuditTrigger-Backed Log04 · DataPostgreSQL 16Row-Level SecurityCloudflare R2Statements · PhotosDeepSeekExtraction · AssistantResend + PushEmail · Web Push
  • Sync · REST / GraphQL
  • Async · Kafka Events
  • Service Node

8 Roles · 50 Migrations · Cloudflare Workers

Read The Architecture As Text
Clients
Resident App (Astro · Installable PWA), Gate Console (QR · Photo Capture), Visitor Portal (Pre-Registration)
Edge
Cloudflare Worker (Astro SSR · API Proxy), Express API (Session · Tenant · RBAC)
Services
Reconciliation (Extract · Match · Review), Assistant (46 Tools · Proposals), Billing (Plans · Fines · Credits), Visitors (Passes · Alerts), Audit (Trigger-Backed Log)
Data
PostgreSQL 16 (Row-Level Security), Cloudflare R2 (Statements · Photos), DeepSeek (Extraction · Assistant), Resend + Push (Email · Web Push)

05 · Stack

The Stack,
And The Code

A Lean, Typed Stack With SQL You Can Read, Chosen So Tenant Isolation Is Enforced By The Database, Not Just The App.

01 Frontend
  • Astro 6 SSR
  • Chart.js
  • Lucide
  • PWA + Push
02 Backend
  • Node 20
  • Express 4
  • TypeScript
  • Kysely
03 Data
  • PostgreSQL 16
  • Row-Level Security
  • Cloudflare R2
04 AI
  • DeepSeek
  • Tool Router
  • pdf-parse
  • xlsx
05 Infra
  • Cloudflare Workers
  • Oracle VM
  • GitHub Actions
  • Resend
06 Quality
  • Vitest
  • fast-check
  • Docker Compose
export function classify(  txn: CanonicalTransaction,  residents: ResidentIdentifiers[],): MatchOutcome {  const desc = normalize(txn.description);  const descAlnum = alnum(txn.description);   // Deterministic ordering: residents by id, each resident's flats by flatId.  const ordered = [...residents]    .sort((a, b) => (a.residentId < b.residentId ? -1 : a.residentId > b.residentId ? 1 : 0))    .map((r) => ({      ...r,      flats: [...r.flats].sort((a, b) => (a.flatId < b.flatId ? -1 : a.flatId > b.flatId ? 1 : 0)),    }));   // Build (resident, flat) candidate pairs from MATCHING identifiers.  const pairs: MatchCandidate[] = [];
$ wrangler deploy→ nandy-app published to Cloudflare Workers
Source excerpt from matching.ts (TypeScript).

06 · PageSpeed

Fast, Accessible,
Found In Search

Google PageSpeed Insights Scores For nandyai.com: Speed, Accessibility And SEO Engineered In From Day One.

  • 99Performance
  • 100Accessibility
  • 100Best Practices
  • 100SEO

Lighthouse · Google PageSpeed Insights · Run It Yourself ↗

Next Project  →

Flowgentic

Multi-Agent Orchestration · 2025

View Project  →

Have A Product
In Mind?

Tell Us What You’re Building. We’ll Reply Within One Business Day With A Scoped Plan.