Skip to main content

Exhibit A · Vetta

Public-record intelligence platform

An AI platform that reads public meeting records from 132 governing bodies in 10 states and surfaces the excerpts that matter to a reviewer.

Client
Texas Public Policy Foundation; Rumble; Northern Data AG; Hillpointe
Role
Co-Founder and Head Systems Engineer; designed and built the whole system
Dates
January 2026 to present
  • Next.js 15
  • TypeScript
  • Tailwind
  • Prisma
  • Cloud SQL Postgres 16
  • Cloud Functions Gen 2 (Node 22)
  • Cloud Storage
  • Cloud Scheduler
  • Custom-trained internal AI system
  • Resend
  • Firebase App Hosting
governing bodies
132
states
10
meeting records
7,600+
excerpts
67,500+
01

The Problem

Reviewers at a policy foundation needed to know what county boards across ten states were deciding about elections without reading thousands of pages of minutes a month. False positives are acceptable; false negatives are not.

Coverage

132 governing bodies in 10 states: Arizona 5, Georgia 15, Michigan 12, Nevada 5, North Carolina 14, Ohio 9, Pennsylvania 27, Texas 17, Virginia 15, Wisconsin 13. Each point sits at its county seat or state capital; bodies that share a seat sit side by side.

The Pipeline

From a posted meeting record to a reviewer's queue, in six stages

  1. 01 Ingest. One config-driven pipeline. Adding a county is adding a config row. Portals: Granicus, CivicPlus, Legistar, CivicClerk, OnBase, PrimeGov, CivicWeb, BoardDocs, Laserfiche, PublicInput, Widen, S3 index, generic HTML and PDF, direct PDF index.
  2. 02 Convert. The converter sniffs the actual bytes and ignores the stored file type. Oversized packets take a separate large-file path.
  3. 03 Classify. A custom-trained internal AI system returns excerpts with character anchors.
  4. 04 Validate. Each excerpt is checked against the source text before a reviewer sees it.
  5. 05 Group. One real event, one record.
  6. 06 Review. Reviewers see source text with highlights. Columns: Needs Review, Starred, Follow up, Dismissed.
03

Excerpts, by Design

The classifier returns excerpts with line and section anchors into the source, and a validator checks each one before it is written. The review interface shows the source text with keywords highlighted. AI summaries bridge between excerpts and contain no quotes of their own.

Sample meeting minutes1,565 characters

SAMPLE COUNTY BOARD OF ELECTIONS AND REGISTRATION Minutes of the regular monthly meeting Synthetic sample text. It names no real county, person, or proceeding. 1. CALL TO ORDER The Chair called the meeting to order at 6:00 p.m. in the main conference room of the county administration building. All five members attended and formed a quorum. The Elections Director also attended. 2. APPROVAL OF THE AGENDA A member moved to approve the agenda as posted. A second member seconded, and the motion carried without objection. 3. APPROVAL OF PRIOR MINUTES The board approved the minutes of the prior regular meeting as distributed. 4. PUBLIC COMMENT Two residents addressed the board. One asked when the county will post sample ballots on its website. One asked if the recreation center lot will add parking for voters during the next election period. 5. DIRECTOR'S REPORT The Elections Director reported that poll worker training runs on three Saturdays next month, and that logic and accuracy testing of the voting equipment starts the first week of the following month. The recreation center that serves Precinct 4 closes for roof repairs during the next election period. 6. POLLING PLACE RELOCATION Motion by the Vice Chair, seconded by a member, to relocate the Precinct 4 polling place to the Eastside library for the next election, with notice by mail. Carried, 5 to 0. The Director will post the new location on the county website and at the recreation center entrance. 7. ADJOURNMENT With no further business, the Chair adjourned the meeting at 6:48 p.m.

Sample text is synthetic and contains no client data.

04

Architecture

Hover or focus a node to see its responsibility.

Edges numbered by pipeline stage: 1 Ingest, 2 Convert, 3 Classify, 4 Validate, 5 Group, 6 Review.

Nodes

  • OrchestrateCloud Scheduler, Cloud Functions Gen 2

    Runs the one-time 12-month backfill, then forward polling. One config-driven pipeline: adding a county is adding a config row.

  • Scrapers (14)Cloud Functions Gen 2 (Node 22)

    Fetch meeting records from 14 portal types: Granicus, CivicPlus, Legistar, CivicClerk, OnBase, PrimeGov, CivicWeb, BoardDocs, Laserfiche, PublicInput, Widen, S3 index, generic HTML and PDF, direct PDF index.

  • BucketCloud Storage

    Holds every fetched file under the raw/ prefix and every converted file under the markdown/ prefix.

  • ConvertCloud Functions Gen 2 (Node 22)

    PDF, DOCX, and HTML become markdown. The converter sniffs the actual bytes and ignores the stored file type. Oversized packets take a separate large-file path.

  • ClassifyCloud Functions Gen 2

    A custom-trained internal AI system returns excerpts with character anchors. Each excerpt is checked against the source text before a reviewer sees it.

  • Postgres schemaCloud SQL Postgres 16, Prisma

    Agenda, packet, and minutes group into one Meeting by a deterministic meetingKey: one real event, one record. Daily backups with 7-day point-in-time recovery and deletion protection.

  • Web appFirebase App Hosting, Next.js 15

    Reviewers see source text with highlights on a meeting-grouped review board.

  • NotifyResend

    Sends the daily digest with per-recipient filters.

Edges

  1. 01Orchestrate to Scrapers (stage 1)
  2. 02Scrapers to Bucket raw/ (stage 1)
  3. 03raw/ to Convert to markdown/ (stage 2)
  4. 04markdown/ to Classify (stage 3)
  5. 05Classify to Postgres schema (stage 4)
  6. 06Postgres schema to Web app (stages 5 and 6)
  7. 07Postgres schema to Notify (stage 6)
05

Operations

  • Content-hash dedup (SHA256)
  • Meeting identity as a deterministic meetingKey
  • One-time 12-month backfill, then forward polling
  • Daily digest with per-recipient filters
  • 13 alerting policies
  • Daily backups with 7-day point-in-time recovery and deletion protection
06

Product Surfaces

  • Meeting-grouped review board

    • Needs Review
    • Starred
    • Follow up
    • Dismissed
  • Watched entities

    Deterministic matcher for 13 organizations and their people, confirm queue for low-confidence hits.

  • Reviewer queue for manual boards

  • Roles

    Four nested access tiers: Reviewer, Admin, Regional, and super-admin.

07

Brand

Vetta designed the Summit identity in-house: the name, the peak mark, the design tokens, and a WCAG test.

  • Snow#F7F9FB
  • Ink#16283B
  • Summit blue#1B4F7E
  • Glacier teal#0F766E
  • Deep navy#0B1B2E
  • Glow#2E86C1