@ahmadubaidillah/cli 1.1.0 → 1.1.2

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 (110) hide show
  1. package/dist/bin.js +289 -276
  2. package/dist/templates/ai_wrapper/files/README.md +3 -0
  3. package/dist/templates/ai_wrapper/files/package.json +16 -0
  4. package/dist/templates/ai_wrapper/files/src/app.ts +23 -0
  5. package/dist/templates/ai_wrapper/files/src/modules/prompts/prompts.routes.ts +64 -0
  6. package/dist/templates/ai_wrapper/files/src/modules/usage/usage.routes.ts +12 -0
  7. package/dist/templates/ai_wrapper/template.config.json +16 -0
  8. package/dist/templates/booking/files/README.md +3 -0
  9. package/dist/templates/booking/files/package.json +16 -0
  10. package/dist/templates/booking/files/src/app.ts +23 -0
  11. package/dist/templates/booking/files/src/modules/availability/availability.routes.ts +12 -0
  12. package/dist/templates/booking/files/src/modules/calendar/calendar.routes.ts +12 -0
  13. package/dist/templates/booking/template.config.json +17 -0
  14. package/dist/templates/cms/files/frontend/src/components/editor/Editor.tsx +36 -0
  15. package/dist/templates/cms/files/package.json +22 -0
  16. package/dist/templates/cms/files/src/app.ts +23 -0
  17. package/dist/templates/cms/files/src/modules/media/media.routes.ts +26 -0
  18. package/dist/templates/cms/files/src/modules/posts/post.routes.ts +33 -0
  19. package/dist/templates/cms/template.config.json +17 -0
  20. package/dist/templates/crm/files/README.md +3 -0
  21. package/dist/templates/crm/files/package.json +16 -0
  22. package/dist/templates/crm/files/src/app.ts +23 -0
  23. package/dist/templates/crm/files/src/modules/contacts/contacts.routes.ts +12 -0
  24. package/dist/templates/crm/files/src/modules/pipelines/pipelines.routes.ts +12 -0
  25. package/dist/templates/crm/template.config.json +19 -0
  26. package/dist/templates/finance/files/README.md +3 -0
  27. package/dist/templates/finance/files/package.json +16 -0
  28. package/dist/templates/finance/files/src/app.ts +23 -0
  29. package/dist/templates/finance/files/src/modules/reports/reports.routes.ts +12 -0
  30. package/dist/templates/finance/files/src/modules/transactions/transactions.routes.ts +12 -0
  31. package/dist/templates/finance/template.config.json +15 -0
  32. package/dist/templates/landing/files/README.md +10 -0
  33. package/dist/templates/landing/files/package.json +17 -0
  34. package/dist/templates/landing/template.config.json +15 -0
  35. package/dist/templates/marketplace/files/README.md +3 -0
  36. package/dist/templates/marketplace/files/package.json +16 -0
  37. package/dist/templates/marketplace/files/src/app.ts +25 -0
  38. package/dist/templates/marketplace/files/src/modules/orders/orders.routes.ts +12 -0
  39. package/dist/templates/marketplace/files/src/modules/products/products.routes.ts +12 -0
  40. package/dist/templates/marketplace/files/src/modules/vendors/vendors.routes.ts +12 -0
  41. package/dist/templates/marketplace/template.config.json +25 -0
  42. package/dist/templates/preact/files/package.json +18 -0
  43. package/dist/templates/preact/files/src/main.jsx +4 -0
  44. package/dist/templates/preact/template.config.json +11 -0
  45. package/dist/templates/saas/files/package.json +24 -0
  46. package/dist/templates/saas/files/playwright.config.ts +25 -0
  47. package/dist/templates/saas/files/src/app.ts +32 -0
  48. package/dist/templates/saas/files/src/core/env.ts +24 -0
  49. package/dist/templates/saas/files/src/core/errors.ts +39 -0
  50. package/dist/templates/saas/files/src/modules/users/repositories/user.repository.ts +25 -0
  51. package/dist/templates/saas/files/src/modules/users/routes/user.routes.ts +33 -0
  52. package/dist/templates/saas/files/src/modules/users/services/user.service.ts +24 -0
  53. package/dist/templates/saas/files/src/modules/users/validators/user.validator.ts +17 -0
  54. package/dist/templates/saas/files/tests/e2e/basic.spec.ts +13 -0
  55. package/dist/templates/saas/template.config.json +26 -0
  56. package/dist/templates/templates/ai_wrapper/files/README.md +3 -0
  57. package/dist/templates/templates/ai_wrapper/files/package.json +16 -0
  58. package/dist/templates/templates/ai_wrapper/files/src/app.ts +23 -0
  59. package/dist/templates/templates/ai_wrapper/files/src/modules/prompts/prompts.routes.ts +64 -0
  60. package/dist/templates/templates/ai_wrapper/files/src/modules/usage/usage.routes.ts +12 -0
  61. package/dist/templates/templates/ai_wrapper/template.config.json +16 -0
  62. package/dist/templates/templates/booking/files/README.md +3 -0
  63. package/dist/templates/templates/booking/files/package.json +16 -0
  64. package/dist/templates/templates/booking/files/src/app.ts +23 -0
  65. package/dist/templates/templates/booking/files/src/modules/availability/availability.routes.ts +12 -0
  66. package/dist/templates/templates/booking/files/src/modules/calendar/calendar.routes.ts +12 -0
  67. package/dist/templates/templates/booking/template.config.json +17 -0
  68. package/dist/templates/templates/cms/files/frontend/src/components/editor/Editor.tsx +36 -0
  69. package/dist/templates/templates/cms/files/package.json +22 -0
  70. package/dist/templates/templates/cms/files/src/app.ts +23 -0
  71. package/dist/templates/templates/cms/files/src/modules/media/media.routes.ts +26 -0
  72. package/dist/templates/templates/cms/files/src/modules/posts/post.routes.ts +33 -0
  73. package/dist/templates/templates/cms/template.config.json +17 -0
  74. package/dist/templates/templates/crm/files/README.md +3 -0
  75. package/dist/templates/templates/crm/files/package.json +16 -0
  76. package/dist/templates/templates/crm/files/src/app.ts +23 -0
  77. package/dist/templates/templates/crm/files/src/modules/contacts/contacts.routes.ts +12 -0
  78. package/dist/templates/templates/crm/files/src/modules/pipelines/pipelines.routes.ts +12 -0
  79. package/dist/templates/templates/crm/template.config.json +19 -0
  80. package/dist/templates/templates/finance/files/README.md +3 -0
  81. package/dist/templates/templates/finance/files/package.json +16 -0
  82. package/dist/templates/templates/finance/files/src/app.ts +23 -0
  83. package/dist/templates/templates/finance/files/src/modules/reports/reports.routes.ts +12 -0
  84. package/dist/templates/templates/finance/files/src/modules/transactions/transactions.routes.ts +12 -0
  85. package/dist/templates/templates/finance/template.config.json +15 -0
  86. package/dist/templates/templates/landing/files/README.md +10 -0
  87. package/dist/templates/templates/landing/files/package.json +17 -0
  88. package/dist/templates/templates/landing/template.config.json +15 -0
  89. package/dist/templates/templates/marketplace/files/README.md +3 -0
  90. package/dist/templates/templates/marketplace/files/package.json +16 -0
  91. package/dist/templates/templates/marketplace/files/src/app.ts +25 -0
  92. package/dist/templates/templates/marketplace/files/src/modules/orders/orders.routes.ts +12 -0
  93. package/dist/templates/templates/marketplace/files/src/modules/products/products.routes.ts +12 -0
  94. package/dist/templates/templates/marketplace/files/src/modules/vendors/vendors.routes.ts +12 -0
  95. package/dist/templates/templates/marketplace/template.config.json +25 -0
  96. package/dist/templates/templates/preact/files/package.json +18 -0
  97. package/dist/templates/templates/preact/files/src/main.jsx +4 -0
  98. package/dist/templates/templates/preact/template.config.json +11 -0
  99. package/dist/templates/templates/saas/files/package.json +24 -0
  100. package/dist/templates/templates/saas/files/playwright.config.ts +25 -0
  101. package/dist/templates/templates/saas/files/src/app.ts +32 -0
  102. package/dist/templates/templates/saas/files/src/core/env.ts +24 -0
  103. package/dist/templates/templates/saas/files/src/core/errors.ts +39 -0
  104. package/dist/templates/templates/saas/files/src/modules/users/repositories/user.repository.ts +25 -0
  105. package/dist/templates/templates/saas/files/src/modules/users/routes/user.routes.ts +33 -0
  106. package/dist/templates/templates/saas/files/src/modules/users/services/user.service.ts +24 -0
  107. package/dist/templates/templates/saas/files/src/modules/users/validators/user.validator.ts +17 -0
  108. package/dist/templates/templates/saas/files/tests/e2e/basic.spec.ts +13 -0
  109. package/dist/templates/templates/saas/template.config.json +26 -0
  110. package/package.json +2 -2
