Gallopify Application Map

What we have built, what each piece solves, and what is coming. Every other wiki page is linked from here.

Gallopify is a financial platform for homeowners' associations (HOAs) and the community-management companies (CMCs) that manage them. One web application (dashboard.gallopify.com, Next.js frontend + FastAPI backend on Neon Postgres) serves both sides of the same management relationship: reserve-project planning and cashflow projection, reserve-fund investment recommendations, reserve-study document ingestion, bank-transaction categorization against capital projects, and dashboards and board reporting on top of all of it.

HOA boards self-managed communities CMC staff executive · portfolio mgr · property mgr dashboard.gallopify.com Next.js frontend · FastAPI backend Identity & team Clerk orgs · rosters Planning & cashflow projects · 5-yr projection Transactions categorize vs projects Board packet 3-page PDF report Document ingestion not activated Investment engine advisory — human executes Dashboards MC · executive · explorer Platform admin cross-tenant tooling Clerk identity & orgs Neon Postgres RLS inert AWS S3 study PDFs, versioned Extraction engine black-box compute OpenAI type embeddings
The platform at a glance: two user sides, one application, five external services. Tags carry the honest state — details in the reality check below.

Reality check

Read this before trusting any demo or screenshot.

The applications

Identity, tenancy & authorization

Who a user is, which organization they belong to, and which properties they can see and act on. Exactly two org types (HOA, CMC) in Clerk; the property is the atomic entity in our database; one visibility predicate (canSee) drives every read for every role.

RLS inert — app-layer gate only

Onboarding

Dashboard-first and optional: a required profile modal (name, persona, role) provisions the Clerk org — plus a placeholder property for HOAs — and the user lands on a usable dashboard immediately. Remaining setup (org profile, team invites, bank balance, first upload) is progressive dialogs behind a "needs setup" state. No mandatory wizard.

"bank connected" is UI-only

Team & management relationships

Per-property rosters (HOA board members + the assigned property manager, composed at read time across orgs), Org-Admin-gated invites and role changes, CMC↔HOA linking by board-member email with in-app consent (accept is a conditional atomic update), and CMC-side offboarding requiring portfolio-manager approval. Notifications carry the pending actionables and outcome events.

live

Document ingestion (reserve studies)

Upload a reserve-study PDF → durable extraction via a black-box engine → internal ops review beside the real PDF → conservative reconciliation against existing projects → one atomic release → customer archive decision for projects the new study no longer lists. Gallopify owns all state; the engine owns only transient compute.

not activated in production (verified 2026-09-07)

Financial planning

The HOA-facing planner and money pages. Projects are expense cashflows with table, Gantt, and active-projects views. Cashflow shows 5-year projections. Transactions categorizes bank transactions against capital projects: a transaction is categorized when it is linked to a project or explicitly marked an operating expense (mutually exclusive); per-project spend rollups are computed backend-side, and the invariant is that spend shown per project equals the sum of its categorized transactions. Deleting a project returns its transactions to the uncategorized queue.

live

Expense classification

Project-type classification is lazy and read-triggered: listing projects batch-embeds unclassified names with OpenAI and matches them against eight project-type embeddings (cosine similarity, 0.35 floor, "Other / Miscellaneous" fallback). The database column is the cache; degradation is deliberately silent — on API failure categories stay null and retry on the next read. Taxonomy below.

live

Investment allocation

Recommends how to place idle reserve cash into CDs and treasuries: liquidity-needs analysis over buffered cashflows, a capped greedy fill, geometric maturity laddering, and FDIC-insurance-aware product matching against the catalog. Output is a one-shot purchase recommendation.

advisory — a human executes catalog is placeholder data

Board packet (reporting)

A 3-page PDF summarizing an HOA's financial position: cover; executive summary (KPI cards, portfolio status, allocation charts); algorithm explanation, cashflow projections, top capital expenses, and board-approval signature blocks. Rendered HTML-to-PDF (Jinja2 + headless Chromium, inline SVG charts), capped at two concurrent renders.

