A retail and wholesale store website with a full admin dashboard. The public site shows the catalog, offers and branches; the admin area manages products, categories and offers behind authentication.
Live demo:
A small business that sells both retail and wholesale usually needs two things: a public site customers can browse, and a private back office to keep it up to date. This project covers both — a Next.js storefront plus a protected dashboard where the owner manages the catalog without touching code.
- Public storefront: catalog, offers, branches, about and a dedicated wholesale section.
- Admin dashboard (protected): CRUD for products, categories, offers and branches.
- Authentication with better-auth and a Postgres-backed session store.
- Type-safe database access with Drizzle ORM over PostgreSQL.
- UI built with shadcn/ui and Tailwind CSS.
- Framework: Next.js (App Router)
- Auth: better-auth
- Database: PostgreSQL + Drizzle ORM
- UI: shadcn/ui, Tailwind CSS
- Charts: Recharts
npm install
Create a .env file in the project root:
DATABASE_URL= # PostgreSQL connection string BETTER_AUTH_SECRET= # random secret for better-auth BETTER_AUTH_URL= # base URL of the app (e.g. http://localhost:3000)
Then:
npm run dev # dev server npm run build # production build npm run start # run the production build npm run lint # lint