mirror of
https://git.meshkee.com/BaloutPastry/website.git
synced 2026-08-11 22:31:01 +04:30
156 lines
4.9 KiB
Markdown
156 lines
4.9 KiB
Markdown
# Balout Pastry — Website (setup context)
|
|
|
|
Public storefront for شیرینیفروشی بلوط. React + Vite SPA that browses products and places orders via the NestJS API. Design matched to [shirinibalout.com](https://www.shirinibalout.com/).
|
|
|
|
Repo: `https://git.meshkee.com/BaloutPastry/website.git`
|
|
API repo: `https://git.meshkee.com/BaloutPastry/backend.git`
|
|
Dashboards (customer login / account): `https://git.meshkee.com/BaloutPastry/dashboards.git`
|
|
|
|
## Stack
|
|
|
|
- React 19 + TypeScript + Vite 8
|
|
- React Router 7
|
|
- Lucide icons
|
|
- Cart in `localStorage` (`balout.cart`)
|
|
- Auth session cookie `balout.auth` (shared with customer dashboard on `*.baloutpastry.com`)
|
|
- API client: `src/lib/api.ts` → `VITE_API_BASE_URL`
|
|
|
|
## Prerequisites
|
|
|
|
- Node.js **20+** (LTS recommended)
|
|
- npm
|
|
- Running **Backend** API on port **3100**
|
|
- Optional: customer dashboard on **5173** for login / account (SSO via cookie or hash handoff)
|
|
|
|
## Setup on a new device
|
|
|
|
```bash
|
|
git clone https://git.meshkee.com/BaloutPastry/website.git
|
|
cd website
|
|
|
|
cp .env.example .env
|
|
# Edit if API / customer app URLs differ
|
|
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
Open **http://localhost:5174** (or **http://baloutpastry.com:5174** with local DNS).
|
|
|
|
### Local hosts (recommended)
|
|
|
|
Add to `/etc/hosts`:
|
|
|
|
```
|
|
127.0.0.1 baloutpastry.com www.baloutpastry.com
|
|
127.0.0.1 admin.baloutpastry.com customer.baloutpastry.com
|
|
```
|
|
|
|
Then:
|
|
|
|
| App | URL |
|
|
|-----|-----|
|
|
| Website | `http://baloutpastry.com:5174` |
|
|
| Customer dashboard | `http://customer.baloutpastry.com:5173` |
|
|
| Admin dashboard | `http://admin.baloutpastry.com:5173` |
|
|
| API | `http://localhost:3100/api/v1` |
|
|
|
|
Backend `CORS_ORIGIN` must include the website origin(s), e.g.
|
|
`http://baloutpastry.com:5174,http://www.baloutpastry.com:5174,http://localhost:5174`
|
|
|
|
### Backend must be up
|
|
|
|
From the backend repo:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
npm install
|
|
npm run db:up
|
|
npx prisma migrate deploy
|
|
npm run start:dev # http://localhost:3100/api/v1
|
|
```
|
|
|
|
## Scripts
|
|
|
|
| Command | What it does |
|
|
|---------|----------------|
|
|
| `npm run dev` | Vite dev server → **http://localhost:5174** |
|
|
| `npm run build` | Typecheck + production build → `dist/` |
|
|
| `npm run preview` | Serve production build locally |
|
|
| `npm run lint` | Oxlint |
|
|
|
|
## Environment
|
|
|
|
| Variable | Required | Default | Notes |
|
|
|----------|----------|---------|-------|
|
|
| `VITE_API_BASE_URL` | no | `http://localhost:3100/api/v1` | Must include `/api/v1` |
|
|
| `VITE_CUSTOMER_APP_URL` | no | `http://customer.baloutpastry.com:5173` | Login / profile redirects |
|
|
| `VITE_COOKIE_DOMAIN` | no | `.baloutpastry.com` (when on that host) | Shared auth cookie domain |
|
|
|
|
Copy from `.env.example`. Do **not** commit `.env`.
|
|
|
|
After changing env vars, restart `npm run dev`.
|
|
|
|
## App routes
|
|
|
|
| Path | Page |
|
|
|------|------|
|
|
| `/` | Home (hero, categories, featured products) |
|
|
| `/products` | Product list + filters |
|
|
| `/products/:slugOrId` | Category by slug **or** product detail by id |
|
|
| `/quick-info` | Quick info |
|
|
| `/about-us` | About |
|
|
| `/contact-us` | Contact |
|
|
|
|
Cart drawer and toasts are global (not separate routes). Checkout / login hand off to the customer dashboard when needed.
|
|
|
|
## Auth / cart notes
|
|
|
|
- Guest browsing and cart work without login
|
|
- Session cookie: `balout.auth` (also accepts `#balout_auth=…` hash handoff from customer app)
|
|
- Access token sent as `Authorization: Bearer …` on authenticated API calls
|
|
- Cart key: `balout.cart` in `localStorage`; change event `balout:cart-change`
|
|
- Prices are integer **تومان**
|
|
|
|
## Project layout
|
|
|
|
```
|
|
src/
|
|
App.tsx Routes + shell (Header / Footer / Cart / Toast)
|
|
pages/ Home, products, about, contact, quick-info
|
|
components/ Header, Footer, CartDrawer, ProductCard, …
|
|
lib/
|
|
api.ts HTTP client + catalog / checkout helpers
|
|
auth.ts Cookie session + customer-app redirects
|
|
cart.ts localStorage cart
|
|
types.ts Shared types + formatPriceFa
|
|
ids.ts cuid vs category-slug detection
|
|
```
|
|
|
|
## Production build
|
|
|
|
```bash
|
|
cp .env.example .env # set real API + customer app URLs
|
|
npm ci
|
|
npm run build
|
|
# Serve dist/ behind nginx/Caddy, or:
|
|
npm run preview
|
|
```
|
|
|
|
Set `VITE_*` **before** `npm run build` (they are baked into the bundle).
|
|
|
|
## Common issues
|
|
|
|
| Symptom | Likely cause |
|
|
|---------|----------------|
|
|
| Empty catalog / fetch errors | Backend not running, or wrong `VITE_API_BASE_URL` |
|
|
| CORS errors in browser | Backend `CORS_ORIGIN` missing website origin (port **5174**) |
|
|
| Port already in use | Another process on **5174** (`strictPort: true`) |
|
|
| Login redirect fails | Customer dashboard down, or wrong `VITE_CUSTOMER_APP_URL` |
|
|
| Auth not shared across apps | Missing `/etc/hosts` + `VITE_COOKIE_DOMAIN=.baloutpastry.com` |
|
|
|
|
## Related
|
|
|
|
- Backend setup: clone `BaloutPastry/backend` and read `CONTEXT.md`
|
|
- Customer / admin UI: clone `BaloutPastry/dashboards` and read `CONTEXT.md`
|