Project

JMK Furniture

A furniture storefront with product discovery, an admin panel, and a secure backend for managing the catalog.

Features

01Storefront

  • Category browsing follows the hierarchy through resolvers, with banners, sort controls, and filter popovers along the way

  • Product pages carry hover-swap galleries, a lightbox, specs, a quantity stepper, and related products

  • The buy box includes EMI info and ordering assisted over WhatsApp

  • Site search, plus a recently-viewed strip that persists locally

  • CMS-driven markdown pages, a contact page with FAQ and map, and newsletter signup

  • The homepage assembles itself from server-defined sections

  • Per-page SEO metadata, with scroll, reveal, and parallax motion giving the pages some life

02Admin panel

  • A dashboard of counts, top-viewed products, latest inquiries, and audit entries

  • The product editor pairs an image picker with a Cloudinary-backed media library

  • A homepage builder with section forms, plus a general page editor

  • Users, roles, and permissions split into superadmin, editor, and support

  • An audit log, an inquiry inbox, and settings

  • Editing happens in place, guarded by an unsaved-changes bar

03Accounts & security

  • Passwords hash with Argon2, and verification stays timing balanced so account existence is never readable from the response

  • Repeated login failures trigger lockout, and refresh cookies rotate, so a reused cookie revokes every session it touched

  • Password resets go out by email with one-time tokens that live 30 minutes

04API & infrastructure

  • A modular Express API runs over MongoDB, its Mongoose models carrying product fields in English and Bengali

  • Media lives in Cloudinary, with a local-disk fallback for when it cannot

  • Facet filters, related products worked out from views, and view counters deduped hourly

  • The deploy is Dockerised: MongoDB, API, and nginx web containers, with database backup scripts beside them

Technologies

React 18Vite 5TypeScriptTailwind CSSRadix UIframer-motionTanStack Queryreact-hook-formZodExpress 5Mongoose 8MongoDB 7Argon2JWTCloudinaryNodemailerDockernginx