Add websitebuilder app
Some checks failed
CI / build (push) Has been cancelled
CI / test (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / lint (push) Has been cancelled

This commit is contained in:
Kunthawat Greethong
2026-01-26 12:50:12 +07:00
parent 93cfc18d1f
commit 4d1bb6892b
227 changed files with 35610 additions and 75 deletions

View File

@@ -0,0 +1,28 @@
{
"id": "phase2-core-features-01",
"seq": "01",
"title": "Create organization CRUD APIs",
"status": "completed",
"depends_on": [],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/SPECIFICATION.md"
],
"acceptance_criteria": [
"POST /api/organizations creates organization with valid data",
"GET /api/organizations returns user's organizations",
"GET /api/organizations/:id returns single organization",
"PATCH /api/organizations/:id updates organization fields",
"DELETE /api/organizations/:id soft deletes organization",
"All endpoints validate user permissions",
"APIs return proper error responses"
],
"deliverables": [
"src/app/api/organizations/route.ts",
"src/app/api/organizations/[id]/route.ts",
"src/services/organization.service.ts",
"src/lib/db/schema.ts (organizations table)",
"src/middleware.ts (updated for org permissions)"
]
}

View File

@@ -0,0 +1,27 @@
{
"id": "phase2-core-features-02",
"seq": "02",
"title": "Create organization member management APIs",
"status": "completed",
"depends_on": ["01"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/SPECIFICATION.md"
],
"acceptance_criteria": [
"POST /api/organizations/:id/members invites new member",
"GET /api/organizations/:id/members returns all members",
"PATCH /api/organizations/:id/members/:memberId updates member role",
"DELETE /api/organizations/:id/members/:memberId removes member",
"Only owners/admins can manage members",
"Members can view their own organization",
"Role-based permissions enforced"
],
"deliverables": [
"src/app/api/organizations/[id]/members/route.ts",
"src/app/api/organizations/[id]/members/[memberId]/route.ts",
"src/services/organization-member.service.ts",
"src/lib/db/schema.ts (organization_members table)"
]
}

View File

@@ -0,0 +1,29 @@
{
"id": "phase2-core-features-03",
"seq": "03",
"title": "Create organization management UI",
"status": "completed",
"depends_on": ["01", "02"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Organization creation form validates input",
"Organization dashboard displays org details",
"Member management page lists all members",
"Member role update works correctly",
"Member removal requires confirmation",
"Organization settings page updates org info",
"UI handles loading and error states"
],
"deliverables": [
"src/app/dashboard/organizations/new/page.tsx",
"src/app/dashboard/organizations/[id]/page.tsx",
"src/app/dashboard/organizations/[id]/members/page.tsx",
"src/app/dashboard/organizations/[id]/settings/page.tsx",
"src/components/organizations/OrganizationForm.tsx",
"src/components/organizations/MemberList.tsx",
"src/components/organizations/MemberActions.tsx"
]
}

View File

@@ -0,0 +1,27 @@
{
"id": "phase2-core-features-04",
"seq": "04",
"title": "Create project CRUD APIs",
"status": "completed",
"depends_on": ["01"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/SPECIFICATION.md"
],
"acceptance_criteria": [
"POST /api/projects creates project in organization",
"GET /api/projects returns user's accessible projects",
"GET /api/projects/:id returns single project",
"PATCH /api/projects/:id updates project fields",
"DELETE /api/projects/:id soft deletes project",
"Projects scoped to organization",
"Slug uniqueness enforced per organization"
],
"deliverables": [
"src/app/api/projects/route.ts",
"src/app/api/projects/[id]/route.ts",
"src/services/project.service.ts",
"src/lib/db/schema.ts (projects table)"
]
}

View File

@@ -0,0 +1,29 @@
{
"id": "phase2-core-features-05",
"seq": "05",
"title": "Create project management UI",
"status": "completed",
"depends_on": ["04"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Project creation form validates input",
"Project list page displays all projects",
"Project dashboard shows project details",
"Project settings page updates project info",
"Project deletion requires confirmation",
"UI filters projects by organization",
"Loading and error states handled"
],
"deliverables": [
"src/app/dashboard/projects/new/page.tsx",
"src/app/dashboard/projects/page.tsx",
"src/app/dashboard/projects/[id]/page.tsx",
"src/app/dashboard/projects/[id]/settings/page.tsx",
"src/components/projects/ProjectForm.tsx",
"src/components/projects/ProjectList.tsx",
"src/components/projects/ProjectCard.tsx"
]
}

View File

