Track Portuguese Parliament performance with transparency.
Adamastor collects public data from the Portuguese Parliament and calculates performance metrics for each deputy:
- Proposals - Bills and legislative initiatives authored
- Interventions - Speeches and participation in debates
- Attendance - Presence at plenary meetings
- Questions - Parliamentary questions submitted
Each deputy gets a Work Score and letter grade (A-F) based on their activity compared to the average.
Note: This project measures activity, not ideology. We don't rate deputies on their political positions.
# Prerequisites: Bun, Docker
git clone https://github.com/bcamarneiro/adamastor.git
cd adamastor
bun install
# Start local database
npx supabase start
# Run the web app
bun devTo populate with data, see CONTRIBUTING.md.
| Document | What it covers |
|---|---|
| ARCHITECTURE.md | How the system works - data flow, transforms, database |
| CONTRIBUTING.md | Setup guide, development workflow, how to contribute |
| TESTING.md | How to test the platform and report bugs |
| docs/AI_AGENTS.md | Guidelines for AI agents and AI-assisted development |
adamastor/
├── apps/
│ ├── watcher/ # Data pipeline - fetches & transforms Parliament data
│ └── web/ # React frontend - displays deputy performance
├── packages/
│ └── shared/ # Shared TypeScript types
└── supabase/ # Database migrations and seed data
Parliament API ──→ Watcher ──→ Supabase ──→ Web App ──→ Browser
(public data) (daily job) (database) (React) (you)
Watcher runs daily via GitHub Actions, fetching Parliament data and transforming it. Web is a React app that reads from Supabase and displays deputy performance.
| Feature | Description |
|---|---|
| Report Card | Enter your postal code → see your deputies' grades |
| Rankings | National and district leaderboards |
| Battle | Compare two deputies head-to-head |
| Waste Calculator | See the cost of underperformance |
| Layer | Technology |
|---|---|
| Runtime | Bun |
| Frontend | React 19, Vite, Tailwind CSS v4 |
| Database | Supabase (PostgreSQL) |
| Pipeline | GitHub Actions |
| Hosting | Vercel |
All data comes from official Parliament sources:
- Open Data API (deputies, initiatives, activities)
- Parliament website (attendance, biographies - scraped)
Data updates daily at 06:00 UTC.
This project is non-partisan. We measure activity metrics only:
✓ How many proposals a deputy authored ✓ How many times they spoke in Parliament ✓ Whether they attended plenary sessions
✗ We do not rate political positions ✗ We do not endorse any party
Want to help improve Adamastor? No coding required!
We're looking for testers to explore the platform and report bugs, UX issues, or suggest improvements.
👉 Start Testing - Complete guide in Portuguese
What to test:
- Desktop & mobile experience
- All pages (Rankings, Battle Royale, Deputy Profiles, etc.)
- Report anything confusing or broken
Where to report:
- 🐛 Bug reports
- 💡 Suggestions
- ❓ Questions
- Fork the repo
- Create branch from
staging:git checkout -b fix/my-fix - Make changes, test locally (
bun dev) - Submit PR to
staging
See CONTRIBUTING.md for detailed setup.
This repository is optimized for AI collaboration (Cursor, GitHub Copilot, Claude Code). See docs/AI_AGENTS.md for:
- Guidelines for AI-assisted development
- Best practices for writing prompts
- Monorepo-specific patterns
- Testing and code quality standards
MIT