health score is an MD5 stub (55–70) static funding/budget figures no caching — every call renders fresh

Analytics & dashboards

For management companies: a data explorer (dynamic queries over linked HOA data, validated against a 7-column whitelist), an executive dashboard (portfolio KPIs, per-HOA health scores — Good ≥ $500K cash + investments, Caution ≥ $100K, Critical below), and a day-to-day management dashboard. Design sources and intentional deltas: dashboard design reference.

/management/team serves fabricated data (open defect)

Platform administration

Cross-tenant tooling for platform admins: platform-wide dashboard, investment preview/generation, and maturity-cashflow backfill. The platformAdmin flag is set only out-of-band — never by any self-service path.

live

Classification taxonomy (reference)

The eight type names are the exact strings stored on the cashflow row; the descriptions are the embedding anchor texts the classifier matches against — prompt-engineering knowledge carried verbatim.

TypeEmbedding description
RoofingRoofing, roof coverings, underlayment, flashing, roof drains, scuppers, gutters, downspouts, shingles, tiles, membrane
Exterior Building ComponentsExterior building components, siding, stucco, EIFS, exterior paint, coatings, sealants, caulking, windows, exterior doors, balconies, building envelope, facades
Paving & Site ImprovementsPaving, site improvements, asphalt, concrete, sealcoating, striping, sidewalks, curbs, gutters, parking lot, driveways, walkways
Mechanical / Electrical / Plumbing (MEP)Mechanical electrical plumbing, MEP, boilers, chillers, HVAC, water heaters, pumps, electrical equipment, site lighting, fire alarm panels, generators, transformers, plumbing pipes, water tanks
AmenitiesAmenities, pool, spa, clubhouse, fitness room, playground, sports court, tennis court, BBQ, site furniture, recreation facilities, gym equipment
Interior Common AreasInterior common areas, flooring, paint, ceilings, lighting, wall finishes, hallways, lobbies, corridors, elevators, laundry rooms, carpet, tile
Landscaping & IrrigationLandscaping, irrigation, trees, shrubs, controllers, valves, sprinkler, lawn, garden, plants, mulch, drainage
Other / MiscellaneousOther miscellaneous, fencing, signage, mailboxes, retaining walls, security gates, trash enclosures, storage

What does not exist (deliberately stated)

Data & external services

Clerk owns organization identity and membership — there is no organizations table. The application database hangs everything off the property.

TablePurpose
propertiesThe community entity and stable domain key: HOA/CMC org links, manager assignments, profile, cash balance, fiscal year, lifecycle marker
management_requestsOutstanding CMC↔HOA offers only; the active relationship lives on the property's CMC link
offboarding_requests, notificationsPM→PfM offboarding approvals; recipient-filtered event feed
upcoming_cashflowsUnified cashflow entries — projects are expense-type rows; classification writes the category here
transactionsBank transactions, linkable to a project cashflow or flagged operating
investments, investments_catalogPer-property holdings; the global (placeholder) product catalog
documents + pipeline tablesThe ingestion pipeline's state: attempts, revisions, reviews, reconciliations, releases, archive decisions, audit events

Two conventions that are easy to misread from types alone: fiscal_year_start stores a month as the full date 2000-MM-01, and cash_balance is an integer in cents.

External serviceRole
ClerkAuthentication, user/org identity, membership metadata, JWT claims
Neon PostgresPrimary database (RLS policies installed, enforcement inert)
AWS S3Per-environment versioned reserve-study source storage; constrained browser POST, exact-version reads
Extraction serviceBlack-box reserve-study extraction behind a strict submit/status/result boundary
OpenAIProject-type classification embeddings

Security posture, honestly

What's coming

The roadmap lives in Linear projects — linked, not copied. The projects most relevant to this map:

Map of content

How the core systems work

Operating references

Runbooks

Never-public operational pages

Tagged wiki-visibility: never-public and listed in never-public.json; excluded from any public serving by construction.

Historical corpus