Open-source web platform for exploring Kenya's parliamentary record. Every bill debated, every contribution made, every question raised in the 13th Parliament: structured, searchable, and openly available.
Built on top of odnelazm, which handles scraping, parsing, and ingesting Hansard data from mzalendo.com into a PostgreSQL database. Bunge Hub is the read layer on top of that database: a React Router v7 SSR app that queries it and presents the data.
- React Router v7: SSR, loaders, file-based routing
- postgres.js: database queries
- Tailwind CSS v4: styling
- React Flow: bill journey visualisation
- PostgreSQL: data store (populated by odnelazm-pipeline)
docker run -d \
--name bunge-hub-db \
-e POSTGRES_USER=odnelazm \
-e POSTGRES_PASSWORD=odnelazm \
-e POSTGRES_DB=odnelazm \
-p 5432:5432 \
postgres:16Install odnelazm-pipeline from the odnelazm repository:
cargo install --git https://github.com/mwananchi-tech/odnelazm odnelazm-pipelineRun the ingest pipeline to fetch the last 3 months of sittings and enrich member profiles:
odnelazm-pipeline ingest \
--start-date $(date -v-3m +%Y-%m-%d) \
--enrich-membersSee the odnelazm-ingest README for the full reference, including the enrich subcommand for AI-generated summaries.
npm installcp .env.example .envSet DATABASE_URL to your PostgreSQL connection string:
DATABASE_URL=postgres://odnelazm:odnelazm@localhost:5432/odnelazm
npm run devThe app will be available at http://localhost:5173.
npm run build # production build
npm run typecheck # TypeScript type check
npm run lint # ESLint
npm run lint:fix # ESLint with auto-fix
npm run format # Prettier check
npm run format:fix # Prettier auto-formatdocker build -t bunge-hub .
docker run -p 3000:3000 -e DATABASE_URL=postgres://... bunge-hubIssues and pull requests are welcome. The project is licensed under the GPL-3.0.