by Ta-Tech Solutions All documents

Agency Module Matrix

Every County OS module, the agency it serves, its data, and its capabilities. Each module is the same engine pattern: county-scoped tables (RLS on), a staff page gated to supervisor+, KPIs + analytics, a Manage section with full CRUD, and a branded printable report.

Module Route Agency Core tables Highlights
Procurement /procurement Procurement / OCP vendors, solicitations, bids, contracts Vendor registry, supplier diversity, certified-spend %, AI bid scoring + auto-shortlist
Permitting /dpie DPIE permit_applications, permit_inspections Pipeline, time-to-decision, inspection schedule, approval rate
Economic Development /econdev EconDev businesses, opportunities Minority-owned business directory, grant/contract opportunity board
Public Works /dpwt DPWT fleet_vehicles, field_operations Fleet readiness, field ops, maintenance status
Human Resources /hr OHRM job_postings Open roles, applicants, time-to-fill
Parks & Recreation /parks M-NCPPC park_assets, park_programs Asset condition, inspection due, program roster
Public Safety / Courts /safety OHS / Courts safety_cases, scam_alerts Cases by type/status, court dates, resident scam alerts
Public Schools /schools PGCPS-linked schools Enrollment, attendance, on-track %, digital access
Redevelopment /redevelopment RDA redevelopment_sites Site prioritization, vacancies, economic potential by district
Predictive Data Feeds /feeds Cross-agency data_feeds, feed_readings Trend + forecast + threshold ETA, CSV upload, live ingest API
County Assistant /assistant Cross-agency county_ai_config, county_kb Named AI ("Ada"), knowledge base, onboarding questionnaire

Health and Human Services is answered by PolyHealth (the sibling TaTech health platform), linked rather than duplicated.

Per-module CRUD

The core entity of each module (and feeds, and the KB) is fully create/edit/delete-able from the UI via the shared schema-driven RecordEditor. Field definitions live once in web/src/lib/county-os/schemas.ts; adding a table there makes it manageable everywhere. Every enum is a real dropdown, money/date/number/tags have proper inputs, labels are EN/ES.

Adding a new module (pattern)

  1. Create the county-scoped table(s) with RLS (migration).
  2. Add a lib/<mod>/data.ts read model (KPIs + lists, service-role, county-scoped).
  3. Add app/[locale]/<mod>/page.tsx (requireStaff supervisor, StaffBar, ReportBar, Stat/BarList/Panel/Table from components/county-os/module-ui.tsx).
  4. Register the core entity in lib/county-os/schemas.ts and drop in <RecordEditor>.
  5. Add a launcher tile on /dashboard + EN/ES strings.
PreviousOperations Runbook
CivicLoop - Ta-Tech Solutions - Architecture & Design Documentation