@bhooai/nexus-examples 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.
Files changed (52) hide show
  1. package/examples/ai-chat/README.md +37 -0
  2. package/examples/ai-chat/apps/backend/src/routes/chat.ts +40 -0
  3. package/examples/ai-chat/apps/frontend/src/main.tsx +105 -0
  4. package/examples/blog-crud/README.md +45 -0
  5. package/examples/blog-crud/apps/backend/src/graphql/post.graph.ts +99 -0
  6. package/examples/blog-crud/apps/backend/src/models/Author.ts +10 -0
  7. package/examples/blog-crud/apps/backend/src/models/Comment.ts +10 -0
  8. package/examples/blog-crud/apps/backend/src/models/Post.ts +13 -0
  9. package/examples/blog-crud/apps/backend/src/routes/posts.ts +119 -0
  10. package/examples/blog-crud/apps/frontend/src/main.tsx +102 -0
  11. package/examples/chat/README.md +20 -0
  12. package/examples/chat/apps/backend/src/models/Message.ts +11 -0
  13. package/examples/chat/apps/backend/src/routes/chat.ts +17 -0
  14. package/examples/chat/apps/backend/src/ws/chat.room.ts +56 -0
  15. package/examples/chat/apps/frontend/src/main.tsx +97 -0
  16. package/examples/checkout/README.md +40 -0
  17. package/examples/checkout/apps/backend/src/mail/mailables/OrderConfirmationMail.ts +27 -0
  18. package/examples/checkout/apps/backend/src/mail/templates/order-confirmation.ejs +28 -0
  19. package/examples/checkout/apps/backend/src/models/Order.ts +14 -0
  20. package/examples/checkout/apps/backend/src/routes/checkout.ts +74 -0
  21. package/examples/checkout/apps/frontend/src/main.tsx +85 -0
  22. package/examples/dashboard/README.md +26 -0
  23. package/examples/dashboard/apps/backend/src/routes/metrics.ts +76 -0
  24. package/examples/dashboard/apps/frontend/src/main.tsx +100 -0
  25. package/examples/file-storage/README.md +48 -0
  26. package/examples/file-storage/apps/backend/src/routes/files.ts +86 -0
  27. package/examples/file-storage/apps/frontend/src/main.tsx +111 -0
  28. package/examples/livestream/README.md +34 -0
  29. package/examples/livestream/apps/backend/src/routes/list.ts +21 -0
  30. package/examples/livestream/apps/backend/src/ws/stream.room.ts +53 -0
  31. package/examples/livestream/apps/frontend/src/main.tsx +148 -0
  32. package/examples/multi-app/README.md +51 -0
  33. package/examples/multi-app/apps/backend-api/src/routes/users.ts +26 -0
  34. package/examples/multi-app/apps/backend-shop/src/routes/products.ts +27 -0
  35. package/examples/saas-starter/README.md +37 -0
  36. package/examples/saas-starter/apps/backend/src/events/TeamCreated.ts +11 -0
  37. package/examples/saas-starter/apps/backend/src/events/UserRegistered.ts +10 -0
  38. package/examples/saas-starter/apps/backend/src/listeners/OnTeamCreated.ts +11 -0
  39. package/examples/saas-starter/apps/backend/src/listeners/OnUserRegistered.ts +10 -0
  40. package/examples/saas-starter/apps/backend/src/middleware/auth.ts +14 -0
  41. package/examples/saas-starter/apps/backend/src/models/Membership.ts +20 -0
  42. package/examples/saas-starter/apps/backend/src/models/Team.ts +10 -0
  43. package/examples/saas-starter/apps/backend/src/models/User.ts +17 -0
  44. package/examples/saas-starter/apps/backend/src/policies/TeamPolicy.ts +35 -0
  45. package/examples/saas-starter/apps/backend/src/routes/projects.ts +52 -0
  46. package/examples/saas-starter/apps/backend/src/routes/teams.ts +112 -0
  47. package/examples/saas-starter/apps/frontend/src/main.tsx +95 -0
  48. package/examples/video-call/README.md +30 -0
  49. package/examples/video-call/apps/backend/src/ws/signaling.room.ts +47 -0
  50. package/examples/video-call/apps/frontend/src/main.tsx +116 -0
  51. package/package.json +11 -0
  52. package/src/index.ts +99 -0
