661d053ea0212fa1b3e406881051b57ca9861fe8
The signIn with redirect:false + router.push wasn't working properly. Switched to callbackUrl approach where the server handles the 302 redirect and cookie setting natively.
OptiqueStock
Application de gestion de magasin d'optique — full-stack Next.js avec gestion des clients, produits, ventes, achats, atelier et rapports.
Modules
| Module | Description |
|---|---|
| Accueil | Dashboard avec accès aux modules |
| Clients | Gestion des clients, relevés de vision, ordonnances |
| Produits | Catalogue (montures, verres, lentilles, accessoires), alertes stock, codes QR, images |
| Fournisseurs | Gestion des fournisseurs |
| Achats & Stock | Factures d'achat, réception de stock, upload PDF |
| Point de Vente | Panier, paiements fractionnés, historique des ventes |
| Atelier | Suivi des commandes de montage (4 statuts : EN_ATTENTE → EN_COURS → TERMINE → PRET) |
| Rapports | KPIs, graphiques (ventes, catégories, stocks), export CSV |
Stack
- Framework: Next.js 16 (App Router), React 19, TypeScript 5
- Base de données: SQLite via Prisma ORM
- UI: Tailwind CSS 4, shadcn/ui, lucide-react
- État & données: Zustand, TanStack Query, TanStack Table
- Formulaires: react-hook-form + Zod
- Graphiques: Recharts
- Autre: Framer Motion, DND Kit, Sharp, QR Code, Sonner (toasts)
Démarrage rapide
# Cloner et configurer
bun install
echo 'DATABASE_URL="file:./dev.db"' > .env
# Base de données
bunx prisma generate
bunx prisma db push
# Lancer le serveur de développement
bun run dev
# → http://localhost:3000
Scripts
| Commande | Description |
|---|---|
bun run dev |
Serveur de développement (port 3000) |
bun run build |
Build production |
bun start |
Serveur production |
bun run lint |
ESLint |
bun run db:push |
Push Prisma schema → DB |
bun run db:generate |
Générer client Prisma |
bun run db:migrate |
Migration Prisma |
bun run db:reset |
Reset base de données |
Structure
src/
├── app/
│ ├── page.tsx # SPA — commutation de modules
│ ├── layout.tsx # Layout racine
│ ├── globals.css # Styles Tailwind + shadcn
│ └── api/ # API REST (12 groupes de routes)
├── components/
│ ├── clients/ # Module Clients
│ ├── products/ # Module Produits
│ ├── pos/ # Module Point de Vente
│ ├── purchases/ # Module Achats
│ ├── suppliers/ # Module Fournisseurs
│ ├── atelier/ # Module Atelier
│ ├── reports/ # Module Rapports
│ └── ui/ # Composants shadcn/ui
├── hooks/ # Hooks personnalisés
└── lib/ # Utilitaires (db, optical-utils, qr-code)
API
Toutes les routes sous /api/ suivent le pattern REST :
api/clients,api/clients/[id],api/clients/[id]/patientsapi/patients,api/patients/[id],api/patients/[id]/ordonnancesapi/produits,api/produits/[id],api/produits/[id]/imagesapi/fournisseurs,api/fournisseurs/[id],api/fournisseurs/[id]/facturesapi/achats/factures,api/achats/factures/[id],api/achats/factures/[id]/validerapi/pos/products,api/pos/clients,api/pos/sales,api/pos/sales/[id]api/atelier/orders,api/atelier/orders/[id]api/reports/dashboard,api/reports/sales,api/reports/inventory,api/reports/export/*api/fichiers/[id]
Base de données SQLite auto-contenue — aucun serveur externe requis.
Description
Languages
TypeScript
96.6%
Shell
2.2%
JavaScript
0.6%
CSS
0.6%