@@ -0,0 +1,26 @@
{
"id": "phase2-core-features-06",
"seq": "06",
"title": "Implement project templates system",
"status": "completed",
"depends_on": ["04"],
"parallel": true,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Template system defined with default templates",
"Template selection UI displays available templates",
"Template preview shows template structure",
"Template customization allows modifying defaults",
"Project creation uses selected template",
"Templates include starter files and configuration"
],
"deliverables": [
"src/lib/templates/index.ts",
"src/lib/templates/default-templates.ts",
"src/components/projects/TemplateSelector.tsx",
"src/components/projects/TemplatePreview.tsx",
"src/services/template.service.ts"
]
}

View File

@@ -0,0 +1,26 @@
{
"id": "phase2-core-features-07",
"seq": "07",
"title": "Create chat CRUD APIs",
"status": "completed",
"depends_on": ["04"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/SPECIFICATION.md"
],
"acceptance_criteria": [
"POST /api/projects/:id/chats creates new chat",
"GET /api/projects/:id/chats returns project chats",
"GET /api/chats/:id returns single chat",
"DELETE /api/chats/:id deletes chat",
"Chats scoped to project",
"Chat title auto-generated from first message"
],
"deliverables": [
"src/app/api/projects/[id]/chats/route.ts",
"src/app/api/chats/[id]/route.ts",
"src/services/chat.service.ts",
"src/lib/db/schema.ts (chats table)"
]
}

View File

@@ -0,0 +1,26 @@
{
"id": "phase2-core-features-08",
"seq": "08",
"title": "Create message APIs with streaming",
"status": "pending",
"depends_on": ["07"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/SPECIFICATION.md"
],
"acceptance_criteria": [
"POST /api/chats/:id/messages creates user message",
"GET /api/chats/:id/messages returns chat messages",
"Message streaming endpoint returns chunks",
"Messages stored with metadata (tokens, tool calls)",
"Message order preserved by timestamp",
"Streaming handles connection errors"
],
"deliverables": [
"src/app/api/chats/[id]/messages/route.ts",
"src/app/api/chats/[id]/messages/stream/route.ts",
"src/services/message.service.ts",
"src/lib/db/schema.ts (messages table)"
]
}

View File

@@ -0,0 +1,29 @@
{
"id": "phase2-core-features-09",
"seq": "09",
"title": "Create chat UI components",
"status": "pending",
"depends_on": ["07", "08"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Chat interface displays message list",
"Message input supports multiline text",
"User and assistant messages styled differently",
"Chat history sidebar shows all chats",
"New chat button creates fresh conversation",
"Chat deletion requires confirmation",
"Auto-scroll to latest message"
],
"deliverables": [
"src/app/dashboard/projects/[id]/chat/page.tsx",
"src/components/chat/ChatInterface.tsx",
"src/components/chat/MessageList.tsx",
"src/components/chat/MessageItem.tsx",
"src/components/chat/MessageInput.tsx",
"src/components/chat/ChatSidebar.tsx",
"src/components/chat/ChatHistory.tsx"
]
}

View File

@@ -0,0 +1,26 @@
{
"id": "phase2-core-features-10",
"seq": "10",
"title": "Implement real-time chat updates",
"status": "pending",
"depends_on": ["08", "09"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Real-time message streaming works",
"Typing indicators display for AI responses",
"Connection status shown (connected/disconnected)",
"Reconnection logic handles disconnects",
"Message updates reflect in real-time",
"Streaming errors handled gracefully"
],
"deliverables": [
"src/lib/websocket/chat-socket.ts",
"src/components/chat/StreamingMessage.tsx",
"src/components/chat/TypingIndicator.tsx",
"src/components/chat/ConnectionStatus.tsx",
"src/hooks/useChatStream.ts"
]
}

View File

@@ -0,0 +1,29 @@
{
"id": "phase2-core-features-11",
"seq": "11",
"title": "Create AI provider configuration",
"status": "pending",
"depends_on": [],
"parallel": true,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/SPECIFICATION.md"
],
"acceptance_criteria": [
"AI provider interfaces defined",
"OpenAI provider configured",
"Anthropic provider configured",
"Google provider configured",
"Custom provider support added",
"Provider selection works correctly",
"API key management per provider"
],
"deliverables": [
"src/lib/ai/providers/index.ts",
"src/lib/ai/providers/openai.ts",
"src/lib/ai/providers/anthropic.ts",
"src/lib/ai/providers/google.ts",
"src/lib/ai/providers/types.ts",
"src/lib/db/schema.ts (ai_providers, ai_models tables)"
]
}

View File

@@ -0,0 +1,27 @@
{
"id": "phase2-core-features-12",
"seq": "12",
"title": "Create AI service with streaming",
"status": "pending",
"depends_on": ["11"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"AI client factory creates provider clients",
"Message streaming implemented",
"Tool calls handled correctly",
"Context window managed properly",
"Token counting works",
"Streaming errors handled",
"Rate limiting applied"
],
"deliverables": [
"src/services/ai.service.ts",
"src/lib/ai/client-factory.ts",
"src/lib/ai/stream-handler.ts",
"src/lib/ai/token-counter.ts",
"src/lib/ai/context-manager.ts"
]
}

