Personal platform & software marketplace built with Next.js (adapted from the PRD's Nuxt 3 spec).
- Public site: Home, About (timeline), Products, Product detail, Blog, Contact
- E-commerce: Cart, manual checkout, order tracking
- Admin panel: Dashboard, CRUD for products, timeline, blog, order management
- API: REST routes under
/api - Auth: JWT-based admin authentication
- Next.js 16 (App Router, TypeScript)
- Tailwind CSS 4
- Prisma ORM + SQLite (dev) — switch to PostgreSQL for production
- Zod validation, Jose JWT, bcryptjs
cd web
npm install
npm run db:setup # create DB + seed sample data
npm run dev # http://localhost:3000 (set PORT in .env to change)- URL: http://localhost:3000/admin
- Email:
admin@farahmand.dev - Password:
admin123
Change credentials in .env before deploying.
web/
├── prisma/ # Schema, migrations, seed
├── public/ # Static assets
└── src/
├── app/ # Pages & API routes
│ ├── about/
│ ├── products/
│ ├── cart/
│ ├── checkout/
│ ├── blog/
│ ├── contact/
│ ├── admin/ # Admin panel
│ └── api/ # REST API
├── components/
├── lib/ # Auth, Prisma, utils
└── types/
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/products |
List products |
| GET | /api/products/:slug |
Product detail |
| GET | /api/timeline |
Timeline entries |
| GET | /api/blog |
Blog posts |
| POST | /api/orders |
Create order |
| POST | /api/admin/auth |
Admin login |
| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
Dev/production server port |
DATABASE_URL |
— | Database connection string |
JWT_SECRET |
— | Secret for admin JWT tokens |
ADMIN_EMAIL |
— | Seed admin email |
ADMIN_PASSWORD |
— | Seed admin password |
- Set
JWT_SECRETto a strong random value - Switch Prisma to PostgreSQL (
provider = "postgresql"in schema) - Update
DATABASE_URLto your Postgres connection string - Change default admin credentials
- Stripe payment integration
- Multi-language (i18n)
- License keys for software
- Subscription system
- Media upload for products



