Fintech
MuniFlow Platform screenshot 1

MuniFlow Platform

Municipal Finance Workflow and Transaction Platform

A modular platform for managing municipal bond transactions end-to-end. Organized as a host app with feature modules for deal creation, contacts and team management, collaborative term sheets with version history, closing document assembly, in-app messaging, notifications, a per-deal email inbox, and an interactive US issuers directory with geographic drill-down.

Portfolio Case Study

This entry uses sanitized screenshots, feature breakdowns, and architecture notes. These products are not publicly accessible.

The Challenge

Municipal bond deals involve dozens of parties — bond counsel, underwriters, trustees, fiscal agents, issuers — coordinating across fragmented email threads, Word documents, and spreadsheets. Each deal is legally distinct, requires versioned documentation, and involves sensitive financial data. The platform needed to feel like a product, not a collection of admin screens, while enforcing strict access control and audit-oriented workflow boundaries.

What We Built

  • Home workspace with deal hierarchy grouped by issuer, type, or recency — with a 5-section progressive deal creation wizard
  • Interactive US issuers map with national → state → county drill-down, search, and issuer group rooms
  • Deal contacts with horizontal role-column kanban layout, shadow contacts (pending invitees visible before they join), and real-time sync
  • Email-first invite system: admins enter an email, the platform detects new vs existing users and routes the experience appropriately
  • Collaborative term sheets with nested drag-and-drop field reorder, inline typed editors, field-level comments, change request workflow, and side-by-side version diff
  • Closing transcript assembly workspace with section/item reordering, document linking, and a register of closing events
  • In-app 1:1 messaging between deal participants with Supabase realtime subscriptions
  • Per-deal email inboxes via Postmark inbound webhooks for capturing deal-related correspondence
  • Notification center (global + deal-scoped) with preference-aware controls
  • Lighthouse cross-app API bridge: OAuth-style tokens let satellite tools (Bond Generator, Muni Clerk) pull published term sheet data securely

What Makes It Different

  • Shadow contacts: pending invitees appear in the deal contacts grid immediately — before they create an account — maintaining team visibility across the full deal lifecycle
  • Deal context rules engine: a catalog of municipal finance "knobs" (financing type, rate mode, tax status, maturity structure) that deterministically activates the correct term sheet field set per deal family
  • Lighthouse cross-app bridge: OAuth-style authorization codes let external tools (Bond Generator, Muni Clerk) fetch published term sheet data from the platform without sharing database credentials
  • Term sheet version diff: side-by-side comparison of any two published versions with a "show only changes" toggle — modeled after code review for financial documents
  • Feature passport system: each module has a living passport.md tracking stage, maturity, API completeness, and known gaps — used to gate what ships per release

Architecture Highlights

  • ·Modular monolith with ESLint boundaries enforcing a 5-layer clean architecture per feature — prevents components from reaching the database and hooks from bypassing service logic
  • ·Dual Supabase client pattern: anon/JWT client for user-scoped reads, service role admin client for writes that need to bypass RLS; deal membership table is the authoritative ACL for all deal-scoped access
  • ·API middleware stack: withRequestId → withApiAuth or withDealAuth — every deal route validates membership before the handler runs
  • ·59-table Postgres schema with 110 foreign keys organized by domain: deal core, term sheet versioning, closing packets, messaging, notifications, issuers, compliance audit logs
  • ·Bundle splitting by feature module: webpack splitChunks creates separate chunks for auth, deal pages, term sheet, closing assembly — public auth pages skip React Query and MUI for ~190KB savings

Results

Built modular workflow capabilities across a codebase with 22 feature modules, ~100+ API routes, and a 59-table schema — covering deal setup, context-driven term sheets, notifications, external access, authorization, integrations, and migration from legacy rules to a catalog-driven model. Module maturity varies; feature passports track what is ready to ship.

Tech Stack

Next.js 16React 18TypeScriptMUI 7TailwindTanStack QuerySupabaseOpenAIResendSentryPlaywright

Relevant For

  • Multi-tenant SaaS and workflow platform architecture
  • Legal and financial document workflows
  • Collaborative editing with versioning and audit trails
  • Complex data modeling with enforced module boundaries
  • Real-time features with Supabase subscriptions
  • Multi-role invite and team management systems

Tech Stack — How Each Piece Is Used

Next.js 16 (Pages Router)Monolith host for ~100+ API routes and 22 UI modules; feature flags in env control which surfaces are enabled
TanStack React Query 5All server state: deal data, contacts, term sheet fields, notifications — with 5-min stale time and user-scoped cache keys
Supabase (Postgres + Auth + Realtime + Storage)59-table schema for deals, memberships, contacts, term sheet versions, closing packets, messages, and notifications; realtime subscriptions for messaging and notification push
MUI 7 + @dnd-kit + react-beautiful-dndComponent library for dense data surfaces; dnd-kit powers 3-level term sheet reorder (sections → subsections → fields); react-beautiful-dnd for closing transcript section/item reorder
react-simple-maps + d3-geo + topojson-clientInteractive US issuers map: TopoJSON FIPS-coded geography, state/county drill-down, zoomable SVG with issuer data overlay
ResendInvitation emails from invitations@muniflow.io — new user vs existing user routing with distinct call-to-action per path
OpenAIOptional document list parsing for closing indexes; fine-tuning pipeline for municipal-domain model work (feature-flagged, in development)
ESLint boundaries + Vitest + PlaywrightEnforced 5-layer module architecture (pages → components → hooks → services → db); unit tests for term sheet rules engine; E2E for critical deal flows

Need something similar built?

We build systems like this for founders and businesses through Upwork.