Skip to content
SaasQuirk
GeoBoard, by SaasQuirk

From the field survey of a hoarding to a taxed, auditable record

GeoBoard is an advertisement tax system for municipal corporations. It takes every hoarding and shop board in a city from the surveyor's form to a permanent record with the right fee on it, on the city's own ward map and the city's own rate schedule.

01SurveyFields the department definesphoto and video, single or bulk02ReviewA role filtered queueevery decision kept03ApprovalThe municipal officersingly or in bulk04RecordOwner, size, category, wardstored as geometry05TaxLength by breadth, by categorywith a floor, changes logged06OversightRegister, map, reviewersexports to CSV
Every board in the city takes the same six steps, from the surveyor's phone to a taxed record the department can defend.

The workflow, from the surveyor's phone to the register

Six steps, the same for every board in the city.

Survey

Every board recorded in the field

The department defines its own survey fields without code, including the photos and video each board needs. Surveyors save drafts on site and submit them one at a time or in bulk. Media goes straight to object storage and is served back through signed links.
Fields
Defined by the department, no code
Media
Image, video, multiple of each
Submission
Single or bulk
Review

Internal review before anything reaches the officer

A reviewer approves or rejects each submission from a queue filtered to their role. Every decision is kept in the submission's history, so a board carries the record of how it got to the register.
Queues
Filtered by role
History
Every transition kept
Concurrency
Optimistic locking on edits
Approval

The municipal officer's decision

Reviewed submissions move to the municipal officer, who approves or rejects them, singly or in bulk. Approval is what turns a submission into a board on the register.
Bulk approval
Yes
Rejection
Recorded in the history
Record

A permanent record for every approved board

On approval the board becomes a record of its own: owner, dimensions, category, ward and zone, location and media. It is the register the department works from and the thing a fee is attached to.
Register
Paginated, filtered, exported to CSV
Location
Stored as geometry, shown on the map
Tax

The fee from the city's own schedule

The municipality's advertising rate schedule is loaded as it stands, category by category. The fee comes from the board's length and breadth and the rate for its category, with a floor for the smallest boards and dimension checks before any fee is set. Every rate change is recorded with who made it and when.
Formula
Length by breadth, by category
Floor
Applied to the smallest boards
Audit trail
Every rate change, with its author
Oversight

Boards, revenue and workload in one place

Department heads see the register by category with pinpoint filtering, the performance of each reviewer, and a map view that every role shares. Boards and analytics export to CSV for the department's own reporting.
Analytics
By category, with pinpoint filters
Reviewers
Throughput and turnaround per reviewer
Exports
CSV for boards and analytics
The states a submission passes through
DRAFT
saved in the field, singly or in bulk
SUBMITTED
in the internal review queue
INTERNAL APPROVAL
or rejection, kept in the history
MUNICIPAL APPROVAL
the officer's queue, singly or in bulk
BOARD RECORD
permanent, taxed, on the map

Zones and wards imported from the city's own boundary files

Zones and wards are imported in bulk from the boundary files the municipality already holds, in GeoJSON. Every board is stored as geometry inside those boundaries, so the register can be read ward by ward and the map shows the same thing to every role.

A rollout starts from the files the city has, not from a survey of the city's boundaries.

Boundaries
Zones and wards, imported from GeoJSON
Storage
PostgreSQL with spatial geometry
Map
One view, shared by every role
Image slot: Boards on the ward map.
Boards on the ward map.

Roles, queues and sign in, as the department already works

A root administrator is created when the system is first set up and creates everyone else. Field operators, reviewers and municipal officers each see the queue and the screens their role allows, and nothing else.

Every sign in is confirmed with a one time password, by email or by phone, before a session token is issued.

Who does what
Root administrator
Set up at first start, creates users, zones, wards and survey fields
Field operator
Surveys boards, saves drafts, submits singly or in bulk
Reviewer
Approves or rejects from a role filtered queue, with reasons
Municipal officer
Final approval, singly or in bulk, plus the register and the analytics
Sign in
Username or email with password, or phone, then a one time password, then a token

Stack, deployment and monitoring

GeoBoard is deployed as containers through a pipeline we maintain, exports its metrics to Grafana, and is run by the engineers who built it. The department gets a system that is monitored, not a codebase.

Stack and runtime
Backend
Java 17, Spring Boot 3.4
Security
Spring Security with JWT, one time passwords through an OTP service
Database
PostgreSQL with Flyway migrations, Hibernate Spatial with JTS geometry
Media
Object storage with direct upload and signed view links
Front end
React and TypeScript on Vite, optimised for phones in the field
Deployment
Containers on a CI pipeline to ECS
Monitoring
Actuator metrics to Prometheus and OTLP, dashboards in Grafana

What a rollout needs from the city

  1. 01

    The boundary files

    We import the ward and zone boundaries the city already has, in GeoJSON.

  2. 02

    The rate schedule

    Loaded as the municipality publishes it, category by category, with the floor rule.

  3. 03

    A first ward

    Surveyors start on one ward while the department reviews the first records and settles its queues.

Where GeoBoard comes from

GeoBoard grew out of our work inside a city's property tax platform: the citizen sign in, the event aggregation, the notices. The advertising department had the same shape of problem, a survey of thousands of boards that had to end in a fee the city could defend, and no system that carried a board from the street to the register.

Its first prospect is a corporation whose revenue systems we already run. The product is complete; what remains is a rollout, and we price that as we price everything: a written scope, a weekly demo, and the same team afterwards.

GeoBoard

See GeoBoard on the city's own map

Send us the ward boundaries and the advertising rate schedule. We will show GeoBoard running on them, with a survey, a review and a fee, end to end.

Or write to support@saasquirk.com. SAASQUIRK LLP, India.