A micro-task marketplace with a real money economy
55
API endpoints across 6 collections and 3 roles
MicroEarn connects buyers posting paid tasks with workers who complete them for digital coins — coins that are bought with real Stripe payments and withdrawn as real money. It's a solo build where money correctness had to be perfect.
Video_CS_001
Services
Product Design
Frontend Engineering (React 19)
Backend Engineering (Express 5)
Database Design (MongoDB)
Authentication (Firebase)
Payments (Stripe)
Roles & Permissions
Date
2025 — 2026
View live
the challenge
Micro-task marketplaces are simple to describe and hard to build well: buyers post paid tasks, workers complete them for money, and a platform takes its cut. The hard parts are financial — coins must be bought with real money, workers must be paid out, and no balance can ever go negative or be credited twice.
As a solo student project, the scope was a full product: three roles (buyer, worker, admin), a virtual coin economy backed by real Stripe payments, worker withdrawals, and a polished multi-dashboard experience across 30 client routes.
As a solo student project, the scope was a full product: three roles (buyer, worker, admin), a virtual coin economy backed by real Stripe payments, worker withdrawals, and a polished multi-dashboard experience across 30 client routes.
Video_CS_002
IMAGE_CS_001

IMAGE_CS_002

the solution
The architecture is deliberately split: a React 19 + Vite single-page app served by Firebase Hosting, and an Express 5 + MongoDB API deployed to Vercel — 55 endpoints across user, task, payment, submission, withdrawal, statistic, notification, and admin modules.
The economy is server-authoritative. Creating a task deducts its full budget atomically and refunds unfilled slots on deletion; approving a submission credits a worker exactly once; approving a withdrawal uses a conditional update that can never push a balance below zero. Stripe runs on two paths — client confirmation and a signature-verified raw-body webhook — both credited idempotently against Stripe event and payment-intent IDs so money is never double-counted.
Security was treated as core, not afterthought: sanitize-html allowlists for rich task content, javascript-URI stripping, regex-escaped search, and Firebase ID-token verification with dedicated role guards on every protected route. The client delivers the full surface — rich text editor, image upload with Cloudinary→ImgBB fallback, 30-second-polled notifications, Recharts analytics for all three roles, light/dark theme, skeletons, and accessibility support.
The economy is server-authoritative. Creating a task deducts its full budget atomically and refunds unfilled slots on deletion; approving a submission credits a worker exactly once; approving a withdrawal uses a conditional update that can never push a balance below zero. Stripe runs on two paths — client confirmation and a signature-verified raw-body webhook — both credited idempotently against Stripe event and payment-intent IDs so money is never double-counted.
Security was treated as core, not afterthought: sanitize-html allowlists for rich task content, javascript-URI stripping, regex-escaped search, and Firebase ID-token verification with dedicated role guards on every protected route. The client delivers the full surface — rich text editor, image upload with Cloudinary→ImgBB fallback, 30-second-polled notifications, Recharts analytics for all three roles, light/dark theme, skeletons, and accessibility support.
Video_CS_003
IMAGE_CS_003

the result
A production-deployed marketplace written over roughly a year — 265 commits across client and server, ~21,000 lines of application code, 55 endpoints, 30 client routes, and 89 components. Both apps are live, and the server's README documents the verification pass: lint with 0 errors, successful production builds, and the security fixes that matter most.
The project proves the full commerce stack on a solo build — atomic money moves, idempotent payments, role-based access, and a product that looks and feels finished.
The project proves the full commerce stack on a solo build — atomic money moves, idempotent payments, role-based access, and a product that looks and feels finished.
Let's build something remarkable
CTA_ZN_195
Zeanur Rahaman Zeon
What are you building?
USER_1230
I need help turning an idea into a working product.
U
USER_1230
I have a problem and want to bring it to life.
U
Zeanur Rahaman Zeon
Awesome — let's talk about the problem and the goals.
Zeanur Rahaman Zeon
I'm in — let's find the right tools for what you're building.
Featured client projects
WRK_CS_267
