Coordra is an AI-assisted workspace for coordinating projects, people, and priorities.
It combines tenant-safe project delivery, live collaboration, and accountable actions with
Pulse: one workspace-scoped assistant that answers from verified facts and prepares writes
for explicit approval.
The landing preview shows the core interaction: a member asks Pulse what needs attention,
Pulse summarizes deterministic risk conditions, and an editable proposal remains visibly
pending until approval. Inside the product, Ask Pulse opens a right-side desktop drawer
or full-screen mobile dialog while preserving the active workspace and project context.
sequenceDiagram
participant Member
participant Pulse
participant Domain as Coordra domain services
Member->>Pulse: Ask about launch risk
Pulse->>Domain: Read tenant-scoped facts
Domain-->>Pulse: Tasks, aggregates, sanitized activity
Pulse-->>Member: Cautious summary + proposed action
Member->>Domain: Review, edit, approve
Domain-->>Member: One committed mutation + audit + live refresh
flowchart LR
UI[Next.js feature UI] --> API[Express domain routes]
API --> SEC[JWT cookie · Origin · Zod · RBAC]
SEC --> DOM[Workspace domain services]
DOM --> PG[(PostgreSQL via Drizzle)]
DOM --> IO[Socket.IO rooms]
UI --> PULSE[Pulse drawer]
PULSE --> AR[Assistant route context]
AR --> GROQ[Groq via Vercel AI SDK]
GROQ --> TOOLS[Role-scoped local tools]
TOOLS --> DOM
AR --> PROP[(AI action proposals)]
Every tenant-owned lookup includes workspaceId. The AI adapter and tools never import
Drizzle; they call narrow domain reads. Conversation history is ephemeral and limited to
ten messages/12,000 characters. The raw audit endpoint remains Owner/Admin-only, while
Pulse sees sanitized activity labels and resource titles.
PENDING proposal but never execute a mutation.AI_ASSISTED_* audit record in one transaction; then emits the live event after commit.Prerequisites: Node.js 24.18+ and PostgreSQL 17 (a Neon URL also works).
npm ci
npm --prefix frontend ci
cp .env.example .env
cp frontend/.env.example frontend/.env
npm run db:migrate
DEMO_SEED_CONFIRM=coordra-demo DEMO_SEED_PASSWORD='<12+ characters>' npm run db:seed:demo
npm run dev
Run npm run frontend:dev in another terminal. The web app is athttp://localhost:3000, the API at http://localhost:8000, and Swagger athttp://localhost:8000/api-docs.
Pulse stays hidden with the default AI_ENABLED=false. To enable it on the backend:
AI_ENABLED=true
AI_PROVIDER=groq
GROQ_API_KEY=<server-only-key>
GROQ_MODEL=openai/gpt-oss-20b
AI_MAX_STEPS=4
Never expose GROQ_API_KEY to Next.js or prefix it with NEXT_PUBLIC_.
npm run verify
Verification covers formatting, backend and test type checks, unit tests, PostgreSQL HTTP
journeys, Socket.IO behavior, production audits/builds, frontend lint/type checks, and
Vitest/Testing Library interaction tests. CI never calls Groq; Pulse generation accepts a
fake model generator in tests. Integration journeys exercise tenant isolation, RBAC,
proposal edit/reject/expiry, exactly-once approval, stale permissions, audit records, and
the ordinary SaaS routes with AI disabled.
Narrowly scoped follow-ups could add streaming presentation, a shared rate-limit store,
or additional deterministic read tools. Autonomous writes, deletion tools, persistent
conversation memory, RAG, MCP, queues, external integrations, and a separate AI service
are intentionally outside this implementation.
Engineering and deployment details live in Deployment guide and
Interview guide.