Multi-tenant AI standup dashboard built with Tambo AI. Create teams, invite members, connect Linear and GitHub via OAuth, and ask natural language questions — the AI renders interactive components on a live canvas.
Live at standup.site
standup.demo.compressed.mp4
- "Show me the team" — renders a full team overview with statuses
- "What's Sarah working on?" — pulls up her Linear issues and GitHub PRs
- "What's at risk?" — surfaces overdue, stale, and unassigned items
- "Show me a breakdown of issue status" — generates a chart
- "What did the team ship this week?" — builds a custom summary
- Conversational AI canvas — ask questions in plain English, get interactive components on an adaptive grid (up to 4 at once, dismissable, drag-to-reorder)
- Multi-tenant teams — personal workspaces, shared teams with roles (owner/member), team switching
- Invite system — shareable invite links and email invites with expiry and usage limits
- Linear + GitHub OAuth — connect accounts via WorkOS, data is fetched per-team across all members
- Member filter — focus on specific team members; filters apply across all components and AI responses
- WorkOS AuthKit — sign-in, session management, and org-level membership sync
- Install dependencies:
npm install- Copy the example env file and fill in your values:
cp example.env.local .env.local| Variable | Where to get it |
|---|---|
NEXT_PUBLIC_TAMBO_API_KEY |
tambo.co/dashboard |
WORKOS_CLIENT_ID |
WorkOS Dashboard |
WORKOS_API_KEY |
WorkOS Dashboard |
WORKOS_COOKIE_PASSWORD |
openssl rand -base64 32 |
NEXT_PUBLIC_WORKOS_REDIRECT_URI |
http://localhost:3000/api/auth/callback for local dev |
TURSO_DATABASE_URL / TURSO_AUTH_TOKEN |
Turso dashboard |
NEXT_PUBLIC_APP_URL |
Your app URL (defaults to http://localhost:3000) |
- Run database migrations:
npm run db:migrate- Verify the schema (optional):
npm run db:verify- Start the dev server:
npm run dev-
Open localhost:3000 and sign in.
-
Open Settings and connect your GitHub and Linear accounts via OAuth.
-
Create or join a team and start asking questions.
The AI decides which components to render based on your question.
| Component | Trigger | Data source |
|---|---|---|
| TeamOverview | "show me the team" | Linear team members + stats |
| PersonDetail | "what's [name] working on?" | Linear issues + GitHub PRs |
| PullRequestList | "show PRs for [repo]" | GitHub PRs by repo/org/author |
| RiskReport | "what's at risk?", "blockers" | Overdue/stale/unassigned Linear issues |
| WeeklyGoals | "what are we working on this week?" | AI-assembled from tool results |
| SummaryPanel | Any structured info request | AI-assembled (stats, sections, body text) |
| Graph | "show me a chart of..." | Recharts (bar, line, or pie) |
src/
├── app/
│ ├── page.tsx # Landing page
│ ├── app/
│ │ ├── page.tsx # App entry point
│ │ └── app-shell.tsx # Main shell + AI canvas
│ ├── invite/[token]/ # Invite link acceptance
│ └── api/
│ ├── auth/callback/ # WorkOS AuthKit callback
│ ├── teams/ # Create, delete, update, switch, join, leave, invite, members
│ ├── connections/ # GitHub/Linear OAuth status
│ ├── github/ # PR endpoints
│ └── linear/ # Issues, team, risks, cycle, search
├── components/
│ ├── tambo/ # AI-rendered canvas components
│ ├── team-settings-modal.tsx # Settings (general, invite, members, connections)
│ ├── team-switcher.tsx # Team dropdown + creation
│ ├── team-creation-form.tsx # New team form
│ └── user-header.tsx # Top bar with user profile
├── lib/
│ ├── tambo.ts # Component + tool registration
│ ├── db.ts # Kysely DB accessors (global, team-scoped, full)
│ ├── schema.ts # Database type definitions
│ ├── team-actions.ts # Team server actions
│ ├── auth-actions.ts # Auth server actions
│ └── member-filter.ts # Member filter logic
├── middleware.ts # Auth, user sync, team resolution
└── migrations/ # Database migrations (001–006)
Next.js 15 / React 19 / Tambo AI / WorkOS AuthKit / Turso + Kysely / Tailwind CSS v4 / Recharts / Zod
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run start |
Start production server |
npm run lint |
Run ESLint |
npm run lint:fix |
Run ESLint with auto-fix |
npm run db:migrate |
Run database migrations |
npm run db:verify |
Verify database schema |