create-crm-tmp 1.1.3 → 2.1.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.
Files changed (276) hide show
  1. package/bin/create-crm-tmp.js +56 -35
  2. package/package.json +1 -1
  3. package/template/.prettierignore +2 -0
  4. package/template/README.md +230 -115
  5. package/template/components.json +22 -0
  6. package/template/eslint.config.mjs +13 -0
  7. package/template/exemple-contacts.csv +54 -0
  8. package/template/next.config.ts +41 -1
  9. package/template/package.json +63 -15
  10. package/template/prisma/migrations/20260318095700_init_db/migration.sql +978 -0
  11. package/template/prisma/schema.prisma +311 -67
  12. package/template/src/app/(auth)/invite/[token]/page.tsx +28 -29
  13. package/template/src/app/(auth)/layout.tsx +1 -1
  14. package/template/src/app/(auth)/reset-password/complete/page.tsx +21 -27
  15. package/template/src/app/(auth)/reset-password/page.tsx +14 -10
  16. package/template/src/app/(auth)/reset-password/verify/page.tsx +14 -10
  17. package/template/src/app/(auth)/signin/page.tsx +34 -23
  18. package/template/src/app/(dashboard)/agenda/page.tsx +3655 -2357
  19. package/template/src/app/(dashboard)/automatisation/[id]/page.tsx +10 -7
  20. package/template/src/app/(dashboard)/automatisation/_components/workflow-editor.tsx +609 -338
  21. package/template/src/app/(dashboard)/automatisation/new/page.tsx +11 -8
  22. package/template/src/app/(dashboard)/automatisation/page.tsx +463 -186
  23. package/template/src/app/(dashboard)/closing/page.tsx +517 -469
  24. package/template/src/app/(dashboard)/contacts/[id]/page.tsx +6151 -4210
  25. package/template/src/app/(dashboard)/contacts/companies/[id]/page.tsx +1702 -0
  26. package/template/src/app/(dashboard)/contacts/loading.tsx +13 -0
  27. package/template/src/app/(dashboard)/contacts/page.tsx +4124 -2130
  28. package/template/src/app/(dashboard)/dashboard/page.tsx +119 -105
  29. package/template/src/app/(dashboard)/dev/page.tsx +1291 -0
  30. package/template/src/app/(dashboard)/error.tsx +37 -0
  31. package/template/src/app/(dashboard)/layout.tsx +6 -2
  32. package/template/src/app/(dashboard)/loading.tsx +5 -0
  33. package/template/src/app/(dashboard)/settings/loading.tsx +19 -0
  34. package/template/src/app/(dashboard)/settings/page.tsx +1773 -3362
  35. package/template/src/app/(dashboard)/templates/page.tsx +504 -303
  36. package/template/src/app/(dashboard)/users/list/page.tsx +364 -355
  37. package/template/src/app/(dashboard)/users/page.tsx +279 -310
  38. package/template/src/app/(dashboard)/users/permissions/page.tsx +104 -99
  39. package/template/src/app/(dashboard)/users/roles/page.tsx +169 -140
  40. package/template/src/app/api/agenda/google-events/route.ts +92 -0
  41. package/template/src/app/api/audit-logs/route.ts +1 -1
  42. package/template/src/app/api/auth/check-active/route.ts +3 -2
  43. package/template/src/app/api/auth/google/callback/route.ts +8 -5
  44. package/template/src/app/api/auth/google/disconnect/route.ts +2 -2
  45. package/template/src/app/api/auth/google/route.ts +2 -1
  46. package/template/src/app/api/auth/google/status/route.ts +7 -31
  47. package/template/src/app/api/companies/[id]/activities/route.ts +129 -0
  48. package/template/src/app/api/companies/[id]/route.ts +194 -0
  49. package/template/src/app/api/companies/export/route.ts +206 -0
  50. package/template/src/app/api/companies/route.ts +196 -0
  51. package/template/src/app/api/contact-views/[id]/pin/route.ts +69 -0
  52. package/template/src/app/api/contact-views/[id]/route.ts +197 -0
  53. package/template/src/app/api/contact-views/route.ts +146 -0
  54. package/template/src/app/api/contacts/[id]/files/[fileId]/preview/route.ts +55 -0
  55. package/template/src/app/api/contacts/[id]/files/[fileId]/route.ts +20 -48
  56. package/template/src/app/api/contacts/[id]/files/route.ts +125 -186
  57. package/template/src/app/api/contacts/[id]/interactions/[interactionId]/route.ts +27 -1
  58. package/template/src/app/api/contacts/[id]/interactions/route.ts +45 -8
  59. package/template/src/app/api/contacts/[id]/kyc/route.ts +81 -0
  60. package/template/src/app/api/contacts/[id]/meet/route.ts +55 -29
  61. package/template/src/app/api/contacts/[id]/route.ts +184 -21
  62. package/template/src/app/api/contacts/[id]/send-email/route.ts +33 -11
  63. package/template/src/app/api/contacts/[id]/workflows/run/route.ts +67 -0
  64. package/template/src/app/api/contacts/export/route.ts +22 -31
  65. package/template/src/app/api/contacts/import/route.ts +77 -44
  66. package/template/src/app/api/contacts/import-preview/route.ts +139 -0
  67. package/template/src/app/api/contacts/origins/route.ts +63 -0
  68. package/template/src/app/api/contacts/route.ts +322 -57
  69. package/template/src/app/api/cron/cleanup-editor-images/route.ts +166 -0
  70. package/template/src/app/api/dashboard/stats/route.ts +9 -292
  71. package/template/src/app/api/dashboard/widgets/[id]/route.ts +0 -3
  72. package/template/src/app/api/dashboard/widgets/route.ts +19 -19
  73. package/template/src/app/api/dev/reminders/test/route.ts +114 -0
  74. package/template/src/app/api/editor/upload-image/route.ts +61 -0
  75. package/template/src/app/api/integrations/google-sheet/jobs/[jobId]/route.ts +47 -0
  76. package/template/src/app/api/integrations/google-sheet/jobs/usage/route.ts +50 -0
  77. package/template/src/app/api/integrations/google-sheet/sync/route.ts +28 -542
  78. package/template/src/app/api/invite/complete/route.ts +20 -23
  79. package/template/src/app/api/jobs/google-sheet/process/route.ts +84 -0
  80. package/template/src/app/api/jobs/google-sheet/schedule/route.ts +50 -0
  81. package/template/src/app/api/reminders/clear/route.ts +120 -0
  82. package/template/src/app/api/reminders/clear/undo/route.ts +112 -0
  83. package/template/src/app/api/reminders/route.ts +165 -39
  84. package/template/src/app/api/reminders/state/route.ts +164 -0
  85. package/template/src/app/api/reset-password/complete/route.ts +11 -13
  86. package/template/src/app/api/reset-password/request/route.ts +1 -1
  87. package/template/src/app/api/reset-password/verify/route.ts +1 -1
  88. package/template/src/app/api/send/route.ts +25 -47
  89. package/template/src/app/api/settings/closing-reasons/[id]/route.ts +10 -21
  90. package/template/src/app/api/settings/closing-reasons/route.ts +10 -21
  91. package/template/src/app/api/settings/company/route.ts +19 -26
  92. package/template/src/app/api/settings/google-ads/[id]/route.ts +20 -23
  93. package/template/src/app/api/settings/google-ads/route.ts +34 -23
  94. package/template/src/app/api/settings/google-calendar/calendars/route.ts +97 -0
  95. package/template/src/app/api/settings/google-calendar/route.ts +124 -0
  96. package/template/src/app/api/settings/google-sheet/[id]/route.ts +48 -23
  97. package/template/src/app/api/settings/google-sheet/auto-map/route.ts +56 -32
  98. package/template/src/app/api/settings/google-sheet/preview/route.ts +110 -0
  99. package/template/src/app/api/settings/google-sheet/route.ts +34 -23
  100. package/template/src/app/api/settings/integrations/logs/route.ts +93 -0
  101. package/template/src/app/api/settings/integrations/notifications/route.ts +67 -0
  102. package/template/src/app/api/settings/meta-leads/[id]/route.ts +20 -24
  103. package/template/src/app/api/settings/meta-leads/route.ts +34 -25
  104. package/template/src/app/api/settings/smtp/route.ts +53 -6
  105. package/template/src/app/api/settings/statuses/[id]/route.ts +29 -32
  106. package/template/src/app/api/settings/statuses/route.ts +24 -22
  107. package/template/src/app/api/statuses/route.ts +2 -5
  108. package/template/src/app/api/tasks/[id]/attendees/route.ts +36 -13
  109. package/template/src/app/api/tasks/[id]/route.ts +357 -145
  110. package/template/src/app/api/tasks/meet/route.ts +37 -26
  111. package/template/src/app/api/tasks/route.ts +201 -96
  112. package/template/src/app/api/templates/[id]/route.ts +22 -13
  113. package/template/src/app/api/templates/route.ts +22 -5
  114. package/template/src/app/api/users/[id]/resend-invite/route.ts +95 -0
  115. package/template/src/app/api/users/[id]/route.ts +22 -16
  116. package/template/src/app/api/users/commercials/route.ts +38 -0
  117. package/template/src/app/api/users/for-agenda/route.ts +1 -2
  118. package/template/src/app/api/users/list/route.ts +57 -19
  119. package/template/src/app/api/users/route.ts +89 -34
  120. package/template/src/app/api/webhooks/google-ads/route.ts +40 -1
  121. package/template/src/app/api/webhooks/meta-leads/route.ts +38 -1
  122. package/template/src/app/api/workflows/[id]/route.ts +29 -6
  123. package/template/src/app/api/workflows/process/route.ts +505 -170
  124. package/template/src/app/api/workflows/route.ts +42 -4
  125. package/template/src/app/globals.css +512 -32
  126. package/template/src/app/layout.tsx +28 -9
  127. package/template/src/app/page.tsx +37 -7
  128. package/template/src/components/address-autocomplete.tsx +233 -0
  129. package/template/src/components/config-error-alert.tsx +46 -0
  130. package/template/src/components/contacts/filter-bar.tsx +190 -0
  131. package/template/src/components/contacts/filter-builder.tsx +574 -0
  132. package/template/src/components/contacts/save-view-dialog.tsx +160 -0
  133. package/template/src/components/contacts/views-tab-bar.tsx +449 -0
  134. package/template/src/components/dashboard/activity-chart.tsx +6 -1
  135. package/template/src/components/dashboard/add-widget-dialog.tsx +13 -17
  136. package/template/src/components/dashboard/color-picker.tsx +7 -8
  137. package/template/src/components/dashboard/recent-activity.tsx +2 -5
  138. package/template/src/components/dashboard/stat-card.tsx +1 -3
  139. package/template/src/components/dashboard/status-distribution-chart.tsx +0 -1
  140. package/template/src/components/dashboard/top-contacts-list.tsx +7 -13
  141. package/template/src/components/dashboard/upcoming-tasks-list.tsx +2 -5
  142. package/template/src/components/dashboard/widget-wrapper.tsx +3 -6
  143. package/template/src/components/date-picker.tsx +399 -0
  144. package/template/src/components/editor/upload-editor-image.ts +42 -0
  145. package/template/src/components/editor.tsx +188 -35
  146. package/template/src/components/email-template.tsx +4 -2
  147. package/template/src/components/global-search.tsx +360 -0
  148. package/template/src/components/header.tsx +200 -107
  149. package/template/src/components/inactive-account-guard.tsx +58 -0
  150. package/template/src/components/integration-notifications-listener.tsx +12 -0
  151. package/template/src/components/invitation-email-template.tsx +4 -2
  152. package/template/src/components/lazy-editor.tsx +11 -0
  153. package/template/src/components/meet-cancellation-email-template.tsx +11 -3
  154. package/template/src/components/meet-confirmation-email-template.tsx +10 -3
  155. package/template/src/components/meet-update-email-template.tsx +10 -3
  156. package/template/src/components/page-header.tsx +19 -15
  157. package/template/src/components/protected-page.tsx +94 -0
  158. package/template/src/components/reset-password-email-template.tsx +4 -2
  159. package/template/src/components/settings/integrations/GoogleAdsIntegration.tsx +428 -0
  160. package/template/src/components/settings/integrations/GoogleSheetConfigMonitoringModal.tsx +680 -0
  161. package/template/src/components/settings/integrations/GoogleSheetIntegration.tsx +809 -0
  162. package/template/src/components/settings/integrations/ImportResultDialog.tsx +124 -0
  163. package/template/src/components/settings/integrations/IntegrationLogPanel.tsx +57 -0
  164. package/template/src/components/settings/integrations/IntegrationLogsTable.tsx +186 -0
  165. package/template/src/components/settings/integrations/MetaLeadIntegration.tsx +451 -0
  166. package/template/src/components/sidebar.tsx +117 -100
  167. package/template/src/components/skeleton.tsx +128 -45
  168. package/template/src/components/ui/accordion.tsx +64 -0
  169. package/template/src/components/ui/alert-dialog.tsx +139 -0
  170. package/template/src/components/ui/button.tsx +71 -0
  171. package/template/src/components/ui/components.tsx +1 -1
  172. package/template/src/components/ui/date-picker.tsx +422 -0
  173. package/template/src/components/ui/datetime-picker.tsx +338 -0
  174. package/template/src/components/ui/status-select.tsx +271 -0
  175. package/template/src/components/ui/tooltip.tsx +37 -0
  176. package/template/src/components/view-as-banner.tsx +1 -1
  177. package/template/src/components/view-as-modal.tsx +30 -19
  178. package/template/src/config/nav-pages.ts +108 -0
  179. package/template/src/contexts/app-toast-context.tsx +362 -0
  180. package/template/src/contexts/dashboard-theme-context.tsx +2 -7
  181. package/template/src/contexts/sidebar-context.tsx +27 -53
  182. package/template/src/contexts/task-reminder-context.tsx +134 -160
  183. package/template/src/contexts/view-as-context.tsx +32 -10
  184. package/template/src/hooks/use-alert.tsx +65 -0
  185. package/template/src/hooks/use-confirm.tsx +87 -0
  186. package/template/src/hooks/use-contact-views.ts +140 -0
  187. package/template/src/hooks/use-contacts.ts +69 -0
  188. package/template/src/hooks/use-fetch.ts +17 -0
  189. package/template/src/hooks/use-focus-trap.ts +73 -0
  190. package/template/src/hooks/use-statuses.ts +22 -0
  191. package/template/src/hooks/useIntegrationNotifications.ts +49 -0
  192. package/template/src/lib/address-api.ts +155 -0
  193. package/template/src/lib/auth.ts +8 -1
  194. package/template/src/lib/cache.ts +73 -0
  195. package/template/src/lib/check-permission.ts +12 -177
  196. package/template/src/lib/config-links.ts +14 -0
  197. package/template/src/lib/contact-duplicate.ts +79 -61
  198. package/template/src/lib/contact-interactions.ts +24 -22
  199. package/template/src/lib/contact-view-filters.ts +301 -0
  200. package/template/src/lib/contacts-list-url.ts +190 -0
  201. package/template/src/lib/dashboard-stats.ts +282 -0
  202. package/template/src/lib/dashboard-themes.ts +0 -5
  203. package/template/src/lib/date-utils.ts +176 -0
  204. package/template/src/lib/default-widgets.ts +0 -2
  205. package/template/src/lib/editor-html-image-dimensions.ts +172 -0
  206. package/template/src/lib/editor-image-limits.ts +19 -0
  207. package/template/src/lib/email-html-sanitize.ts +19 -0
  208. package/template/src/lib/encryption.ts +9 -6
  209. package/template/src/lib/fr-geography.ts +192 -0
  210. package/template/src/lib/get-auth-user.ts +25 -0
  211. package/template/src/lib/google-calendar-agenda.ts +201 -0
  212. package/template/src/lib/google-calendar.ts +309 -17
  213. package/template/src/lib/google-fetch.ts +63 -0
  214. package/template/src/lib/google-sheet-sync-jobs.ts +96 -0
  215. package/template/src/lib/google-sheet-sync-runner.ts +514 -0
  216. package/template/src/lib/integration-import-log.ts +21 -0
  217. package/template/src/lib/local-storage.ts +34 -0
  218. package/template/src/lib/permissions.ts +268 -40
  219. package/template/src/lib/prisma.ts +15 -12
  220. package/template/src/lib/qstash.ts +65 -0
  221. package/template/src/lib/reminder-state-server.ts +80 -0
  222. package/template/src/lib/reminder-state.ts +29 -0
  223. package/template/src/lib/roles.ts +12 -15
  224. package/template/src/lib/supabase-storage.ts +113 -0
  225. package/template/src/lib/template-variables.ts +204 -29
  226. package/template/src/lib/utils.ts +71 -11
  227. package/template/src/lib/widget-registry.ts +0 -4
  228. package/template/src/lib/workflow-executor.ts +391 -228
  229. package/template/src/proxy.ts +35 -73
  230. package/template/src/types/contact-views.ts +351 -0
  231. package/template/vercel.json +5 -0
  232. package/template/WORKFLOWS_CRON.md +0 -185
  233. package/template/prisma/migrations/20251126144728_init/migration.sql +0 -78
  234. package/template/prisma/migrations/20251126155204_add_user_roles/migration.sql +0 -5
  235. package/template/prisma/migrations/20251128095126_add_company_info/migration.sql +0 -19
  236. package/template/prisma/migrations/20251128123321_add_smtp_config/migration.sql +0 -22
  237. package/template/prisma/migrations/20251128132303_add_status/migration.sql +0 -23
  238. package/template/prisma/migrations/20251201102207_add_user_active/migration.sql +0 -75
  239. package/template/prisma/migrations/20251201105507_add_email_signature/migration.sql +0 -2
  240. package/template/prisma/migrations/20251201151122_add_tasks/migration.sql +0 -45
  241. package/template/prisma/migrations/20251202111854_add_task_reminder/migration.sql +0 -2
  242. package/template/prisma/migrations/20251202135859_add_google_meet_integration/migration.sql +0 -27
  243. package/template/prisma/migrations/20251203103317_add_meta_lead_integration/migration.sql +0 -20
  244. package/template/prisma/migrations/20251203104002_add_google_ads_integration/migration.sql +0 -18
  245. package/template/prisma/migrations/20251203112122_add_google_sheet_integration/migration.sql +0 -32
  246. package/template/prisma/migrations/20251203153853_allow_multiple_integration_configs/migration.sql +0 -20
  247. package/template/prisma/migrations/20251205141705_update_user_roles/migration.sql +0 -12
  248. package/template/prisma/migrations/20251205150000_add_commercial_and_telepro_assignment/migration.sql +0 -21
  249. package/template/prisma/migrations/20251205160000_add_interaction_logging/migration.sql +0 -11
  250. package/template/prisma/migrations/20251208090314_add_automatic_interaction_types/migration.sql +0 -12
  251. package/template/prisma/migrations/20251208094843_mg/migration.sql +0 -14
  252. package/template/prisma/migrations/20251208100000_add_company_support/migration.sql +0 -14
  253. package/template/prisma/migrations/20251208110000_add_templates/migration.sql +0 -26
  254. package/template/prisma/migrations/20251208141304_add_video_conference_task_type/migration.sql +0 -2
  255. package/template/prisma/migrations/20251209104759_add_internal_note_to_task/migration.sql +0 -2
  256. package/template/prisma/migrations/20251209134803_add_company_field/migration.sql +0 -2
  257. package/template/prisma/migrations/20251209150000_rename_company_to_company_name/migration.sql +0 -3
  258. package/template/prisma/migrations/20251209150016_add_email_tracking/migration.sql +0 -21
  259. package/template/prisma/migrations/20251209155908_add_notify_contact_to_task/migration.sql +0 -2
  260. package/template/prisma/migrations/20251210110019_add_appointment_types/migration.sql +0 -10
  261. package/template/prisma/migrations/20251210113928_add_contact_files/migration.sql +0 -26
  262. package/template/prisma/migrations/20251212132339_add_custom_roles/migration.sql +0 -24
  263. package/template/prisma/migrations/20251215104448_add_file_interaction_types/migration.sql +0 -11
  264. package/template/prisma/migrations/20251215145616_add_closing_reasons/migration.sql +0 -12
  265. package/template/prisma/migrations/20251216140850_add_log_users/migration.sql +0 -25
  266. package/template/prisma/migrations/20251216151000_rename_perdu_to_ferme/migration.sql +0 -8
  267. package/template/prisma/migrations/20251216162318_add_column_mappings_to_google_sheet/migration.sql +0 -2
  268. package/template/prisma/migrations/20251216185127_add_workflows/migration.sql +0 -80
  269. package/template/prisma/migrations/20251216192237_add_scheduled_workflow_actions/migration.sql +0 -32
  270. package/template/prisma/migrations/20251220000000_add_task_interaction_type/migration.sql +0 -4
  271. package/template/prisma/migrations/20251221000000_add_task_type/migration.sql +0 -3
  272. package/template/prisma/migrations/20251221000001_add_event_color/migration.sql +0 -23
  273. package/template/prisma/migrations/20260210114913_add_dashboard_widget/migration.sql +0 -20
  274. package/template/prisma/migrations/20260226093949_fix_cascade_on_user_delete/migration.sql +0 -69
  275. package/template/src/app/(dashboard)/users/layout.tsx +0 -30
  276. package/template/src/lib/google-drive.ts +0 -380
