Sanchayam: A Self-Hosted Multi-Asset Portfolio Tracker

What Sanchayam is a self-hosted multi-asset portfolio tracker. It tracks equity (Indian and US markets), mutual funds, crypto, bank balances, and real estate under one unified schema. It computes FIFO cost basis, realized P&L, and XIRR per holding and across the entire portfolio. It handles multiple currencies with automatic FX conversion. Multiple users can share a family portfolio view. Live: sanchayam.com - hosted version, request access and use it directly Backend: github.com/sagarnayak/sanchayamBackend-public Frontend: github.com/sagarnayak/sanchayamFrontend-public Why Most portfolio trackers are either too narrow (they handle equities but not real estate), too opinionated (they force a specific cost basis method), or they require handing your financial data to a third party. Sanchayam is self-hosted, schema-driven, and designed for the full breadth of assets a typical Indian investor actually holds: listed equities, unlisted holdings, mutual fund NAVs, crypto, bank balances across currencies, and illiquid real estate. ...

April 2, 2026 · 4 min · 706 words · Sagar Nayak

Deploying MediaBridge

Part of the MediaBridge series. Overview MediaBridge has two deployable components and two AWS-side components: Backend: Node.js process running as a systemd service behind nginx Frontend: Static React build deployed to S3, served via CloudFront Thumbnail Lambda: AWS Lambda handling S3 object events Archive restore pipeline: CloudTrail, EventBridge, and two Lambda functions Prerequisites A Linux server with Node.js 18+, PostgreSQL, and nginx An AWS account with at least one S3 bucket and IAM credentials for it A domain with DNS pointing to your server (for TLS) Backend Clone and install: ...

March 27, 2026 · 5 min · 954 words · Sagar Nayak

Lambda Thumbnail Pipeline

Part of the MediaBridge series. Why Thumbnails in Lambda Thumbnail generation on the backend server would mean every file upload triggers a download from S3, a resize operation, and an upload back to S3 - all inline with the upload flow. That adds latency to every upload, burns bandwidth on the server, and blocks the upload response until the thumbnail is ready. Lambda is a better fit. S3 fires an event for every object creation. The Lambda processes it asynchronously, after the upload has already completed and the user has their presigned URL. The backend is not involved. ...

March 21, 2026 · 5 min · 918 words · Sagar Nayak

S3 Archive Restore Automation

Part of the MediaBridge series. The Problem S3 Glacier and Glacier Deep Archive are cheap cold storage tiers. Files in Glacier take 3-5 hours to restore. Files in Deep Archive take up to 12 hours. When a user tries to access an archived file, S3 returns a 403 (or the object is simply missing from the listing depending on how the bucket is configured). The user gets no feedback about what happened or when the file will be available. ...

March 15, 2026 · 5 min · 929 words · Sagar Nayak

Global Cross-Bucket Search

Part of the MediaBridge series. Per-Bucket Search vs Global Search The single-bucket search described in the previous post runs one WebSocket and searches one bucket from a given prefix. Global search is different: it searches every bucket the user has access to simultaneously, merging results from all of them into a single view. A user assigned to 10 buckets gets 10 WebSocket connections opened in parallel. Results from all 10 stream in at the same time. Each bucket runs its own DFS traversal independently. ...

March 9, 2026 · 4 min · 783 words · Sagar Nayak