@@ -0,0 +1,3 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ Built with DevForge CLI. Template: ai_wrapper.
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}-ai_wrapper",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "bun run --hot src/app.ts",
7
+ "start": "bun run src/app.ts",
8
+ "build": "bun build ./src/app.ts --outdir ./dist"
9
+ },
10
+ "dependencies": {
11
+ "hono": "latest",
12
+ "zod": "latest",
13
+ "drizzle-orm": "latest",
14
+ "postgres": "latest"
15
+ }
16
+ }
@@ -0,0 +1,23 @@
1
+ import { Hono } from 'hono';
2
+ import { logger } from 'hono/logger';
3
+ import { promptsRoutes } from './modules/prompts/prompts.routes';
4
+ import { usageRoutes } from './modules/usage/usage.routes';
5
+
6
+ const app = new Hono();
7
+
8
+ app.use('*', logger());
9
+
10
+ app.get('/', (c) => {
11
+ return c.json({
12
+ message: 'Welcome to {{PROJECT_NAME}} AI_WRAPPER - Powered by DevForge',
13
+ status: 'running'
14
+ });
15
+ });
16
+
17
+ app.route('/prompts', promptsRoutes);
18
+ app.route('/usage', usageRoutes);
19
+
20
+ export default {
21
+ port: 3000,
22
+ fetch: app.fetch,
23
+ };
@@ -0,0 +1,64 @@
1
+ import { Hono } from 'hono';
2
+
3
+ /**
4
+ * Prompts Routes
5
+ *
6
+ * Handles AI prompt management for the AI Wrapper template.
7
+ */
8
+ export const promptsRoutes = new Hono();
9
+
10
+ promptsRoutes.get('/', async (c) => {
11
+ try {
12
+ // Fetch logic would be implemented here
13
+ return c.json({
14
+ success: true,
15
+ data: [],
16
+ meta: {
17
+ module: 'prompts',
18
+ timestamp: new Date().toISOString()
19
+ }
20
+ });
21
+ } catch (error: any) {
22
+ return c.json({
23
+ success: false,
24
+ error: 'Failed to retrieve prompts',
25
+ message: error.message
26
+ }, 500);
27
+ }
28
+ });
29
+
30
+ promptsRoutes.post('/', async (c) => {
31
+ let body: any;
32
+ try {
33
+ body = await c.req.json();
34
+ } catch (e: any) {
35
+ return c.json({
36
+ success: false,
37
+ error: 'Malformed JSON',
38
+ message: 'The request body must be valid JSON'
39
+ }, 400);
40
+ }
41
+
42
+ try {
43
+ if (!body || typeof body !== 'object' || Object.keys(body).length === 0) {
44
+ return c.json({
45
+ success: false,
46
+ error: 'Invalid Request',
47
+ message: 'Request body must be a non-empty object'
48
+ }, 400);
49
+ }
50
+
51
+ // Storage logic would be implemented here
52
+ return c.json({
53
+ success: true,
54
+ message: 'Prompt created successfully',
55
+ data: body
56
+ }, 201);
57
+ } catch (error: any) {
58
+ return c.json({
59
+ success: false,
60
+ error: 'Creation Failed',
61
+ message: error.message || 'An unexpected error occurred'
62
+ }, 400);
63
+ }
64
+ });
@@ -0,0 +1,12 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const usageRoutes = new Hono();
4
+
5
+ usageRoutes.get('/', (c) => {
6
+ return c.json({ data: [], module: 'usage' });
7
+ });
8
+
9
+ usageRoutes.post('/', async (c) => {
10
+ const body = await c.req.json();
11
+ return c.json({ message: 'usage created', data: body });
12
+ });
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "ai_wrapper",
3
+ "description": "Applications built on top of AI APIs with usage tracking and prompt management.",
4
+ "stack": {
5
+ "runtime": "bun",
6
+ "backend": "hono",
7
+ "frontend": "solidjs",
8
+ "database": "postgres"
9
+ },
10
+ "supportedPlugins": [
11
+ "auth",
12
+ "payment",
13
+ "analytics",
14
+ "github-actions"
15
+ ]
16
+ }
@@ -0,0 +1,3 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ Built with DevForge CLI. Template: booking.
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}-booking",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "bun run --hot src/app.ts",
7
+ "start": "bun run src/app.ts",
8
+ "build": "bun build ./src/app.ts --outdir ./dist"
9
+ },
10
+ "dependencies": {
11
+ "hono": "latest",
12
+ "zod": "latest",
13
+ "drizzle-orm": "latest",
14
+ "postgres": "latest"
15
+ }
16
+ }
@@ -0,0 +1,23 @@
1
+ import { Hono } from 'hono';
2
+ import { logger } from 'hono/logger';
3
+ import { calendarRoutes } from './modules/calendar/calendar.routes';
4
+ import { availabilityRoutes } from './modules/availability/availability.routes';
5
+
6
+ const app = new Hono();
7
+
8
+ app.use('*', logger());
9
+
10
+ app.get('/', (c) => {
11
+ return c.json({
12
+ message: 'Welcome to {{PROJECT_NAME}} BOOKING - Powered by DevForge',
13
+ status: 'running'
14
+ });
15
+ });
16
+
17
+ app.route('/calendar', calendarRoutes);
18
+ app.route('/availability', availabilityRoutes);
19
+
20
+ export default {
21
+ port: 3000,
22
+ fetch: app.fetch,
23
+ };
@@ -0,0 +1,12 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const availabilityRoutes = new Hono();
4
+
5
+ availabilityRoutes.get('/', (c) => {
6
+ return c.json({ data: [], module: 'availability' });
7
+ });
8
+
9
+ availabilityRoutes.post('/', async (c) => {
10
+ const body = await c.req.json();
11
+ return c.json({ message: 'availability created', data: body });
12
+ });
@@ -0,0 +1,12 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const calendarRoutes = new Hono();
4
+
5
+ calendarRoutes.get('/', (c) => {
6
+ return c.json({ data: [], module: 'calendar' });
7
+ });
8
+
9
+ calendarRoutes.post('/', async (c) => {
10
+ const body = await c.req.json();
11
+ return c.json({ message: 'calendar created', data: body });
12
+ });
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "booking",
3
+ "description": "Calendar and scheduling platform with availability rules.",
4
+ "stack": {
5
+ "runtime": "bun",
6
+ "backend": "hono",
7
+ "frontend": "solidjs",
8
+ "database": "postgres"
9
+ },
10
+ "supportedPlugins": [
11
+ "auth",
12
+ "email",
13
+ "payment",
14
+ "analytics",
15
+ "github-actions"
16
+ ]
17
+ }
@@ -0,0 +1,36 @@
1
+ import { createSignal, onMount } from 'solid-js';
2
+ import { Editor } from '@tiptap/core';
3
+ import StarterKit from '@tiptap/starter-kit';
4
+
5
+ export function TipTapEditor(props: { initialContent: string; onSave: (content: string) => void }) {
6
+ let editorElement: HTMLDivElement;
7
+ const [editor, setEditor] = createSignal<Editor | null>(null);
8
+
9
+ onMount(() => {
10
+ const tiptapEditor = new Editor({
11
+ element: editorElement,
12
+ extensions: [StarterKit],
13
+ content: props.initialContent || '<p>Hello World!</p>',
14
+ onUpdate: ({ editor }) => {
15
+ props.onSave(editor.getHTML());
16
+ },
17
+ });
18
+ setEditor(tiptapEditor);
19
+ });
20
+
21
+ return (
22
+ <div class="tiptap-editor-container bg-white p-4 border rounded shadow-sm">
23
+ <div ref={editorElement!} class="prose max-w-none min-h-[300px] focus:outline-none" />
24
+ <button
25
+ class="mt-4 px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 font-semibold transition"
26
+ onClick={() => {
27
+ if (editor()) {
28
+ props.onSave(editor()!.getHTML());
29
+ }
30
+ }}
31
+ >
32
+ Save Post
33
+ </button>
34
+ </div>
35
+ );
36
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "bun run --hot src/app.ts",
7
+ "start": "bun run src/app.ts",
8
+ "build": "bun build ./src/app.ts --outdir ./dist"
9
+ },
10
+ "dependencies": {
11
+ "hono": "latest",
12
+ "zod": "latest",
13
+ "drizzle-orm": "latest",
14
+ "postgres": "latest",
15
+ "@tiptap/core": "latest",
16
+ "@tiptap/pm": "latest",
17
+ "@tiptap/starter-kit": "latest"
18
+ },
19
+ "devDependencies": {
20
+ "drizzle-kit": "latest"
21
+ }
22
+ }
@@ -0,0 +1,23 @@
1
+ import { Hono } from 'hono';
2
+ import { logger } from 'hono/logger';
3
+ import { postRoutes } from './modules/posts/post.routes';
4
+ import { mediaRoutes } from './modules/media/media.routes';
5
+
6
+ const app = new Hono();
7
+
8
+ app.use('*', logger());
9
+
10
+ app.get('/', (c) => {
11
+ return c.json({
12
+ message: 'Welcome to {{PROJECT_NAME}} CMS - Powered by DevForge',
13
+ status: 'running'
14
+ });
15
+ });
16
+
17
+ app.route('/posts', postRoutes);
18
+ app.route('/media', mediaRoutes);
19
+
20
+ export default {
21
+ port: 3000,
22
+ fetch: app.fetch,
23
+ };
@@ -0,0 +1,26 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const mediaRoutes = new Hono();
4
+
5
+ // List all media
6
+ mediaRoutes.get('/', (c) => {
7
+ return c.json({ media: [] });
8
+ });
9
+
10
+ // Upload media
11
+ mediaRoutes.post('/upload', async (c) => {
12
+ const body = await c.req.parseBody();
13
+ const file = body['file'];
14
+
15
+ if (!file) {
16
+ return c.json({ error: 'File is required' }, 400);
17
+ }
18
+
19
+ return c.json({ message: 'Media uploaded', filename: file });
20
+ });
21
+
22
+ // Delete media
23
+ mediaRoutes.delete('/:id', (c) => {
24
+ const id = c.req.param('id');
25
+ return c.json({ message: 'Media deleted', id });
26
+ });
@@ -0,0 +1,33 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const postRoutes = new Hono();
4
+
5
+ // List all posts
6
+ postRoutes.get('/', (c) => {
7
+ return c.json({ posts: [] });
8
+ });
9
+
10
+ // Create a new post
11
+ postRoutes.post('/', async (c) => {
12
+ const body = await c.req.json();
13
+ return c.json({ message: 'Post created', data: body });
14
+ });
15
+
16
+ // Get a single post by ID
17
+ postRoutes.get('/:id', (c) => {
18
+ const id = c.req.param('id');
19
+ return c.json({ id, title: 'Sample Post', content: '<p>Sample Content</p>' });
20
+ });
21
+
22
+ // Update a post
23
+ postRoutes.put('/:id', async (c) => {
24
+ const id = c.req.param('id');
25
+ const body = await c.req.json();
26
+ return c.json({ message: 'Post updated', id, data: body });
27
+ });
28
+
29
+ // Delete a post
30
+ postRoutes.delete('/:id', (c) => {
31
+ const id = c.req.param('id');
32
+ return c.json({ message: 'Post deleted', id });
33
+ });
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "cms",
3
+ "description": "Content Management System with TipTap editor, media library, and post management.",
4
+ "stack": {
5
+ "runtime": "bun",
6
+ "backend": "hono",
7
+ "frontend": "solidjs",
8
+ "database": "postgres"
9
+ },
10
+ "supportedPlugins": [
11
+ "auth",
12
+ "email",
13
+ "analytics",
14
+ "file-upload",
15
+ "github-actions"
16
+ ]
17
+ }
@@ -0,0 +1,3 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ Built with DevForge CLI. Template: crm.
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}-crm",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "bun run --hot src/app.ts",
7
+ "start": "bun run src/app.ts",
8
+ "build": "bun build ./src/app.ts --outdir ./dist"
9
+ },
10
+ "dependencies": {
11
+ "hono": "latest",
12
+ "zod": "latest",
13
+ "drizzle-orm": "latest",
14
+ "postgres": "latest"
15
+ }
16
+ }
@@ -0,0 +1,23 @@
1
+ import { Hono } from 'hono';
2
+ import { logger } from 'hono/logger';
3
+ import { contactsRoutes } from './modules/contacts/contacts.routes';
4
+ import { pipelinesRoutes } from './modules/pipelines/pipelines.routes';
5
+
6
+ const app = new Hono();
7
+
8
+ app.use('*', logger());
9
+
10
+ app.get('/', (c) => {
11
+ return c.json({
12
+ message: 'Welcome to {{PROJECT_NAME}} CRM - Powered by DevForge',
13
+ status: 'running'
14
+ });
15
+ });
16
+
17
+ app.route('/contacts', contactsRoutes);
18
+ app.route('/pipelines', pipelinesRoutes);
19
+
20
+ export default {
21
+ port: 3000,
22
+ fetch: app.fetch,
23
+ };
@@ -0,0 +1,12 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const contactsRoutes = new Hono();
4
+
5
+ contactsRoutes.get('/', (c) => {
6
+ return c.json({ data: [], module: 'contacts' });
7
+ });
8
+
9
+ contactsRoutes.post('/', async (c) => {
10
+ const body = await c.req.json();
11
+ return c.json({ message: 'contacts created', data: body });
12
+ });
@@ -0,0 +1,12 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const pipelinesRoutes = new Hono();
4
+
5
+ pipelinesRoutes.get('/', (c) => {
6
+ return c.json({ data: [], module: 'pipelines' });
7
+ });
8
+
9
+ pipelinesRoutes.post('/', async (c) => {
10
+ const body = await c.req.json();
11
+ return c.json({ message: 'pipelines created', data: body });
12
+ });
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "crm",
3
+ "description": "Customer Relationship Management system for leads and pipelines.",
4
+ "stack": {
5
+ "runtime": "bun",
6
+ "backend": "hono",
7
+ "frontend": "solidjs",
8
+ "database": "postgres"
9
+ },
10
+ "supportedPlugins": [
11
+ "openapi",
12
+ "websocket",
13
+ "queue",
14
+ "auth",
15
+ "email",
16
+ "analytics",
17
+ "github-actions"
18
+ ]
19
+ }
@@ -0,0 +1,3 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ Built with DevForge CLI. Template: finance.
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}-finance",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "bun run --hot src/app.ts",
7
+ "start": "bun run src/app.ts",
8
+ "build": "bun build ./src/app.ts --outdir ./dist"
9
+ },
10
+ "dependencies": {
11
+ "hono": "latest",
12
+ "zod": "latest",
13
+ "drizzle-orm": "latest",
14
+ "postgres": "latest"
15
+ }
16
+ }
@@ -0,0 +1,23 @@
1
+ import { Hono } from 'hono';
2
+ import { logger } from 'hono/logger';
3
+ import { transactionsRoutes } from './modules/transactions/transactions.routes';
4
+ import { reportsRoutes } from './modules/reports/reports.routes';
5
+
6
+ const app = new Hono();
7
+
8
+ app.use('*', logger());
9
+
10
+ app.get('/', (c) => {
11
+ return c.json({
12
+ message: 'Welcome to {{PROJECT_NAME}} FINANCE - Powered by DevForge',
13
+ status: 'running'
14
+ });
15
+ });
16
+
17
+ app.route('/transactions', transactionsRoutes);
18
+ app.route('/reports', reportsRoutes);
19
+
20
+ export default {
21
+ port: 3000,
22
+ fetch: app.fetch,
23
+ };
@@ -0,0 +1,12 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const reportsRoutes = new Hono();
4
+
5
+ reportsRoutes.get('/', (c) => {
6
+ return c.json({ data: [], module: 'reports' });
7
+ });
8
+
9
+ reportsRoutes.post('/', async (c) => {
10
+ const body = await c.req.json();
11
+ return c.json({ message: 'reports created', data: body });
12
+ });
@@ -0,0 +1,12 @@
1
+ import { Hono } from 'hono';
2
+
3
+ export const transactionsRoutes = new Hono();
4
+
5
+ transactionsRoutes.get('/', (c) => {
6
+ return c.json({ data: [], module: 'transactions' });
7
+ });
8
+
9
+ transactionsRoutes.post('/', async (c) => {
10
+ const body = await c.req.json();
11
+ return c.json({ message: 'transactions created', data: body });
12
+ });
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "finance",
3
+ "description": "Expense tracker and finance dashboard.",
4
+ "stack": {
5
+ "runtime": "bun",
6
+ "backend": "hono",
7
+ "frontend": "solidjs",
8
+ "database": "postgres"
9
+ },
10
+ "supportedPlugins": [
11
+ "auth",
12
+ "analytics",
13
+ "github-actions"
14
+ ]
15
+ }
@@ -0,0 +1,10 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ This is a marketing website built with Astro, TailwindCSS, and AlpineJS.
4
+
5
+ ## Getting Started
6
+
7
+ ```bash
8
+ bun install
9
+ bun run dev
10
+ ```
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}",
3
+ "version": "1.0.0",
4
+ "scripts": {
5
+ "dev": "astro dev",
6
+ "start": "astro dev",
7
+ "build": "astro build",
8
+ "preview": "astro preview",
9
+ "astro": "astro"
10
+ },
11
+ "dependencies": {
12
+ "astro": "latest",
13
+ "@astrojs/tailwind": "latest",
14
+ "tailwindcss": "latest",
15
+ "alpinejs": "latest"
16
+ }
17
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "landing",
3
+ "description": "Marketing websites and product landing pages",
4
+ "stack": {
5
+ "runtime": "bun",
6
+ "frontend": "astro",
7
+ "css": "tailwindcss",
8
+ "interactivity": "alpinejs"
9
+ },
10
+ "supportedPlugins": [
11
+ "analytics",
12
+ "email",
13
+ "github-actions"
14
+ ]
15
+ }
@@ -0,0 +1,3 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ Built with DevForge CLI. Template: marketplace.
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}-marketplace",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "bun run --hot src/app.ts",
7
+ "start": "bun run src/app.ts",
8
+ "build": "bun build ./src/app.ts --outdir ./dist"
9
+ },
10
+ "dependencies": {
11
+ "hono": "latest",
12
+ "zod": "latest",
13
+ "drizzle-orm": "latest",
14
+ "postgres": "latest"
15
+ }
16
+ }