@@ -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
@@ -1,8 +1,48 @@
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
+ key: 'Content-Security-Policy',
30
+ value: [
31
+ "default-src 'self'",
32
+ "script-src 'self' 'unsafe-inline' 'unsafe-eval'",
33
+ "style-src 'self' 'unsafe-inline'",
34
+ "img-src 'self' data: blob: https:",
35
+ "font-src 'self' data:",
36
+ "connect-src 'self' https:",
37
+ "frame-ancestors 'none'",
38
+ "base-uri 'self'",
39
+ "form-action 'self'",
40
+ ].join('; '),
41
+ },
42
+ ],
43
+ },
44
+ ];
45
+ },
6
46
  };
7
47
 
8
48
  export default nextConfig;
@@ -4,51 +4,104 @@
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "dev": "next dev",
7
- "build": "next build",
7
+ "build": "prisma generate && next build",
8
8
  "start": "next start",
9
9
  "postinstall": "prisma generate",
10
+ "db:migrate": "prisma migrate dev",
11
+ "db:deploy": "prisma migrate deploy",
12
+ "db:prepare:prod": "prisma migrate deploy && prisma generate",
10
13
  "lint": "eslint",
14
+ "typecheck": "tsc --noEmit",
11
15
  "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,css,md}\"",
12
16
  "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,css,md}\""