View File

@@ -0,0 +1,29 @@
{
"id": "phase2-core-features-13",
"seq": "13",
"title": "Create AI model management APIs and UI",
"status": "pending",
"depends_on": ["11"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"GET /api/ai/models returns available models",
"GET /api/ai/providers returns configured providers",
"User API key management works",
"Model selection UI displays options",
"API key input validates format",
"Keys encrypted in database",
"Active provider shown in UI"
],
"deliverables": [
"src/app/api/ai/models/route.ts",
"src/app/api/ai/providers/route.ts",
"src/app/api/ai/keys/route.ts",
"src/components/ai/ModelSelector.tsx",
"src/components/ai/ApiKeyManager.tsx",
"src/services/ai-key.service.ts",
"src/lib/db/schema.ts (user_api_keys table)"
]
}

View File

@@ -0,0 +1,27 @@
{
"id": "phase2-core-features-14",
"seq": "14",
"title": "Implement AI code generation",
"status": "pending",
"depends_on": ["12", "13"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Code generation prompts defined",
"Generated code parsed correctly",
"File operations handled (create/update)",
"Code validation runs before applying",
"Syntax errors caught and reported",
"Code formatting applied",
"Generation history tracked"
],
"deliverables": [
"src/lib/ai/prompts/code-generation.ts",
"src/lib/ai/code-parser.ts",
"src/lib/ai/code-validator.ts",
"src/services/code-generation.service.ts",
"src/components/ai/CodeGenerationPanel.tsx"
]
}

View File

@@ -0,0 +1,26 @@
{
"id": "phase2-core-features-15",
"seq": "15",
"title": "Integrate Monaco Editor",
"status": "pending",
"depends_on": [],
"parallel": true,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"@monaco-editor/react installed",
"Monaco Editor configured",
"Syntax highlighting works for multiple languages",
"Auto-completion enabled",
"Theme customization works",
"Editor resizes correctly",
"Keyboard shortcuts functional"
],
"deliverables": [
"src/components/editor/MonacoEditor.tsx",
"src/lib/monaco/config.ts",
"src/lib/monaco/themes.ts",
"src/lib/monaco/languages.ts"
]
}

View File

@@ -0,0 +1,26 @@
{
"id": "phase2-core-features-16",
"seq": "16",
"title": "Create file management APIs",
"status": "pending",
"depends_on": ["04"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"GET /api/projects/:id/files returns file tree",
"GET /api/projects/:id/files/* returns file content",
"PUT /api/projects/:id/files/* creates/updates file",
"DELETE /api/projects/:id/files/* deletes file",
"File paths validated",
"File size limits enforced",
"Binary files handled correctly"
],
"deliverables": [
"src/app/api/projects/[id]/files/route.ts",
"src/app/api/projects/[id]/files/[...path]/route.ts",
"src/services/file.service.ts",
"src/lib/storage/file-storage.ts"
]
}

View File

@@ -0,0 +1,29 @@
{
"id": "phase2-core-features-17",
"seq": "17",
"title": "Create file management UI",
"status": "pending",
"depends_on": ["15", "16"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"File tree displays project structure",
"File editor opens selected file",
"File creation dialog works",
"File deletion requires confirmation",
"File search filters results",
"File tabs allow switching between files",
"Unsaved changes indicator shown"
],
"deliverables": [
"src/app/dashboard/projects/[id]/editor/page.tsx",
"src/components/editor/FileTree.tsx",
"src/components/editor/FileEditor.tsx",
"src/components/editor/FileTabs.tsx",
"src/components/editor/CreateFileDialog.tsx",
"src/components/editor/FileSearch.tsx",
"src/hooks/useFileOperations.ts"
]
}

View File

@@ -0,0 +1,26 @@
{
"id": "phase2-core-features-18",
"seq": "18",
"title": "Implement file operations",
"status": "pending",
"depends_on": ["16", "17"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Create file operation works",
"Update file operation saves changes",
"Delete file operation removes file",
"Rename file operation updates path",
"Move file operation changes location",
"Operations validate permissions",
"Error messages displayed clearly"
],
"deliverables": [
"src/services/file-operations.service.ts",
"src/components/editor/RenameFileDialog.tsx",
"src/components/editor/MoveFileDialog.tsx",
"src/hooks/useFileOperations.ts (updated)"
]
}

View File

