ABOUT WORK CERTS SKILLS CONTACT
← BACK TO CASE FILES
FILE #004 COMPLETED 2026

LUMO Marketplace

Full-Stack MERN Real-Time Security Audit
CODE UNDER INTERROGATION

A features-first marketplace build — then a 44-finding self-audit, every issue paired with the exact fix.

LUMO is a sustainable-fashion marketplace: React 19 SPA, Express/MongoDB API, Socket.IO chat, Stripe and Khalti payments, multi-vendor onboarding and 3D product previews. Once it worked end to end, I re-entered my own codebase as an adversary and documented what I found.

01
FIELD NOTE

Interrogated my own code. It confessed 44 times.

LUMO is a full-stack sustainable-fashion marketplace built as my final-year project — a React 19 single-page app over an Express and MongoDB API, with real-time chat on Socket.IO, Stripe and Khalti payment integration, multi-vendor store onboarding, and 3D product previews. Once the core flows worked end to end, I went back through all of it deliberately hunting for what I had gotten wrong — and wrote up 44 findings, each with the fix I would ship.

02

Solo, features-first builds accumulate invisible risk. A marketplace moves money and inventory: an unguarded race condition can oversell stock, a duplicated auth path can quietly re-open the exact attack the session cookie was built to stop, and validation that exists but is never wired up might as well not exist. Nothing was broken on the happy path — which is precisely what makes these bugs dangerous.

03
FIELD NOTE

Two buyers. One last unit. Both got it. That's the bug.

G-01
Ship a working end-to-end multi-vendor marketplace — authentication, vendor onboarding, cart, checkout, real-time chat, payments, and 3D product previews.
G-02
Re-enter the finished codebase as an adversary: hunt systematically for what breaks under load, under attack, or under two requests landing in the same instant.
G-03
Document every finding at a severity tier with a concrete, implementable fix — real code ready to merge, not vague advice.
04

I built the entire stack and then audited it: 48 backend files and 69 frontend files, in systematic passes over authentication, checkout and inventory, input validation, file uploads, and the frontend data layer.

RESPONSIBILITIES
FULL-STACK DEVELOPMENT
SECURITY & CONCURRENCY AUDIT
FIX DESIGN & DOCUMENTATION
05
STEP 01

Build Features-First

The full marketplace first — REST API, SPA, sockets, payment verification — proving every flow end to end before hardening anything.

STEP 02

Adversarial Pass

A systematic sweep over auth, checkout and inventory, validation, uploads, and the frontend data layer — looking for load, attack, and race failures.

STEP 03

Triage by Severity

Every finding classed critical, high, medium, or low by exploit path and effort — 1 / 8 / 13 / 17 across the four tiers, plus nine practices verified clean.

STEP 04

Design the Fix

Each finding paired with ready-to-merge code — atomic updates, wired validators, batched queries — not just a description of the problem.

06
ATOMIC INVENTORY

Two buyers racing for the last unit could both win — the stock check and the decrement were separate steps. One conditional update makes overselling structurally impossible; the second buyer gets an honest 409.

SEEDED SUPER-ADMIN

The seed script created a working admin login with its password printed in source — the one finding needing no chained bug to exploit. Now pulled from the environment or generated randomly with forced rotation.

UNWIRED VALIDATION

Vendor-onboarding and product rules were fully written, imported — and never attached to their routes. Two middleware lines each switched on validation for the highest-traffic write paths in the app.

CHAT THAT SCALES

The inbox loaded every thread's entire message history on every visit. Lists now exclude messages and detail views page the most recent fifty — dodging MongoDB's 16MB document ceiling before it hit the busiest threads.

BATCHED CHECKOUT

Checkout made one database round trip per line item — roughly fifteen sequential queries for a typical order. Batched reads and bulk writes cut that to two, and closed the same race window the stock fix guards.

WHAT HELD UP

Nine deliberate calls verified clean: bcrypt at cost 12, server-side price computation, scoped ownership checks on every resource, server-verified payments, and no secret ever committed to history.

07
CH-01

Auditing your own work honestly. It is easy to review for style; it is harder to admit your auth system fights itself. The discipline was treating the codebase as a stranger's — file by file, no skipping the parts I was proud of.

CH-02

Concurrency is invisible on a dev machine. Every race condition reads correctly in sequence; the oversell only exists when two requests land in the same instant. The audit had to reason about interleavings, not just code paths.

CH-03

The most dangerous bugs were not missing features — they were finished work left unconnected: validators written but never attached, stock-restoration logic reused in only one of three cancellation paths. Finding those meant tracing every caller, not just reading functions.

08
44 FINDINGS + FIXES DOCUMENTED
117 FILES AUDITED
9 PRACTICES THAT HELD UP

The result is a marketplace I understand at an adversarial level, and a written audit that turns every mistake into a designed fix — from a one-line sanitizing middleware to atomic stock updates. It demonstrates that I can build a complete product and then hold it to production standards.

09
React 19 Node.js & Express MongoDB Socket.IO Stripe & Khalti Three.js
10

Need someone who can build a complete product and then audit it like an attacker? I write the code — and then I interrogate it.