@lastbrain/app 0.1.43 → 0.1.44
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/dist/__tests__/module-registry.test.js +1 -1
- package/dist/layouts/AdminLayoutWithSidebar.d.ts +2 -1
- package/dist/layouts/AdminLayoutWithSidebar.d.ts.map +1 -1
- package/dist/layouts/AdminLayoutWithSidebar.js +10 -4
- package/dist/layouts/AuthLayoutWithSidebar.d.ts +2 -1
- package/dist/layouts/AuthLayoutWithSidebar.d.ts.map +1 -1
- package/dist/layouts/AuthLayoutWithSidebar.js +10 -4
- package/dist/layouts/PublicLayout.d.ts +2 -1
- package/dist/layouts/PublicLayout.d.ts.map +1 -1
- package/dist/layouts/PublicLayoutWithSidebar.d.ts +2 -1
- package/dist/layouts/PublicLayoutWithSidebar.d.ts.map +1 -1
- package/dist/layouts/PublicLayoutWithSidebar.js +10 -4
- package/dist/scripts/db-migrations-sync.js +67 -38
- package/dist/scripts/dev-sync.js +1 -0
- package/dist/scripts/init-app.d.ts.map +1 -1
- package/dist/scripts/init-app.js +41 -9
- package/dist/scripts/module-build.d.ts.map +1 -1
- package/dist/scripts/module-build.js +15 -5
- package/dist/scripts/module-create.d.ts.map +1 -1
- package/dist/scripts/module-create.js +19 -0
- package/dist/scripts/module-delete.d.ts.map +1 -1
- package/dist/scripts/module-delete.js +6 -2
- package/dist/scripts/module-list.d.ts.map +1 -1
- package/dist/scripts/module-list.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/templates/DefaultDoc.d.ts.map +1 -1
- package/dist/templates/DefaultDoc.js +6 -13
- package/dist/templates/DocPage.d.ts.map +1 -1
- package/dist/templates/DocPage.js +3 -5
- package/dist/templates/SimpleDocPage.js +2 -2
- package/dist/templates/SimpleHomePage.js +1 -1
- package/package.json +7 -2
- package/src/__tests__/module-registry.test.ts +1 -1
- package/src/layouts/AdminLayoutWithSidebar.tsx +13 -6
- package/src/layouts/AuthLayoutWithSidebar.tsx +13 -6
- package/src/layouts/PublicLayout.tsx +2 -2
- package/src/layouts/PublicLayoutWithSidebar.tsx +13 -6
- package/src/scripts/db-migrations-sync.ts +86 -57
- package/src/scripts/dev-sync.ts +1 -0
- package/src/scripts/init-app.ts +47 -9
- package/src/scripts/module-build.ts +17 -5
- package/src/scripts/module-create.ts +25 -2
- package/src/scripts/module-delete.ts +8 -6
- package/src/scripts/module-list.ts +1 -4
- package/src/templates/DefaultDoc.tsx +346 -492
- package/src/templates/DocPage.tsx +37 -19
- package/src/templates/SimpleDocPage.tsx +2 -2
- package/src/templates/SimpleHomePage.tsx +3 -3
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
Palette,
|
|
16
16
|
HardDrive,
|
|
17
17
|
Link,
|
|
18
|
+
Package,
|
|
18
19
|
} from "lucide-react";
|
|
19
20
|
|
|
20
21
|
export function DefaultDocumentation() {
|
|
@@ -32,17 +33,6 @@ export function DefaultDocumentation() {
|
|
|
32
33
|
Framework modulaire pour créer rapidement des applications Next.js
|
|
33
34
|
avec système de modules, authentification et base de données.
|
|
34
35
|
</p>
|
|
35
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
36
|
-
!
|
|
37
|
-
<a
|
|
38
|
-
href="https://img.shields.io/github/package-json/dependency-version/lastpublication/starter/next?label=Next.js&path=packages/app/package.json"
|
|
39
|
-
className="text-blue-600 hover:underline"
|
|
40
|
-
target="_blank"
|
|
41
|
-
rel="noopener noreferrer"
|
|
42
|
-
>
|
|
43
|
-
Next.js
|
|
44
|
-
</a>
|
|
45
|
-
</p>
|
|
46
36
|
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
47
37
|
<strong>Require\</strong>*
|
|
48
38
|
</p>
|
|
@@ -122,39 +112,40 @@ export function DefaultDocumentation() {
|
|
|
122
112
|
</code>
|
|
123
113
|
. Tous ces packages sont nécessaires pour le bon fonctionnement.
|
|
124
114
|
</p>
|
|
125
|
-
<
|
|
126
|
-
|
|
127
|
-
</
|
|
128
|
-
<
|
|
129
|
-
|
|
130
|
-
</
|
|
131
|
-
<
|
|
132
|
-
|
|
133
|
-
</
|
|
115
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
116
|
+
# 1. Lancer Docker Desktop
|
|
117
|
+
</p>
|
|
118
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
119
|
+
Attendre que Docker soit “Running”.
|
|
120
|
+
</p>
|
|
121
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
122
|
+
# 2. Installer Supabase CLI (si pas déjà installé)
|
|
123
|
+
</p>
|
|
134
124
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
135
125
|
{`brew install supabase/tap/supabase`}
|
|
136
126
|
</Snippet>
|
|
137
|
-
<
|
|
138
|
-
|
|
139
|
-
|
|
127
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
128
|
+
# 3. Créer une nouvelle application (utilise @latest pour la version
|
|
129
|
+
la plus récente)
|
|
130
|
+
</p>
|
|
140
131
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
141
132
|
{`pnpx @lastbrain/app@latest init mon-app`}
|
|
142
133
|
</Snippet>
|
|
143
|
-
<
|
|
144
|
-
|
|
145
|
-
</
|
|
134
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
135
|
+
# 4. Accéder au dossier
|
|
136
|
+
</p>
|
|
146
137
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
147
138
|
{`cd mon-app`}
|
|
148
139
|
</Snippet>
|
|
149
|
-
<
|
|
150
|
-
|
|
151
|
-
</
|
|
140
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
141
|
+
# 5. Initialiser Supabase
|
|
142
|
+
</p>
|
|
152
143
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
153
144
|
{`pnpm db:init`}
|
|
154
145
|
</Snippet>
|
|
155
|
-
<
|
|
156
|
-
|
|
157
|
-
</
|
|
146
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
147
|
+
# 6. Démarrer l'application si pas déjà lancé port :3000 par default
|
|
148
|
+
</p>
|
|
158
149
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
159
150
|
{`pnpm dev`}
|
|
160
151
|
</Snippet>
|
|
@@ -240,33 +231,26 @@ export function DefaultDocumentation() {
|
|
|
240
231
|
<span className="text-green-600">✅</span>
|
|
241
232
|
<span>Générer les routes des modules sélectionnés</span>
|
|
242
233
|
</div>
|
|
234
|
+
<div className="flex items-start gap-2">
|
|
235
|
+
<span className="text-green-600">✅</span>
|
|
236
|
+
<span>
|
|
237
|
+
Générer le .env.local avec les variables d'environnement
|
|
238
|
+
Supabase
|
|
239
|
+
</span>
|
|
240
|
+
</div>
|
|
243
241
|
</div>
|
|
244
242
|
<h3 className="text-lg font-semibold mb-2">
|
|
245
243
|
Création du Compte Admin
|
|
246
244
|
</h3>
|
|
247
|
-
<Snippet
|
|
248
|
-
{`# Promouvoir votre compte en admin via Supabase`}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
{`
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
{`
|
|
255
|
-
|
|
256
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
257
|
-
{` coalesce(raw_app_meta_data, '{}'::jsonb),`}
|
|
258
|
-
</Snippet>
|
|
259
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
260
|
-
{` '{roles}',`}
|
|
261
|
-
</Snippet>
|
|
262
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
263
|
-
{` '["admin"]'::jsonb`}
|
|
264
|
-
</Snippet>
|
|
265
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
266
|
-
{`)`}
|
|
267
|
-
</Snippet>
|
|
268
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
269
|
-
{`where email = 'votre@email.com';`}
|
|
245
|
+
<Snippet hideSymbol color="primary" className="text-sm mb-2">
|
|
246
|
+
<span>{`# Promouvoir votre compte en admin via Supabase`}</span>
|
|
247
|
+
<span>{`update auth.users`}</span>
|
|
248
|
+
<span>{`set raw_app_meta_data = jsonb_set(`}</span>
|
|
249
|
+
<span>{` coalesce(raw_app_meta_data, '{}'::jsonb),`}</span>
|
|
250
|
+
<span>{` '{roles}',`}</span>
|
|
251
|
+
<span>{` '["admin"]'::jsonb`}</span>
|
|
252
|
+
<span>{`)`}</span>
|
|
253
|
+
<span>{`where email = 'votre@email.com';`}</span>
|
|
270
254
|
</Snippet>
|
|
271
255
|
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
272
256
|
Votre application est maintenant disponible sur{" "}
|
|
@@ -405,9 +389,9 @@ export function DefaultDocumentation() {
|
|
|
405
389
|
{`pnpm db:migrations:sync`}
|
|
406
390
|
</Snippet>
|
|
407
391
|
<h4 className="font-medium mb-2">Créer une migration</h4>
|
|
408
|
-
<
|
|
409
|
-
|
|
410
|
-
</
|
|
392
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
393
|
+
supabase migration new ma_migration
|
|
394
|
+
</p>
|
|
411
395
|
<h3 className="text-lg font-semibold mb-2">Migrations des modules</h3>
|
|
412
396
|
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
413
397
|
Les modules peuvent avoir leurs propres migrations dans{" "}
|
|
@@ -446,20 +430,13 @@ export function DefaultDocumentation() {
|
|
|
446
430
|
) ou via psql :
|
|
447
431
|
</p>
|
|
448
432
|
<Snippet hideSymbol color="primary" className="text-sm mb-2">
|
|
449
|
-
<span>{`update auth.users
|
|
450
|
-
`}</span>
|
|
451
|
-
<span>{`
|
|
452
|
-
`}</span>
|
|
453
|
-
<span>{`
|
|
454
|
-
`}</span>
|
|
455
|
-
<span>{`
|
|
456
|
-
`}</span>
|
|
457
|
-
<span>{` '["admin"]'::jsonb
|
|
458
|
-
`}</span>
|
|
459
|
-
<span>{`)
|
|
460
|
-
`}</span>
|
|
461
|
-
<span>{`where email = 'votre@email.com';
|
|
462
|
-
`}</span>
|
|
433
|
+
<span>{`update auth.users`}</span>
|
|
434
|
+
<span>{`set raw_app_meta_data = jsonb_set(`}</span>
|
|
435
|
+
<span>{` coalesce(raw_app_meta_data, '{}'::jsonb),`}</span>
|
|
436
|
+
<span>{` '{roles}',`}</span>
|
|
437
|
+
<span>{` '["admin"]'::jsonb`}</span>
|
|
438
|
+
<span>{`)`}</span>
|
|
439
|
+
<span>{`where email = 'votre@email.com';`}</span>
|
|
463
440
|
</Snippet>
|
|
464
441
|
<h3 className="text-lg font-semibold mb-2">
|
|
465
442
|
3. Accéder à l'interface admin
|
|
@@ -592,9 +569,9 @@ export function DefaultDocumentation() {
|
|
|
592
569
|
<h3 className="text-lg font-semibold mb-2">
|
|
593
570
|
4. Appliquer les migrations
|
|
594
571
|
</h3>
|
|
595
|
-
<
|
|
596
|
-
|
|
597
|
-
</
|
|
572
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
573
|
+
supabase migration up
|
|
574
|
+
</p>
|
|
598
575
|
<h3 className="text-lg font-semibold mb-2">5. Tester</h3>
|
|
599
576
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
600
577
|
{`pnpm dev`}
|
|
@@ -658,15 +635,15 @@ export function DefaultDocumentation() {
|
|
|
658
635
|
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
659
636
|
<strong>❌ URL Supabase classique (longue)</strong>
|
|
660
637
|
</p>
|
|
661
|
-
<
|
|
662
|
-
|
|
663
|
-
</
|
|
638
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
639
|
+
https://xxx.supabase.co/storage/v1/object/public/avatar/user_128_123456.webp
|
|
640
|
+
</p>
|
|
664
641
|
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
665
642
|
<strong>✅ URL Proxy (propre)</strong>
|
|
666
643
|
</p>
|
|
667
|
-
<
|
|
668
|
-
|
|
669
|
-
</
|
|
644
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
645
|
+
/api/storage/avatar/user_128_123456.webp
|
|
646
|
+
</p>
|
|
670
647
|
<h3 className="text-lg font-semibold mb-2">
|
|
671
648
|
Configuration des Buckets
|
|
672
649
|
</h3>
|
|
@@ -674,17 +651,17 @@ export function DefaultDocumentation() {
|
|
|
674
651
|
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
675
652
|
Photos de profil et avatars • 10MB max • Types: JPEG, PNG, WebP, GIF
|
|
676
653
|
</p>
|
|
677
|
-
<
|
|
678
|
-
|
|
679
|
-
</
|
|
654
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
655
|
+
/api/storage/avatar/user_128_123456.webp
|
|
656
|
+
</p>
|
|
680
657
|
<h4 className="font-medium mb-2">🔒 app (Privé)</h4>
|
|
681
658
|
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
682
659
|
Fichiers privés des utilisateurs • 100MB max • Authentification
|
|
683
660
|
requise
|
|
684
661
|
</p>
|
|
685
|
-
<
|
|
686
|
-
|
|
687
|
-
</
|
|
662
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
663
|
+
/api/storage/app/user-id/documents/file.pdf
|
|
664
|
+
</p>
|
|
688
665
|
<h3 className="text-lg font-semibold mb-2">
|
|
689
666
|
Utilisation dans le code
|
|
690
667
|
</h3>
|
|
@@ -975,9 +952,9 @@ function MonComposant() {
|
|
|
975
952
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
976
953
|
{`pnpm update:module-docs`}
|
|
977
954
|
</Snippet>
|
|
978
|
-
<
|
|
979
|
-
|
|
980
|
-
</
|
|
955
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
956
|
+
# ou pour un module spécifique
|
|
957
|
+
</p>
|
|
981
958
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
982
959
|
{`pnpm update:module-docs auth`}
|
|
983
960
|
</Snippet>
|
|
@@ -1023,7 +1000,7 @@ export function DocUsageCustom() {
|
|
|
1023
1000
|
<div className="space-y-6">
|
|
1024
1001
|
<Alert color="primary" className="mb-6">
|
|
1025
1002
|
<div className="flex items-start gap-2">
|
|
1026
|
-
<Lightbulb size={20} className="mt-0.5
|
|
1003
|
+
<Lightbulb size={20} className="mt-0.5 shrink-0" />
|
|
1027
1004
|
<div>
|
|
1028
1005
|
<p className="font-semibold">Introduction</p>
|
|
1029
1006
|
<p className="text-sm mt-1">
|
|
@@ -1354,413 +1331,290 @@ export function DocUsageCustom() {
|
|
|
1354
1331
|
<Card id="section-modules" className="scroll-mt-32">
|
|
1355
1332
|
<CardHeader>
|
|
1356
1333
|
<h2 className="text-2xl font-semibold flex items-center gap-2">
|
|
1357
|
-
<
|
|
1334
|
+
<Package size={24} />
|
|
1358
1335
|
Modules
|
|
1359
1336
|
</h2>
|
|
1360
1337
|
</CardHeader>
|
|
1361
|
-
<CardBody className="space-y-
|
|
1362
|
-
<p className="text-
|
|
1338
|
+
<CardBody className="space-y-6">
|
|
1339
|
+
<p className="text-slate-600 dark:text-slate-400">
|
|
1363
1340
|
Les modules LastBrain permettent d'ajouter des fonctionnalités
|
|
1364
1341
|
complètes à votre application de manière modulaire.
|
|
1365
1342
|
</p>
|
|
1366
|
-
<
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
className="
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
</
|
|
1641
|
-
<h4 className="font-medium mb-2">
|
|
1642
|
-
Installation du module core-product
|
|
1643
|
-
</h4>
|
|
1644
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
1645
|
-
{`pnpm lastbrain add-module core-product`}
|
|
1646
|
-
</Snippet>
|
|
1647
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1648
|
-
<a
|
|
1649
|
-
href="../packages/module-core-product/README.md"
|
|
1650
|
-
className="text-blue-600 hover:underline"
|
|
1651
|
-
target="_blank"
|
|
1652
|
-
rel="noopener noreferrer"
|
|
1653
|
-
>
|
|
1654
|
-
📖 Documentation complète →
|
|
1655
|
-
</a>
|
|
1656
|
-
</p>
|
|
1657
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">---</p>
|
|
1658
|
-
<h4 className="font-medium mb-2">
|
|
1659
|
-
[module-legal](../packages/module-legal/README.md)
|
|
1660
|
-
</h4>
|
|
1661
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1662
|
-
!
|
|
1663
|
-
<a
|
|
1664
|
-
href="https://img.shields.io/npm/v/@lastbrain/module-legal?label=%40lastbrain%2Fmodule-legal"
|
|
1665
|
-
className="text-blue-600 hover:underline"
|
|
1666
|
-
target="_blank"
|
|
1667
|
-
rel="noopener noreferrer"
|
|
1668
|
-
>
|
|
1669
|
-
npm version
|
|
1670
|
-
</a>
|
|
1671
|
-
</p>
|
|
1672
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1673
|
-
<strong>Pages</strong>: 4 publique(s), 2 admin
|
|
1674
|
-
</p>
|
|
1675
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1676
|
-
<strong>Tables</strong>: legal_settings, legal_pages
|
|
1677
|
-
</p>
|
|
1678
|
-
<h4 className="font-medium mb-2">Installation du module legal</h4>
|
|
1679
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
1680
|
-
{`pnpm lastbrain add-module legal`}
|
|
1681
|
-
</Snippet>
|
|
1682
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1683
|
-
<a
|
|
1684
|
-
href="../packages/module-legal/README.md"
|
|
1685
|
-
className="text-blue-600 hover:underline"
|
|
1686
|
-
target="_blank"
|
|
1687
|
-
rel="noopener noreferrer"
|
|
1688
|
-
>
|
|
1689
|
-
📖 Documentation complète →
|
|
1690
|
-
</a>
|
|
1691
|
-
</p>
|
|
1692
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">---</p>
|
|
1693
|
-
<h4 className="font-medium mb-2">
|
|
1694
|
-
[module-recipes](../packages/module-recipes/README.md)
|
|
1695
|
-
</h4>
|
|
1696
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1697
|
-
!
|
|
1698
|
-
<a
|
|
1699
|
-
href="https://img.shields.io/npm/v/@lastbrain/module-recipes?label=%40lastbrain%2Fmodule-recipes"
|
|
1700
|
-
className="text-blue-600 hover:underline"
|
|
1701
|
-
target="_blank"
|
|
1702
|
-
rel="noopener noreferrer"
|
|
1703
|
-
>
|
|
1704
|
-
npm version
|
|
1705
|
-
</a>
|
|
1706
|
-
</p>
|
|
1707
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1708
|
-
<strong>Pages</strong>: 4 auth
|
|
1709
|
-
</p>
|
|
1710
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1711
|
-
<strong>Tables</strong>: recipes, recipe_favorites, recipe_comments,
|
|
1712
|
-
recipe_image_queue, recipe_embeddings
|
|
1713
|
-
</p>
|
|
1714
|
-
<h4 className="font-medium mb-2">Installation du module recipes</h4>
|
|
1715
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
1716
|
-
{`pnpm lastbrain add-module recipes`}
|
|
1717
|
-
</Snippet>
|
|
1718
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1719
|
-
<a
|
|
1720
|
-
href="../packages/module-recipes/README.md"
|
|
1721
|
-
className="text-blue-600 hover:underline"
|
|
1722
|
-
target="_blank"
|
|
1723
|
-
rel="noopener noreferrer"
|
|
1724
|
-
>
|
|
1725
|
-
📖 Documentation complète →
|
|
1726
|
-
</a>
|
|
1727
|
-
</p>
|
|
1728
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">---</p>
|
|
1729
|
-
<h4 className="font-medium mb-2">
|
|
1730
|
-
[module-tasks](../packages/module-tasks/README.md)
|
|
1731
|
-
</h4>
|
|
1732
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1733
|
-
!
|
|
1734
|
-
<a
|
|
1735
|
-
href="https://img.shields.io/npm/v/@lastbrain/module-tasks?label=%40lastbrain%2Fmodule-tasks"
|
|
1736
|
-
className="text-blue-600 hover:underline"
|
|
1737
|
-
target="_blank"
|
|
1738
|
-
rel="noopener noreferrer"
|
|
1739
|
-
>
|
|
1740
|
-
npm version
|
|
1741
|
-
</a>
|
|
1742
|
-
</p>
|
|
1743
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1744
|
-
<strong>Pages</strong>: 2 auth, 1 admin
|
|
1745
|
-
</p>
|
|
1746
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1747
|
-
<strong>Tables</strong>: tasks, tasks_logs
|
|
1748
|
-
</p>
|
|
1749
|
-
<h4 className="font-medium mb-2">Installation du module tasks</h4>
|
|
1750
|
-
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
1751
|
-
{`pnpm lastbrain add-module tasks`}
|
|
1752
|
-
</Snippet>
|
|
1753
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
1754
|
-
<a
|
|
1755
|
-
href="../packages/module-tasks/README.md"
|
|
1756
|
-
className="text-blue-600 hover:underline"
|
|
1757
|
-
target="_blank"
|
|
1758
|
-
rel="noopener noreferrer"
|
|
1759
|
-
>
|
|
1760
|
-
📖 Documentation complète →
|
|
1761
|
-
</a>
|
|
1762
|
-
</p>
|
|
1763
|
-
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">---</p>
|
|
1343
|
+
<div>
|
|
1344
|
+
<h3 className="text-xl font-semibold mb-4">Modules Disponibles</h3>
|
|
1345
|
+
<div className="grid grid-cols-1 gap-4">
|
|
1346
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-blue-500">
|
|
1347
|
+
<CardBody className="space-y-3">
|
|
1348
|
+
<div className="flex items-start justify-between">
|
|
1349
|
+
<h3 className="text-lg font-semibold">Ai</h3>
|
|
1350
|
+
<span className="text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded">
|
|
1351
|
+
FREE
|
|
1352
|
+
</span>
|
|
1353
|
+
</div>
|
|
1354
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1355
|
+
Module LastBrain
|
|
1356
|
+
</p>
|
|
1357
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1358
|
+
<strong>Pages:</strong> 1 auth, 1 admin
|
|
1359
|
+
</p>
|
|
1360
|
+
|
|
1361
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1362
|
+
{`pnpm lastbrain add-module ai`}
|
|
1363
|
+
</Snippet>
|
|
1364
|
+
<a
|
|
1365
|
+
href="https://github.com/Lastbrain-labs/lb-starter/tree/main/packages/module-ai"
|
|
1366
|
+
className="text-sm text-blue-600 dark:text-blue-400 hover:underline inline-flex items-center gap-1"
|
|
1367
|
+
target="_blank"
|
|
1368
|
+
rel="noopener noreferrer"
|
|
1369
|
+
>
|
|
1370
|
+
📖 Documentation →
|
|
1371
|
+
</a>
|
|
1372
|
+
</CardBody>
|
|
1373
|
+
</Card>
|
|
1374
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-blue-500">
|
|
1375
|
+
<CardBody className="space-y-3">
|
|
1376
|
+
<div className="flex items-start justify-between">
|
|
1377
|
+
<h3 className="text-lg font-semibold">Auth</h3>
|
|
1378
|
+
<span className="text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded">
|
|
1379
|
+
FREE
|
|
1380
|
+
</span>
|
|
1381
|
+
</div>
|
|
1382
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1383
|
+
Module LastBrain
|
|
1384
|
+
</p>
|
|
1385
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1386
|
+
<strong>Pages:</strong> 3 publique(s), 4 auth, 2 admin
|
|
1387
|
+
</p>
|
|
1388
|
+
|
|
1389
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1390
|
+
{`pnpm lastbrain add-module auth`}
|
|
1391
|
+
</Snippet>
|
|
1392
|
+
<a
|
|
1393
|
+
href="https://github.com/Lastbrain-labs/lb-starter/tree/main/packages/module-auth"
|
|
1394
|
+
className="text-sm text-blue-600 dark:text-blue-400 hover:underline inline-flex items-center gap-1"
|
|
1395
|
+
target="_blank"
|
|
1396
|
+
rel="noopener noreferrer"
|
|
1397
|
+
>
|
|
1398
|
+
📖 Documentation →
|
|
1399
|
+
</a>
|
|
1400
|
+
</CardBody>
|
|
1401
|
+
</Card>
|
|
1402
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1403
|
+
<CardBody className="space-y-3">
|
|
1404
|
+
<div className="flex items-start justify-between">
|
|
1405
|
+
<h3 className="text-lg font-semibold">Billing Pro</h3>
|
|
1406
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
1407
|
+
PRO
|
|
1408
|
+
</span>
|
|
1409
|
+
</div>
|
|
1410
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1411
|
+
Module LastBrain
|
|
1412
|
+
</p>
|
|
1413
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1414
|
+
<strong>Pages:</strong> 3 auth, 2 admin
|
|
1415
|
+
</p>
|
|
1416
|
+
|
|
1417
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1418
|
+
{`pnpm lastbrain add-module billing-pro`}
|
|
1419
|
+
</Snippet>
|
|
1420
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
1421
|
+
🔒 Documentation privée
|
|
1422
|
+
</span>
|
|
1423
|
+
</CardBody>
|
|
1424
|
+
</Card>
|
|
1425
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1426
|
+
<CardBody className="space-y-3">
|
|
1427
|
+
<div className="flex items-start justify-between">
|
|
1428
|
+
<h3 className="text-lg font-semibold">Core Cart Pro</h3>
|
|
1429
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
1430
|
+
PRO
|
|
1431
|
+
</span>
|
|
1432
|
+
</div>
|
|
1433
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1434
|
+
Module LastBrain
|
|
1435
|
+
</p>
|
|
1436
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1437
|
+
<strong>Pages:</strong> 2 auth, 1 admin
|
|
1438
|
+
</p>
|
|
1439
|
+
|
|
1440
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1441
|
+
{`pnpm lastbrain add-module core-cart-pro`}
|
|
1442
|
+
</Snippet>
|
|
1443
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
1444
|
+
🔒 Documentation privée
|
|
1445
|
+
</span>
|
|
1446
|
+
</CardBody>
|
|
1447
|
+
</Card>
|
|
1448
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1449
|
+
<CardBody className="space-y-3">
|
|
1450
|
+
<div className="flex items-start justify-between">
|
|
1451
|
+
<h3 className="text-lg font-semibold">Core Commerce Pro</h3>
|
|
1452
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
1453
|
+
PRO
|
|
1454
|
+
</span>
|
|
1455
|
+
</div>
|
|
1456
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1457
|
+
Module LastBrain
|
|
1458
|
+
</p>
|
|
1459
|
+
|
|
1460
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1461
|
+
{`pnpm lastbrain add-module core-commerce-pro`}
|
|
1462
|
+
</Snippet>
|
|
1463
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
1464
|
+
🔒 Documentation privée
|
|
1465
|
+
</span>
|
|
1466
|
+
</CardBody>
|
|
1467
|
+
</Card>
|
|
1468
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1469
|
+
<CardBody className="space-y-3">
|
|
1470
|
+
<div className="flex items-start justify-between">
|
|
1471
|
+
<h3 className="text-lg font-semibold">Core Order Pro</h3>
|
|
1472
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
1473
|
+
PRO
|
|
1474
|
+
</span>
|
|
1475
|
+
</div>
|
|
1476
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1477
|
+
Module LastBrain
|
|
1478
|
+
</p>
|
|
1479
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1480
|
+
<strong>Pages:</strong> 2 auth
|
|
1481
|
+
</p>
|
|
1482
|
+
|
|
1483
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1484
|
+
{`pnpm lastbrain add-module core-order-pro`}
|
|
1485
|
+
</Snippet>
|
|
1486
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
1487
|
+
🔒 Documentation privée
|
|
1488
|
+
</span>
|
|
1489
|
+
</CardBody>
|
|
1490
|
+
</Card>
|
|
1491
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1492
|
+
<CardBody className="space-y-3">
|
|
1493
|
+
<div className="flex items-start justify-between">
|
|
1494
|
+
<h3 className="text-lg font-semibold">Core Payment Pro</h3>
|
|
1495
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
1496
|
+
PRO
|
|
1497
|
+
</span>
|
|
1498
|
+
</div>
|
|
1499
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1500
|
+
Module LastBrain
|
|
1501
|
+
</p>
|
|
1502
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1503
|
+
<strong>Pages:</strong> 1 admin
|
|
1504
|
+
</p>
|
|
1505
|
+
|
|
1506
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1507
|
+
{`pnpm lastbrain add-module core-payment-pro`}
|
|
1508
|
+
</Snippet>
|
|
1509
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
1510
|
+
🔒 Documentation privée
|
|
1511
|
+
</span>
|
|
1512
|
+
</CardBody>
|
|
1513
|
+
</Card>
|
|
1514
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1515
|
+
<CardBody className="space-y-3">
|
|
1516
|
+
<div className="flex items-start justify-between">
|
|
1517
|
+
<h3 className="text-lg font-semibold">Core Product Pro</h3>
|
|
1518
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
1519
|
+
PRO
|
|
1520
|
+
</span>
|
|
1521
|
+
</div>
|
|
1522
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1523
|
+
Module LastBrain
|
|
1524
|
+
</p>
|
|
1525
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1526
|
+
<strong>Pages:</strong> 2 publique(s)
|
|
1527
|
+
</p>
|
|
1528
|
+
|
|
1529
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1530
|
+
{`pnpm lastbrain add-module core-product-pro`}
|
|
1531
|
+
</Snippet>
|
|
1532
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
1533
|
+
🔒 Documentation privée
|
|
1534
|
+
</span>
|
|
1535
|
+
</CardBody>
|
|
1536
|
+
</Card>
|
|
1537
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-blue-500">
|
|
1538
|
+
<CardBody className="space-y-3">
|
|
1539
|
+
<div className="flex items-start justify-between">
|
|
1540
|
+
<h3 className="text-lg font-semibold">Legal</h3>
|
|
1541
|
+
<span className="text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded">
|
|
1542
|
+
FREE
|
|
1543
|
+
</span>
|
|
1544
|
+
</div>
|
|
1545
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1546
|
+
Module LastBrain
|
|
1547
|
+
</p>
|
|
1548
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1549
|
+
<strong>Pages:</strong> 4 publique(s), 2 admin
|
|
1550
|
+
</p>
|
|
1551
|
+
|
|
1552
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1553
|
+
{`pnpm lastbrain add-module legal`}
|
|
1554
|
+
</Snippet>
|
|
1555
|
+
<a
|
|
1556
|
+
href="https://github.com/Lastbrain-labs/lb-starter/tree/main/packages/module-legal"
|
|
1557
|
+
className="text-sm text-blue-600 dark:text-blue-400 hover:underline inline-flex items-center gap-1"
|
|
1558
|
+
target="_blank"
|
|
1559
|
+
rel="noopener noreferrer"
|
|
1560
|
+
>
|
|
1561
|
+
📖 Documentation →
|
|
1562
|
+
</a>
|
|
1563
|
+
</CardBody>
|
|
1564
|
+
</Card>
|
|
1565
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1566
|
+
<CardBody className="space-y-3">
|
|
1567
|
+
<div className="flex items-start justify-between">
|
|
1568
|
+
<h3 className="text-lg font-semibold">Recipes Pro</h3>
|
|
1569
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
1570
|
+
PRO
|
|
1571
|
+
</span>
|
|
1572
|
+
</div>
|
|
1573
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1574
|
+
Module LastBrain
|
|
1575
|
+
</p>
|
|
1576
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1577
|
+
<strong>Pages:</strong> 4 auth
|
|
1578
|
+
</p>
|
|
1579
|
+
|
|
1580
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1581
|
+
{`pnpm lastbrain add-module recipes-pro`}
|
|
1582
|
+
</Snippet>
|
|
1583
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
1584
|
+
🔒 Documentation privée
|
|
1585
|
+
</span>
|
|
1586
|
+
</CardBody>
|
|
1587
|
+
</Card>
|
|
1588
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-blue-500">
|
|
1589
|
+
<CardBody className="space-y-3">
|
|
1590
|
+
<div className="flex items-start justify-between">
|
|
1591
|
+
<h3 className="text-lg font-semibold">Tasks</h3>
|
|
1592
|
+
<span className="text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded">
|
|
1593
|
+
FREE
|
|
1594
|
+
</span>
|
|
1595
|
+
</div>
|
|
1596
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1597
|
+
Module LastBrain
|
|
1598
|
+
</p>
|
|
1599
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1600
|
+
<strong>Pages:</strong> 2 auth, 1 admin
|
|
1601
|
+
</p>
|
|
1602
|
+
|
|
1603
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1604
|
+
{`pnpm lastbrain add-module nom-du-module`}
|
|
1605
|
+
</Snippet>
|
|
1606
|
+
<a
|
|
1607
|
+
href="https://github.com/Lastbrain-labs/lb-starter/tree/main/packages/module-tasks"
|
|
1608
|
+
className="text-sm text-blue-600 dark:text-blue-400 hover:underline inline-flex items-center gap-1"
|
|
1609
|
+
target="_blank"
|
|
1610
|
+
rel="noopener noreferrer"
|
|
1611
|
+
>
|
|
1612
|
+
📖 Documentation →
|
|
1613
|
+
</a>
|
|
1614
|
+
</CardBody>
|
|
1615
|
+
</Card>
|
|
1616
|
+
</div>
|
|
1617
|
+
</div>
|
|
1764
1618
|
<h3 className="text-lg font-semibold mb-2">Commandes</h3>
|
|
1765
1619
|
<h4 className="font-medium mb-2">Installer un module</h4>
|
|
1766
1620
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|