create-crm-tmp 1.1.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/template/.prettierignore +2 -0
- package/template/README.md +53 -67
- package/template/components.json +22 -0
- package/template/exemple-contacts.csv +54 -0
- package/template/next.config.ts +27 -1
- package/template/package.json +64 -27
- package/template/prisma/schema.prisma +821 -72
- package/template/skills-lock.json +25 -0
- package/template/src/app/(auth)/invite/[token]/page.tsx +21 -24
- package/template/src/app/(auth)/reset-password/complete/page.tsx +12 -21
- package/template/src/app/(auth)/reset-password/page.tsx +12 -8
- package/template/src/app/(auth)/reset-password/verify/page.tsx +12 -8
- package/template/src/app/(auth)/signin/page.tsx +20 -17
- package/template/src/app/(dashboard)/agenda/page.tsx +2231 -2188
- package/template/src/app/(dashboard)/automatisation/[id]/page.tsx +10 -7
- package/template/src/app/(dashboard)/automatisation/_components/workflow-editor.tsx +680 -323
- package/template/src/app/(dashboard)/automatisation/new/page.tsx +11 -8
- package/template/src/app/(dashboard)/automatisation/page.tsx +473 -180
- package/template/src/app/(dashboard)/closing/page.tsx +500 -468
- package/template/src/app/(dashboard)/contacts/[id]/page.tsx +5035 -4126
- package/template/src/app/(dashboard)/contacts/companies/[id]/page.tsx +1703 -0
- package/template/src/app/(dashboard)/contacts/loading.tsx +13 -0
- package/template/src/app/(dashboard)/contacts/page.tsx +3776 -2064
- package/template/src/app/(dashboard)/dashboard/page.tsx +37 -519
- package/template/src/app/(dashboard)/error.tsx +37 -0
- package/template/src/app/(dashboard)/layout.tsx +1 -1
- package/template/src/app/(dashboard)/loading.tsx +5 -0
- package/template/src/app/(dashboard)/settings/loading.tsx +19 -0
- package/template/src/app/(dashboard)/settings/page.tsx +2685 -2489
- package/template/src/app/(dashboard)/templates/page.tsx +500 -300
- package/template/src/app/(dashboard)/users/list/page.tsx +356 -350
- package/template/src/app/(dashboard)/users/page.tsx +279 -310
- package/template/src/app/(dashboard)/users/permissions/page.tsx +104 -99
- package/template/src/app/(dashboard)/users/roles/page.tsx +164 -137
- package/template/src/app/api/audit-logs/route.ts +1 -1
- package/template/src/app/api/auth/google/callback/route.ts +8 -5
- package/template/src/app/api/auth/google/disconnect/route.ts +2 -2
- package/template/src/app/api/companies/[id]/activities/route.ts +131 -0
- package/template/src/app/api/companies/[id]/route.ts +195 -0
- package/template/src/app/api/companies/export/route.ts +206 -0
- package/template/src/app/api/companies/route.ts +166 -0
- package/template/src/app/api/contact-views/[id]/pin/route.ts +69 -0
- package/template/src/app/api/contact-views/[id]/route.ts +197 -0
- package/template/src/app/api/contact-views/route.ts +146 -0
- package/template/src/app/api/contacts/[id]/files/[fileId]/preview/route.ts +77 -0
- package/template/src/app/api/contacts/[id]/files/[fileId]/route.ts +7 -17
- package/template/src/app/api/contacts/[id]/files/route.ts +83 -44
- package/template/src/app/api/contacts/[id]/interactions/route.ts +37 -0
- package/template/src/app/api/contacts/[id]/kyc/route.ts +71 -0
- package/template/src/app/api/contacts/[id]/meet/route.ts +38 -29
- package/template/src/app/api/contacts/[id]/route.ts +111 -20
- package/template/src/app/api/contacts/[id]/send-email/route.ts +6 -0
- package/template/src/app/api/contacts/[id]/workflows/run/route.ts +61 -0
- package/template/src/app/api/contacts/export/route.ts +12 -17
- package/template/src/app/api/contacts/import/route.ts +22 -19
- package/template/src/app/api/contacts/import-preview/route.ts +139 -0
- package/template/src/app/api/contacts/route.ts +202 -49
- package/template/src/app/api/dashboard/stats/route.ts +9 -292
- package/template/src/app/api/integrations/google-sheet/sync/route.ts +203 -185
- package/template/src/app/api/invite/complete/route.ts +20 -23
- package/template/src/app/api/reminders/route.ts +1 -0
- package/template/src/app/api/reset-password/complete/route.ts +11 -13
- package/template/src/app/api/send/route.ts +9 -85
- package/template/src/app/api/settings/closing-reasons/[id]/route.ts +10 -21
- package/template/src/app/api/settings/closing-reasons/route.ts +10 -21
- package/template/src/app/api/settings/company/route.ts +19 -26
- package/template/src/app/api/settings/google-ads/[id]/route.ts +20 -23
- package/template/src/app/api/settings/google-ads/route.ts +20 -23
- package/template/src/app/api/settings/google-sheet/[id]/route.ts +20 -23
- package/template/src/app/api/settings/google-sheet/auto-map/route.ts +23 -32
- package/template/src/app/api/settings/google-sheet/preview/route.ts +104 -0
- package/template/src/app/api/settings/google-sheet/route.ts +20 -23
- package/template/src/app/api/settings/meta-leads/[id]/route.ts +20 -23
- package/template/src/app/api/settings/meta-leads/route.ts +20 -23
- package/template/src/app/api/settings/statuses/[id]/route.ts +33 -23
- package/template/src/app/api/settings/statuses/route.ts +24 -22
- package/template/src/app/api/statuses/route.ts +2 -5
- package/template/src/app/api/tasks/[id]/attendees/route.ts +14 -7
- package/template/src/app/api/tasks/[id]/route.ts +161 -137
- package/template/src/app/api/tasks/meet/route.ts +11 -8
- package/template/src/app/api/tasks/route.ts +155 -95
- package/template/src/app/api/templates/[id]/route.ts +22 -13
- package/template/src/app/api/templates/route.ts +22 -5
- package/template/src/app/api/users/[id]/resend-invite/route.ts +95 -0
- package/template/src/app/api/users/[id]/route.ts +16 -1
- package/template/src/app/api/users/commercials/route.ts +38 -0
- package/template/src/app/api/users/for-agenda/route.ts +1 -2
- package/template/src/app/api/users/route.ts +94 -55
- package/template/src/app/api/webhooks/google-ads/route.ts +20 -1
- package/template/src/app/api/webhooks/meta-leads/route.ts +18 -1
- package/template/src/app/api/workflows/[id]/route.ts +33 -6
- package/template/src/app/api/workflows/process/route.ts +509 -146
- package/template/src/app/api/workflows/route.ts +46 -4
- package/template/src/app/globals.css +210 -101
- package/template/src/app/layout.tsx +19 -8
- package/template/src/app/page.tsx +37 -7
- package/template/src/components/address-autocomplete.tsx +232 -0
- package/template/src/components/contacts/filter-bar.tsx +181 -0
- package/template/src/components/contacts/filter-builder.tsx +589 -0
- package/template/src/components/contacts/save-view-dialog.tsx +160 -0
- package/template/src/components/contacts/views-tab-bar.tsx +440 -0
- package/template/src/components/dashboard/activity-chart.tsx +31 -39
- package/template/src/components/dashboard/dashboard-content.tsx +79 -0
- package/template/src/components/dashboard/stat-card.tsx +40 -42
- package/template/src/components/dashboard/tasks-pie-chart.tsx +34 -37
- package/template/src/components/dashboard/upcoming-tasks-list.tsx +78 -72
- package/template/src/components/date-picker.tsx +396 -0
- package/template/src/components/editor.tsx +27 -13
- package/template/src/components/email-template.tsx +4 -2
- package/template/src/components/global-search.tsx +358 -0
- package/template/src/components/header.tsx +57 -62
- package/template/src/components/invitation-email-template.tsx +4 -2
- package/template/src/components/lazy-editor.tsx +11 -0
- package/template/src/components/meet-cancellation-email-template.tsx +11 -3
- package/template/src/components/meet-confirmation-email-template.tsx +10 -3
- package/template/src/components/meet-update-email-template.tsx +10 -3
- package/template/src/components/page-header.tsx +19 -15
- package/template/src/components/protected-page.tsx +94 -0
- package/template/src/components/reset-password-email-template.tsx +4 -2
- package/template/src/components/sidebar.tsx +92 -94
- package/template/src/components/skeleton.tsx +128 -42
- package/template/src/components/ui/accordion.tsx +64 -0
- package/template/src/components/ui/alert-dialog.tsx +139 -0
- package/template/src/components/ui/button.tsx +60 -0
- package/template/src/components/view-as-banner.tsx +1 -1
- package/template/src/components/view-as-modal.tsx +21 -16
- package/template/src/config/nav-pages.ts +108 -0
- package/template/src/contexts/app-toast-context.tsx +174 -0
- package/template/src/contexts/sidebar-context.tsx +16 -47
- package/template/src/contexts/task-reminder-context.tsx +6 -6
- package/template/src/contexts/view-as-context.tsx +11 -16
- package/template/src/hooks/use-alert.tsx +65 -0
- package/template/src/hooks/use-confirm.tsx +87 -0
- package/template/src/hooks/use-contact-views.ts +140 -0
- package/template/src/hooks/use-contacts.ts +69 -0
- package/template/src/hooks/use-fetch.ts +17 -0
- package/template/src/hooks/use-focus-trap.ts +73 -0
- package/template/src/hooks/use-statuses.ts +22 -0
- package/template/src/lib/address-api.ts +155 -0
- package/template/src/lib/cache.ts +73 -0
- package/template/src/lib/check-permission.ts +12 -177
- package/template/src/lib/contact-interactions.ts +3 -1
- package/template/src/lib/contact-view-filters.ts +341 -0
- package/template/src/lib/dashboard-stats.ts +224 -0
- package/template/src/lib/date-utils.ts +49 -0
- package/template/src/lib/get-auth-user.ts +25 -0
- package/template/src/lib/google-calendar.ts +54 -12
- package/template/src/lib/google-drive.ts +796 -75
- package/template/src/lib/google-fetch.ts +63 -0
- package/template/src/lib/local-storage.ts +34 -0
- package/template/src/lib/permissions.ts +245 -47
- package/template/src/lib/prisma.ts +11 -11
- package/template/src/lib/roles.ts +14 -39
- package/template/src/lib/template-variables.ts +67 -33
- package/template/src/lib/utils.ts +26 -2
- package/template/src/lib/workflow-executor.ts +445 -229
- package/template/src/proxy.ts +34 -73
- package/template/src/types/contact-views.ts +351 -0
- package/template/src/types/yousign.ts +52 -0
- package/template/vercel.json +12 -0
- package/template/WORKFLOWS_CRON.md +0 -185
- package/template/prisma/migrations/20251126144728_init/migration.sql +0 -78
- package/template/prisma/migrations/20251126155204_add_user_roles/migration.sql +0 -5
- package/template/prisma/migrations/20251128095126_add_company_info/migration.sql +0 -19
- package/template/prisma/migrations/20251128123321_add_smtp_config/migration.sql +0 -22
- package/template/prisma/migrations/20251128132303_add_status/migration.sql +0 -23
- package/template/prisma/migrations/20251201102207_add_user_active/migration.sql +0 -75
- package/template/prisma/migrations/20251201105507_add_email_signature/migration.sql +0 -2
- package/template/prisma/migrations/20251201151122_add_tasks/migration.sql +0 -45
- package/template/prisma/migrations/20251202111854_add_task_reminder/migration.sql +0 -2
- package/template/prisma/migrations/20251202135859_add_google_meet_integration/migration.sql +0 -27
- package/template/prisma/migrations/20251203103317_add_meta_lead_integration/migration.sql +0 -20
- package/template/prisma/migrations/20251203104002_add_google_ads_integration/migration.sql +0 -18
- package/template/prisma/migrations/20251203112122_add_google_sheet_integration/migration.sql +0 -32
- package/template/prisma/migrations/20251203153853_allow_multiple_integration_configs/migration.sql +0 -20
- package/template/prisma/migrations/20251205141705_update_user_roles/migration.sql +0 -12
- package/template/prisma/migrations/20251205150000_add_commercial_and_telepro_assignment/migration.sql +0 -21
- package/template/prisma/migrations/20251205160000_add_interaction_logging/migration.sql +0 -11
- package/template/prisma/migrations/20251208090314_add_automatic_interaction_types/migration.sql +0 -12
- package/template/prisma/migrations/20251208094843_mg/migration.sql +0 -14
- package/template/prisma/migrations/20251208100000_add_company_support/migration.sql +0 -14
- package/template/prisma/migrations/20251208110000_add_templates/migration.sql +0 -26
- package/template/prisma/migrations/20251208141304_add_video_conference_task_type/migration.sql +0 -2
- package/template/prisma/migrations/20251209104759_add_internal_note_to_task/migration.sql +0 -2
- package/template/prisma/migrations/20251209134803_add_company_field/migration.sql +0 -2
- package/template/prisma/migrations/20251209150000_rename_company_to_company_name/migration.sql +0 -3
- package/template/prisma/migrations/20251209150016_add_email_tracking/migration.sql +0 -21
- package/template/prisma/migrations/20251209155908_add_notify_contact_to_task/migration.sql +0 -2
- package/template/prisma/migrations/20251210110019_add_appointment_types/migration.sql +0 -10
- package/template/prisma/migrations/20251210113928_add_contact_files/migration.sql +0 -26
- package/template/prisma/migrations/20251212132339_add_custom_roles/migration.sql +0 -24
- package/template/prisma/migrations/20251215104448_add_file_interaction_types/migration.sql +0 -11
- package/template/prisma/migrations/20251215145616_add_closing_reasons/migration.sql +0 -12
- package/template/prisma/migrations/20251216140850_add_log_users/migration.sql +0 -25
- package/template/prisma/migrations/20251216151000_rename_perdu_to_ferme/migration.sql +0 -8
- package/template/prisma/migrations/20251216162318_add_column_mappings_to_google_sheet/migration.sql +0 -2
- package/template/prisma/migrations/20251216185127_add_workflows/migration.sql +0 -80
- package/template/prisma/migrations/20251216192237_add_scheduled_workflow_actions/migration.sql +0 -32
- package/template/prisma/migrations/20251220000000_add_task_interaction_type/migration.sql +0 -4
- package/template/prisma/migrations/20251221000000_add_task_type/migration.sql +0 -3
- package/template/prisma/migrations/20251221000001_add_event_color/migration.sql +0 -23
- package/template/prisma/migrations/20260210114913_add_dashboard_widget/migration.sql +0 -20
- package/template/prisma/migrations/migration_lock.toml +0 -3
- package/template/src/app/(dashboard)/users/layout.tsx +0 -30
- package/template/src/app/api/dashboard/widgets/[id]/route.ts +0 -47
- package/template/src/app/api/dashboard/widgets/route.ts +0 -181
- package/template/src/components/dashboard/add-widget-dialog.tsx +0 -161
- package/template/src/components/dashboard/color-picker.tsx +0 -65
- package/template/src/components/dashboard/contacts-chart.tsx +0 -69
- package/template/src/components/dashboard/interactions-by-type-chart.tsx +0 -121
- package/template/src/components/dashboard/recent-activity.tsx +0 -157
- package/template/src/components/dashboard/sales-analytics-chart.tsx +0 -77
- package/template/src/components/dashboard/status-distribution-chart.tsx +0 -82
- package/template/src/components/dashboard/top-contacts-list.tsx +0 -119
- package/template/src/components/dashboard/widget-wrapper.tsx +0 -39
- package/template/src/contexts/dashboard-theme-context.tsx +0 -58
- package/template/src/lib/dashboard-themes.ts +0 -140
- package/template/src/lib/default-widgets.ts +0 -14
- package/template/src/lib/widget-registry.ts +0 -177
package/package.json
CHANGED
package/template/.prettierignore
CHANGED
package/template/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# 📊
|
|
1
|
+
# 📊 Gold Blessing
|
|
2
2
|
|
|
3
3
|
Un CRM moderne, orienté **prospection & suivi commercial**, construit avec
|
|
4
4
|
**Next.js 16**,
|
|
@@ -53,102 +53,88 @@ pro.
|
|
|
53
53
|
- **Langage**: TypeScript
|
|
54
54
|
- **Gestionnaire de paquets**: pnpm
|
|
55
55
|
|
|
56
|
-
## 🚀
|
|
56
|
+
## 🚀 Installation
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
Pour créer un nouveau projet basé sur ce CRM :
|
|
58
|
+
1. **Cloner le projet**
|
|
60
59
|
|
|
61
60
|
```bash
|
|
62
|
-
|
|
61
|
+
git clone <votre-repo>
|
|
62
|
+
cd crm-template
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
2. **Installer les dépendances**
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
|
-
cd mon-crm
|
|
69
68
|
pnpm install
|
|
70
69
|
```
|
|
71
70
|
|
|
72
|
-
|
|
71
|
+
3. **Configurer les variables d'environnement**
|
|
73
72
|
|
|
74
|
-
|
|
73
|
+
Créez un fichier `.env` à la racine du projet :
|
|
75
74
|
|
|
76
|
-
|
|
75
|
+
```env
|
|
76
|
+
# Database
|
|
77
|
+
DATABASE_URL="postgresql://postgres:password@localhost:5432/crm_db"
|
|
77
78
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- Attendez que la base de données soit provisionnée.
|
|
82
|
-
2. **Récupérer la connexion Postgres**
|
|
83
|
-
- Dans Supabase, cliquez sur `🔌 Connect`.
|
|
84
|
-
- Sélectionnez `ORMs` et choisissez le Tool `Prisma`
|
|
85
|
-
- Copiez les 2 premières variables d'environnement du contenu dans `.env.local` (`DATABASE_URL & DIRECT_URL`).
|
|
86
|
-
3. **Configurer `DATABASE_URL`**
|
|
87
|
-
- Dans votre projet généré (`mon-crm`), créez ou mettez à jour le fichier `.env` :
|
|
79
|
+
# Better Auth (générer avec: openssl rand -base64 32)
|
|
80
|
+
BETTER_AUTH_SECRET="votre-clé-secrète-minimum-32-caractères"
|
|
81
|
+
BETTER_AUTH_URL="http://localhost:3000"
|
|
88
82
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
83
|
+
# Application
|
|
84
|
+
NEXT_PUBLIC_APP_URL="http://localhost:3000"
|
|
85
|
+
NODE_ENV="development"
|
|
86
|
+
```
|
|
93
87
|
|
|
94
|
-
|
|
95
|
-
BETTER_AUTH_SECRET="votre-clé-secrète-minimum-32-caractères"
|
|
96
|
-
BETTER_AUTH_URL="http://localhost:3000"
|
|
88
|
+
4. **Créer la base de données**
|
|
97
89
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
4. **Appliquer les migrations Prisma sur Supabase**
|
|
90
|
+
```bash
|
|
91
|
+
createdb crm_db
|
|
92
|
+
# Ou: psql -U postgres -c "CREATE DATABASE crm_db;"
|
|
93
|
+
```
|
|
104
94
|
|
|
105
|
-
|
|
106
|
-
pnpm prisma migrate deploy
|
|
107
|
-
```
|
|
95
|
+
5. **Appliquer les migrations**
|
|
108
96
|
|
|
109
|
-
|
|
97
|
+
```bash
|
|
98
|
+
pnpm prisma migrate deploy
|
|
99
|
+
```
|
|
110
100
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
101
|
+
6. **Lancer le serveur de développement**
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
pnpm dev
|
|
105
|
+
```
|
|
114
106
|
|
|
115
107
|
Ouvrez [http://localhost:3000](http://localhost:3000) pour voir l'application.
|
|
116
108
|
|
|
117
|
-
|
|
109
|
+
7. **Créer votre premier admin**
|
|
118
110
|
|
|
119
111
|
```bash
|
|
120
|
-
#
|
|
121
|
-
|
|
112
|
+
# Ouvrir Prisma Studio
|
|
113
|
+
pnpm prisma studio
|
|
122
114
|
|
|
123
|
-
# Modifier
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
7. **Lancez le script permettant d'ajouter les permissions dans la base de données**
|
|
127
|
-
```bash
|
|
128
|
-
# Lancez ceci
|
|
129
|
-
npm tsx scripts/seed-roles.ts
|
|
115
|
+
# Modifier le champ "role" de votre utilisateur en "ADMIN"
|
|
130
116
|
```
|
|
131
117
|
|
|
132
118
|
## 📁 Structure du projet
|
|
133
119
|
|
|
134
120
|
```
|
|
135
|
-
|
|
136
|
-
├──
|
|
137
|
-
│
|
|
138
|
-
├──
|
|
139
|
-
│ ├──
|
|
140
|
-
│ │ ├──
|
|
141
|
-
│ │ ├──
|
|
142
|
-
│ │ ├──
|
|
143
|
-
│ │ ├──
|
|
144
|
-
│ │
|
|
145
|
-
│ ├──
|
|
146
|
-
│
|
|
147
|
-
│
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
└──
|
|
121
|
+
src/
|
|
122
|
+
├── app/
|
|
123
|
+
│ ├── (auth)/ # Groupe de routes d'authentification
|
|
124
|
+
│ ├── (dashboard)/ # Espace connecté (protégé)
|
|
125
|
+
│ │ ├── dashboard/ # Tableau de bord
|
|
126
|
+
│ │ ├── contacts/ # Gestion des contacts
|
|
127
|
+
│ │ ├── agenda/ # Agenda (mois / semaine / jour)
|
|
128
|
+
│ │ ├── automatisation/ # Workflows / automatisations
|
|
129
|
+
│ │ ├── templates/ # Templates d’emails
|
|
130
|
+
│ │ ├── settings/ # Paramètres (profil, entreprise, intégrations…)
|
|
131
|
+
│ │ ├── users/ # Gestion des utilisateurs & rôles (admin)
|
|
132
|
+
│ │ └── layout.tsx # Layout avec sidebar
|
|
133
|
+
│ ├── api/ # API (contacts, workflows, intégrations, users, etc.)
|
|
134
|
+
│ └── page.tsx # Page d'accueil (redirection)
|
|
135
|
+
├── components/ # Composants UI (sidebar, headers, skeletons…)
|
|
136
|
+
├── lib/ # Auth, Prisma, rôles, intégrations Google, workflows…
|
|
137
|
+
└── proxy.ts # Protection des routes (proxy)
|
|
152
138
|
```
|
|
153
139
|
|
|
154
140
|
## 🔒 Protection & rôles
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "new-york",
|
|
4
|
+
"rsc": true,
|
|
5
|
+
"tsx": true,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "",
|
|
8
|
+
"css": "src/app/globals.css",
|
|
9
|
+
"baseColor": "neutral",
|
|
10
|
+
"cssVariables": true,
|
|
11
|
+
"prefix": ""
|
|
12
|
+
},
|
|
13
|
+
"iconLibrary": "lucide",
|
|
14
|
+
"aliases": {
|
|
15
|
+
"components": "@/components",
|
|
16
|
+
"utils": "@/lib/utils",
|
|
17
|
+
"ui": "@/components/ui",
|
|
18
|
+
"lib": "@/lib",
|
|
19
|
+
"hooks": "@/hooks"
|
|
20
|
+
},
|
|
21
|
+
"registries": {}
|
|
22
|
+
}
|
|
@@ -9,3 +9,57 @@ M,Michel,Petit,0678901234,,michel.petit@example.com,34 Rue du Commerce,Toulouse,
|
|
|
9
9
|
MME,Isabelle,Roux,0689012345,0690123456,isabelle.roux@example.com,67 Avenue Jean Jaurès,Toulouse,31001,Recommandation
|
|
10
10
|
M,David,Simon,0690123456,,david.simon@example.com,23 Place du Capitole,Bordeaux,33000,Google Ads
|
|
11
11
|
MME,Claire,Laurent,0612345679,,claire.laurent@example.com,45 Rue Sainte-Catherine,Bordeaux,33001,Facebook
|
|
12
|
+
M,Antoine,Girard,0613456780,0624567891,antoine.girard@example.com,12 Rue de Rivoli,Paris,75004,LinkedIn
|
|
13
|
+
MME,Céline,Blanc,0624567891,,celine.blanc@example.com,89 Avenue Montaigne,Paris,75016,Google Ads
|
|
14
|
+
M,Nicolas,Moreau,0635678902,0646789013,nicolas.moreau@example.com,34 Rue de la Soif,Nantes,44000,Facebook
|
|
15
|
+
MME,Amélie,Fournier,0646789013,,amelie.fournier@example.com,56 Place Royale,Nantes,44001,Recommandation
|
|
16
|
+
M,Julien,Garcia,0657890124,0668901235,julien.garcia@example.com,78 Boulevard de la Liberté,Lille,59000,LinkedIn
|
|
17
|
+
MME,Camille,Robert,0668901235,,camille.robert@example.com,23 Rue de la République,Lille,59001,Google Ads
|
|
18
|
+
M,Maxime,Richard,0679012346,0680123457,maxime.richard@example.com,45 Avenue Jean Médecin,Nice,06000,Facebook
|
|
19
|
+
MME,Émilie,Durand,0680123457,,emilie.durand@example.com,12 Promenade des Anglais,Nice,06001,Recommandation
|
|
20
|
+
M,Alexandre,Petit,0691234568,0612345670,alexandre.petit@example.com,67 Rue de la République,Strasbourg,67000,LinkedIn
|
|
21
|
+
MME,Manon,Bernard,0612345670,,manon.bernard@example.com,34 Place Kléber,Strasbourg,67001,Google Ads
|
|
22
|
+
M,Romain,Thomas,0623456781,0634567892,romain.thomas@example.com,89 Rue de la Paix,Montpellier,34000,Facebook
|
|
23
|
+
MME,Laura,Robert,0634567892,,laura.robert@example.com,23 Avenue du Général Leclerc,Montpellier,34001,Recommandation
|
|
24
|
+
M,Hugo,Martin,0645678903,0656789014,hugo.martin@example.com,56 Boulevard de la République,Rennes,35000,LinkedIn
|
|
25
|
+
MME,Léa,Dubois,0656789014,,lea.dubois@example.com,12 Place de la Mairie,Rennes,35001,Google Ads
|
|
26
|
+
M,Lucas,Simon,0667890125,0678901236,lucas.simon@example.com,78 Rue de la Gare,Reims,51100,Facebook
|
|
27
|
+
MME,Chloé,Laurent,0678901236,,chloe.laurent@example.com,45 Avenue de Laon,Reims,51101,Recommandation
|
|
28
|
+
M,Enzo,Garcia,0689012347,0690123458,enzo.garcia@example.com,23 Rue de Vesle,Reims,51102,LinkedIn
|
|
29
|
+
MME,Emma,Moreau,0690123458,,emma.moreau@example.com,67 Place Drouet d'Erlon,Reims,51103,Google Ads
|
|
30
|
+
M,Louis,Petit,0611234569,0622345670,louis.petit@example.com,34 Rue de la République,Amiens,80000,Facebook
|
|
31
|
+
MME,Inès,Bernard,0622345670,,ines.bernard@example.com,89 Boulevard de la République,Amiens,80001,Recommandation
|
|
32
|
+
M,Noah,Richard,0633456781,0644567892,noah.richard@example.com,12 Place de l'Hôtel de Ville,Amiens,80002,LinkedIn
|
|
33
|
+
MME,Sarah,Fournier,0644567892,,sarah.fournier@example.com,56 Rue des Trois Cailloux,Amiens,80003,Google Ads
|
|
34
|
+
M,Gabriel,Girard,0655678903,0666789014,gabriel.girard@example.com,78 Avenue des Facultés,Amiens,80004,Facebook
|
|
35
|
+
MME,Zoé,Blanc,0666789014,,zoe.blanc@example.com,23 Rue de la République,Caen,14000,Recommandation
|
|
36
|
+
M,Raphaël,Robert,0677890125,0688901236,raphael.robert@example.com,45 Place de la République,Caen,14001,LinkedIn
|
|
37
|
+
MME,Louise,Thomas,0688901236,,louise.thomas@example.com,12 Rue de Bayeux,Caen,14002,Google Ads
|
|
38
|
+
M,Arthur,Durand,0699012347,0610123458,arthur.durand@example.com,67 Boulevard du Maréchal Leclerc,Caen,14003,Facebook
|
|
39
|
+
MME,Jade,Martin,0610123458,,jade.martin@example.com,34 Rue de la Gare,Caen,14004,Recommandation
|
|
40
|
+
M,Maël,Petit,0611123459,0622234560,mael.petit@example.com,89 Avenue de Courseulles,Caen,14005,LinkedIn
|
|
41
|
+
MME,Anna,Simon,0622234560,,anna.simon@example.com,23 Rue de Falaise,Caen,14006,Google Ads
|
|
42
|
+
M,Paul,Garcia,0633345671,0644456782,paul.garcia@example.com,56 Place Saint-Pierre,Caen,14007,Facebook
|
|
43
|
+
MME,Léna,Moreau,0644456782,,lena.moreau@example.com,12 Rue de Vaucelles,Caen,14008,Recommandation
|
|
44
|
+
M,Tom,Bernard,0655567893,0666678904,tom.bernard@example.com,78 Boulevard Yves Guillou,Caen,14009,LinkedIn
|
|
45
|
+
MME,Mia,Laurent,0666678904,,mia.laurent@example.com,45 Rue de la Poterne,Caen,14010,Google Ads
|
|
46
|
+
M,Ethan,Richard,0677789015,0688890126,ethan.richard@example.com,23 Avenue de Bagatelle,Caen,14011,Facebook
|
|
47
|
+
MME,Lina,Fournier,0688890126,,lina.fournier@example.com,67 Rue de la Délivrande,Caen,14012,Recommandation
|
|
48
|
+
M,Nathan,Girard,0699901237,0610012348,nathan.girard@example.com,34 Place Fontette,Caen,14013,LinkedIn
|
|
49
|
+
MME,Alice,Blanc,0610012348,,alice.blanc@example.com,89 Rue de Geôle,Caen,14014,Google Ads
|
|
50
|
+
M,Théo,Robert,0611112349,0622223450,theo.robert@example.com,12 Boulevard des Alliés,Caen,14015,Facebook
|
|
51
|
+
MME,Julia,Thomas,0622223450,,julia.thomas@example.com,56 Rue de la République,Angers,49000,Recommandation
|
|
52
|
+
M,Liam,Durand,0633334561,0644445672,liam.durand@example.com,78 Place du Ralliement,Angers,49001,LinkedIn
|
|
53
|
+
MME,Rose,Martin,0644445672,,rose.martin@example.com,45 Rue Lenepveu,Angers,49002,Google Ads
|
|
54
|
+
M,Oscar,Petit,0655556783,0666667894,oscar.petit@example.com,23 Boulevard Foch,Angers,49003,Facebook
|
|
55
|
+
MME,Maya,Simon,0666667894,,maya.simon@example.com,67 Rue Plantagenêt,Angers,49004,Recommandation
|
|
56
|
+
M,Adam,Garcia,0677778905,0688889016,adam.garcia@example.com,34 Place du Pilori,Angers,49005,LinkedIn
|
|
57
|
+
MME,Eva,Moreau,0688889016,,eva.moreau@example.com,89 Rue Saint-Aubin,Angers,49006,Google Ads
|
|
58
|
+
M,Léo,Bernard,0699990127,0610001238,leo.bernard@example.com,12 Avenue de Lattre de Tassigny,Angers,49007,Facebook
|
|
59
|
+
MME,Luna,Laurent,0610001238,,luna.laurent@example.com,56 Rue Toussaint,Angers,49008,Recommandation
|
|
60
|
+
M,Marius,Richard,0611101239,0622202340,marius.richard@example.com,78 Boulevard Ayrault,Angers,49009,LinkedIn
|
|
61
|
+
MME,Nina,Fournier,0622202340,,nina.fournier@example.com,23 Place de la Laïcité,Angers,49010,Google Ads
|
|
62
|
+
M,Gaspard,Girard,0633303451,0644404562,gaspard.girard@example.com,45 Rue de la Roë,Angers,49011,Facebook
|
|
63
|
+
MME,Lilou,Blanc,0644404562,,lilou.blanc@example.com,67 Rue Saint-Martin,Angers,49012,Recommandation
|
|
64
|
+
M,Victor,Robert,0655505673,0666606784,victor.robert@example.com,34 Place du Général de Gaulle,Angers,49013,LinkedIn
|
|
65
|
+
MME,Agathe,Thomas,0666606784,,agathe.thomas@example.com,89 Rue Beaurepaire,Angers,49014,Google Ads
|
package/template/next.config.ts
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
import type { NextConfig } from 'next';
|
|
2
2
|
|
|
3
3
|
const nextConfig: NextConfig = {
|
|
4
|
-
/* config options here */
|
|
5
4
|
reactCompiler: true,
|
|
5
|
+
experimental: {
|
|
6
|
+
optimizePackageImports: ['lucide-react', 'recharts'],
|
|
7
|
+
},
|
|
8
|
+
serverExternalPackages: ['nodemailer'],
|
|
9
|
+
images: {
|
|
10
|
+
formats: ['image/avif', 'image/webp'],
|
|
11
|
+
},
|
|
12
|
+
async headers() {
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
source: '/(.*)',
|
|
16
|
+
headers: [
|
|
17
|
+
{ key: 'X-Frame-Options', value: 'DENY' },
|
|
18
|
+
{ key: 'X-Content-Type-Options', value: 'nosniff' },
|
|
19
|
+
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
|
|
20
|
+
{
|
|
21
|
+
key: 'Strict-Transport-Security',
|
|
22
|
+
value: 'max-age=63072000; includeSubDomains; preload',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
key: 'Permissions-Policy',
|
|
26
|
+
value: 'camera=(), microphone=()',
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
},
|
|
6
32
|
};
|
|
7
33
|
|
|
8
34
|
export default nextConfig;
|
package/template/package.json
CHANGED
|
@@ -13,54 +13,91 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@hookform/resolvers": "^5.2.2",
|
|
16
|
-
"@lexical/html": "
|
|
17
|
-
"@lexical/list": "
|
|
16
|
+
"@lexical/html": "0.38.2",
|
|
17
|
+
"@lexical/list": "0.38.2",
|
|
18
18
|
"@lexical/markdown": "^0.38.2",
|
|
19
19
|
"@lexical/react": "^0.38.2",
|
|
20
20
|
"@lexical/rich-text": "^0.38.2",
|
|
21
|
-
"@lexical/selection": "
|
|
22
|
-
"@lexical/utils": "
|
|
21
|
+
"@lexical/selection": "0.38.2",
|
|
22
|
+
"@lexical/utils": "0.38.2",
|
|
23
23
|
"@lexkit/editor": "^0.0.38",
|
|
24
|
-
"@prisma/adapter-pg": "^7.
|
|
25
|
-
"@prisma/client": "^7.
|
|
24
|
+
"@prisma/adapter-pg": "^7.4.1",
|
|
25
|
+
"@prisma/client": "^7.4.1",
|
|
26
|
+
"@radix-ui/react-accordion": "^1.2.12",
|
|
27
|
+
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
28
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
26
29
|
"@react-email/render": "^2.0.4",
|
|
30
|
+
"axios": "^1.13.5",
|
|
27
31
|
"bcryptjs": "^3.0.3",
|
|
28
|
-
"better-auth": "^1.4.
|
|
32
|
+
"better-auth": "^1.4.19",
|
|
33
|
+
"class-variance-authority": "^0.7.1",
|
|
29
34
|
"clsx": "^2.1.1",
|
|
30
|
-
"dotenv": "^17.2.
|
|
35
|
+
"dotenv": "^17.2.3",
|
|
36
|
+
"form-data": "^4.0.5",
|
|
31
37
|
"iron-session": "^8.0.4",
|
|
38
|
+
"isomorphic-dompurify": "^3.0.0",
|
|
32
39
|
"lexical": "^0.38.2",
|
|
40
|
+
"lru-cache": "^11.2.6",
|
|
33
41
|
"lucide-react": "^0.555.0",
|
|
34
|
-
"next": "16.
|
|
42
|
+
"next": "16.1.6",
|
|
35
43
|
"nodemailer": "^7.0.13",
|
|
36
|
-
"
|
|
37
|
-
"pg": "^8.
|
|
38
|
-
"react": "19.2.
|
|
39
|
-
"react-dom": "19.2.
|
|
40
|
-
"react-
|
|
41
|
-
"react-hook-form": "^7.71.1",
|
|
44
|
+
"pdf-lib": "^1.17.1",
|
|
45
|
+
"pg": "^8.19.0",
|
|
46
|
+
"react": "19.2.4",
|
|
47
|
+
"react-dom": "19.2.4",
|
|
48
|
+
"react-hook-form": "^7.71.2",
|
|
42
49
|
"recharts": "^2.15.4",
|
|
43
|
-
"
|
|
50
|
+
"swr": "^2.4.1",
|
|
51
|
+
"tailwind-merge": "^3.5.0",
|
|
44
52
|
"xlsx": "^0.18.5",
|
|
45
53
|
"zod": "^4.3.6"
|
|
46
54
|
},
|
|
55
|
+
"overrides": {
|
|
56
|
+
"@lexkit/editor": {
|
|
57
|
+
"@lexical/code": "0.38.2",
|
|
58
|
+
"@lexical/link": "0.38.2",
|
|
59
|
+
"@lexical/table": "0.38.2",
|
|
60
|
+
"@lexical/clipboard": "0.38.2",
|
|
61
|
+
"@lexical/extension": "0.38.2",
|
|
62
|
+
"@lexical/html": "0.38.2",
|
|
63
|
+
"@lexical/list": "0.38.2",
|
|
64
|
+
"@lexical/selection": "0.38.2",
|
|
65
|
+
"@lexical/utils": "0.38.2",
|
|
66
|
+
"lexical": "0.38.2"
|
|
67
|
+
},
|
|
68
|
+
"@types/react": "19.2.14",
|
|
69
|
+
"@types/react-dom": "19.2.3"
|
|
70
|
+
},
|
|
71
|
+
"pnpm": {
|
|
72
|
+
"overrides": {
|
|
73
|
+
"@lexical/code": "0.38.2",
|
|
74
|
+
"@lexical/link": "0.38.2",
|
|
75
|
+
"@lexical/table": "0.38.2",
|
|
76
|
+
"@lexical/clipboard": "0.38.2",
|
|
77
|
+
"@lexical/extension": "0.38.2",
|
|
78
|
+
"@lexical/html": "0.38.2",
|
|
79
|
+
"@lexical/list": "0.38.2",
|
|
80
|
+
"@lexical/selection": "0.38.2",
|
|
81
|
+
"@lexical/utils": "0.38.2",
|
|
82
|
+
"lexical": "0.38.2"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
47
85
|
"devDependencies": {
|
|
48
|
-
"@tailwindcss/postcss": "^4.1
|
|
49
|
-
"@types/node": "^20.19.
|
|
50
|
-
"@types/nodemailer": "^7.0.
|
|
51
|
-
"@types/papaparse": "^5.5.2",
|
|
86
|
+
"@tailwindcss/postcss": "^4.2.1",
|
|
87
|
+
"@types/node": "^20.19.34",
|
|
88
|
+
"@types/nodemailer": "^7.0.11",
|
|
52
89
|
"@types/pg": "^8.16.0",
|
|
53
|
-
"@types/react": "
|
|
54
|
-
"@types/react-dom": "
|
|
55
|
-
"@types/react-grid-layout": "^2.1.0",
|
|
90
|
+
"@types/react": "19.2.14",
|
|
91
|
+
"@types/react-dom": "19.2.3",
|
|
56
92
|
"babel-plugin-react-compiler": "1.0.0",
|
|
57
|
-
"eslint": "^9.39.
|
|
58
|
-
"eslint-config-next": "16.
|
|
93
|
+
"eslint": "^9.39.3",
|
|
94
|
+
"eslint-config-next": "16.1.6",
|
|
59
95
|
"prettier": "^3.8.1",
|
|
60
96
|
"prettier-plugin-tailwindcss": "^0.7.2",
|
|
61
|
-
"prisma": "^7.
|
|
62
|
-
"tailwindcss": "^4.1
|
|
97
|
+
"prisma": "^7.4.1",
|
|
98
|
+
"tailwindcss": "^4.2.1",
|
|
63
99
|
"tsx": "^4.21.0",
|
|
100
|
+
"tw-animate-css": "^1.4.0",
|
|
64
101
|
"typescript": "^5.9.3"
|
|
65
102
|
}
|
|
66
103
|
}
|