@programinglive/dev-workflow-mcp-server 1.5.0 → 1.5.1

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 (77) hide show
  1. package/.github/workflows/npm-publish.yml +3 -0
  2. package/CHANGELOG.md +252 -3
  3. package/README.md +24 -1
  4. package/docs/NETLIFY_DEPLOYMENT.md +125 -0
  5. package/docs/PLESK_DEPLOYMENT.md +170 -0
  6. package/docs/WORKFLOW-BEST-PRACTICES.md +58 -0
  7. package/docs/product/PRD.md +5 -2
  8. package/docs/release-notes/RELEASE_NOTES.md +94 -0
  9. package/docs/web-dashboard.md +12 -0
  10. package/package.json +8 -6
  11. package/release-wrapper.js +68 -33
  12. package/scripts/update-release-notes.cjs +14 -18
  13. package/server.json +23 -0
  14. package/tailwind.config.js +2 -4
  15. package/tests/build.test.js +46 -3
  16. package/tests/handlers.test.js +78 -0
  17. package/tests/mcpRegistry.test.js +65 -0
  18. package/tests/release-wrapper.test.js +2 -0
  19. package/tests/workflowState.test.js +7 -4
  20. package/tools/definitions.js +2 -2
  21. package/tools/handlers.js +2 -2
  22. package/vite.web.config.js +23 -0
  23. package/web/README.md +36 -0
  24. package/web/app/api/docs/route.ts +32 -0
  25. package/web/app/api/history/route.ts +12 -0
  26. package/web/app/api/npm-downloads/route.ts +21 -0
  27. package/web/app/api/summary/route.ts +13 -0
  28. package/web/app/api/version/route.ts +8 -0
  29. package/web/app/docs/page.tsx +202 -0
  30. package/web/app/favicon.ico +0 -0
  31. package/web/app/globals.css +91 -0
  32. package/web/app/layout.tsx +36 -0
  33. package/web/app/page.tsx +15 -0
  34. package/web/components/ApiReference.tsx +20 -0
  35. package/web/components/Features.tsx +61 -0
  36. package/web/components/Footer.tsx +9 -0
  37. package/web/components/Hero.tsx +97 -0
  38. package/web/components/History.tsx +143 -0
  39. package/web/components/Navbar.tsx +64 -0
  40. package/web/components/Terminal.tsx +114 -0
  41. package/web/eslint.config.mjs +18 -0
  42. package/web/lib/db.js +131 -0
  43. package/web/lib/docs.js +73 -0
  44. package/web/netlify.toml +6 -0
  45. package/web/next.config.ts +7 -0
  46. package/web/package-lock.json +6560 -0
  47. package/web/package.json +28 -0
  48. package/web/postcss.config.mjs +9 -0
  49. package/web/public/assets/android-chrome-192x192.png +0 -0
  50. package/web/public/assets/android-chrome-512x512.png +0 -0
  51. package/web/public/assets/apple-touch-icon.png +0 -0
  52. package/web/public/assets/favicon-16x16.png +0 -0
  53. package/web/public/assets/favicon-32x32.png +0 -0
  54. package/web/public/assets/favicon.ico +0 -0
  55. package/web/public/assets/favicon.png +0 -0
  56. package/web/public/assets/logo.png +0 -0
  57. package/web/public/assets/og-preview.png +0 -0
  58. package/web/public/assets/site.webmanifest +1 -0
  59. package/web/public/file.svg +1 -0
  60. package/web/public/globe.svg +1 -0
  61. package/web/public/next.svg +1 -0
  62. package/web/public/vercel.svg +1 -0
  63. package/web/public/window.svg +1 -0
  64. package/web/server.js +30 -158
  65. package/web/tailwind.config.ts +19 -0
  66. package/web/tsconfig.json +42 -0
  67. package/workflow-state.js +11 -25
  68. package/dist/docs/EXAMPLES.html +0 -411
  69. package/dist/docs/GETTING-STARTED.html +0 -233
  70. package/dist/docs/README.html +0 -535
  71. package/dist/docs/RELEASE_NOTES.html +0 -167
  72. package/dist/docs/TROUBLESHOOTING.html +0 -542
  73. package/dist/docs/WORKFLOW-TEMPLATES.html +0 -591
  74. package/dist/docs/web-dashboard.html +0 -158
  75. package/web/public/index.html +0 -1046
  76. package/web/public/input.css +0 -3
  77. package/web/public/output.css +0 -1
