@nexttylabs/echo 0.4.0 → 0.6.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.
- package/CHANGELOG.md +27 -0
- package/app/(dashboard)/admin/feedback/[id]/edit/page.tsx +12 -6
- package/app/(dashboard)/admin/feedback/new/page.tsx +19 -17
- package/app/(dashboard)/admin/layout.tsx +16 -6
- package/app/(dashboard)/layout.tsx +4 -2
- package/app/(dashboard)/settings/api-keys/page.tsx +13 -3
- package/app/(dashboard)/settings/layout.tsx +25 -2
- package/app/(dashboard)/settings/organization/page.tsx +8 -9
- package/app/(public)/[organizationSlug]/roadmap/page.tsx +19 -1
- package/app/api/admin/backup/route.ts +22 -4
- package/app/api/auth/register/handler.ts +1 -2
- package/app/api/feedback/[id]/comments/[commentId]/route.ts +13 -4
- package/app/api/feedback/[id]/reclassify/route.ts +4 -4
- package/app/api/organizations/handler.ts +2 -4
- package/components/settings/settings-sidebar.tsx +4 -4
- package/hooks/use-organization.tsx +116 -0
- package/hooks/use-permissions.ts +24 -11
- package/lib/auth/config.ts +0 -7
- package/lib/auth/organization.ts +20 -0
- package/lib/auth/permissions.ts +10 -0
- package/lib/db/migrations/0000_needy_leech.sql +335 -0
- package/lib/db/migrations/meta/0000_snapshot.json +2186 -1
- package/lib/db/migrations/meta/_journal.json +2 -135
- package/lib/db/schema/auth.ts +0 -1
- package/lib/db/schema/index.ts +0 -1
- package/lib/portal/public-context.tsx +5 -0
- package/package.json +20 -1
- package/.changeset/README.md +0 -21
- package/.changeset/config.json +0 -11
- package/.changeset/cozy-ghosts-care.md +0 -5
- package/.changeset/sharp-lines-stand.md +0 -5
- package/.changeset/sour-doodles-eat.md +0 -5
- package/.changeset/tender-moose-shop.md +0 -5
- package/.github/pull_request_template.md +0 -13
- package/.github/workflows/ci.yml +0 -41
- package/.github/workflows/publish.yml +0 -44
- package/.github/workflows/release.yml +0 -73
- package/AGENTS.md +0 -92
- package/Dockerfile +0 -57
- package/Makefile +0 -77
- package/bun.lock +0 -2503
- package/components/portal/project-switcher.tsx +0 -20
- package/docker-compose.dev.yml +0 -26
- package/docker-compose.yml +0 -98
- package/docs/architecture.md +0 -259
- package/docs/component-inventory.md +0 -261
- package/docs/database-migrations.md +0 -76
- package/docs/development-guide.md +0 -209
- package/docs/e2e-user-flows.csv +0 -31
- package/docs/er-diagram-feedback.mmd +0 -138
- package/docs/er-diagram.mmd +0 -281
- package/docs/i18n-check-report.md +0 -296
- package/docs/index.md +0 -214
- package/docs/logic-chain.md +0 -94
- package/docs/plans/2026-01-02-database-migration-scripts.md +0 -496
- package/docs/plans/2026-01-02-user-login-design.md +0 -37
- package/docs/plans/2026-01-02-user-login.md +0 -437
- package/docs/plans/2026-01-02-user-registration-design.md +0 -47
- package/docs/plans/2026-01-02-user-registration.md +0 -628
- package/docs/plans/2026-01-03-roles-permissions-design.md +0 -20
- package/docs/plans/2026-01-03-roles-permissions.md +0 -266
- package/docs/plans/2026-01-05-authentication-middleware.md +0 -207
- package/docs/plans/2026-01-05-member-removal.md +0 -186
- package/docs/plans/2026-01-05-organization-creation.md +0 -374
- package/docs/plans/2026-01-05-rbac-middleware.md +0 -112
- package/docs/plans/2026-01-05-role-configuration.md +0 -441
- package/docs/plans/2026-01-06-file-upload-support.md +0 -804
- package/docs/plans/2026-01-06-permission-check-hook.md +0 -155
- package/docs/plans/2026-01-06-resource-ownership-check.md +0 -231
- package/docs/plans/2026-01-07-feedback-tracking-link.md +0 -459
- package/docs/plans/2026-01-09-logout-redirect-design.md +0 -52
- package/docs/plans/2026-01-09-phase2-3-plan.md +0 -654
- package/docs/plans/2026-01-09-portal-execution-plan.md +0 -408
- package/docs/plans/2026-01-09-project-delete-feature-design.md +0 -163
- package/docs/plans/2026-01-09-project-delete-implementation.md +0 -451
- package/docs/plans/2026-01-09-project-edit-delete-design.md +0 -52
- package/docs/plans/2026-01-09-settings-center-design.md +0 -114
- package/docs/plans/2026-01-09-settings-center.md +0 -948
- package/docs/plans/2026-01-10-organization-only-design.md +0 -66
- package/docs/plans/2026-01-10-organization-only-implementation.md +0 -433
- package/docs/plans/2026-01-10-portal-settings-restructure-plan.md +0 -18
- package/docs/plans/2026-01-10-project-settings-tabs-design-implementation.md +0 -296
- package/docs/plans/2026-01-14-e2e-playwright-feedback.md +0 -173
- package/docs/plans/2026-01-15-feedback-management-org-context-design.md +0 -82
- package/docs/plans/2026-01-15-feedback-management-org-context-implementation-plan.md +0 -521
- package/docs/plans/2026-01-16-admin-feedback-filters-design.md +0 -75
- package/docs/plans/2026-01-16-admin-feedback-filters-implementation.md +0 -293
- package/docs/plans/2026-01-16-admin-feedback-route-consolidation.md +0 -180
- package/docs/plans/2026-01-16-e2e-test-fixes.md +0 -158
- package/docs/plans/2026-01-17-admin-feedback-filters.md +0 -214
- package/docs/plans/2026-01-17-admin-feedback-improvements.md +0 -453
- package/docs/plans/2026-01-18-changesets-design.md +0 -40
- package/docs/product_changes.md +0 -37
- package/docs/project-overview.md +0 -159
- package/docs/project-scan-report.json +0 -104
- package/docs/route-role-visibility.md +0 -51
- package/docs/source-tree-analysis.md +0 -150
- package/docs/testing/delete-project-manual-tests.md +0 -18
- package/docs/user-story-tracking.md +0 -191
- package/eslint.config.mjs +0 -19
- package/lib/db/migrations/.gitkeep +0 -0
- package/lib/db/migrations/0000_cynical_gladiator.sql +0 -53
- package/lib/db/migrations/0001_wandering_sunfire.sql +0 -27
- package/lib/db/migrations/0002_shallow_speedball.sql +0 -1
- package/lib/db/migrations/0003_add_org_description.sql +0 -1
- package/lib/db/migrations/0003_boring_wild_pack.sql +0 -13
- package/lib/db/migrations/0004_windy_tyrannus.sql +0 -27
- package/lib/db/migrations/0005_perpetual_doorman.sql +0 -5
- package/lib/db/migrations/0006_aberrant_captain_midlands.sql +0 -13
- package/lib/db/migrations/0007_clever_captain_cross.sql +0 -14
- package/lib/db/migrations/0008_sparkling_pandemic.sql +0 -2
- package/lib/db/migrations/0009_happy_black_tom.sql +0 -29
- package/lib/db/migrations/0010_kind_junta.sql +0 -8
- package/lib/db/migrations/0011_mute_squadron_supreme.sql +0 -25
- package/lib/db/migrations/0012_giant_power_man.sql +0 -24
- package/lib/db/migrations/0013_damp_titanium_man.sql +0 -17
- package/lib/db/migrations/0014_blue_alice.sql +0 -18
- package/lib/db/migrations/0015_webhook_tables.sql +0 -41
- package/lib/db/migrations/0016_github_integration.sql +0 -30
- package/lib/db/migrations/0016_overjoyed_ghost_rider.sql +0 -22
- package/lib/db/migrations/0017_slimy_inhumans.sql +0 -6
- package/lib/db/migrations/0018_same_spitfire.sql +0 -1
- package/lib/db/migrations/0019_jittery_loners.sql +0 -16
- package/lib/db/migrations/0019_remove_projects_add_org_settings.sql +0 -14
- package/lib/db/migrations/meta/0001_snapshot.json +0 -553
- package/lib/db/migrations/meta/0002_snapshot.json +0 -560
- package/lib/db/migrations/meta/0003_snapshot.json +0 -650
- package/lib/db/migrations/meta/0004_snapshot.json +0 -852
- package/lib/db/migrations/meta/0005_snapshot.json +0 -900
- package/lib/db/migrations/meta/0006_snapshot.json +0 -1011
- package/lib/db/migrations/meta/0007_snapshot.json +0 -1125
- package/lib/db/migrations/meta/0008_snapshot.json +0 -1146
- package/lib/db/migrations/meta/0009_snapshot.json +0 -1386
- package/lib/db/migrations/meta/0010_snapshot.json +0 -1419
- package/lib/db/migrations/meta/0011_snapshot.json +0 -1615
- package/lib/db/migrations/meta/0012_snapshot.json +0 -1805
- package/lib/db/migrations/meta/0013_snapshot.json +0 -1948
- package/lib/db/migrations/meta/0014_snapshot.json +0 -2082
- package/lib/db/migrations/meta/0015_snapshot.json +0 -2476
- package/lib/db/migrations/meta/0016_snapshot.json +0 -2633
- package/lib/db/migrations/meta/0017_snapshot.json +0 -2680
- package/lib/db/migrations/meta/0018_snapshot.json +0 -2686
- package/lib/db/migrations/meta/0019_snapshot.json +0 -2741
- package/lib/db/schema/projects.ts +0 -145
- package/lib/db/schema/user-profiles.ts +0 -31
- package/lib/validations/projects.ts +0 -49
- package/next-env.d.ts +0 -6
- package/playwright.config.ts +0 -44
- package/proxy.test.ts +0 -131
- package/proxy.ts +0 -116
- package/scripts/backup-db.sh +0 -57
- package/scripts/backup-db.ts +0 -24
- package/scripts/generate-openapi.ts +0 -22
- package/scripts/migration-helper.ts +0 -39
- package/scripts/pre-deploy.ts +0 -75
- package/scripts/restore-db.sh +0 -60
- package/scripts/rollback.ts +0 -72
- package/scripts/seed-tags.ts +0 -48
- package/tests/api/feedback-bulk.test.ts +0 -47
- package/tests/api/feedback-by-id.test.ts +0 -67
- package/tests/api/feedback-comments-route-import.test.ts +0 -26
- package/tests/api/feedback-create.test.ts +0 -71
- package/tests/api/feedback-delete.test.ts +0 -160
- package/tests/api/feedback-filter.test.ts +0 -250
- package/tests/api/feedback-list.test.ts +0 -234
- package/tests/api/feedback-route-assignee-condition.test.ts +0 -32
- package/tests/api/feedback-similar.test.ts +0 -46
- package/tests/api/feedback-sort.test.ts +0 -261
- package/tests/api/feedback-status-enum.test.ts +0 -49
- package/tests/api/feedback-status-filter.test.ts +0 -117
- package/tests/api/feedback-submit-on-behalf.test.ts +0 -269
- package/tests/api/feedback.test.ts +0 -175
- package/tests/api/identify-jwt.test.ts +0 -25
- package/tests/api/invitation-accept.test.ts +0 -213
- package/tests/api/organization-invitations.test.ts +0 -186
- package/tests/api/organization-members-list.test.ts +0 -79
- package/tests/api/organization-members.test.ts +0 -340
- package/tests/api/organizations.test.ts +0 -149
- package/tests/api/register.test.ts +0 -112
- package/tests/api/upload.test.ts +0 -103
- package/tests/api/vote.test.ts +0 -82
- package/tests/app/admin-feedback-detail-page.test.tsx +0 -25
- package/tests/app/admin-feedback-list-page.test.tsx +0 -25
- package/tests/app/admin-feedback-new-page.test.tsx +0 -25
- package/tests/app/health-route-helpers.test.ts +0 -27
- package/tests/app/login-page.test.ts +0 -26
- package/tests/app/portal-page.test.ts +0 -29
- package/tests/app/project-portal-overview.test.tsx +0 -25
- package/tests/app/widget-page-import.test.ts +0 -25
- package/tests/components/create-post-dialog-defaults.test.ts +0 -43
- package/tests/components/feedback/duplicate-suggestions-inline.test.tsx +0 -27
- package/tests/components/feedback/embedded-feedback-form.test.tsx +0 -96
- package/tests/components/feedback/feedback-detail.test.tsx +0 -25
- package/tests/components/feedback/feedback-stats.test.tsx +0 -49
- package/tests/components/feedback-bulk-actions.test.tsx +0 -39
- package/tests/components/feedback-i18n-keys.test.ts +0 -70
- package/tests/components/feedback-list-controls-compile.test.ts +0 -25
- package/tests/components/feedback-list-controls.test.tsx +0 -204
- package/tests/components/feedback-list-item.test.tsx +0 -67
- package/tests/components/landing/hero.test.tsx +0 -46
- package/tests/components/layout/language-switcher.test.tsx +0 -25
- package/tests/components/layout/sidebar.test.tsx +0 -157
- package/tests/components/login-form.test.ts +0 -25
- package/tests/components/organization-form.test.ts +0 -32
- package/tests/components/organization-switcher.test.ts +0 -25
- package/tests/components/pagination.test.tsx +0 -43
- package/tests/components/portal-overview.test.tsx +0 -25
- package/tests/components/profile-form.test.tsx +0 -139
- package/tests/components/role-selector.test.ts +0 -31
- package/tests/components/status-chart.test.tsx +0 -90
- package/tests/e2e/auth.e2e.ts +0 -323
- package/tests/e2e/feedback-actions.e2e.ts +0 -471
- package/tests/e2e/feedback-attachment.e2e.ts +0 -168
- package/tests/e2e/feedback-customer.e2e.ts +0 -226
- package/tests/e2e/feedback-management.e2e.ts +0 -565
- package/tests/e2e/feedback-submit.e2e.ts +0 -133
- package/tests/e2e/feedback-view.e2e.ts +0 -297
- package/tests/e2e/fixtures/test-data.ts +0 -235
- package/tests/e2e/health-check.e2e.ts +0 -230
- package/tests/e2e/helpers/test-utils-helpers.test.ts +0 -43
- package/tests/e2e/helpers/test-utils.ts +0 -298
- package/tests/e2e/integration-placeholders.e2e.ts +0 -199
- package/tests/e2e/organization.e2e.ts +0 -292
- package/tests/e2e/permissions.e2e.ts +0 -424
- package/tests/e2e/project-widget.e2e.ts +0 -63
- package/tests/feedback/filters.test.ts +0 -29
- package/tests/hooks/use-permissions.test.ts +0 -52
- package/tests/lib/ai/classifier.test.ts +0 -104
- package/tests/lib/ai/duplicate-detector.test.ts +0 -234
- package/tests/lib/attachments-schema.test.ts +0 -30
- package/tests/lib/auth/session.test.ts +0 -49
- package/tests/lib/auth-client.test.ts +0 -37
- package/tests/lib/auth-config.test.ts +0 -26
- package/tests/lib/feedback-prefill.test.ts +0 -52
- package/tests/lib/feedback-processor.test.ts +0 -41
- package/tests/lib/feedback-schema.test.ts +0 -33
- package/tests/lib/file-validator.test.ts +0 -48
- package/tests/lib/get-feedback-by-id.test.ts +0 -37
- package/tests/lib/invitations.test.ts +0 -35
- package/tests/lib/login-schema.test.ts +0 -36
- package/tests/lib/org-context.test.ts +0 -95
- package/tests/lib/organization-access.test.ts +0 -44
- package/tests/lib/organization-member-role-schema.test.ts +0 -41
- package/tests/lib/permissions.test.ts +0 -88
- package/tests/lib/portal-analytics.test.ts +0 -25
- package/tests/lib/portal-contributors.test.ts +0 -25
- package/tests/lib/portal-copy.test.ts +0 -27
- package/tests/lib/portal-i18n.test.ts +0 -30
- package/tests/lib/portal-leaderboard-settings.test.ts +0 -25
- package/tests/lib/portal-modules.test.ts +0 -25
- package/tests/lib/portal-seo.test.ts +0 -25
- package/tests/lib/portal-sharing.test.ts +0 -25
- package/tests/lib/portal-sorting.test.ts +0 -25
- package/tests/lib/portal-theme.test.ts +0 -25
- package/tests/lib/rate-limit.test.ts +0 -142
- package/tests/lib/resolve-locale.test.ts +0 -34
- package/tests/lib/services/backup.test.ts +0 -145
- package/tests/lib/user-organizations.test.ts +0 -42
- package/tests/lib/user-role-schema.test.ts +0 -33
- package/tests/lib/user-schema.test.ts +0 -25
- package/tests/setup.ts +0 -74
- package/vercel.json +0 -4
package/docs/product_changes.md
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# Portal Experience: 产品功能与角色影响更新
|
|
2
|
-
|
|
3
|
-
## 🚀 核心功能更新 (Core Features)
|
|
4
|
-
|
|
5
|
-
1. **反馈门户 (Feedback Portal)**
|
|
6
|
-
* 新增 `/portal` 统一入口,聚合“提交反馈”、“路线图”、“变更日志”等功能模块。
|
|
7
|
-
* 提供清晰的导航结构,替代原先零散的页面访问方式。
|
|
8
|
-
|
|
9
|
-
2. **智能即时防重 (Inline Duplicate Detection)**
|
|
10
|
-
* 用户在表单输入标题时,系统实时通过 AI/算法匹配现有反馈。
|
|
11
|
-
* 在输入框下方即时显示“可能存在相似反馈”列表,支持点击查看。
|
|
12
|
-
|
|
13
|
-
3. **智能链接预填充 (Smart URL Prefill)**
|
|
14
|
-
* 支持通过 URL 参数自动填充表单字段。
|
|
15
|
-
* 支持字段:`title` (标题), `description` (描述), `type` (类型: bug/feature/etc), `priority` (优先级)。
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 👥 角色影响详解 (Impact by Role)
|
|
20
|
-
|
|
21
|
-
### 1. 终端用户 (End Users)
|
|
22
|
-
* **体验升级**: 拥有了一个集中的“反馈中心”首页,不再迷失。
|
|
23
|
-
* **极速反馈**: 在输入标题时若看到相似问题,可直接点击查看并投票,**无需重复撰写**长篇大论,减少挫败感。
|
|
24
|
-
* **操作简化**: 点击支持团队发送的特定链接时,表单类别、优先级等可能已被自动填好,只需补充核心信息。
|
|
25
|
-
|
|
26
|
-
### 2. 产品经理 & 管理员 (Product Managers & Admins)
|
|
27
|
-
* **效率提升**: 系统在源头拦截了大量重复反馈,**Review 列表中的“重复项”将显著减少**,大大降低人工分拣和合并的压力。
|
|
28
|
-
* **数据质量优化**: 通过推广带参数的链接(如 `?type=feature&title=二期需求`),可以引导用户提交更规范、分类更准确的数据。
|
|
29
|
-
* **闭环体验**: 详情页新增“返回反馈中心”按钮,用户流失率降低,更容易留在门户内产生更多互动。
|
|
30
|
-
|
|
31
|
-
### 3. 客户支持团队 (Support Team)
|
|
32
|
-
* **工单转化神器**: 当用户在聊天/邮件中报告问题时,支持人员可以直接发送预填充链接(例如:`/portal?type=bug&priority=high&title=登录失败`)。
|
|
33
|
-
* **即用即走**: 降低用户填写门槛,提高工单收集成功率和信息的准确度。
|
|
34
|
-
|
|
35
|
-
### 4. 开发者 (Developers)
|
|
36
|
-
* **API 能力**: 开放 `/api/feedback/similar` 端点。
|
|
37
|
-
* **扩展性**: 可将“相似反馈搜索”功能集成到内部 CRM、CLI 工具或 Slack 机器人中,进一步打通工作流。
|
package/docs/project-overview.md
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
# Project Overview
|
|
2
|
-
|
|
3
|
-
**Project:** Echo
|
|
4
|
-
**Type:** Web Application
|
|
5
|
-
**Purpose:** 用户反馈系统
|
|
6
|
-
**Generated:** 2025-12-31
|
|
7
|
-
|
|
8
|
-
## Executive Summary
|
|
9
|
-
|
|
10
|
-
Echo 是一个现代化的 Web 应用,使用 Next.js 16 和 React 19 构建,旨在让用户通过 Web 页面反馈应用或服务的使用情况。项目采用 App Router 架构、React Server Components 和 TypeScript 严格模式,使用 Shadcn/ui 作为组件库,Tailwind CSS v4 进行样式管理。
|
|
11
|
-
|
|
12
|
-
## Quick Reference
|
|
13
|
-
|
|
14
|
-
| 属性 | 值 |
|
|
15
|
-
|------|-----|
|
|
16
|
-
| **项目类型** | 单体 Web 应用 |
|
|
17
|
-
| **主语言** | TypeScript 5.x |
|
|
18
|
-
| **框架** | Next.js 16.1.1 + React 19.2.3 |
|
|
19
|
-
| **架构模式** | App Router + React Server Components |
|
|
20
|
-
| **包管理器** | Bun |
|
|
21
|
-
| **代码库** | `/Users/derek/Workspaces/echo` |
|
|
22
|
-
|
|
23
|
-
## Technology Stack Summary
|
|
24
|
-
|
|
25
|
-
### Frontend
|
|
26
|
-
|
|
27
|
-
| 类别 | 技术 | 版本 |
|
|
28
|
-
|------|------|------|
|
|
29
|
-
| **框架** | Next.js | 16.1.1 |
|
|
30
|
-
| **UI 库** | React | 19.2.3 |
|
|
31
|
-
| **语言** | TypeScript | 5.x (strict) |
|
|
32
|
-
| **样式** | Tailwind CSS | 4.x |
|
|
33
|
-
| **组件库** | Shadcn/ui | 3.6.2 |
|
|
34
|
-
| **基础组件** | Base UI | 1.0.0 |
|
|
35
|
-
| **Radix UI** | Radix UI | 1.4.3 |
|
|
36
|
-
| **图标** | Lucide React | 0.562.0 |
|
|
37
|
-
|
|
38
|
-
### Development Tools
|
|
39
|
-
|
|
40
|
-
| 工具 | 用途 |
|
|
41
|
-
|------|------|
|
|
42
|
-
| **Bun** | 包管理器和运行时 |
|
|
43
|
-
| **ESLint** | 代码检查 |
|
|
44
|
-
| **TypeScript** | 类型检查 |
|
|
45
|
-
|
|
46
|
-
## Repository Structure
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
echo/ # 项目根目录
|
|
50
|
-
├── app/ # Next.js App Router
|
|
51
|
-
├── components/ # React 组件
|
|
52
|
-
│ └── ui/ # Shadcn/ui 基础组件(14 个)
|
|
53
|
-
├── lib/ # 工具函数
|
|
54
|
-
├── docs/ # 项目文档
|
|
55
|
-
├── public/ # 静态资源
|
|
56
|
-
└── _bmad/ # BMAD 工作流系统
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Architecture Classification
|
|
60
|
-
|
|
61
|
-
| 维度 | 分类 |
|
|
62
|
-
|------|------|
|
|
63
|
-
| **应用类型** | 单体应用 (Monolith) |
|
|
64
|
-
| **渲染模式** | 混合(Server + Client Components)|
|
|
65
|
-
| **路由系统** | 文件系统路由 (App Router) |
|
|
66
|
-
| **样式方案** | 实用优先 CSS (Tailwind) |
|
|
67
|
-
| **状态管理** | 未实现 |
|
|
68
|
-
|
|
69
|
-
## Current Implementation Status
|
|
70
|
-
|
|
71
|
-
### ✅ 已实现
|
|
72
|
-
|
|
73
|
-
| 功能 | 状态 |
|
|
74
|
-
|------|------|
|
|
75
|
-
| Next.js 项目结构 | ✅ |
|
|
76
|
-
| Shadcn/ui 组件库 | ✅ (14 个基础组件) |
|
|
77
|
-
| Tailwind CSS 主题 | ✅ |
|
|
78
|
-
| TypeScript 类型检查 | ✅ |
|
|
79
|
-
| ESLint 代码规范 | ✅ |
|
|
80
|
-
| 开发/构建脚本 | ✅ |
|
|
81
|
-
|
|
82
|
-
### ❌ 未实现
|
|
83
|
-
|
|
84
|
-
| 功能 | 状态 |
|
|
85
|
-
|------|------|
|
|
86
|
-
| API 路由 | ❌ |
|
|
87
|
-
| 数据库 | ❌ |
|
|
88
|
-
| 状态管理 | ❌ |
|
|
89
|
-
| 用户认证 | ❌ |
|
|
90
|
-
| 测试套件 | ❌ |
|
|
91
|
-
| CI/CD | ❌ |
|
|
92
|
-
| Docker 配置 | ❌ |
|
|
93
|
-
|
|
94
|
-
## Project Status
|
|
95
|
-
|
|
96
|
-
**阶段:** 初始化/脚手架
|
|
97
|
-
|
|
98
|
-
项目处于早期开发阶段,已建立基础架构和开发环境,但核心功能尚未实现。
|
|
99
|
-
|
|
100
|
-
## Documentation Index
|
|
101
|
-
|
|
102
|
-
| 文档 | 描述 |
|
|
103
|
-
|------|------|
|
|
104
|
-
| [Architecture](./architecture.md) | 系统架构详细说明 |
|
|
105
|
-
| [Source Tree Analysis](./source-tree-analysis.md) | 源代码树结构 |
|
|
106
|
-
| [Component Inventory](./component-inventory.md) | 组件清单 |
|
|
107
|
-
| [Development Guide](./development-guide.md) | 开发指南 |
|
|
108
|
-
|
|
109
|
-
## Existing Documentation
|
|
110
|
-
|
|
111
|
-
| 文档 | 位置 | 描述 |
|
|
112
|
-
|------|------|------|
|
|
113
|
-
| README.md | `/` | Next.js 标准启动文档 |
|
|
114
|
-
| CLAUDE.md | `/` | Claude Code 项目指令 |
|
|
115
|
-
|
|
116
|
-
## Getting Started
|
|
117
|
-
|
|
118
|
-
### 快速开始
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
# 1. 安装依赖
|
|
122
|
-
bun install
|
|
123
|
-
|
|
124
|
-
# 2. 启动开发服务器
|
|
125
|
-
bun dev
|
|
126
|
-
|
|
127
|
-
# 3. 访问应用
|
|
128
|
-
open http://localhost:3000
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### 可用命令
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
bun dev # 开发服务器
|
|
135
|
-
bun run build # 生产构建
|
|
136
|
-
bun start # 生产服务器
|
|
137
|
-
bun run lint # 代码检查
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
## Development Setup
|
|
141
|
-
|
|
142
|
-
详细开发设置请参阅:[Development Guide](./development-guide.md)
|
|
143
|
-
|
|
144
|
-
## Next Steps
|
|
145
|
-
|
|
146
|
-
1. **核心功能开发** - 实现反馈系统的核心功能
|
|
147
|
-
2. **API 设计** - 设计和实现 API 端点
|
|
148
|
-
3. **数据层** - 添加数据库和 ORM
|
|
149
|
-
4. **状态管理** - 实现客户端状态管理
|
|
150
|
-
5. **测试** - 添加测试套件
|
|
151
|
-
6. **部署** - 配置 CI/CD 和部署流程
|
|
152
|
-
|
|
153
|
-
## Contributing
|
|
154
|
-
|
|
155
|
-
本项目使用 BMad Method 工作流进行开发。查看 `_bmad-output/planning-artifacts/` 目录获取规划文档。
|
|
156
|
-
|
|
157
|
-
## License
|
|
158
|
-
|
|
159
|
-
未指定
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"workflow_version": "1.2.0",
|
|
3
|
-
"timestamps": {
|
|
4
|
-
"started": "2025-12-31T00:00:00Z",
|
|
5
|
-
"last_updated": "2025-12-31T00:00:00Z"
|
|
6
|
-
},
|
|
7
|
-
"mode": "initial_scan",
|
|
8
|
-
"scan_level": "quick",
|
|
9
|
-
"project_root": "/Users/derek/Workspaces/echo",
|
|
10
|
-
"output_folder": "/Users/derek/Workspaces/echo/docs",
|
|
11
|
-
"current_step": "completed",
|
|
12
|
-
"findings": {
|
|
13
|
-
"project_classification": {
|
|
14
|
-
"repository_type": "monolith",
|
|
15
|
-
"parts_count": 1,
|
|
16
|
-
"primary_tech": "Next.js 16.1.1 + React 19.2.3 + TypeScript 5"
|
|
17
|
-
},
|
|
18
|
-
"project_types": [
|
|
19
|
-
{
|
|
20
|
-
"part_id": "main",
|
|
21
|
-
"project_type_id": "web",
|
|
22
|
-
"display_name": "Web Application"
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
"existing_docs_count": 2,
|
|
26
|
-
"technology_stack": {
|
|
27
|
-
"framework": "Next.js 16.1.1 + React 19.2.3",
|
|
28
|
-
"language": "TypeScript 5.x (strict mode)"
|
|
29
|
-
},
|
|
30
|
-
"architecture_pattern": "Next.js App Router + React Server Components"
|
|
31
|
-
},
|
|
32
|
-
"outputs_generated": [
|
|
33
|
-
"project-scan-report.json",
|
|
34
|
-
"source-tree-analysis.md",
|
|
35
|
-
"development-guide.md",
|
|
36
|
-
"architecture.md",
|
|
37
|
-
"component-inventory.md",
|
|
38
|
-
"project-overview.md",
|
|
39
|
-
"index.md"
|
|
40
|
-
],
|
|
41
|
-
"completed_steps": [
|
|
42
|
-
{
|
|
43
|
-
"step": "step_1",
|
|
44
|
-
"status": "completed",
|
|
45
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
46
|
-
"summary": "Classified as monolith with 1 parts"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"step": "step_2",
|
|
50
|
-
"status": "completed",
|
|
51
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
52
|
-
"summary": "Found 2 existing docs"
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"step": "step_3",
|
|
56
|
-
"status": "completed",
|
|
57
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
58
|
-
"summary": "Tech stack: Next.js 16 + React 19 + TypeScript 5"
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
"step": "step_4",
|
|
62
|
-
"status": "completed",
|
|
63
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
64
|
-
"summary": "Conditional analysis complete, 0 files written"
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"step": "step_5",
|
|
68
|
-
"status": "completed",
|
|
69
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
70
|
-
"summary": "Source tree documented"
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"step": "step_6",
|
|
74
|
-
"status": "completed",
|
|
75
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
76
|
-
"summary": "Dev/deployment guides written"
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
"step": "step_8",
|
|
80
|
-
"status": "completed",
|
|
81
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
82
|
-
"summary": "Architecture docs written for 1 parts"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"step": "step_9",
|
|
86
|
-
"status": "completed",
|
|
87
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
88
|
-
"summary": "All supporting docs written"
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"step": "step_10",
|
|
92
|
-
"status": "completed",
|
|
93
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
94
|
-
"summary": "Master index generated"
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
"step": "step_12",
|
|
98
|
-
"status": "completed",
|
|
99
|
-
"timestamp": "2025-12-31T00:00:00Z",
|
|
100
|
-
"summary": "Workflow complete"
|
|
101
|
-
}
|
|
102
|
-
],
|
|
103
|
-
"resume_instructions": "Workflow completed"
|
|
104
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# 路由与用户角色可见性对照表
|
|
2
|
-
|
|
3
|
-
> 生成日期:2026-01-13
|
|
4
|
-
> 说明:依据当前路由与页面鉴权逻辑整理;如页面本身未做角色校验,但位于受保护布局中,则标记为“登录可见”。
|
|
5
|
-
|
|
6
|
-
## 角色说明
|
|
7
|
-
- **admin** 管理员
|
|
8
|
-
- **product_manager** 产品经理
|
|
9
|
-
- **developer** 开发者
|
|
10
|
-
- **customer_support** 客服
|
|
11
|
-
- **customer** 终端用户
|
|
12
|
-
|
|
13
|
-
## 路由对照
|
|
14
|
-
|
|
15
|
-
| 路由 | 页面/功能 | 访问要求 | 角色可见性 | 备注 |
|
|
16
|
-
|---|---|---|---|---|
|
|
17
|
-
| `/` | 落地页 | 公开 | 所有人 | - |
|
|
18
|
-
| `/login` | 登录页 | 公开 | 所有人 | 已登录会重定向 `/dashboard` |
|
|
19
|
-
| `/register` | 注册页 | 公开 | 所有人 | 已登录会重定向 `/dashboard` |
|
|
20
|
-
| `/docs` | API 文档 | 公开 | 所有人 | Swagger UI |
|
|
21
|
-
| `/feedback/[id]` | 公开反馈详情 | 公开 | 所有人 | 登录后可用账号评论;游客可匿名评论 |
|
|
22
|
-
| `/widget/[organizationId]` | 嵌入式反馈 Widget | 公开 | 所有人 | 供产品内嵌使用 |
|
|
23
|
-
| `/<organizationSlug>` | 公开反馈 Portal | 公开 | 所有人 | 入口默认展示反馈 |
|
|
24
|
-
| `/invite/[token]` | 邀请接受 | 公开 | 所有人 | 未登录会提示登录 |
|
|
25
|
-
|
|
26
|
-
| `/dashboard` | 仪表盘 | 登录 | 所有登录用户 | 由 Dashboard 布局保护 |
|
|
27
|
-
| `/feedback` | 反馈管理列表 | 登录 | 所有登录用户 | 列表内可投票 |
|
|
28
|
-
| `/feedback/new` | 代客户提交反馈 | 登录 | admin、product_manager、customer_support | 其他角色显示“权限不足” |
|
|
29
|
-
| `/admin/feedback/[id]` | 后台反馈详情 | 登录 | 所有登录用户 | 编辑/删除/状态更新权限依角色而定 |
|
|
30
|
-
|
|
31
|
-
| `/settings/notifications` | 通知设置 | 登录 | 所有登录用户 | - |
|
|
32
|
-
| `/settings/organizations/new` | 创建组织 | 登录 | 所有登录用户 | 侧边栏入口仅管理员可见 |
|
|
33
|
-
| `/settings/organizations/[orgId]/members` | 成员管理 | 登录 | 所有登录用户 | 仅管理员可调整角色/移除成员 |
|
|
34
|
-
| `/settings/organization` | 组织管理 | 登录 | admin | 组织信息与成员管理 |
|
|
35
|
-
| `/settings/portal-branding` | Portal Branding | 登录 | admin、product_manager | 主题、文案、语言 |
|
|
36
|
-
| `/settings/portal-growth` | Portal Growth | 登录 | admin、product_manager | 分享与 SEO |
|
|
37
|
-
| `/settings/portal-access` | Portal Access | 登录 | admin、product_manager | 可见性与权限 |
|
|
38
|
-
| `/settings/portal-modules` | Portal Modules | 登录 | admin、product_manager | 模块开关 |
|
|
39
|
-
| `/settings/portal-resources` | Portal Resources | 登录 | admin、product_manager | 入口与预览链接 |
|
|
40
|
-
|
|
41
|
-
## 权限细节(页面内行为)
|
|
42
|
-
|
|
43
|
-
| 功能 | 约束 | 说明 |
|
|
44
|
-
|---|---|---|
|
|
45
|
-
| 代客户提交 | `canSubmitOnBehalf` | 允许角色:admin、product_manager、customer_support |
|
|
46
|
-
| 更新反馈状态 | `canUpdateFeedbackStatus` | 允许角色:admin、product_manager |
|
|
47
|
-
| 删除反馈 | `canDeleteFeedback` | 允许角色:admin |
|
|
48
|
-
| 组织角色管理/移除成员 | 管理员限定 | 在成员管理页内限制 |
|
|
49
|
-
|
|
50
|
-
## 已知不一致/注意事项
|
|
51
|
-
- 登录跳转存在 `/login` 与 `/sign-in` 混用(如 `app/(dashboard)/feedback/page.tsx`),可能导致重定向不一致。
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
# Source Tree Analysis
|
|
2
|
-
|
|
3
|
-
**Project:** Echo
|
|
4
|
-
**Type:** Web Application (Next.js + React + TypeScript)
|
|
5
|
-
**Generated:** 2025-12-31
|
|
6
|
-
|
|
7
|
-
## Directory Structure
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
echo/ # 项目根目录
|
|
11
|
-
├── _bmad/ # BMAD 模块配置(工作流系统)
|
|
12
|
-
│ ├── core/ # 核心工作流和任务
|
|
13
|
-
│ └── bmm/ # BMM 方法论工作流
|
|
14
|
-
├── _bmad-output/ # BMAD 输出目录
|
|
15
|
-
│ ├── planning-artifacts/ # 规划文档
|
|
16
|
-
│ └── implementation-artifacts/ # 实施工件
|
|
17
|
-
├── app/ # Next.js App Router 目录 ⭐
|
|
18
|
-
│ ├── layout.tsx # 根布局组件
|
|
19
|
-
│ ├── page.tsx # 首页
|
|
20
|
-
│ ├── globals.css # 全局样式 + Tailwind 配置
|
|
21
|
-
│ └── favicon.ico # 网站图标
|
|
22
|
-
├── components/ # React 组件目录 ⭐
|
|
23
|
-
│ ├── ui/ # Shadcn/ui 基础组件(14个)
|
|
24
|
-
│ │ ├── alert-dialog.tsx # 警告对话框
|
|
25
|
-
│ │ ├── badge.tsx # 徽章
|
|
26
|
-
│ │ ├── button.tsx # 按钮
|
|
27
|
-
│ │ ├── card.tsx # 卡片
|
|
28
|
-
│ │ ├── combobox.tsx # 组合框
|
|
29
|
-
│ │ ├── dropdown-menu.tsx # 下拉菜单
|
|
30
|
-
│ │ ├── field.tsx # 表单字段
|
|
31
|
-
│ │ ├── input-group.tsx # 输入组
|
|
32
|
-
│ │ ├── input.tsx # 输入框
|
|
33
|
-
│ │ ├── label.tsx # 标签
|
|
34
|
-
│ │ ├── select.tsx # 选择器
|
|
35
|
-
│ │ ├── separator.tsx # 分隔符
|
|
36
|
-
│ │ └── textarea.tsx # 文本域
|
|
37
|
-
│ ├── component-example.tsx # 示例组件
|
|
38
|
-
│ └── example.tsx # 示例
|
|
39
|
-
├── lib/ # 工具函数目录 ⭐
|
|
40
|
-
│ └── utils.ts # 通用工具(cn 函数等)
|
|
41
|
-
├── public/ # 静态资源目录
|
|
42
|
-
├── docs/ # 项目文档
|
|
43
|
-
│ ├── project-scan-report.json # 项目扫描状态
|
|
44
|
-
│ └── (生成文档将在此处创建)
|
|
45
|
-
├── node_modules/ # 依赖包
|
|
46
|
-
├── package.json # 项目配置和依赖 ⭐
|
|
47
|
-
├── tsconfig.json # TypeScript 配置 ⭐
|
|
48
|
-
├── next.config.ts # Next.js 配置
|
|
49
|
-
├── components.json # Shadcn/ui 配置 ⭐
|
|
50
|
-
├── postcss.config.mjs # PostCSS 配置
|
|
51
|
-
├── eslint.config.mjs # ESLint 配置
|
|
52
|
-
├── CLAUDE.md # Claude Code 项目指令
|
|
53
|
-
└── README.md # 项目说明
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Critical Directories Explained
|
|
57
|
-
|
|
58
|
-
### `/app` - Next.js App Router
|
|
59
|
-
Next.js 13+ 的 App Router 目录,使用基于文件系统的路由。
|
|
60
|
-
|
|
61
|
-
| 文件/目录 | 用途 |
|
|
62
|
-
|-----------|------|
|
|
63
|
-
| `layout.tsx` | 根布局,定义页面结构和共享 UI |
|
|
64
|
-
| `page.tsx` | 主页(/ 路由)|
|
|
65
|
-
| `globals.css` | 全局样式,包含 Tailwind 主题配置 |
|
|
66
|
-
| `favicon.ico` | 网站图标 |
|
|
67
|
-
|
|
68
|
-
**架构模式:** React Server Components (RSC) enabled
|
|
69
|
-
|
|
70
|
-
### `/components` - React 组件
|
|
71
|
-
可复用的 UI 组件目录。
|
|
72
|
-
|
|
73
|
-
| 子目录 | 用途 |
|
|
74
|
-
|--------|------|
|
|
75
|
-
| `ui/` | Shadcn/ui 基础组件库 |
|
|
76
|
-
| 根目录 | 自定义组件 |
|
|
77
|
-
|
|
78
|
-
**组件库:**
|
|
79
|
-
- **Shadcn/ui 3.6.2** (Radix UI primitives + Base UI)
|
|
80
|
-
- **图标:** Lucide React 0.562.0
|
|
81
|
-
- **样式变体:** radix-maia
|
|
82
|
-
- **基础颜色:** neutral
|
|
83
|
-
|
|
84
|
-
### `/lib` - 工具函数
|
|
85
|
-
共享工具函数和帮助器。
|
|
86
|
-
|
|
87
|
-
| 文件 | 用途 |
|
|
88
|
-
|------|------|
|
|
89
|
-
| `utils.ts` | `cn()` 函数 - 合并 Tailwind 类名(clsx + tailwind-merge)|
|
|
90
|
-
|
|
91
|
-
## Entry Points
|
|
92
|
-
|
|
93
|
-
| 类型 | 位置 | 描述 |
|
|
94
|
-
|------|------|------|
|
|
95
|
-
| **应用入口** | `app/layout.tsx` | 根布局组件 |
|
|
96
|
-
| **首页** | `app/page.tsx` | 主页路由 |
|
|
97
|
-
| **全局样式** | `app/globals.css` | Tailwind 主题配置 |
|
|
98
|
-
|
|
99
|
-
## Key Configuration Files
|
|
100
|
-
|
|
101
|
-
| 文件 | 用途 |
|
|
102
|
-
|------|------|
|
|
103
|
-
| `package.json` | 项目元数据和依赖 |
|
|
104
|
-
| `tsconfig.json` | TypeScript 编译配置 |
|
|
105
|
-
| `components.json` | Shadcn/ui 组件配置 |
|
|
106
|
-
| `next.config.ts` | Next.js 框架配置 |
|
|
107
|
-
|
|
108
|
-
## Import Aliases
|
|
109
|
-
|
|
110
|
-
配置在 `tsconfig.json` 和 `components.json` 中:
|
|
111
|
-
|
|
112
|
-
```typescript
|
|
113
|
-
@/components → components/
|
|
114
|
-
@/lib → lib/
|
|
115
|
-
@/components/ui → components/ui
|
|
116
|
-
@/hooks → hooks/ (尚未创建)
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
## Architecture Notes
|
|
120
|
-
|
|
121
|
-
1. **路由系统:** Next.js App Router (文件系统路由)
|
|
122
|
-
2. **渲染模式:** React Server Components + Client Components
|
|
123
|
-
3. **样式方案:** Tailwind CSS v4 (inline config with @theme)
|
|
124
|
-
4. **组件系统:** Shadcn/ui (Radix UI primitives)
|
|
125
|
-
5. **类型系统:** TypeScript 5.x (strict mode enabled)
|
|
126
|
-
6. **色彩空间:** OKLCH (perceptually uniform colors)
|
|
127
|
-
7. **暗黑模式:** 自定义实现 (`.dark` class selector)
|
|
128
|
-
|
|
129
|
-
## Development Patterns
|
|
130
|
-
|
|
131
|
-
### 未实现的功能区域
|
|
132
|
-
|
|
133
|
-
以下功能区域在当前项目中尚未实现:
|
|
134
|
-
|
|
135
|
-
- ❌ API 路由(无 `/app/api` 目录)
|
|
136
|
-
- ❌ 数据模型/数据库
|
|
137
|
-
- ❌ 状态管理(无 Redux/Zustand/Context store)
|
|
138
|
-
- ❌ 认证/授权系统
|
|
139
|
-
- ❌ 测试套件
|
|
140
|
-
- ❌ CI/CD 配置
|
|
141
|
-
- ❌ Docker/容器化
|
|
142
|
-
- ❌ 中间件
|
|
143
|
-
|
|
144
|
-
### 当前实现
|
|
145
|
-
|
|
146
|
-
- ✅ 基础 Next.js 项目结构
|
|
147
|
-
- ✅ Shadcn/ui 组件库(14 个基础组件)
|
|
148
|
-
- ✅ Tailwind CSS 主题配置
|
|
149
|
-
- ✅ TypeScript 类型检查
|
|
150
|
-
- ✅ ESLint 代码规范
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Delete Project Feature - Manual Test Results
|
|
2
|
-
|
|
3
|
-
Date: 2026-01-09
|
|
4
|
-
|
|
5
|
-
## Test Cases
|
|
6
|
-
|
|
7
|
-
- [ ] Dialog opens when delete button clicked
|
|
8
|
-
- [ ] Warning icon and message displayed
|
|
9
|
-
- [ ] Input validation works (exact match required)
|
|
10
|
-
- [ ] Cancel button closes dialog and resets state
|
|
11
|
-
- [ ] Successful delete redirects to project list
|
|
12
|
-
- [ ] Error messages displayed on failure
|
|
13
|
-
- [ ] Loading state shown during delete
|
|
14
|
-
- [ ] Backend permission check works
|
|
15
|
-
|
|
16
|
-
## Notes
|
|
17
|
-
|
|
18
|
-
[Add any observations or issues found]
|