Overview
What Grovia is, what ships in the box, and how the three apps fit together.
Grovia is a production-grade fresh-market e-commerce platform: a customer storefront, an operations dashboard with a seller portal, and a REST API, in one Turborepo + pnpm workspace. It is sold as source code — $99.99, one time, on [Buy Me a Coffee](https://buymeacoffee.com/reactbd/e/579772) — and you own and host what you build with it.

| App | What it is | Stack | Port |
|---|---|---|---|
apps/web | Customer storefront | Next.js 16 · React 19 · Tailwind v4 · Zustand | 3000 |
apps/admin | Operations dashboard + seller portal | Next.js 16 · React 19 · Tailwind v4 | 3001 |
apps/api | REST API + background worker | Express 5 · Mongoose 9 · Stripe · ImageKit/Cloudinary · Swagger | 8000 |
How the pieces talk
Both frontends read from MongoDB through the API — no Next app touches the database directly. The storefront fetches through a single src/lib/api.ts; the dashboard through src/lib/api-client.ts. Authentication is live in all three apps: the API issues a JWT, each Next app stores it in an httpOnly cookie and forwards it server-side.
Images live on your own ImageKit or Cloudinary account under a grovia/ folder tree; MongoDB stores the CDN URLs, never local paths. The package includes a demo store — 55 products, 35 categories, 3 shops, 16 journal posts, the home page, coupons and 244 images — that pnpm run seed uploads to your CDN and loads into your database.
Design
Light theme only. A small set of semantic colour tokens in one globals.css per app drive every component; the palette is the *Enchanted Garden* set — cream, mist, lime, leaf, canopy, soil. Type is TikTok Sans for display and Public Sans for body. UI primitives follow the shadcn/ui pattern, restyled onto those tokens.
Engineering standards
- Strict TypeScript, zero `any` in every app — enforced by ESLint.
- Server Components by default;
"use client"only where there is state or events. - Every write endpoint chains
protect, a role gate, andpreventReadOnlyActions. - Money is computed in integer cents on the server; client prices are ignored.
- One
.envat the repo root for all apps, every key commented.