Fullstack · 2024
Fullkala — Multi-tenant Iranian E-commerce Platform
Full-stack multi-shop e-commerce platform (storefront, admin, landing, API) as a Turborepo monorepo—Next.js 16, NestJS, Prisma/PostgreSQL, and Spree Commerce for catalog, cart, and checkout.
- Next.js 16
- React 19
- NestJS
- TypeScript
- Prisma
- PostgreSQL
- Spree Commerce
- Turborepo
- pnpm
- Tailwind CSS
- Server Actions
- next-intl
- TanStack Query
- Zod
- Socket.io
- Stripe
- Docker
- Playwright
- Vitest
- AWS S3

Overview
What was built
Designed and built a headless multi-tenant commerce platform with a customer storefront, admin dashboard, marketing landing site, and NestJS REST API.
Next.js App Router + Server Actions power the frontend; NestJS + Prisma/PostgreSQL handle platform services (auth, tenants, CMS, shipping, AI); Spree Commerce powers catalog, cart, and checkout via @spree/sdk.
Delivered subdomain-based shop isolation (JWT tenantId), a shared CMS/page-builder pipeline, Persian i18n/RTL, payments (Stripe, PayPal, Adyen + local/BNPL), Socket.io realtime features, and S3-compatible media—organized as pnpm + Turborepo apps (web, admin, landing, api) with shared packages for database, validators, types, page-builder, config, logger, and UI.
Challenges
Isolate multi-shop tenants without duplicating infrastructure; keep a four-app Turborepo DX fast; connect a headless Spree catalog/cart/checkout flow to NestJS platform services; ship Persian RTL/i18n, CMS page-builder, payments, and admin analytics as one coherent product surface.
Solutions
Modular NestJS (controllers/services) with Prisma/PostgreSQL and subdomain + JWT tenantId isolation; Next.js 16 / React 19 storefront with Server Components, Server Actions, Suspense, and Spree via @spree/sdk; admin with TanStack Query/Table, React Aria, and Recharts; shared Zod contracts and page-builder package; Stripe/PayPal/Adyen (+ local BNPL); Socket.io realtime; Biome, Vitest, Playwright, Docker, Sentry, and S3-compatible storage.