Questions, clarifications, and schema design decisions for the HURE Map Integration project.
Last updated: December 19, 2025
Current assumption:
Question: What are the actual one-time enrollment fees for each tier?
Current assumption:
Question: What specific features/benefits does each tier include?
Options:
Question: When should the first $100 annual maintenance fee be charged?
How should multi-county assignments work?
See schema below for support for this. Allowing multiple counties per broker and vice-versa.
Questions:
Suggestion: Drive off of status(es) of Broker(s) assigned to the County. If one exists with flag, show badge.
What is driving the decision to use Airtable? Are there integrations, other than human accessing the current Airtable data?
What is driving using ESRI maps? It is really slow, not very customizable. OpenStreetMap would be a good alternative.
Options:
Question: Which distribution model fits the business goals best?
Proper schema will prevent lots of pain in the future! This schema supports many-to-many county coverage.
erDiagram
STATE ||--o{ COUNTY : contains
COUNTY ||--o{ BROKER_COUNTY : covered_by
BROKER ||--o{ BROKER_COUNTY : covers
BROKER ||--o{ PARTNER : employs
COUNTY ||--o{ LEAD : generates
LEAD ||--o{ LEAD_ASSIGNMENT : assigned_via
BROKER ||--o{ LEAD_ASSIGNMENT : receives
STATE {
int id PK
string name
string abbreviation
}
COUNTY {
int id PK
string fips UK
string name
int state_id FK
decimal centroid_lat
decimal centroid_lng
text area_blurb
text highlights
string photo_url
}
BROKER {
int id PK
string name
string phone
string email
string website
string logo_url
string franchise_affiliation
boolean va_loans
boolean military_specialist
string stripe_customer_id
datetime created_at
}
BROKER_COUNTY {
int id PK
int broker_id FK
int county_id FK
enum tier
enum status
string stripe_subscription_id
date enrollment_date
date past_due_date
boolean is_featured
datetime created_at
}
PARTNER {
int id PK
int broker_id FK
string name
string email
string phone
boolean is_lead_recipient
enum status
datetime created_at
}
LEAD {
int id PK
int county_id FK
string first_name
string last_name
string email
string phone
string moving_from
string moving_to
text message
string source
enum status
datetime created_at
}
LEAD_ASSIGNMENT {
int id PK
int lead_id FK
int broker_id FK
datetime assigned_at
enum status
text notes
}
STATE ──1:N── COUNTY ──N:M── BROKER
│ │
(via BROKER_COUNTY) │
│ │
▼ ▼
LEAD PARTNER
│
▼
LEAD_ASSIGNMENT ◄── tracks which broker(s) got lead
| Field | Type | Notes |
|---|---|---|
| id | PK | |
| broker_id | FK | References Broker |
| county_id | FK | References County |
| tier | enum | basic/premium/enterprise |
| status | enum | active/past_due/lapsed/canceled |
| stripe_subscription_id | text | Stripe subscription reference |
| enrollment_date | date | When enrolled |
| past_due_date | date | For delinquency tracking |
| is_featured | boolean | Shows first in featured broker display |
| created_at | datetime |
id, name, abbreviation
id, fips, name, state_id, centroid_lat/lng, area_blurb, highlights, photo_url
Note: status is DERIVED, not stored
id, name, phone, email, website, logo_url, franchise_affiliation, va_loans, military_specialist, stripe_customer_id, created_at
id, broker_id, name, email, phone, is_lead_recipient, status, created_at
id, county_id, first/last_name, email, phone, moving_from/to, message, source, status, created_at
id, lead_id, broker_id, assigned_at, status, notes
CountyCentroid No zip-code zone requirement yet Franchise, FranchiseBroker Text field sufficient for now Contact Adds indirection without clear benefit