Business software, safe workflows and real-time infrastructure. A closer look at the decisions beneath the interface.
Hardware Store ERPOne sale. Three records.
InvoiceCreated
InventoryUpdated
Customer ledgerBalanced
BEGIN → COMMIT
Everything goes through. Or nothing does.PostgreSQL / atomic transaction
Production business software
Hardware Store ERP
One invoice. Every part in agreement.
Billing is never just a PDF. It changes stock, customer balances and the books. I built a retail and wholesale ERP that keeps those pieces together.
React
Node.js
PostgreSQL
Redis
AWS
Inside the system +
Keep the transaction whole
Invoice creation uses a six-step PostgreSQL transaction with FOR UPDATE row locking. Invoice, stock and ledger updates succeed together, avoiding partial business records.
Move slow work out of the way
BullMQ and Redis workers generate PDFs with Puppeteer, then store them privately in S3. PostgreSQL pg_trgm search supports partial and misspelled product names.
Run it in the real world
Billing, inventory, pricing, unit conversion, customer ledgers and financial reports, deployed on Ubuntu with AWS RDS PostgreSQL and CloudFront.
Check the role. Check the state. Then move forward.
Tenant boundary · Role check · Valid state
Current engineering · CodeApto
Procure-to-Pay platform
A workflow is only as strong as its boundaries.
At CodeApto, I work across an enterprise procurement product: from purchase requests and supplier onboarding to approvals, sourcing and purchase-order release.
React
TypeScript
Rust / Axum
PostgreSQL
Inside the system +
Connect the whole workflow
Building frontend features and backend flows across purchase requisitions, approvals, sourcing, supplier onboarding, award decisions and purchase-order release.
Make invalid transitions impossible
Improved workflow paths to prevent invalid status changes, duplicate actions and unauthorized PO release, with tests around the main paths.
Respect the boundary
Role-based access, tenant-specific data handling and workflow rules are part of the feature, not something added after the interface. This account uses only public resume-level information.
Jun 2026 — present
Vartalaap / message delivery
One message. Independent deliveries.
AWS LambdaWebSocket APIDynamoDB
An illustrated fan-out
Message
AWaitingBWaitingCWaiting
Try sending with one recipient offline. Watch which deliveries complete.
A recipient going offline should not stop everyone else’s conversation.
Serverless communication
Vartalaap
Conversations move. Failures stay contained.
A real-time communication platform built around authenticated connections, clear data access patterns and message delivery that can tolerate an individual failure.
Next.js
Lambda
DynamoDB
Cognito
Chime SDK
Inside the system +
A connection with an identity
Authenticated WebSocket connections support one-to-one and group messaging, with audio/video calls and push notifications using AWS-managed services.
Design around access patterns
DynamoDB single-table access patterns underpin the communication backend. Parallel fan-out with Promise.allSettled keeps one failed recipient from stopping the rest of the broadcast.
Carry the work into operations
My deployment experience also includes AWS EC2, Route 53, IAM and Security Groups at Technosys, with Docker and GitHub Actions workflows for repeatable releases and simpler rollback.
Independent project
Earlier work & experiments
The full collection.
8 / 8 projects
Business platform
Shiv Cement Store
2025 — 2026+
A customer website, staff/admin mobile app and REST API for a cement retailer. Product enquiries, quotations and staff workflows connect across web and mobile.
Includes a multilingual RAG assistant, GPS and rotating-QR attendance, role-based authentication and S3 uploads. Existing architecture artwork is retained.