Skip to main content

Norala SB Transparency Portal

Flagship

Unofficial bilingual legislative-transparency prototype for the Sangguniang Bayan of Norala, built around repository-backed records, linked council data, and explicit demo safeguards.

RoleCreator & Developer
Platform
Web
Tech Stack

Repository-backed legislative records

Legislative documents and announcements live in repository content files. Officials, committees, sessions, and the subject vocabulary live in TypeScript. `lib/content.ts` reads document frontmatter and body content, then builds the relationships used elsewhere in the site.

Some of those relationships are derived instead of stored twice. An official's authored legislation is found by matching document `authorSlugs`. Committee pages collect legislation through `committeeSlug`. When one document lists another under `amends`, the loader derives the reverse `amendedBy` relationship.

The content layer also has a `verifyCrossLinks()` pass for references between records. It checks document authors, committees, sessions, amendment targets, and document links inside session agendas.

One set of records across two locales

The application uses `next-intl` with `/en` and `/fil` as explicit route prefixes. The content records themselves are shared, while translated interface labels come from locale message files.

The home page pulls recent legislation, the next scheduled session, and the latest announcements from the same content layer. Council pages use the document relationships to connect officials and committees back to the records associated with them.

Keeping the prototype visibly unofficial

The demo status is part of the implementation. The locale layout always renders a prototype banner. Page metadata sets `index` and `follow` to false, and `robots.ts` blocks crawling of the site. The contact page shows the shape of an official inquiry form, but every control is disabled and the page states that the demo does not submit or store the entered information.

The current build is still incomplete around ordinance browsing. The `/ordinances` index and `/ordinances/[slug]` detail routes are placeholders in the current code. The current repository also does not contain the SQLite, Prisma, Workbox, OCR, or PWA implementation claimed by the older portfolio article.