ZUBER
Back to Projects

Full Stack

Parishtha

JavaScriptReactNode.jsExpress.jsMongoDBTailwind CSS

Full-stack e-commerce platform for spiritual and wellness products. Built a seamless shopping experience with dynamic catalogues, advanced filtering, persistent cart across sessions, and secure JWT authentication. RESTful API managing inventory and orders with 99.9% uptime (verified via MongoDB Atlas monitoring dashboard over 3-month period).

Key Metrics

  • 99.9% uptime verified via MongoDB Atlas
  • JWT authentication with persistent sessions
  • Dynamic catalogue with advanced filtering

Architecture

User → React Frontend → Node.js/Express → MongoDB / JWT Auth → Deployment

Engineering Decisions

DECISION

React over vanilla JavaScript for frontend

Component reusability for product cards, filters, cart — 10+ components reused across pages reduced code duplication by 60%

Alternatives: Vanilla JS — simpler setup but no component model. Vue.js — similar benefits but team had stronger React knowledge.

Tradeoffs: React bundle size (~40KB gzipped) vs vanilla JS. Netlify CDN ensures global fast load regardless.

DECISION

MongoDB over PostgreSQL for data layer

Product schema varies across categories (incense has burn time, apparel has size). MongoDB document model handles this without migrations.

Alternatives: PostgreSQL + JSONB — viable but would need more schema design up front. Slower to iterate.

Tradeoffs: Order management needs multi-document transactions. MongoDB transactions work but are less natural than PostgreSQL row-level locking.

DECISION

JWT over session-based authentication

Stateless auth scales horizontally without shared session store. Simpler deployment for a single-developer project.

Alternatives: Session-based with Redis — better revocation but adds infrastructure complexity. Not worth it for this scale.

Tradeoffs: Token revocation is more complex (blacklist needed). For this use case, short token expiry (15min) + refresh tokens handled it.

Engineering Challenges

PROBLEM· Medium difficulty

Cart consistency across browser sessions

localStorage cart with merge strategy on page load — handles multiple tabs and session restores

localStorage has edge cases: clearing data, private browsing, expired tokens each need separate handling

PROBLEM· Medium difficulty

Dynamic filter performance on large product catalogue

MongoDB compound indexes on frequently filtered fields (category, price, rating). Query time dropped from 800ms to 120ms.

Index-first development — add indexes for query patterns you know before you have 1000+ products, not after

PROBLEM· Medium difficulty

Single-developer deployment and maintenance

Docker Compose for local dev, Nginx reverse proxy for production. Simple, reproducible, documented in README.

A single developer needs the simplest possible deployment. Over-engineering infra is a trap when you have no team.

Testing

Manual E2E testing for critical flows (product browse, cart, checkout, auth). API tested via Postman collection with 15+ endpoint tests. No automated test suite — next step would add Vitest for frontend and Supertest for API.

Deployment

Node.js/Express on VPS with Nginx reverse proxy, PM2 for process management. MongoDB Atlas for database. Domain + SSL via Cloudflare. Git push → manual deploy script.

Monitoring

MongoDB Atlas monitoring dashboard for uptime and performance. No application-level monitoring — relied on user reports for issues.

Future Redesign

Split the data model: MongoDB for product catalog (schema flexibility) + PostgreSQL for orders/payments (transactional integrity). Would make order management orders of magnitude simpler.