Nahom Endale
Concrete Bills logo

Civic Tech

Concrete Bills

Real-time NYC legislative tracking

Visit concretebills.com

Adopted

By the NYC Comptroller's office

Claude

Summaries, FAQs & digests

Daily

Automated editorial crons

Auto

Posts to Bluesky & Threads

The Challenge

NYC's legislative data is public but practically unreadable: hundreds of bills move through Legistar in dense legal language, scattered across committees and meetings. Residents, journalists, and advocates had no easy way to see what was actually happening, or what it meant.

The Solution

Concrete Bills ingests NYC Legistar data into Supabase and makes it explorable through an Algolia-powered dashboard. A separate Node cron service on Render runs the editorial layer: it collects daily legislative actions, uses Claude to write plain-English summaries and FAQs, composes a weekly digest, indexes everything into Algolia, and auto-publishes updates to Bluesky and Threads. The Next.js app stays fast because the heavy editorial work happens on a schedule, not on request.

Features

Searchable bill dashboard

Thousands of NYC bills explorable with Algolia InstantSearch, filterable by status, committee, and sponsor.

AI bill summaries

A daily cron pulls Legistar context and uses Claude to summarize each legislative action in plain English.

Auto-generated FAQs

For significant bills, Claude writes 3 to 5 plain-English FAQs so residents can actually understand them.

Weekly digest

An automated composer groups bills into passed, in-committee, and introduced, then writes a narrative recap.

Council & committee directory

Browse every council member by borough and follow the committees moving each bill.

Auto social distribution

The pipeline composes and publishes daily legislative updates straight to Bluesky and Threads.

System Architecture

Source

NYC Legistar API

Pipeline

Cron + Claude

Store

Supabase

Index

Algolia

Distribution

Bluesky + Threads

Delivery

Next.js App

Technology Stack

Frontend & Framework

Next.js 15 (App Router)ReactTailwindZustandEmbla

Search & Data

Algolia InstantSearchSupabase (Postgres)Clerk AuthNYC Legistar API

Editorial Crons (Render)

Claude (Haiku & Sonnet)Node + p-limitPDF/DOCX parsingAlgolia indexing

Distribution & SEO

Bluesky (AT Protocol)Threads APIIndexNow + RSSPostHog

Key Learnings

  • Splitting editorial work into a separate cron service kept the app fast while AI summaries, FAQs, and digests generate on a schedule.
  • Grounding Claude in fetched Legistar context produced accurate, plain-English summaries residents could trust.
  • Algolia InstantSearch made thousands of bills explorable without building and maintaining a custom search backend.
  • Auto-publishing to Bluesky and Threads turned each day's legislative activity into distribution with zero manual posting.
Professional headshot

Available for work

Let's build something.

Always interested in new opportunities, technical challenges, or collaborations. Reach out through any of the channels.También hablo Español!

Typically respond within 24 hours