@@ -0,0 +1,24 @@
{
"id": "phase2-core-features-19",
"seq": "19",
"title": "Create preview API",
"status": "pending",
"depends_on": ["04"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"GET /api/projects/:id/preview returns preview URL",
"Preview URL generated correctly",
"Preview updates trigger refresh",
"Preview authentication handled",
"Preview timeout configured",
"Error responses returned properly"
],
"deliverables": [
"src/app/api/projects/[id]/preview/route.ts",
"src/services/preview.service.ts",
"src/lib/preview/url-generator.ts"
]
}

View File

@@ -0,0 +1,27 @@
{
"id": "phase2-core-features-20",
"seq": "20",
"title": "Create preview UI components",
"status": "pending",
"depends_on": ["19"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Preview iframe displays project",
"Responsive device toggle works (desktop/tablet/mobile)",
"Refresh button reloads preview",
"Open in new tab button works",
"Loading state shown during load",
"Error state displayed on failure",
"Preview URL displayed"
],
"deliverables": [
"src/app/dashboard/projects/[id]/preview/page.tsx",
"src/components/preview/PreviewFrame.tsx",
"src/components/preview/DeviceToggle.tsx",
"src/components/preview/PreviewControls.tsx",
"src/components/preview/PreviewUrl.tsx"
]
}

View File

@@ -0,0 +1,27 @@
{
"id": "phase2-core-features-21",
"seq": "21",
"title": "Implement live preview with auto-refresh",
"status": "pending",
"depends_on": ["18", "20"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Auto-refresh triggers on file save",
"Hot module replacement works",
"Debounce prevents excessive refreshes",
"Manual refresh available",
"Refresh status indicator shown",
"Build errors displayed in preview",
"Connection errors handled gracefully"
],
"deliverables": [
"src/lib/preview/hot-reload.ts",
"src/lib/preview/debounce.ts",
"src/components/preview/LivePreview.tsx",
"src/components/preview/RefreshIndicator.tsx",
"src/hooks/useLivePreview.ts"
]
}

View File

@@ -0,0 +1,28 @@
{
"id": "phase2-core-features-22",
"seq": "22",
"title": "Create version control APIs",
"status": "pending",
"depends_on": ["04"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/SPECIFICATION.md"
],
"acceptance_criteria": [
"POST /api/projects/:id/versions creates version",
"GET /api/projects/:id/versions returns version history",
"GET /api/versions/:id returns version details",
"POST /api/versions/:id/rollback restores version",
"Version numbers auto-incremented",
"Current version flag managed",
"Rollback creates new version"
],
"deliverables": [
"src/app/api/projects/[id]/versions/route.ts",
"src/app/api/versions/[id]/route.ts",
"src/app/api/versions/[id]/rollback/route.ts",
"src/services/version.service.ts",
"src/lib/db/schema.ts (project_versions table)"
]
}

View File

@@ -0,0 +1,28 @@
{
"id": "phase2-core-features-23",
"seq": "23",
"title": "Create version control UI",
"status": "pending",
"depends_on": ["22"],
"parallel": false,
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md"
],
"acceptance_criteria": [
"Version history list displays all versions",
"Version comparison shows differences",
"Rollback confirmation dialog works",
"Version tags displayed",
"Current version highlighted",
"Version details shown on click",
"Rollback creates new version entry"
],
"deliverables": [
"src/app/dashboard/projects/[id]/versions/page.tsx",
"src/components/versions/VersionList.tsx",
"src/components/versions/VersionComparison.tsx",
"src/components/versions/RollbackDialog.tsx",
"src/components/versions/VersionDetails.tsx",
"src/components/versions/VersionTag.tsx"
]
}

View File

@@ -0,0 +1,26 @@
{
"id": "phase2-core-features",
"name": "Phase 2: Core Features",
"status": "active",
"objective": "Implement core features including organization management, project management, chat interface, AI integration, code editor, preview system, and version control",
"context_files": [
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/.tmp/sessions/phase1-foundation/context.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/SPECIFICATION.md",
"/Users/kunthawatgreethong/Gitea/moreminimore-vibe/Websitebuilder/TASKS.md",
"/Users/kunthawatgreethong/.config/opencode/context/core/standards/code-quality.md",
"/Users/kunthawatgreethong/.config/opencode/context/core/standards/test-coverage.md",
"/Users/kunthawatgreethong/.config/opencode/context/core/essential-patterns.md"
],
"exit_criteria": [
"Organization CRUD APIs and UI fully functional",
"Project CRUD APIs and UI with template system",
"Chat interface with real-time message streaming",
"AI integration with multiple providers and code generation",
"Monaco editor integrated with file management",
"Live preview system with auto-refresh",
"Version control with rollback functionality"
],
"subtask_count": 23,
"completed_count": 0,
"created_at": "2026-01-22T00:00:00Z"
}