- Rewrote Drizzle schema: 20 tables with enums, relations, indexes - Generated migration with DROP TABLE records (v1 EAV removal) - Added passkey auth routes (register/login) - Added requireWorkspaceAccess helper - Added seedDefaultData for Personal workspace + welcome note - Updated SSE endpoint for v2 entities + workspace_id filtering - Created recordActivity helper (insert + pg_notify) - Updated sidebar: Graph replaces Reports, removed Analytics - Updated command palette for v2 entities - Created AGENTS.md with locked contract - Created llm-wiki scaffold (5 stubs) - Added inline AGENT INSTRUCTION comments to all 50 API route files - Fixed globals.css border-border class conflict - Updated database.ts stub for v1 compatibility
1.5 KiB
1.5 KiB
Architecture
System Overview
Project E is a full-stack personal productivity OS with realtime collaboration, AI agent integration, and keyboard-driven UI.
Three-Layer Architecture
Frontend (Next.js React) → Next.js API Routes (business logic) → PostgreSQL (data store)
│ │
│ ├── NOTIFY (on write)
│ │
└── SSE (EventSource) ←────────┘
Data Flow
- User action → API route → Drizzle write →
pg.notify()→ SSE endpoint → Zustand store → UI update - External agent → MCP tool call → API route → Drizzle write →
pg.notify()→ SSE → UI update - Worker → webhook delivery / recurring spawn → API route → Drizzle write →
pg.notify()→ SSE → UI update
Container Layout
- project-e-web — Next.js 15 (App Router), frontend + REST API + MCP + SSE
- project-e-db — PostgreSQL 16, all data + LISTEN/NOTIFY
- project-e-worker — Node.js worker, webhook delivery + recurring spawning + AI dispatch
Monorepo Structure
ProjectE/
├── apps/
│ ├── web/ # Next.js 15 app
│ └── worker/ # Node.js worker process
├── packages/
│ ├── db/ # Drizzle schema + connection
│ └── shared/ # Shared types, schemas, constants
├── docker-compose.yml
├── AGENTS.md
└── llm-wiki/