Skip to content
SS
Sunny Sahsi
Back to Projects
Featured Projectcompleted

Home Asset Manager

A personal digital operating system for household assets, purchase invoices, warranty lifecycles, and automated maintenance schedules with multimodal AI invoice OCR.

TimelineJun 2024 — Nov 2024
Visibilitypublic
Artifacts
Next.jsReact NativeExpo SDKNode.jsPostgreSQLPrismaRedisBullMQGemini AITypeScript
Project screenshot
1. The Problem & Context

Why this project was initiated

Turborepo monorepo encompassing a Next.js 14 web dashboard, React Native mobile app with camera viewfinder capture, and a modular Node.js/TypeScript backend. Features Gemini 2.5 Flash multimodal OCR for invoice extraction and Redis/BullMQ background queues for automated warranty expiration and appliance maintenance reminders.

2. Technical Implementation & Highlights

Engineering Deliverables

Turborepo monorepo sharing strict Zod schemas and validation models across web, mobile, and API.
Gemini 2.5 Flash multimodal OCR for automated extraction of invoice serial numbers, vendors, and warranty dates.
Distributed BullMQ background job queues with Redis for warranty expiry alerts and recurring maintenance reminders.
Multi-platform UI with Next.js 14 App Router for desktop management and Expo React Native for mobile camera capture.

Deep Dive: Monorepo Architecture & Multimodal AI Invoice OCR

Home Asset Manager is a personal digital operating system designed to catalog physical household assets, track warranty lifecycles, and automate recurring maintenance tasks.

It solves the real-world headache of misplaced paper receipts, forgotten warranty expirations, and missed appliance servicing across multi-device households.

Turborepo Monorepo Architecture

The platform is structured as an end-to-end type-safe Turborepo Monorepo managed with pnpm:

code
home_assets/
├── apps/
│   ├── server/        # Modular Monolith (Node.js + Express + TypeScript)
│   ├── web/           # Next.js 14 App Router Desktop & Tablet Dashboard
│   └── mobile/        # React Native (Expo SDK 51) Camera Capture & Scanner
│
├── packages/
│   ├── db/            # Prisma ORM schema & PostgreSQL 16 client
│   ├── validation/    # Shared Zod validation schemas across web, mobile, and API
│   └── tokens/        # Shared currency (INR ₹), date formatters, and design tokens
│
└── docker-compose.yml # PostgreSQL 16 & Redis 7 BullMQ service instances

1. Multimodal AI Invoice OCR Pipeline

Rather than forcing users to manually type serial numbers, purchase dates, and vendor names, Home Asset Manager uses Gemini 2.5 Flash multimodal vision extraction:

  • •User snaps a photo of a physical receipt or invoice using the mobile camera viewfinder.
  • •The image is compressed on-device and dispatched to /api/v1/invoices/extract.
  • •Gemini extracts structured data adhering strictly to a JSON schema:
packages/validation/src/invoice-schema.ts
import { z } from "zod";

export const ExtractedInvoiceSchema = z.object({
  vendorName: z.string().min(1),
  purchaseDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
  totalAmount: z.number().positive(),
  currency: z.string().default("INR"),
  serialNumber: z.string().nullable().optional(),
  modelNumber: z.string().nullable().optional(),
  warrantyMonths: z.number().int().min(0).default(12),
  category: z.enum(["ELECTRONICS", "APPLIANCE", "VEHICLE", "FURNITURE", "TOOLS"]),
  items: z.array(
    z.object({
      name: z.string(),
      price: z.number(),
    })
  ),
});

2. Automated Lifecycle Notifications with Redis & BullMQ

Warranties and service intervals are managed through distributed job queues backed by Redis:

  • •Warranty Expiry Alerts: Scheduled BullMQ jobs trigger push notifications at 30 days, 7 days, and 24 hours prior to expiration.
  • •Maintenance Schedules: Recurring jobs calculate filter changes, water purifier servicing, and vehicle maintenance dates based on calendar intervals or usage heuristics.
  • •Fail-Safe Retries: Jobs feature exponential backoff with dead-letter queue (DLQ) logging in PostgreSQL.

Engineering Outcome & Takeaways

Shipping this project reinforced the value of clean architectural boundaries, automated verification loops, and clear error telemetry. In subsequent iterations, I focus on system observability, end-to-end integration test suites, and strict performance profiling under load.