Welcome to OpenCouncil - an open-source platform making local government more transparent and accessible. This project aims to digitize, transcribe, and make municipal council meetings searchable, helping citizens engage with their local government.
OpenCouncil is developed by Schema Labs, a non-profit organization building technology to strengthen democracy.
- 🎙️ Automatic Transcription: Word-for-word transcription of council meetings with speaker recognition
- 🎯 Voice Recognition: Speaker identification using voiceprints
- 📝 Smart Summaries: AI-generated summaries of council member statements
- 🔍 Advanced Search: Full-text search across all council meetings
- 📊 Subject Analysis: Automatic categorization of discussion subjects
- 📢 Notification System: Personalized updates for citizens
- 🎥 Meeting Highlights: Create and share custom video clips from council meeting moments, with automatic generation and editing capabilities
- 🌐 Open Data: All data available through a public API
- 🔐 Role-Based Access: Granular permissions for different user types
- 🤖 AI Chat Assistant: Ask questions about council meetings
- 🌍 Multilingual Support: (Coming Soon) Support for multicultural cities
This is a Next.js web application:
- Frontend: Next.js with TypeScript
- Database: PostgreSQL
- Data Models: Prisma ORM for type-safe database access
- Tasks: This Next.js app calls the backend task server, for media processing and AI features. For details, see the Task Workflow Architecture.
- Node.js 18+ and npm
- PostgreSQL 14+ with the postgis extensions
- Docker (optional, but recommended)
We welcome contributions from the community! Please read our contributing guidelines to get started. Our contributor workflow is designed around a human-AI co-creation partnership, and the guidelines will walk you through the process.
To get started, you'll need to set up the project on your local machine.
Copy the example environment file:
cp .env.example .env
Then edit the file to include your specific configuration values.
The easiest way to get started is using our Docker setup:
Start the application with the local database:
./run.sh
This will automatically:
- Start the dockerized PostgreSQL database
- Apply database migrations
- Seed the database with sample data
- Run the application in development mode
Note:
For more advanced Docker configuration options, see Docker Usage Guide.For a full list of required environment variables and instructions on how to generate secure values (such as
NEXTAUTH_SECRET
), see Environment Variables Reference.
If you prefer to run without Docker:
-
Install dependencies:
npm install
-
Set up your database connection:
- For local development, you can use the dockerized PostgreSQL database:
docker compose up db -d
- Alternatively, you can connect to any PostgreSQL database (local or remote) by setting the
DATABASE_URL
environment variable in your.env
file:The database must have theDATABASE_URL="postgresql://user:password@host:port/database"
postgis
extension installed.
- For local development, you can use the dockerized PostgreSQL database:
-
Set up the database:
# Run migrations npx prisma migrate deploy # Generate Prisma client npx prisma generate # Optionally, seed the database with sample data npx prisma db seed
-
Start the development server:
npm run dev
The database is automatically seeded with sample data and test users during setup. The seed data provides a realistic development environment while excluding sensitive information.
During seeding, if a local prisma/seed_data.json
file doesn't exist, it will be automatically downloaded from the project's GitHub repository.
For detailed information about database seeding and test user management, see Database Seeding Guide.