Multimart is a Gumroad-style digital product platform built with a multi-tenant architecture, offering creators their own stores with customizable dashboards and full control over product listings, payments, and analytics.
Built with:
- Payload CMS for a powerful, headless CMS backend.
- tRPC for end-to-end type safety.
- Next.js 15 App Router for modern frontend architecture.
- Tailwind CSS v4 with Radix UI for rich, accessible UI components.
| Layer | Stack |
|---|---|
| Frontend | Next.js 15, React 19, Tailwind CSS v4, ShadCN, Radix UI, Zustand |
| Backend | Payload CMS (MongoDB), tRPC, Zod, Stripe |
| Fullstack Utils | SuperJSON, TanStack React Query v5 |
| Dev Tools | Bun / PNPM, ESLint, TypeScript 5, Tailwind plugins |
.
βββ src/
β βββ app/ # App router entrypoint (Next.js 15)
β β βββ (auth|home|dashboard)/ # Routes grouped by layout
β β βββ api/ # Route handlers (e.g. Stripe, webhook)
β β βββ products/ # Product pages
β β βββ layout.tsx # Root layout
β
β βββ components/ # Reusable UI components
β β βββ ui/ # ShadCN UI + custom primitives
β β βββ shared/ # Domain-specific shared components
β
β βββ lib/ # Utilities
β β βββ auth/ # Auth helpers (getUser, protectRoute)
β β βββ server/ # Server-only utils
β β βββ utils.ts # General utility functions
β
β βββ modules/ # Modular feature folders
β β βββ auth/ # Auth flow logic
β β βββ products/ # Product views, handlers, types
β β βββ tenants/ # Multi-tenant handling
β β βββ users/ # User profile, avatar, etc
β
β βββ trpc/ # tRPC setup (router, clients)
β βββ payload/ # Payload CMS config
β β βββ collections/ # Payload collections
β β βββ globals/ # Payload global config
β
β βββ types.ts # Shared type definitions
β βββ seed.ts # DB seeding logic
β
βββ public/ # Static assets
βββ tailwind.config.ts # Tailwind CSS config
βββ payload.config.ts # Payload CMS entrypoint
βββ ...git clone https://github.com/satyam-code45/multimart.git
cd multimartbun installCreate a .env file with the following:
# Database
DATABASE_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/multimart
PAYLOAD_SECRET=your_payload_secret
# App config
NEXT_PUBLIC_APP_URL="http://localhost:3000/"
NEXT_PUBLIC_ROOT_DOMAIN="localhost:3000"
NEXT_PUBLIC_ENABLE_SUBDOMAIN_ROUTING="false"
# Stripe
STRIPE_SECRET_KEY=sk_test_************************
STRIPE_WEBHOOK_SECRET=whsec_************************
# Vercel Blob Storage
BLOB_READ_WRITE_TOKEN=vercel_blob_rw_************************bun run db:fresh # Drop & recreate DB schema (dev only)
bun run db:seed # Seed DB with test tenants/products
bun run dev # Launch development server- π Multi-Tenant Auth with Role-based Access
- π Digital Storefronts with Custom Branding
- π³ Stripe Checkout Integration
- π¦ Payload CMS for Admin Dashboard
- β‘ End-to-End Type Safety via tRPC + Zod
- π― Clean DX: Modular codebase, typed API responses, and easy testing
Made with β€οΈ by Satyam Kumar
MIT β use freely, build better.
