https://github.com/schemalabz/opencouncil
Making local government more transparent and accessible
https://github.com/schemalabz/opencouncil
civic-tech local-government transcripts transparency
Last synced: 19 days ago
JSON representation
Making local government more transparent and accessible
- Host: GitHub
- URL: https://github.com/schemalabz/opencouncil
- Owner: schemalabz
- License: agpl-3.0
- Created: 2024-09-08T09:30:03.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2026-03-04T19:10:00.000Z (24 days ago)
- Last Synced: 2026-03-04T20:46:49.977Z (24 days ago)
- Topics: civic-tech, local-government, transcripts, transparency
- Language: TypeScript
- Homepage: https://opencouncil.gr
- Size: 12.8 MB
- Stars: 37
- Watchers: 2
- Forks: 19
- Open Issues: 77
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# OpenCouncil
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.
## About the Project
OpenCouncil is developed by [Schema Labs](https://schemalabs.gr), 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**](./docs/guides/meeting-highlights.md): Create and share custom video clips from council meeting moments, with automatic generation and editing capabilities
- π **Diavgeia Integration**: Link council decisions with their official publications on [Diavgeia](https://diavgeia.gov.gr/), Greece's government transparency portal
- π **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
- π¬ **Discord Integration**: Real-time admin alerts for system events
- π **Multilingual Support**: (Coming Soon) Support for multicultural cities
## Technical Architecture
This is a [Next.js](https://nextjs.org/) 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](https://github.com/schemalabz/opencouncil-tasks), for media processing and AI features. For details, see the [Task Workflow Architecture](./docs/task-architecture.md).
### Prerequisites
- Node.js 18+ and npm
- PostgreSQL 14+ with the postgis extensions
- Docker (optional, but recommended)
- Nix (optional, recommended for the flake-based setup)
## Contributing
We welcome contributions from the community! Please read our [contributing guidelines](./CONTRIBUTING.md) 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.
### Development Setup
Copy the example environment file:
```bash
cp .env.example .env
```
Then edit the file to include your specific configuration values.
#### Nix (Flakes) Setup
OpenCouncil supports a flake-based dev environment (recommended on NixOS, supported on macOS/Linux).
Enter the dev shell:
```bash
nix develop
```
Once youβre in the dev shell, follow the [Nix Usage Guide](./docs/nix-usage.md) for how to install Nix (if needed), run the dev runner, choose DB modes, and use the `process-compose` UI.
#### Docker Setup (Recommended)
The easiest way to get started is using our Docker setup:
Start the application with the local database:
```bash
./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](./docs/docker-usage.md).
>
> For a full list of required environment variables and instructions on how to generate secure values (such as `NEXTAUTH_SECRET`), see [Environment Variables Reference](./docs/environment-variables.md).
#### Manual Setup
If you prefer to run without Docker:
1. Install dependencies:
```bash
npm install
```
2. Set up your database connection:
- For local development, you can use the dockerized PostgreSQL database:
```bash
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:
```
DATABASE_URL="postgresql://user:password@host:port/database"
```
The database must have the `postgis` extension installed.
3. Set up the database:
```bash
# Run migrations
npx prisma migrate deploy
# Generate Prisma client
npx prisma generate
# Optionally, seed the database with sample data
npx prisma db seed
```
4. Start the development server:
```bash
npm run dev
```
## Database & Development Tools
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](./docs/database-seeding.md).