13
17
  },
14
18
  "dependencies": {
15
- "@lexical/html": "^0.38.2",
16
- "@lexical/list": "^0.38.2",
19
+ "@hookform/resolvers": "^5.2.2",
20
+ "@lexical/html": "0.38.2",
21
+ "@lexical/list": "0.38.2",
17
22
  "@lexical/markdown": "^0.38.2",
18
23
  "@lexical/react": "^0.38.2",
19
24
  "@lexical/rich-text": "^0.38.2",
20
- "@lexical/selection": "^0.38.2",
21
- "@lexical/utils": "^0.38.2",
25
+ "@lexical/selection": "0.38.2",
26
+ "@lexical/utils": "0.38.2",
22
27
  "@lexkit/editor": "^0.0.38",
23
28
  "@prisma/adapter-pg": "^7.4.1",
24
29
  "@prisma/client": "^7.4.1",
30
+ "@radix-ui/react-accordion": "^1.2.12",
31
+ "@radix-ui/react-alert-dialog": "^1.1.15",
32
+ "@radix-ui/react-slot": "^1.2.4",
33
+ "@radix-ui/react-tooltip": "^1.2.8",
25
34
  "@react-email/render": "^2.0.4",
35
+ "@supabase/supabase-js": "^2.99.2",
36
+ "@upstash/qstash": "^2.10.1",
37
+ "axios": "^1.13.5",
26
38
  "bcryptjs": "^3.0.3",
27
39
  "better-auth": "^1.4.19",
40
+ "class-variance-authority": "^0.7.1",
28
41
  "clsx": "^2.1.1",
29
- "dotenv": "^17.3.1",
42
+ "dompurify": "^3.3.3",
43
+ "dotenv": "^17.2.3",
44
+ "form-data": "^4.0.5",
45
+ "iron-session": "^8.0.4",
30
46
  "lexical": "^0.38.2",
47
+ "lru-cache": "^11.2.6",
31
48
  "lucide-react": "^0.555.0",
49
+ "motion": "^12.38.0",
32
50
  "next": "16.1.6",
33
51
  "nodemailer": "^7.0.13",
34
- "papaparse": "^5.5.3",
52
+ "pdf-lib": "^1.17.1",
35
53
  "pg": "^8.19.0",
36
54
  "react": "19.2.4",
37
55
  "react-dom": "19.2.4",
38
56
  "react-grid-layout": "^2.2.2",
57
+ "react-hook-form": "^7.71.2",
39
58
  "recharts": "^2.15.4",
59
+ "sanitize-html": "^2.17.2",
60
+ "swr": "^2.4.1",
40
61
  "tailwind-merge": "^3.5.0",
41
- "xlsx": "https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz"
62
+ "xlsx": "^0.18.5",
63
+ "zod": "^4.3.6"
64
+ },
65
+ "overrides": {
66
+ "@lexkit/editor": {
67
+ "@lexical/code": "0.38.2",
68
+ "@lexical/link": "0.38.2",
69
+ "@lexical/table": "0.38.2",
70
+ "@lexical/clipboard": "0.38.2",
71
+ "@lexical/extension": "0.38.2",
72
+ "@lexical/html": "0.38.2",
73
+ "@lexical/list": "0.38.2",
74
+ "@lexical/selection": "0.38.2",
75
+ "@lexical/utils": "0.38.2",
76
+ "lexical": "0.38.2"
77
+ },
78
+ "@types/react": "19.2.14",
79
+ "@types/react-dom": "19.2.3"
80
+ },
81
+ "pnpm": {
82
+ "overrides": {
83
+ "@lexical/code": "0.38.2",
84
+ "@lexical/link": "0.38.2",
85
+ "@lexical/table": "0.38.2",
86
+ "@lexical/clipboard": "0.38.2",
87
+ "@lexical/extension": "0.38.2",
88
+ "@lexical/html": "0.38.2",
89
+ "@lexical/list": "0.38.2",
90
+ "@lexical/selection": "0.38.2",
91
+ "@lexical/utils": "0.38.2",
92
+ "lexical": "0.38.2"
93
+ }
42
94
  },
43
95
  "devDependencies": {
44
96
  "@tailwindcss/postcss": "^4.2.1",
97
+ "@types/dompurify": "^3.2.0",
45
98
  "@types/node": "^20.19.34",
46
99
  "@types/nodemailer": "^7.0.11",
47
- "@types/papaparse": "^5.5.2",
48
100
  "@types/pg": "^8.16.0",
49
101
  "@types/react": "19.2.14",
50
102
  "@types/react-dom": "19.2.3",
51
103
  "@types/react-grid-layout": "^2.1.0",
104
+ "@types/sanitize-html": "^2.16.1",
52
105
  "babel-plugin-react-compiler": "1.0.0",
53
106
  "eslint": "^9.39.3",
54
107
  "eslint-config-next": "16.1.6",
@@ -57,12 +110,7 @@
57
110
  "prisma": "^7.4.1",
58
111
  "tailwindcss": "^4.2.1",
59
112
  "tsx": "^4.21.0",
113
+ "tw-animate-css": "^1.4.0",
60
114
  "typescript": "^5.9.3"
61
- },
62
- "pnpm": {
63
- "overrides": {
64
- "@types/react": "19.2.14",
65
- "@types/react-dom": "19.2.3"
66
- }
67
115
  }
68
116
  }