AI-powered meeting intelligence platform for enterprise board governance. Provides real-time transcription, insights, action item detection, and meeting summarization.
- Pre-Meeting Preparation: Agenda management, briefing documents, AI-generated prep questions
- Live Meeting Support: Real-time transcription, AI insights, action/decision detection
- Post-Meeting Summary: Automated summaries, action item tracking, decision records
- AI Agents: Transcriber (Recall.ai), Advisor (OpenAI), TTS (ElevenLabs)
- Multi-tenancy: Support for multiple organizations with isolated data
- Frontend: Next.js 14, React 18, Tailwind CSS, ShadCN UI
- Backend: Node.js, Express, Socket.io, Prisma ORM
- Database: PostgreSQL
- AI Services: Recall.ai (transcription), OpenAI (advisor), ElevenLabs (TTS)
- Styling: IBM Plex Sans/Mono fonts, enterprise design system
⚠️ IMPORTANT: Non-Standard PortsBoard Observer uses non-standard ports to avoid conflicts with other local projects:
Service Port Default Frontend 4280 3000 Backend 4281 3001 PostgreSQL 5481 5432 These ports are configured in:
.env.example/.env.local(frontend)backend/.env.example/backend/.env(backend)backend/docker-compose.yml(database)docker-compose.yml(full stack)
- Node.js 20+ (see
.nvmrc) - Docker & Docker Compose
- npm or yarn
# Complete setup (install deps, start db, seed data)
make setup
# Start development servers
make dev# 1. Install dependencies
npm ci
cd backend && npm ci
# 2. Copy environment files
cp .env.example .env.local
cp backend/.env.example backend/.env
# 3. Start PostgreSQL (port 5481)
cd backend && docker compose up -d
# 4. Setup database schema and seed data
cd backend && npx prisma generate
cd backend && npx prisma db push
cd backend && npm run db:seed
# 5. Start development servers (in separate terminals)
PORT=4280 npm run dev # Frontend: http://localhost:4280
cd backend && PORT=4281 npm run dev # Backend: http://localhost:4281# Build and start all services
docker compose up -d
# Or use Make
make docker-upcp .env.example .env.local
cp backend/.env.example backend/.env# Backend API URL (port 4281)
NEXT_PUBLIC_API_URL=http://localhost:4281# Database (port 5481 to avoid conflicts)
DATABASE_URL="postgresql://postgres:postgres@localhost:5481/board_observer?schema=public"
# Server ports
PORT=4281
FRONTEND_URL=http://localhost:4280
# AI Mode (true for development, false for production)
AI_MOCK_ENABLED=true
# For production, configure these API keys:
# RECALL_API_KEY=your-recall-api-key
# OPENAI_API_KEY=your-openai-api-key
# ELEVENLABS_API_KEY=your-elevenlabs-api-keySee backend/.env.example for all configuration options.
# Start PostgreSQL container (port 5481)
cd backend && docker compose up -d
# Generate Prisma client
cd backend && npx prisma generate
# Push schema to database
cd backend && npx prisma db push
# Seed with sample data
cd backend && npm run db:seedThe seed script (backend/prisma/seed.ts) creates:
- 5 Organizations: Emirates Post, Abu Dhabi Dept of Finance, Abu Dhabi Dept of Health, Abu Dhabi Dept of Government Enablement, Mubadala Investment Company
- Admin User:
admin@boardobserver.aiwith access to all organizations - 9 Attendees per org: Board members, executives, and advisors
- 3 Meetings per org: Live, upcoming, and completed meetings
- Sample Data: Agenda items, decisions, action items, transcripts
# Reset and re-seed (drops all data)
cd backend && npx prisma migrate reset
# Or just re-seed (adds to existing data)
cd backend && npm run db:seed# Open Prisma Studio (visual database browser)
make db-studio
# or: cd backend && npx prisma studio
# View database directly
docker exec -it board-observer-postgres psql -U postgres -d board_observer| Command | Description |
|---|---|
make setup |
Complete project setup (install, db, seed) |
make dev |
Start frontend (4280) + backend (4281) |
make db-start |
Start PostgreSQL on port 5481 |
make db-stop |
Stop PostgreSQL container |
make db-setup |
Push schema + seed database |
make db-seed |
Re-seed database with sample data |
make db-studio |
Open Prisma Studio (visual DB browser) |
make lint |
Run all linters |
make build |
Build for production |
make docker-up |
Start full stack with Docker |
make docker-down |
Stop Docker services |
make clean |
Clean build artifacts |
Frontend:
npm run dev- Start development servernpm run build- Build for productionnpm run lint- Run ESLint
Backend:
npm run dev- Start with hot reloadnpm run build- Compile TypeScriptnpm run db:seed- Seed databasenpm run db:studio- Open Prisma Studio
board-observer/
├── app/ # Next.js app directory
│ └── (meetings)/ # Meeting routes
│ ├── [id]/
│ │ ├── prepare/ # Pre-meeting prep
│ │ ├── live/ # Live meeting view
│ │ └── summary/ # Post-meeting summary
│ └── page.tsx # Meetings list
├── backend/
│ ├── src/
│ │ ├── routes/ # API endpoints
│ │ ├── services/ai/ # AI services (mocked)
│ │ └── websocket/ # Real-time events
│ └── prisma/
│ ├── schema.prisma # Database schema
│ └── seed.ts # Seed data
├── components/
│ ├── forms/ # CRUD forms
│ ├── layout/ # App shell
│ ├── live/ # Live meeting components
│ ├── post/ # Post-meeting components
│ └── prepare/ # Pre-meeting components
├── lib/
│ ├── api/ # API client
│ ├── hooks/ # React hooks
│ └── mock-data/ # Mock data for development
├── docker-compose.yml # Full stack Docker
├── Makefile # Development commands
└── AGENTS.md # AI integration guide
GET /api/meetings- List meetingsPOST /api/meetings- Create meetingGET /api/meetings/:id- Get meeting detailsPUT /api/meetings/:id- Update meetingPOST /api/meetings/:id/start- Start meetingPOST /api/meetings/:id/end- End meeting
GET /api/meetings/:id/agenda- Get agenda itemsPOST /api/meetings/:id/agenda- Add agenda itemPUT /api/meetings/:id/agenda/:itemId- Update itemDELETE /api/meetings/:id/agenda/:itemId- Delete item
GET /api/meetings/:id/transcript- Get transcriptGET /api/meetings/:id/insights- Get AI insightsGET /api/meetings/:id/detected-actions- AI-detected actions
See backend/README.md for complete API documentation.
Connect to ws://localhost:4281 for real-time updates:
transcript-update- New transcript entryinsight-generated- New AI insightaction-detected- Action item detectedagent-status-change- Agent status update
AI features are currently mocked. See AGENTS.md for:
- Integration point documentation
- Environment configuration
- Implementation guides
- WebSocket event details
To enable real AI:
- Set
AI_MOCK_ENABLED=falsein backend/.env - Configure AI service credentials
- Implement service adapters
# Open Prisma Studio
make db-studio
# or
cd backend && npx prisma studio
# Reset database
cd backend && npx prisma migrate reset
# Create migration
cd backend && npx prisma migrate dev --name your_migration_name# Lint all code
make lint
# Lint with auto-fix
npm run lint -- --fix
cd backend && npm run lint:fix# Build all
make build
# Build frontend only
npm run build
# Build backend only
cd backend && npm run build# Check if PostgreSQL is running on port 5481
docker ps | grep board-observer-postgres
# Check container logs
docker logs board-observer-postgres
# Restart database
cd backend && docker compose restart
# Test connection
cd backend && npx prisma db pullBoard Observer uses unique ports to avoid conflicts:
| Service | Port | Check Command |
|---|---|---|
| Frontend | 4280 | lsof -i :4280 |
| Backend | 4281 | lsof -i :4281 |
| PostgreSQL | 5481 | lsof -i :5481 |
If you need to change ports, update these files:
.env.local→NEXT_PUBLIC_API_URLbackend/.env→DATABASE_URL,PORT,FRONTEND_URLbackend/docker-compose.yml→ db port mappingdocker-compose.yml→ all service portsMakefile→ port references in commands
# Stop all containers
make docker-down
cd backend && docker compose down
# Clean everything
make clean
# Fresh setup
make setup"Cannot connect to database"
- Ensure PostgreSQL is running:
docker ps | grep postgres - Verify port 5481 is not in use:
lsof -i :5481 - Check DATABASE_URL in
backend/.env
"EADDRINUSE" error
- Another process is using the port
- Kill the process:
kill $(lsof -t -i:4280)orkill $(lsof -t -i:4281)
"Prisma schema out of sync"
cd backend && npx prisma db push --force-reset
cd backend && npm run db:seed# Run backend tests
cd backend && npm test
# Run frontend tests
npm test
# Run with coverage
cd backend && npm run test:coverage
npm run test:coverageSee AGENTS.md for AI service configuration and production setup.
# Build for production
make build
# Run with Docker
docker compose -f docker-compose.prod.yml up -dProprietary - All rights reserved.