package/src/index.ts ADDED
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Examples registry. Each entry describes one example:
3
+ * - id: kebab-case
4
+ * - label: display name in `nexus init --interactive` list
5
+ * - description: one liner
6
+ * - packagesDemoed: which @bhooai/nexus-* the example exercises
7
+ * - portsUsed: hint only; real ports are allocated by `nexus init` / `nexus add`
8
+ * - files: relative to examples/<id>/ — files laid down on top of the base scaffold
9
+ * - envRequired: optional env vars the example needs (e.g. API keys)
10
+ */
11
+
12
+ export interface ExampleMeta {
13
+ id: string;
14
+ label: string;
15
+ description: string;
16
+ packagesDemoed: string[];
17
+ envRequired?: string[];
18
+ portsUsed?: number;
19
+ }
20
+
21
+ export const EXAMPLES: ExampleMeta[] = [
22
+ {
23
+ id: 'empty',
24
+ label: 'Empty project',
25
+ description: 'Bare scaffold — start your app here.',
26
+ packagesDemoed: ['nexus-core'],
27
+ },
28
+ {
29
+ id: 'chat',
30
+ label: 'Chat',
31
+ description: 'Realtime chat rooms with presence and typing indicators.',
32
+ packagesDemoed: ['nexus-core', 'nexus-realtime', 'nexus-auth'],
33
+ },
34
+ {
35
+ id: 'video-call',
36
+ label: 'Video call',
37
+ description: '1:1 WebRTC call with signaling via WS and mediasoup SFU.',
38
+ packagesDemoed: ['nexus-core', 'nexus-realtime'],
39
+ },
40
+ {
41
+ id: 'checkout',
42
+ label: 'Checkout',
43
+ description: 'Razorpay+PayPal payment flow with mailables and webhooks.',
44
+ packagesDemoed: ['nexus-core', 'nexus-payments', 'nexus-email', 'nexus-data'],
45
+ envRequired: ['NEXUS_PAYMENTS_RAZORPAY_KEY_ID', 'NEXUS_PAYMENTS_RAZORPAY_KEY_SECRET'],
46
+ },
47
+ {
48
+ id: 'livestream',
49
+ label: 'Livestream',
50
+ description: 'One broadcaster, multiple viewers via mediasoup + chat overlay.',
51
+ packagesDemoed: ['nexus-core', 'nexus-realtime'],
52
+ },
53
+ {
54
+ id: 'ai-chat',
55
+ label: 'AI chat',
56
+ description: 'Streaming LLM chat via nexus-ai-client + provider switching.',
57
+ packagesDemoed: ['nexus-core', 'nexus-ai-client', 'nexus-realtime'],
58
+ },
59
+ {
60
+ id: 'saas-starter',
61
+ label: 'SaaS starter',
62
+ description: 'Auth + billing + teams + admin tab. Real SaaS skeleton.',
63
+ packagesDemoed: ['nexus-core', 'nexus-auth', 'nexus-data', 'nexus-payments', 'nexus-email'],
64
+ },
65
+ {
66
+ id: 'blog-crud',
67
+ label: 'Blog CRUD',
68
+ description: 'Posts + authors + comments. nexus-data ODM deep dive.',
69
+ packagesDemoed: ['nexus-core', 'nexus-data', 'nexus-graphql'],
70
+ },
71
+ {
72
+ id: 'dashboard',
73
+ label: 'Dashboard',
74
+ description: 'Custom admin tabs + telemetry dashboards.',
75
+ packagesDemoed: ['nexus-core', 'nexus-telemetry'],
76
+ },
77
+ {
78
+ id: 'file-storage',
79
+ label: 'File storage',
80
+ description: 'Uploads, signed private URLs, image transform, S3.',
81
+ packagesDemoed: ['nexus-core'],
82
+ },
83
+ {
84
+ id: 'multi-app',
85
+ label: 'Multi-app',
86
+ description: 'Two backends, two frontends, single admin — Nexus as a platform.',
87
+ packagesDemoed: ['nexus-core'],
88
+ },
89
+ ];
90
+
91
+ /** Look up by id. */
92
+ export function getExample(id: string): ExampleMeta | null {
93
+ return EXAMPLES.find((e) => e.id === id) ?? null;
94
+ }
95
+
96
+ /** All ids (excluding empty). */
97
+ export function exampleIds(): string[] {
98
+ return EXAMPLES.filter((e) => e.id !== 'empty').map((e) => e.id);
99
+ }