@@ -90,7 +90,7 @@ export function getToolList() {
90
90
  properties: {
91
91
  documentationType: {
92
92
  type: "string",
93
- enum: ["README", "inline-comments", "API-docs", "changelog", "other"],
93
+ enum: ["PRD", "README", "RELEASE_NOTES", "inline-comments", "API-docs", "changelog", "other"],
94
94
  description: "Type of documentation created",
95
95
  },
96
96
  summary: {
@@ -259,7 +259,7 @@ export function getToolList() {
259
259
  },
260
260
  documentationType: {
261
261
  type: "string",
262
- enum: ["README", "inline-comments", "API-docs", "changelog", "other"],
262
+ enum: ["PRD", "README", "RELEASE_NOTES", "inline-comments", "API-docs", "changelog", "other"],
263
263
  description: "Type of documentation created",
264
264
  },
265
265
  documentationSummary: {
package/tools/handlers.js CHANGED
@@ -346,7 +346,7 @@ async function handleRunTests(args, workflowState) {
346
346
  await workflowState.save();
347
347
 
348
348
  return textResponse(
349
- `✅ All tests passed! 🎉\n\nTest command: ${args.testCommand}\n\n📝 Now create documentation using 'create_documentation' with:\n- documentationType: "README", "inline-comments", "API-docs", "changelog", or "other"\n- summary: Brief description of what was documented\n\nNext Steps:\n1. ✓ Fix/implement feature\n2. ✓ Create tests\n3. ✓ Run tests (GREEN!)\n4. ⏳ Create/update documentation\n5. ⏳ Run 'check_ready_to_commit'\n6. ⏳ Run 'commit_and_push'\n7. ⏳ Run 'perform_release'\n8. ⏳ Complete task`
349
+ `✅ All tests passed! 🎉\n\nTest command: ${args.testCommand}\n\n📝 Now create or update documentation using 'create_documentation' with:\n- documentationType: "PRD", "README", "RELEASE_NOTES", "inline-comments", "API-docs", "changelog", or "other"\n- summary: Brief description of what was documented\n\nNext Steps:\n1. ✓ Fix/implement feature\n2. ✓ Create tests\n3. ✓ Run tests (GREEN!)\n4. ⏳ Create/update documentation\n5. ⏳ Run 'check_ready_to_commit'\n6. ⏳ Run 'commit_and_push'\n7. ⏳ Run 'perform_release'\n8. ⏳ Complete task`
350
350
  );
351
351
  }
352
352
 
@@ -368,7 +368,7 @@ async function handleCreateDocumentation(args, workflowState) {
368
368
  await workflowState.save();
369
369
 
370
370
  return textResponse(
371
- `✅ Documentation created!\n\nType: ${args.documentationType}\nSummary: ${args.summary}\n\n🎉 You're ready to verify your work!\n\nNext Steps:\n1. ✓ Fix/implement feature\n2. ✓ Create tests\n3. ✓ Run tests (GREEN!)\n4. ✓ Create documentation\n5. ⏳ Run 'check_ready_to_commit' to verify\n6. ⏳ Run 'commit_and_push'\n7. ⏳ Run 'perform_release'\n8. ⏳ Mark as complete with 'complete_task'`
371
+ `✅ Documentation created/updated!\n\nType: ${args.documentationType}\nSummary: ${args.summary}\n\n🎉 You're ready to verify your work!\n\nNext Steps:\n1. ✓ Fix/implement feature\n2. ✓ Create tests\n3. ✓ Run tests (GREEN!)\n4. ✓ Create/update documentation\n5. ⏳ Run 'check_ready_to_commit' to verify\n6. ⏳ Run 'commit_and_push'\n7. ⏳ Run 'perform_release'\n8. ⏳ Mark as complete with 'complete_task'`
372
372
  );
373
373
  }
374
374
 
@@ -0,0 +1,23 @@
1
+ import { defineConfig } from 'vite';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+
8
+ export default defineConfig({
9
+ root: 'web/public',
10
+ build: {
11
+ outDir: '../../dist/web',
12
+ emptyOutDir: true,
13
+ rollupOptions: {
14
+ input: path.resolve(__dirname, 'web/public/index.html'),
15
+ },
16
+ },
17
+ server: {
18
+ port: 3111,
19
+ proxy: {
20
+ '/api': 'http://localhost:3112'
21
+ }
22
+ }
23
+ });
package/web/README.md ADDED
@@ -0,0 +1,36 @@
1
+ This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
2
+
3
+ ## Getting Started
4
+
5
+ First, run the development server:
6
+
7
+ ```bash
8
+ npm run dev
9
+ # or
10
+ yarn dev
11
+ # or
12
+ pnpm dev
13
+ # or
14
+ bun dev
15
+ ```
16
+
17
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18
+
19
+ You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20
+
21
+ This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
22
+
23
+ ## Learn More
24
+
25
+ To learn more about Next.js, take a look at the following resources:
26
+
27
+ - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28
+ - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29
+
30
+ You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
31
+
32
+ ## Deploy on Vercel
33
+
34
+ The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35
+
36
+ Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
@@ -0,0 +1,32 @@
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ import { resolveDocContent, getAvailableDocs } from "@/lib/docs";
3
+
4
+ export async function GET(request: NextRequest) {
5
+ const searchParams = request.nextUrl.searchParams;
6
+ const rawDocKey = searchParams.get("doc");
7
+ const availableDocs = getAvailableDocs();
8
+
9
+ if (!rawDocKey) {
10
+ return NextResponse.json({ docs: availableDocs });
11
+ }
12
+
13
+ const docKey = rawDocKey.trim();
14
+ const resolvedKey = availableDocs.find((key) => key.toLowerCase() === docKey.toLowerCase());
15
+
16
+ if (!resolvedKey) {
17
+ return NextResponse.json(
18
+ { error: "Document not found", requested: docKey, available: availableDocs },
19
+ { status: 404 }
20
+ );
21
+ }
22
+
23
+ const result = await resolveDocContent(resolvedKey);
24
+ if (!result.exists) {
25
+ return NextResponse.json(
26
+ { error: "Document asset is missing" },
27
+ { status: 500 }
28
+ );
29
+ }
30
+
31
+ return NextResponse.json({ doc: resolvedKey, content: result.content, format: result.format });
32
+ }
@@ -0,0 +1,12 @@
1
+ import { NextResponse } from "next/server";
2
+
3
+ export async function GET() {
4
+ // Return placeholder data - database integration not available in static deployment
5
+ return NextResponse.json({
6
+ data: [],
7
+ total: 0,
8
+ page: 1,
9
+ pageSize: 20,
10
+ totalPages: 1
11
+ });
12
+ }
@@ -0,0 +1,21 @@
1
+ import { NextResponse } from "next/server";
2
+
3
+ export async function GET() {
4
+ try {
5
+ const packageName = "@programinglive/dev-workflow-mcp-server";
6
+ const response = await fetch(
7
+ `https://api.npmjs.org/downloads/point/last-month/${packageName}`,
8
+ { next: { revalidate: 3600 } } // Cache for 1 hour
9
+ );
10
+
11
+ if (!response.ok) {
12
+ return NextResponse.json({ downloads: 0 }, { status: 200 });
13
+ }
14
+
15
+ const data = await response.json();
16
+ return NextResponse.json({ downloads: data.downloads || 0 });
17
+ } catch (error) {
18
+ console.error("Error fetching npm downloads:", error);
19
+ return NextResponse.json({ downloads: 0 }, { status: 200 });
20
+ }
21
+ }
@@ -0,0 +1,13 @@
1
+ import { NextResponse } from "next/server";
2
+
3
+ export async function GET() {
4
+ // Return placeholder data - database integration not available in static deployment
5
+ const summary = {
6
+ totalTasks: 0,
7
+ taskTypes: {},
8
+ lastActive: null,
9
+ recentTasks: [],
10
+ updatedAt: null,
11
+ };
12
+ return NextResponse.json({ summary });
13
+ }
@@ -0,0 +1,8 @@
1
+ import { NextResponse } from "next/server";
2
+
3
+ // Version is updated during build/release process
4
+ const PACKAGE_VERSION = "1.5.1";
5
+
6
+ export async function GET() {
7
+ return NextResponse.json({ version: PACKAGE_VERSION });
8
+ }
@@ -0,0 +1,202 @@
1
+ import Link from "next/link";
2
+ import { ArrowLeft, CheckCircle, GitBranch, FileText, TestTube, Rocket } from "lucide-react";
3
+
4
+ export default function DocsPage() {
5
+ return (
6
+ <div className="min-h-screen bg-[#0a0a0f] text-white pt-20 px-4 pb-12">
7
+ <div className="max-w-4xl mx-auto">
8
+ <div className="mb-8">
9
+ <Link href="/" className="inline-flex items-center gap-2 text-indigo-400 hover:text-indigo-300 transition">
10
+ <ArrowLeft className="w-4 h-4" />
11
+ Back to Dashboard
12
+ </Link>
13
+ </div>
14
+
15
+ <div className="prose prose-invert max-w-none">
16
+ <h1 className="text-5xl font-bold mb-4 bg-gradient-to-r from-indigo-400 via-purple-400 to-pink-400 bg-clip-text text-transparent">
17
+ Dev Workflow MCP Server
18
+ </h1>
19
+ <p className="text-xl text-gray-400 mb-8">
20
+ An MCP server that acts as your coding conscience. Enforce test-driven development, ensure documentation,
21
+ and never skip a step in your release process.
22
+ </p>
23
+
24
+ <div className="bg-emerald-500/10 border border-emerald-500/20 rounded-lg p-4 mb-8">
25
+ <p className="text-emerald-400 font-semibold">Version: 1.3.12</p>
26
+ </div>
27
+
28
+ <h2 className="text-3xl font-bold mt-12 mb-6">Features</h2>
29
+ <div className="grid md:grid-cols-2 gap-4 mb-8">
30
+ <div className="p-4 rounded-lg bg-white/5 border border-white/10">
31
+ <div className="flex items-center gap-3 mb-2">
32
+ <CheckCircle className="w-5 h-5 text-indigo-400" />
33
+ <h3 className="text-lg font-semibold">Enforced Discipline</h3>
34
+ </div>
35
+ <p className="text-gray-400 text-sm">Won't let you skip important steps. Follows a strict, proven development workflow.</p>
36
+ </div>
37
+ <div className="p-4 rounded-lg bg-white/5 border border-white/10">
38
+ <div className="flex items-center gap-3 mb-2">
39
+ <TestTube className="w-5 h-5 text-purple-400" />
40
+ <h3 className="text-lg font-semibold">Test-Driven</h3>
41
+ </div>
42
+ <p className="text-gray-400 text-sm">Blocks commits if tests fail. Encourages writing tests before marking tasks complete.</p>
43
+ </div>
44
+ <div className="p-4 rounded-lg bg-white/5 border border-white/10">
45
+ <div className="flex items-center gap-3 mb-2">
46
+ <FileText className="w-5 h-5 text-emerald-400" />
47
+ <h3 className="text-lg font-semibold">Documentation</h3>
48
+ </div>
49
+ <p className="text-gray-400 text-sm">Reminds you to update documentation (README, docs, changelog) for every change.</p>
50
+ </div>
51
+ <div className="p-4 rounded-lg bg-white/5 border border-white/10">
52
+ <div className="flex items-center gap-3 mb-2">
53
+ <GitBranch className="w-5 h-5 text-orange-400" />
54
+ <h3 className="text-lg font-semibold">State Tracking</h3>
55
+ </div>
56
+ <p className="text-gray-400 text-sm">Remembers exactly where you are in the workflow, even across sessions.</p>
57
+ </div>
58
+ </div>
59
+
60
+ <h2 className="text-3xl font-bold mt-12 mb-6">Installation</h2>
61
+ <div className="bg-[#1a1a24] rounded-lg p-6 border border-white/10 mb-8">
62
+ <pre className="text-sm overflow-x-auto">
63
+ <code className="text-gray-300">npm install -g @programinglive/dev-workflow-mcp-server</code>
64
+ </pre>
65
+ </div>
66
+
67
+ <h2 className="text-3xl font-bold mt-12 mb-6">Quick Start</h2>
68
+ <ol className="space-y-4 mb-8">
69
+ <li className="flex gap-4">
70
+ <span className="flex-shrink-0 w-8 h-8 rounded-full bg-indigo-500/20 flex items-center justify-center text-indigo-400 font-bold">1</span>
71
+ <div>
72
+ <h3 className="font-semibold mb-1">Start a Task</h3>
73
+ <p className="text-gray-400">Begin your coding session by defining what you're working on.</p>
74
+ <div className="bg-[#1a1a24] rounded-lg p-3 mt-2 border border-white/10">
75
+ <code className="text-sm text-gray-300">start_task</code>
76
+ </div>
77
+ </div>
78
+ </li>
79
+ <li className="flex gap-4">
80
+ <span className="flex-shrink-0 w-8 h-8 rounded-full bg-purple-500/20 flex items-center justify-center text-purple-400 font-bold">2</span>
81
+ <div>
82
+ <h3 className="font-semibold mb-1">Mark Bug Fixed</h3>
83
+ <p className="text-gray-400">Once you've implemented your feature or fix, mark it as complete.</p>
84
+ <div className="bg-[#1a1a24] rounded-lg p-3 mt-2 border border-white/10">
85
+ <code className="text-sm text-gray-300">mark_bug_fixed</code>
86
+ </div>
87
+ </div>
88
+ </li>
89
+ <li className="flex gap-4">
90
+ <span className="flex-shrink-0 w-8 h-8 rounded-full bg-emerald-500/20 flex items-center justify-center text-emerald-400 font-bold">3</span>
91
+ <div>
92
+ <h3 className="font-semibold mb-1">Create Tests</h3>
93
+ <p className="text-gray-400">Write tests to verify your changes work correctly.</p>
94
+ <div className="bg-[#1a1a24] rounded-lg p-3 mt-2 border border-white/10">
95
+ <code className="text-sm text-gray-300">create_tests</code>
96
+ </div>
97
+ </div>
98
+ </li>
99
+ <li className="flex gap-4">
100
+ <span className="flex-shrink-0 w-8 h-8 rounded-full bg-orange-500/20 flex items-center justify-center text-orange-400 font-bold">4</span>
101
+ <div>
102
+ <h3 className="font-semibold mb-1">Run Tests</h3>
103
+ <p className="text-gray-400">Execute your test suite and ensure everything passes.</p>
104
+ <div className="bg-[#1a1a24] rounded-lg p-3 mt-2 border border-white/10">
105
+ <code className="text-sm text-gray-300">run_tests</code>
106
+ </div>
107
+ </div>
108
+ </li>
109
+ <li className="flex gap-4">
110
+ <span className="flex-shrink-0 w-8 h-8 rounded-full bg-pink-500/20 flex items-center justify-center text-pink-400 font-bold">5</span>
111
+ <div>
112
+ <h3 className="font-semibold mb-1">Create Documentation</h3>
113
+ <p className="text-gray-400">Update relevant documentation for your changes.</p>
114
+ <div className="bg-[#1a1a24] rounded-lg p-3 mt-2 border border-white/10">
115
+ <code className="text-sm text-gray-300">create_documentation</code>
116
+ </div>
117
+ </div>
118
+ </li>
119
+ <li className="flex gap-4">
120
+ <span className="flex-shrink-0 w-8 h-8 rounded-full bg-blue-500/20 flex items-center justify-center text-blue-400 font-bold">6</span>
121
+ <div>
122
+ <h3 className="font-semibold mb-1">Commit and Push</h3>
123
+ <p className="text-gray-400">Commit your changes and push to the repository.</p>
124
+ <div className="bg-[#1a1a24] rounded-lg p-3 mt-2 border border-white/10">
125
+ <code className="text-sm text-gray-300">commit_and_push</code>
126
+ </div>
127
+ </div>
128
+ </li>
129
+ </ol>
130
+
131
+ <h2 className="text-3xl font-bold mt-12 mb-6">Available Commands</h2>
132
+ <div className="space-y-3 mb-8">
133
+ {[
134
+ { cmd: "start_task", desc: "Begin a new coding task" },
135
+ { cmd: "mark_bug_fixed", desc: "Mark feature/bugfix as complete" },
136
+ { cmd: "create_tests", desc: "Record that tests have been created" },
137
+ { cmd: "run_tests", desc: "Execute and record test results" },
138
+ { cmd: "skip_tests", desc: "Skip tests with justification" },
139
+ { cmd: "create_documentation", desc: "Record documentation updates" },
140
+ { cmd: "commit_and_push", desc: "Commit and push changes" },
141
+ { cmd: "perform_release", desc: "Execute release process" },
142
+ { cmd: "complete_task", desc: "Mark task as complete" },
143
+ { cmd: "get_workflow_status", desc: "Check current workflow state" },
144
+ { cmd: "view_history", desc: "View completed tasks" },
145
+ ].map((item) => (
146
+ <div key={item.cmd} className="p-4 rounded-lg bg-white/5 border border-white/10 hover:bg-white/10 transition">
147
+ <code className="text-indigo-400 font-mono">{item.cmd}</code>
148
+ <p className="text-gray-400 text-sm mt-1">{item.desc}</p>
149
+ </div>
150
+ ))}
151
+ </div>
152
+
153
+ <h2 className="text-3xl font-bold mt-12 mb-6">Configuration</h2>
154
+ <p className="text-gray-400 mb-4">
155
+ The server stores workflow state in a SQLite database located at <code className="text-indigo-400 bg-white/5 px-2 py-1 rounded">.state/dev-workflow.db</code>
156
+ </p>
157
+ <p className="text-gray-400 mb-8">
158
+ Set the <code className="text-indigo-400 bg-white/5 px-2 py-1 rounded">DEV_WORKFLOW_USER_ID</code> environment variable to isolate workflow state per user.
159
+ </p>
160
+
161
+ <h2 className="text-3xl font-bold mt-12 mb-6">Requirements</h2>
162
+ <ul className="space-y-2 mb-8">
163
+ <li className="flex items-center gap-2 text-gray-400">
164
+ <CheckCircle className="w-4 h-4 text-emerald-400" />
165
+ Node.js 18 or higher
166
+ </li>
167
+ <li className="flex items-center gap-2 text-gray-400">
168
+ <CheckCircle className="w-4 h-4 text-emerald-400" />
169
+ Git installed and configured
170
+ </li>
171
+ <li className="flex items-center gap-2 text-gray-400">
172
+ <CheckCircle className="w-4 h-4 text-emerald-400" />
173
+ MCP-compatible AI assistant (e.g., Claude Desktop)
174
+ </li>
175
+ </ul>
176
+
177
+ <h2 className="text-3xl font-bold mt-12 mb-6">License</h2>
178
+ <p className="text-gray-400 mb-8">
179
+ MIT License - Free to use for personal and commercial projects.
180
+ </p>
181
+
182
+ <div className="bg-gradient-to-r from-indigo-500/10 via-purple-500/10 to-pink-500/10 border border-white/10 rounded-lg p-6 mt-12">
183
+ <div className="flex items-center gap-3 mb-3">
184
+ <Rocket className="w-6 h-6 text-pink-400" />
185
+ <h3 className="text-xl font-bold">Ready to get started?</h3>
186
+ </div>
187
+ <p className="text-gray-400 mb-4">
188
+ Install the MCP server and start enforcing best practices in your development workflow today!
189
+ </p>
190
+ <Link
191
+ href="https://github.com/programinglive/dev-workflow-mcp-server"
192
+ target="_blank"
193
+ className="inline-flex items-center gap-2 px-6 py-3 bg-gradient-to-r from-indigo-600 to-purple-600 rounded-lg font-semibold hover:shadow-lg hover:shadow-indigo-500/50 transition"
194
+ >
195
+ View on GitHub
196
+ </Link>
197
+ </div>
198
+ </div>
199
+ </div>
200
+ </div>
201
+ );
202
+ }
Binary file
@@ -0,0 +1,91 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ :root {
6
+ --background: #0a0a0f;
7
+ --foreground: #ffffff;
8
+ }
9
+
10
+ body {
11
+ color: var(--foreground);
12
+ background: var(--background);
13
+ font-family: Arial, Helvetica, sans-serif;
14
+ }
15
+
16
+ @layer utilities {
17
+ @keyframes fadeInUp {
18
+ 0% {
19
+ opacity: 0;
20
+ transform: translateY(20px);
21
+ }
22
+
23
+ 100% {
24
+ opacity: 1;
25
+ transform: translateY(0px);
26
+ }
27
+ }
28
+
29
+ @keyframes fadeInRight {
30
+ 0% {
31
+ opacity: 0;
32
+ transform: translateY(-50%) translateX(40px);
33
+ }
34
+
35
+ 100% {
36
+ opacity: 1;
37
+ transform: translateY(-50%) translateX(0px);
38
+ }
39
+ }
40
+
41
+ @keyframes fadeIn {
42
+ 0% {
43
+ opacity: 0;
44
+ transform: translateX(-10px);
45
+ }
46
+
47
+ 100% {
48
+ opacity: 1;
49
+ transform: translateX(0px);
50
+ }
51
+ }
52
+
53
+ .animate-fade-in-up {
54
+ animation: fadeInUp 0.8s ease-out forwards;
55
+ opacity: 0;
56
+ }
57
+
58
+ .animate-fade-in-right {
59
+ animation: fadeInRight 0.8s ease-out forwards;
60
+ opacity: 0;
61
+ }
62
+
63
+ .terminal-line {
64
+ opacity: 0;
65
+ display: flex;
66
+ }
67
+
68
+ .terminal-line.visible {
69
+ opacity: 1;
70
+ transition: opacity 0.1s;
71
+ }
72
+
73
+ .typing-cursor::after {
74
+ content: '▋';
75
+ animation: blink 1s step-end infinite;
76
+ margin-left: 4px;
77
+ color: #a855f7;
78
+ }
79
+
80
+ @keyframes blink {
81
+
82
+ 0%,
83
+ 100% {
84
+ opacity: 1;
85
+ }
86
+
87
+ 50% {
88
+ opacity: 0;
89
+ }
90
+ }
91
+ }
@@ -0,0 +1,36 @@
1
+ import type { Metadata } from "next";
2
+ import "./globals.css";
3
+ import Navbar from "@/components/Navbar";
4
+ import Footer from "@/components/Footer";
5
+
6
+ export const metadata: Metadata = {
7
+ title: "Dev Workflow Dashboard",
8
+ description: "Enforce development discipline and best practices",
9
+ icons: {
10
+ icon: [
11
+ { url: "/assets/favicon-16x16.png", sizes: "16x16", type: "image/png" },
12
+ { url: "/assets/favicon-32x32.png", sizes: "32x32", type: "image/png" },
13
+ { url: "/assets/favicon.ico" },
14
+ ],
15
+ apple: [
16
+ { url: "/assets/apple-touch-icon.png", sizes: "180x180", type: "image/png" },
17
+ ],
18
+ },
19
+ manifest: "/assets/site.webmanifest",
20
+ };
21
+
22
+ export default function RootLayout({
23
+ children,
24
+ }: Readonly<{
25
+ children: React.ReactNode;
26
+ }>) {
27
+ return (
28
+ <html lang="en" className="scroll-smooth">
29
+ <body className="antialiased bg-[#0a0a0f] text-white">
30
+ <Navbar />
31
+ {children}
32
+ <Footer />
33
+ </body>
34
+ </html>
35
+ );
36
+ }
@@ -0,0 +1,15 @@
1
+ import Hero from "@/components/Hero";
2
+ import Features from "@/components/Features";
3
+ import History from "@/components/History";
4
+ import ApiReference from "@/components/ApiReference";
5
+
6
+ export default function Home() {
7
+ return (
8
+ <main>
9
+ <Hero />
10
+ <Features />
11
+ <History />
12
+ <ApiReference />
13
+ </main>
14
+ );
15
+ }
@@ -0,0 +1,20 @@
1
+ export default function ApiReference() {
2
+ return (
3
+ <section id="api" className="py-20 px-4">
4
+ <div className="max-w-7xl mx-auto">
5
+ <h2 className="text-3xl md:text-4xl font-bold mb-8">API Reference</h2>
6
+ <p className="text-gray-400 mb-12">Query workflow data programmatically with our JSON API.</p>
7
+ <div className="grid md:grid-cols-2 gap-6">
8
+ <div className="p-6 rounded-xl bg-white/5 border border-white/10">
9
+ <code className="text-indigo-400 font-mono text-sm">GET /api/history</code>
10
+ <p className="text-gray-400 mt-2">Retrieve paginated task history entries.</p>
11
+ </div>
12
+ <div className="p-6 rounded-xl bg-white/5 border border-white/10">
13
+ <code className="text-indigo-400 font-mono text-sm">GET /api/summary</code>
14
+ <p className="text-gray-400 mt-2">Get project health stats and recent tasks.</p>
15
+ </div>
16
+ </div>
17
+ </div>
18
+ </section>
19
+ );
20
+ }
@@ -0,0 +1,61 @@
1
+ import { ShieldCheck, TestTube, FileText, GitBranch, History, Zap } from "lucide-react";
2
+
3
+ export default function Features() {
4
+ return (
5
+ <section id="features" className="py-20 px-4">
6
+ <div className="max-w-7xl mx-auto">
7
+ <h2 className="text-3xl md:text-4xl font-bold text-center mb-16">Your Coding Conscience</h2>
8
+ <div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
9
+ <FeatureCard
10
+ icon={<ShieldCheck className="w-6 h-6 text-indigo-400" />}
11
+ title="Enforced Discipline"
12
+ description="Won't let you skip important steps. Follows a strict, proven development workflow."
13
+ bg="bg-indigo-500/20"
14
+ />
15
+ <FeatureCard
16
+ icon={<TestTube className="w-6 h-6 text-purple-400" />}
17
+ title="Test-Driven"
18
+ description="Blocks commits if tests fail. Encourages writing tests before marking tasks complete."
19
+ bg="bg-purple-500/20"
20
+ />
21
+ <FeatureCard
22
+ icon={<FileText className="w-6 h-6 text-emerald-400" />}
23
+ title="Documentation"
24
+ description="Reminds you to update documentation (README, docs, changelog) for every change."
25
+ bg="bg-emerald-500/20"
26
+ />
27
+ <FeatureCard
28
+ icon={<GitBranch className="w-6 h-6 text-orange-400" />}
29
+ title="State Tracking"
30
+ description="Remembers exactly where you are in the workflow, even across sessions."
31
+ bg="bg-orange-500/20"
32
+ />
33
+ <FeatureCard
34
+ icon={<History className="w-6 h-6 text-blue-400" />}
35
+ title="Task History"
36
+ description="Keeps a detailed log of all completed tasks, commits, and releases."
37
+ bg="bg-blue-500/20"
38
+ />
39
+ <FeatureCard
40
+ icon={<Zap className="w-6 h-6 text-pink-400" />}
41
+ title="Smart Prompts"
42
+ description="Provides quick reminders and guidance on best practices as you work."
43
+ bg="bg-pink-500/20"
44
+ />
45
+ </div>
46
+ </div>
47
+ </section>
48
+ );
49
+ }
50
+
51
+ function FeatureCard({ icon, title, description, bg }: { icon: React.ReactNode, title: string, description: string, bg: string }) {
52
+ return (
53
+ <div className="p-6 rounded-xl bg-white/5 border border-white/10 hover:bg-white/10 transition">
54
+ <div className={`w-12 h-12 rounded-lg ${bg} flex items-center justify-center mb-4`}>
55
+ {icon}
56
+ </div>
57
+ <h3 className="text-xl font-semibold mb-2">{title}</h3>
58
+ <p className="text-gray-400">{description}</p>
59
+ </div>
60
+ );
61
+ }
@@ -0,0 +1,9 @@
1
+ export default function Footer() {
2
+ return (
3
+ <footer className="py-12 px-4 border-t border-white/10">
4
+ <div className="max-w-7xl mx-auto text-center text-gray-400">
5
+ <p>Built with ❤️ for developers who care about quality</p>
6
+ </div>
7
+ </footer>
8
+ );
9
+ }