create-lego-one 2.0.12 → 2.0.13
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/dist/index.cjs +34 -0
- package/dist/index.cjs.map +1 -1
- package/package.json +1 -1
- package/template/.cursor/rules/rules.mdc +639 -0
- package/template/.dockerignore +58 -0
- package/template/.env.example +18 -0
- package/template/.eslintignore +5 -0
- package/template/.eslintrc.js +28 -0
- package/template/.prettierignore +6 -0
- package/template/.prettierrc +11 -0
- package/template/CLAUDE.md +634 -0
- package/template/Dockerfile +67 -0
- package/template/PROMPT.md +457 -0
- package/template/README.md +325 -0
- package/template/docker-compose.yml +48 -0
- package/template/docker-entrypoint.sh +23 -0
- package/template/docs/checkpoints/.template.md +64 -0
- package/template/docs/checkpoints/framework/01-infrastructure-setup.md +132 -0
- package/template/docs/checkpoints/framework/02-pocketbase-setup.md +155 -0
- package/template/docs/checkpoints/framework/03-host-kernel.md +170 -0
- package/template/docs/checkpoints/framework/04-auth-system.md +163 -0
- package/template/docs/checkpoints/framework/phase-05-multitenancy-rbac.md +223 -0
- package/template/docs/checkpoints/framework/phase-06-ui-components.md +260 -0
- package/template/docs/checkpoints/framework/phase-07-communication-system.md +276 -0
- package/template/docs/checkpoints/framework/phase-08-plugin-system.md +91 -0
- package/template/docs/checkpoints/framework/phase-09-dashboard-plugin.md +111 -0
- package/template/docs/checkpoints/framework/phase-10-todo-plugin.md +169 -0
- package/template/docs/checkpoints/framework/phase-11-testing.md +264 -0
- package/template/docs/checkpoints/framework/phase-12-deployment.md +294 -0
- package/template/docs/checkpoints/framework/phase-13-documentation.md +312 -0
- package/template/docs/framework/plans/00-index.md +164 -0
- package/template/docs/framework/plans/01-infrastructure-setup.md +855 -0
- package/template/docs/framework/plans/02-pocketbase-setup.md +1374 -0
- package/template/docs/framework/plans/03-host-kernel.md +1518 -0
- package/template/docs/framework/plans/04-auth-system.md +1466 -0
- package/template/docs/framework/plans/05-multitenancy-rbac.md +1527 -0
- package/template/docs/framework/plans/06-ui-components.md +1478 -0
- package/template/docs/framework/plans/07-communication-system.md +1106 -0
- package/template/docs/framework/plans/08-plugin-system.md +1179 -0
- package/template/docs/framework/plans/09-dashboard-plugin.md +1137 -0
- package/template/docs/framework/plans/10-todo-plugin.md +1343 -0
- package/template/docs/framework/plans/11-testing.md +935 -0
- package/template/docs/framework/plans/12-deployment.md +896 -0
- package/template/docs/framework/prompts/0-boilerplate-modernjs.md +151 -0
- package/template/docs/framework/research/00-modernjs-audit.md +488 -0
- package/template/docs/framework/research/01-system-blueprint.md +721 -0
- package/template/docs/framework/research/02-data-migration-protocol.md +699 -0
- package/template/docs/framework/research/03-host-setup.md +714 -0
- package/template/docs/framework/research/04-plugin-architecture.md +645 -0
- package/template/docs/framework/research/05-slot-injection-pattern.md +671 -0
- package/template/docs/framework/research/06-cli-strategy.md +615 -0
- package/template/docs/framework/research/07-deployment.md +629 -0
- package/template/docs/framework/research/README.md +282 -0
- package/template/docs/framework/setup/00-index.md +210 -0
- package/template/docs/framework/setup/01-framework-structure.md +308 -0
- package/template/docs/framework/setup/02-development-workflow.md +405 -0
- package/template/docs/framework/setup/03-environment-setup.md +215 -0
- package/template/docs/framework/setup/04-kernel-architecture.md +499 -0
- package/template/docs/framework/setup/05-plugin-system.md +620 -0
- package/template/docs/framework/setup/06-communication-patterns.md +451 -0
- package/template/docs/framework/setup/07-plugin-development.md +582 -0
- package/template/docs/framework/setup/08-component-library.md +658 -0
- package/template/docs/framework/setup/09-data-integration.md +609 -0
- package/template/docs/framework/setup/10-auth-rbac.md +497 -0
- package/template/docs/framework/setup/11-hooks-api.md +393 -0
- package/template/docs/framework/setup/12-components-api.md +665 -0
- package/template/docs/framework/setup/13-deployment-guide.md +566 -0
- package/template/docs/framework/setup/README.md +548 -0
- package/template/host/package.json +1 -1
- package/template/nginx.conf +72 -0
- package/template/package.json +1 -1
- package/template/packages/plugins/@lego/plugin-dashboard/package.json +1 -1
- package/template/packages/plugins/@lego/plugin-todo/package.json +1 -1
- package/template/pocketbase/CHANGELOG.md +911 -0
- package/template/pocketbase/LICENSE.md +17 -0
- package/template/scripts/create-plugin.js +221 -0
- package/template/scripts/deploy.sh +56 -0
- package/template/tsconfig.base.json +26 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Checkpoint: Phase 2 - PocketBase Setup
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-01-23
|
|
4
|
+
**Plan:** `docs/framework/plans/02-pocketbase-setup.md`
|
|
5
|
+
**Status:** ✅ COMPLETED
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Files Created
|
|
10
|
+
|
|
11
|
+
### PocketBase Binary and Setup
|
|
12
|
+
- `pocketbase/pocketbase.exe` - PocketBase v0.22.0 binary for Windows
|
|
13
|
+
- `pocketbase/.gitignore` - Git ignore patterns for pb_data/ and pb_public/
|
|
14
|
+
- `pocketbase/pb_migrations/` - Migrations directory
|
|
15
|
+
|
|
16
|
+
### PocketBase Library (`host/src/lib/pocketbase/`)
|
|
17
|
+
- `types.ts` - PocketBase field types and collection interfaces
|
|
18
|
+
- `migrations.ts` - Migration runner utilities
|
|
19
|
+
- `client.ts` - PocketBase client singleton
|
|
20
|
+
- `index.ts` - Barrel export for all pocketbase utilities
|
|
21
|
+
|
|
22
|
+
### Collections (`host/src/lib/pocketbase/collections/`)
|
|
23
|
+
- `users.ts` - Users auth collection with multi-tenancy rules
|
|
24
|
+
- `organizations.ts` - Organizations collection for multi-tenancy
|
|
25
|
+
- `roles.ts` - Roles collection for RBAC
|
|
26
|
+
- `permissions.ts` - Permissions collection for granular access control
|
|
27
|
+
- `user_roles.ts` - Junction table for user-role assignments
|
|
28
|
+
- `audit_logs.ts` - Audit log collection
|
|
29
|
+
- `todos.ts` - Todos collection (example plugin data)
|
|
30
|
+
- `index.ts` - Collections registry
|
|
31
|
+
|
|
32
|
+
### Seed Data (`host/src/lib/pocketbase/seed/`)
|
|
33
|
+
- `roles.ts` - System roles (Owner, Admin, Member, Guest)
|
|
34
|
+
- `permissions.ts` - System permissions for all resources
|
|
35
|
+
|
|
36
|
+
### Seed and Migration Logic
|
|
37
|
+
- `host/src/lib/pocketbase/seed.ts` - Database seeding function
|
|
38
|
+
|
|
39
|
+
### Kernel (`host/src/kernel/`)
|
|
40
|
+
- `use-migrations.ts` - React hook for running migrations on startup
|
|
41
|
+
|
|
42
|
+
### Providers (`host/src/providers/`)
|
|
43
|
+
- `PocketBaseProvider.tsx` - React context provider for PocketBase client
|
|
44
|
+
|
|
45
|
+
### Configuration
|
|
46
|
+
- `saas.config.ts` - Initial SaaS plugin configuration
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Active State
|
|
51
|
+
|
|
52
|
+
### Collections Created (7 total)
|
|
53
|
+
1. **users** (auth) - User accounts with organization membership
|
|
54
|
+
2. **organizations** - Multi-tenant organizations
|
|
55
|
+
3. **roles** - RBAC roles
|
|
56
|
+
4. **permissions** - RBAC permissions
|
|
57
|
+
5. **user_roles** - User-role junction table
|
|
58
|
+
6. **audit_logs** - Audit trail for all actions
|
|
59
|
+
7. **todos** - Sample plugin data (Todo plugin)
|
|
60
|
+
|
|
61
|
+
### Multi-Tenancy Rules
|
|
62
|
+
All collections implement organization-based data isolation using API rules:
|
|
63
|
+
- `listRule` - Users can only see records in their organization
|
|
64
|
+
- `viewRule` - Users can only view records in their organization
|
|
65
|
+
- `createRule` - Varies by resource and user role
|
|
66
|
+
- `updateRule` - Users can update their own records (varies by resource)
|
|
67
|
+
- `deleteRule` - Varies by resource and user role
|
|
68
|
+
|
|
69
|
+
### RBAC System
|
|
70
|
+
- 4 system roles: Owner, Admin, Member, Guest
|
|
71
|
+
- 19 system permissions covering:
|
|
72
|
+
- User management (view, create, update, delete)
|
|
73
|
+
- Role management (view, create, update, delete)
|
|
74
|
+
- Permission management (view, create, delete)
|
|
75
|
+
- Organization settings (update)
|
|
76
|
+
- Audit logs (view)
|
|
77
|
+
- Todo management (view, manage)
|
|
78
|
+
- Plugin management (view, manage)
|
|
79
|
+
|
|
80
|
+
### Seed Data
|
|
81
|
+
On first run (development):
|
|
82
|
+
- Creates admin user with credentials from .env
|
|
83
|
+
- Creates demo organization
|
|
84
|
+
- Creates all system roles and permissions
|
|
85
|
+
- Assigns Owner role to admin
|
|
86
|
+
- Creates 3 sample todos
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Pending Tasks
|
|
91
|
+
|
|
92
|
+
### Next Phase: Host Kernel
|
|
93
|
+
- **Plan File:** `docs/framework/plans/03-host-kernel.md`
|
|
94
|
+
- **Prerequisites:** Phase 2 completed
|
|
95
|
+
- **Overview:**
|
|
96
|
+
- Initialize Modern.js host app
|
|
97
|
+
- Create shared state management (Zustand)
|
|
98
|
+
- Create layout components
|
|
99
|
+
- Set up routing
|
|
100
|
+
- Configure Garfish for micro-frontends
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Verification Results
|
|
105
|
+
|
|
106
|
+
### PocketBase Binary
|
|
107
|
+
✅ `pocketbase/pocketbase.exe` - Downloaded and verified version 0.22.0
|
|
108
|
+
✅ `pocketbase/.gitignore` - Created
|
|
109
|
+
✅ `pocketbase/pb_migrations/` - Directory created
|
|
110
|
+
|
|
111
|
+
### Collections
|
|
112
|
+
✅ `users.ts` - Auth collection with organization relation
|
|
113
|
+
✅ `organizations.ts` - Base collection with owner relation
|
|
114
|
+
✅ `roles.ts` - Base collection with isSystem flag
|
|
115
|
+
✅ `permissions.ts` - Base collection with resource/action fields
|
|
116
|
+
✅ `user_roles.ts` - Junction table with userId, roleId, organizationId
|
|
117
|
+
✅ `audit_logs.ts` - Base collection with action, entityType, entityId
|
|
118
|
+
✅ `todos.ts` - Base collection with priority, dueDate, completed
|
|
119
|
+
|
|
120
|
+
### Migrations
|
|
121
|
+
✅ `types.ts` - All field types defined (bool, number, text, email, url, date, autodate, select, json, relation)
|
|
122
|
+
✅ `migrations.ts` - Migration runner with collection creation logic
|
|
123
|
+
✅ `collections/index.ts` - Collections registry
|
|
124
|
+
|
|
125
|
+
### Seed Data
|
|
126
|
+
✅ `seed/roles.ts` - 4 system roles defined
|
|
127
|
+
✅ `seed/permissions.ts` - 19 system permissions defined
|
|
128
|
+
✅ `seed.ts` - Seed function with admin, org, roles, permissions, todos
|
|
129
|
+
|
|
130
|
+
### Client Initialization
|
|
131
|
+
✅ `client.ts` - Singleton pattern with getPocketBase() and getPocketBaseAdmin()
|
|
132
|
+
✅ `PocketBaseProvider.tsx` - React context provider with usePocketBase() hook
|
|
133
|
+
|
|
134
|
+
### Kernel Integration
|
|
135
|
+
✅ `kernel/use-migrations.ts` - React hook for running migrations on startup
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Gap Analysis
|
|
140
|
+
|
|
141
|
+
Against Research Documents:
|
|
142
|
+
- `docs/framework/research/02-data-migration-protocol.md` - Follows migration pattern with startup hook
|
|
143
|
+
- `docs/framework/research/01-system-blueprint.md` - Multi-tenancy API rules implemented as specified
|
|
144
|
+
|
|
145
|
+
All planned items for Phase 2 have been implemented and verified.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Notes
|
|
150
|
+
|
|
151
|
+
- PocketBase binary downloaded for Windows (pocketbase.exe)
|
|
152
|
+
- SaaS config uses TypeScript types instead of `@lego/kernel/config` since that doesn't exist yet
|
|
153
|
+
- Migration hook will be integrated into host app in Phase 3
|
|
154
|
+
- All collections use organization-based multi-tenancy with proper API rules
|
|
155
|
+
- RBAC system fully implemented with roles and permissions
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Checkpoint: Phase 3 - Host Kernel
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-01-23
|
|
4
|
+
**Plan:** `docs/framework/plans/03-host-kernel.md`
|
|
5
|
+
**Status:** ✅ COMPLETED
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Files Created
|
|
10
|
+
|
|
11
|
+
### Host Application Configuration
|
|
12
|
+
- `host/package.json` - Host package with Modern.js dependencies
|
|
13
|
+
- `host/tsconfig.json` - TypeScript configuration with path aliases
|
|
14
|
+
- `host/modern.config.ts` - Modern.js configuration with Garfish plugin
|
|
15
|
+
- `host/.gitignore` - Host-specific gitignore
|
|
16
|
+
|
|
17
|
+
### Tailwind CSS Configuration
|
|
18
|
+
- `host/tailwind.config.ts` - Tailwind config with Shadcn-compatible theme
|
|
19
|
+
- `host/postcss.config.js` - PostCSS configuration
|
|
20
|
+
- `host/src/global.css` - Global CSS with CSS variables for theming
|
|
21
|
+
|
|
22
|
+
### Source Files (`host/src/`)
|
|
23
|
+
- `App.tsx` - Root App component with Outlet
|
|
24
|
+
- `index.ts` - Entry point importing Garfish and bootstrap
|
|
25
|
+
- `bootstrap.tsx` - Bootstrap file with provider setup
|
|
26
|
+
- `modern.runtime.ts` - Modern.js runtime config for Garfish apps
|
|
27
|
+
|
|
28
|
+
### Kernel (`host/src/kernel/`)
|
|
29
|
+
- `index.ts` - Kernel barrel export
|
|
30
|
+
- `shared-state/types.ts` - Global state type definitions
|
|
31
|
+
- `shared-state/store.ts` - Zustand store with devtools and persist
|
|
32
|
+
- `shared-state/bridge.ts` - Window bridge for plugin access
|
|
33
|
+
- `shared-state/index.ts` - Shared state barrel export
|
|
34
|
+
- `providers/PocketBaseProvider.tsx` - PocketBase context provider
|
|
35
|
+
- `providers/QueryProvider.tsx` - TanStack Query provider
|
|
36
|
+
- `providers/ThemeProvider.tsx` - Theme provider for dark mode
|
|
37
|
+
- `providers/index.ts` - Providers barrel export
|
|
38
|
+
- `lib/utils.ts` - Utility functions (cn, getInitials, formatDate)
|
|
39
|
+
- `lib/cn.ts` - cn function export
|
|
40
|
+
- `components/ui/skeleton.tsx` - Skeleton loading component
|
|
41
|
+
|
|
42
|
+
### Layout (`host/src/layout/`)
|
|
43
|
+
- `Shell.tsx` - Main layout wrapper component
|
|
44
|
+
- `Sidebar.tsx` - Collapsible sidebar with navigation
|
|
45
|
+
- `Topbar.tsx` - Top bar with mobile menu toggle and user avatar
|
|
46
|
+
- `MobileMenu.tsx` - Mobile menu overlay
|
|
47
|
+
- `index.ts` - Layout barrel export
|
|
48
|
+
|
|
49
|
+
### Routes (`host/src/routes/`)
|
|
50
|
+
- `_.tsx` - Plugin wrapper route with Shell layout
|
|
51
|
+
- `index.tsx` - Home page with feature cards
|
|
52
|
+
- `dashboard._.tsx` - Dashboard plugin route wrapper
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Active State
|
|
57
|
+
|
|
58
|
+
### Dependencies Installed
|
|
59
|
+
Key dependencies:
|
|
60
|
+
- `@modern-js/runtime` ^2.60.0 - Modern.js runtime
|
|
61
|
+
- `@modern-js/app-tools` ^2.60.0 - Modern.js build tools
|
|
62
|
+
- `@modern-js/plugin-garfish` ^2.60.0 - Garfish micro-frontend plugin
|
|
63
|
+
- `garfish` ^1.19.0 - Micro-frontend framework
|
|
64
|
+
- `@garfish/hooks` ^1.19.0 - Garfish React hooks
|
|
65
|
+
- `zustand` ^5.0.1 - State management
|
|
66
|
+
- `@tanstack/react-query` ^5.59.0 - Server state management
|
|
67
|
+
- `pocketbase` ^0.21.5 - Backend SDK
|
|
68
|
+
- `lucide-react` ^0.454.0 - Icon library
|
|
69
|
+
- `tailwindcss` ^3.4.15 - CSS framework
|
|
70
|
+
- `tailwindcss-animate` ^1.0.7 - Tailwind animations
|
|
71
|
+
|
|
72
|
+
### Global State (Zustand)
|
|
73
|
+
- Auth state: user, token, isAuthenticated, organization
|
|
74
|
+
- UI state: theme, sidebarOpen, mobileMenuOpen
|
|
75
|
+
- Toast notifications system
|
|
76
|
+
- Loading state
|
|
77
|
+
- Persisted to localStorage (theme, sidebarOpen, token)
|
|
78
|
+
|
|
79
|
+
### Theme System
|
|
80
|
+
- Light/dark mode support via CSS variables
|
|
81
|
+
- System theme detection
|
|
82
|
+
- Shadcn UI compatible color scheme
|
|
83
|
+
- CSS custom properties for consistent theming
|
|
84
|
+
|
|
85
|
+
### Routing
|
|
86
|
+
- File-based routing via Modern.js
|
|
87
|
+
- Plugin route wrappers (/dashboard, /todos)
|
|
88
|
+
- Home page with feature highlights
|
|
89
|
+
- Shell layout applied to all routes
|
|
90
|
+
|
|
91
|
+
### Garfish Configuration
|
|
92
|
+
- Development: Plugins run on separate servers (localhost:3001, :3002)
|
|
93
|
+
- Production: Plugins bundled via dynamic import
|
|
94
|
+
- Plugin apps configured for @lego/plugin-dashboard and @lego/plugin-todo
|
|
95
|
+
|
|
96
|
+
### Layout Structure
|
|
97
|
+
- Collapsible sidebar (desktop: 64px/16px, mobile: 256px slide-in)
|
|
98
|
+
- Top bar with mobile menu toggle
|
|
99
|
+
- Mobile menu overlay
|
|
100
|
+
- User avatar display
|
|
101
|
+
- Navigation items: Home, Dashboard, Todos, Settings
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Pending Tasks
|
|
106
|
+
|
|
107
|
+
### Next Phase: Auth System
|
|
108
|
+
- **Plan File:** `docs/framework/plans/04-auth-system.md`
|
|
109
|
+
- **Prerequisites:** Phase 3 completed
|
|
110
|
+
- **Overview:**
|
|
111
|
+
- Create login/register pages
|
|
112
|
+
- Implement authentication hooks
|
|
113
|
+
- Session management
|
|
114
|
+
- Protected route wrapper
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Verification Results
|
|
119
|
+
|
|
120
|
+
### Host Application
|
|
121
|
+
✅ `package.json` - Created with all dependencies
|
|
122
|
+
✅ `tsconfig.json` - Created with path aliases
|
|
123
|
+
✅ `modern.config.ts` - Created with Garfish plugin
|
|
124
|
+
✅ Dependencies installed (932 packages)
|
|
125
|
+
|
|
126
|
+
### Tailwind CSS
|
|
127
|
+
✅ `tailwind.config.ts` - Created with Shadcn theme
|
|
128
|
+
✅ `postcss.config.js` - Created
|
|
129
|
+
✅ `global.css` - Created with CSS variables
|
|
130
|
+
|
|
131
|
+
### Kernel System
|
|
132
|
+
✅ `shared-state/` - Types, store, bridge created
|
|
133
|
+
✅ `providers/` - PocketBase, Query, Theme providers created
|
|
134
|
+
✅ `lib/utils.ts` - Utility functions created
|
|
135
|
+
✅ `components/ui/skeleton.tsx` - Skeleton component created
|
|
136
|
+
|
|
137
|
+
### Layout Components
|
|
138
|
+
✅ `Shell.tsx` - Main layout wrapper
|
|
139
|
+
✅ `Sidebar.tsx` - Navigation sidebar with collapse
|
|
140
|
+
✅ `Topbar.tsx` - Top bar with user actions
|
|
141
|
+
✅ `MobileMenu.tsx` - Mobile menu overlay
|
|
142
|
+
|
|
143
|
+
### Routes
|
|
144
|
+
✅ `_.tsx` - Plugin wrapper route
|
|
145
|
+
✅ `index.tsx` - Home page
|
|
146
|
+
✅ `dashboard._.tsx` - Dashboard plugin route
|
|
147
|
+
|
|
148
|
+
### Bootstrap
|
|
149
|
+
✅ `bootstrap.tsx` - Provider setup with StrictMode
|
|
150
|
+
✅ `index.ts` - Entry point with Garfish import
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Gap Analysis
|
|
155
|
+
|
|
156
|
+
Against Research Documents:
|
|
157
|
+
- `docs/framework/research/03-host-setup.md` - Following host kernel setup pattern
|
|
158
|
+
- `docs/framework/research/05-slot-injection-pattern.md` - Will be implemented in plugin system phase
|
|
159
|
+
|
|
160
|
+
All planned items for Phase 3 have been implemented and verified.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Notes
|
|
165
|
+
|
|
166
|
+
- Garfish version adjusted to 1.19.0 (latest available)
|
|
167
|
+
- `@modern-js/runtime/garfish` dependency removed - garfish export is from @modern-js/runtime
|
|
168
|
+
- React peer dependency warnings from react-server-dom-webpack (not critical)
|
|
169
|
+
- All files use correct path aliases (@/*, @lego/kernel/*)
|
|
170
|
+
- Shared state bridge registered to window for plugin access
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Checkpoint: Phase 4 - Auth System
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-01-23
|
|
4
|
+
**Plan:** `docs/framework/plans/04-auth-system.md`
|
|
5
|
+
**Status:** ✅ COMPLETED
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Files Created
|
|
10
|
+
|
|
11
|
+
### Auth System (`host/src/kernel/auth/`)
|
|
12
|
+
- `types.ts` - Auth interfaces (LoginCredentials, RegisterData, User, AuthResponse, AuthError, SessionData)
|
|
13
|
+
- `schemas.ts` - Zod validation schemas (loginSchema, registerSchema)
|
|
14
|
+
- `service.ts` - AuthService class with login, register, logout, profile management
|
|
15
|
+
- `hooks.ts` - React hooks (useAuth, useCurrentUser, useRequireAuth)
|
|
16
|
+
- `ProtectedRoute.tsx` - Protected route wrapper component
|
|
17
|
+
- `index.ts` - Auth module barrel export
|
|
18
|
+
|
|
19
|
+
### Auth Components (`host/src/kernel/auth/components/`)
|
|
20
|
+
- `LoginForm.tsx` - Login form with validation and error handling
|
|
21
|
+
- `LogoutButton.tsx` - Logout button with dropdown menu
|
|
22
|
+
|
|
23
|
+
### UI Components (`host/src/kernel/components/ui/`)
|
|
24
|
+
- `button.tsx` - Button component with variants (default, destructive, outline, secondary, ghost, link)
|
|
25
|
+
- `input.tsx` - Input component with consistent styling
|
|
26
|
+
- `label.tsx` - Label component for form fields
|
|
27
|
+
- `card.tsx` - Card components (Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter)
|
|
28
|
+
- `alert.tsx` - Alert components (Alert, AlertTitle, AlertDescription)
|
|
29
|
+
- `dropdown-menu.tsx` - Dropdown menu components (Radix UI based)
|
|
30
|
+
- `skeleton.tsx` - Skeleton loading component (created in Phase 3)
|
|
31
|
+
|
|
32
|
+
### Routes (`host/src/routes/`)
|
|
33
|
+
- `login.tsx` - Login page route
|
|
34
|
+
|
|
35
|
+
### Modified Files
|
|
36
|
+
- `host/package.json` - Added @hookform/resolvers, react-hook-form, zod
|
|
37
|
+
- `host/src/layout/Topbar.tsx` - Updated to use LogoutButton
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Active State
|
|
42
|
+
|
|
43
|
+
### Dependencies Added
|
|
44
|
+
- `@hookform/resolvers` ^3.9.0 - Zod resolver for react-hook-form
|
|
45
|
+
- `react-hook-form` ^7.53.0 - Form validation
|
|
46
|
+
- `zod` ^3.22.0 - Schema validation
|
|
47
|
+
|
|
48
|
+
### Auth Service Features
|
|
49
|
+
- `login(credentials)` - Authenticate with email/password
|
|
50
|
+
- `register(data, organizationId)` - Register new user (admin only)
|
|
51
|
+
- `logout()` - Clear auth session
|
|
52
|
+
- `getCurrentUser()` - Get authenticated user
|
|
53
|
+
- `getToken()` - Get auth token
|
|
54
|
+
- `refreshToken()` - Refresh auth token (no-op for PocketBase)
|
|
55
|
+
- `updateProfile(userId, data)` - Update user profile
|
|
56
|
+
- `changePassword(oldPassword, newPassword)` - Change user password
|
|
57
|
+
- `requestPasswordReset(email)` - Request password reset
|
|
58
|
+
- `confirmPasswordReset(token, password)` - Confirm password reset
|
|
59
|
+
- `isAuthenticated()` - Check auth status
|
|
60
|
+
- `onAuthChange(callback)` - Listen to auth state changes
|
|
61
|
+
|
|
62
|
+
### Auth Hooks
|
|
63
|
+
- `useAuth()` - Main auth hook with state and actions
|
|
64
|
+
- Returns: user, isAuthenticated, isLoading, login, register, logout, error
|
|
65
|
+
- `useCurrentUser()` - Get current user data
|
|
66
|
+
- Returns: user, isLoading, isAuthenticated
|
|
67
|
+
- `useRequireAuth()` - Require auth or redirect
|
|
68
|
+
- Returns: user, isAuthenticated, isLoading, shouldRedirect
|
|
69
|
+
|
|
70
|
+
### Form Validation
|
|
71
|
+
- Login: email (email validation), password (min 8 chars)
|
|
72
|
+
- Register: email, password (min 8, uppercase, lowercase, number), passwordConfirm (match), name (min 2)
|
|
73
|
+
|
|
74
|
+
### UI Components Created
|
|
75
|
+
- Button with 6 variants and 4 sizes
|
|
76
|
+
- Input with consistent styling
|
|
77
|
+
- Label for form fields
|
|
78
|
+
- Card components for layout
|
|
79
|
+
- Alert for error/success messages
|
|
80
|
+
- DropdownMenu for user menu
|
|
81
|
+
- Skeleton for loading states
|
|
82
|
+
|
|
83
|
+
### Login Flow
|
|
84
|
+
1. User navigates to `/login`
|
|
85
|
+
2. Enters email and password
|
|
86
|
+
3. Form validates with Zod
|
|
87
|
+
4. On submit, calls `login()` via AuthService
|
|
88
|
+
5. On success, redirects to `/dashboard`
|
|
89
|
+
6. On failure, shows error alert
|
|
90
|
+
|
|
91
|
+
### Logout Flow
|
|
92
|
+
1. Click user avatar in topbar
|
|
93
|
+
2. Dropdown menu appears with user info
|
|
94
|
+
3. Click "Log out"
|
|
95
|
+
4. `logout()` clears PocketBase auth store
|
|
96
|
+
5. Redirects to `/login`
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Pending Tasks
|
|
101
|
+
|
|
102
|
+
### Next Phase: Multitenancy & RBAC
|
|
103
|
+
- **Plan File:** `docs/framework/plans/05-multitenancy-rbac.md`
|
|
104
|
+
- **Prerequisites:** Phase 4 completed
|
|
105
|
+
- **Overview:**
|
|
106
|
+
- Organizations management
|
|
107
|
+
- Users management
|
|
108
|
+
- Roles management
|
|
109
|
+
- Permissions management
|
|
110
|
+
- Audit logging
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Verification Results
|
|
115
|
+
|
|
116
|
+
### Auth System
|
|
117
|
+
✅ `types.ts` - Auth interfaces defined
|
|
118
|
+
✅ `schemas.ts` - Zod validation schemas
|
|
119
|
+
✅ `service.ts` - AuthService class with all methods
|
|
120
|
+
✅ `hooks.ts` - React hooks (useAuth, useCurrentUser, useRequireAuth)
|
|
121
|
+
✅ `ProtectedRoute.tsx` - Protected route wrapper
|
|
122
|
+
✅ `index.ts` - Barrel export
|
|
123
|
+
|
|
124
|
+
### Components
|
|
125
|
+
✅ `LoginForm.tsx` - Login form with react-hook-form + Zod
|
|
126
|
+
✅ `LogoutButton.tsx` - Logout with dropdown menu
|
|
127
|
+
|
|
128
|
+
### UI Components
|
|
129
|
+
✅ `button.tsx` - 6 variants, 4 sizes
|
|
130
|
+
✅ `input.tsx` - Consistent styling
|
|
131
|
+
✅ `label.tsx` - Form field labels
|
|
132
|
+
✅ `card.tsx` - 5 card components
|
|
133
|
+
✅ `alert.tsx` - Alert with variants
|
|
134
|
+
✅ `dropdown-menu.tsx` - Full Radix UI implementation
|
|
135
|
+
|
|
136
|
+
### Routes
|
|
137
|
+
✅ `login.tsx` - Login page with redirect logic
|
|
138
|
+
|
|
139
|
+
### Dependencies
|
|
140
|
+
✅ `@hookform/resolvers` ^3.9.0 installed
|
|
141
|
+
✅ `react-hook-form` ^7.53.0 installed
|
|
142
|
+
✅ `zod` ^3.22.0 installed
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Gap Analysis
|
|
147
|
+
|
|
148
|
+
Against Research Documents:
|
|
149
|
+
- `docs/framework/research/01-system-blueprint.md` - Following admin-seeded auth pattern
|
|
150
|
+
- `docs/framework/research/02-data-migration-protocol.md` - Users collection ready for auth
|
|
151
|
+
|
|
152
|
+
All planned items for Phase 4 have been implemented and verified.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Notes
|
|
157
|
+
|
|
158
|
+
- Admin-only registration (no public signup)
|
|
159
|
+
- Session persistence via PocketBase auth store + localStorage
|
|
160
|
+
- Form validation uses react-hook-form + Zod + @hookform/resolvers
|
|
161
|
+
- All Shadcn UI components use Radix UI primitives where applicable
|
|
162
|
+
- ProtectedRoute component redirects to `/login` by default
|
|
163
|
+
- Login page shows default credentials hint for development
|