Personal project, 2026

Yaadi, an offline-first notes app

An installable notes app that works offline and syncs when it can, on a near-zero-cost serverless backend.

Role
Solo project
Domain
Productivity
Stack
  • React
  • TypeScript
  • IndexedDB
  • FastAPI
  • AWS Lambda
  • DynamoDB
  • S3
  • AWS SAM
  • SSM
  • pytest
Read the write-up View the code on GitHub

1Problem

A notes app should open and save instantly with no connection, then sync across devices without losing edits.

2Approach

  1. Built an installable PWA in React and TypeScript, with IndexedDB as the source of truth.
  2. Wrote a background sync engine that reconciles with the server using last-write-wins, tombstones and a clock-skew-safe pull cursor.
  3. Ran the backend as FastAPI on AWS Lambda, with a single-table DynamoDB design (plus a GSI for sync queries), S3 presigned URLs and SSM secrets, all provisioned with AWS SAM.
Yaadi, an offline-first notes app architectureAn installable React and TypeScript PWA keeps notes in IndexedDB, the source of truth. A background sync engine reconciles with the server using last-write-wins, tombstones and a clock-skew-safe pull cursor. The API is FastAPI on AWS Lambda, storing notes in a single-table DynamoDB design with a GSI for sync queries. Files upload straight from the client to S3 with presigned URLs. Secrets live in SSM, and everything is provisioned with AWS SAM.sync: LWW, tombstones, skew-safe cursorReact + TypeScript PWAinstallable, works offlineIndexedDBsource of truthFastAPI on AWS Lambdasecrets in SSMDynamoDBsingle table + GSIS3presigned, direct uploadprovisioned with AWS SAM

3Key decisions

  • IndexedDB as the source of truth.

    Reading and writing notes works offline, and the server keeps devices in step.

  • Tombstones and a clock-skew-safe pull cursor.

    Deletes sync too, and a device with a wrong clock still gets every change.

  • Presigned S3 uploads.

    Files go straight to S3 and never pass through Lambda.

  • argon2, 15-minute JWTs with refresh, and an escalating login lockout.

    I hardened auth first, then checked it in a written security self-audit.

4Result

A working offline-first app on a near-zero-cost backend, with the API covered by 23 pytest tests against moto-mocked AWS.

Want to go deeper on this project?

I can walk you through the decisions and trade-offs behind it.

Email hello@jaygadhiya.com

Read more

I didn’t want to pay for Obsidian Sync, so I built my own notes app on AWS for $0Medium, Oct 2026