
Flutter + Node.js + MongoDB + AWS — parents assign tasks for points; kids redeem in a parent-curated toy marketplace.
Parents assign chores and rewards; children complete tasks to earn points and redeem in a parent-curated toy and treat marketplace. The product needed a trustworthy closed loop — no surprise charges, clear roles, and simple UX for kids while parents retain inventory control.
Flutter client talks to a Node.js API with MongoDB models for households, members, tasks, ledgers, and marketplace SKUs; AWS S3 for uploads with server-issued URLs; notifications and email hooks for parent approvals where needed.
Household RBAC (parent vs child), ledger integrity for points, redemption against stock, media for task proof, and AWS-hosted assets without complicating the mobile client with presign logic everywhere.

Invite parents, attach children, enforce route-level permissions in the API.
Create, assign, complete, and approve tasks with optional photo proof uploaded to S3.
Append-only style ledger entries for earns, holds, and spends to avoid race conditions.
Parents seed SKUs; kids browse and redeem; stock decrements atomically with redemption records.
Push/email nudges for approvals and completed chores to keep parents in the loop.
Closed-loop kid marketplace: tasks mint points, redemptions debit ledgers and decrement parent-approved inventory — designed so support could explain any balance from immutable transaction rows in MongoDB.
Closed-loop kid marketplace: tasks mint points, redemptions debit ledgers and decrement parent-approved inventory — designed so support could explain any balance from immutable transaction rows in MongoDB.



Explicit transactions made disputes and “where did my points go?” support trivial.
Server-side S3 URLs kept secrets off devices while Flutter stayed thin.
Durable object storage for task photos and catalog images with CDN-friendly URLs.
MongoDB’s flexible schema fit evolving reward types without migrations every sprint.
We take on a small number of projects at a time. If the problem is hard, we're interested.