Chamber membership at a glance.
Live counts pulled from the shared member database — this updates instantly if a submission comes in through the public Join flow in another tab.
Retention rate
Share of members who joined and are still Active or in a renewal window, vs. lapsed.
Recent activity
Status changes, onboarding steps, and new join submissions.
Open follow-ups
Tasks logged against members that aren't done yet. Add one from a member's detail view in the Members tab.
Members — spreadsheet view.
Filter by status, search, edit inline. Export to CSV any time from the Data tab to work in Excel/Sheets.
| Business | Tier | Status | Last Contact | Joined | Renewal Date | Onboarding | Actions |
|---|
Onboarding in progress.
Click a step circle to mark it complete. Once all four steps are done, the member automatically moves to Active.
Billing & renewals.
Members auto-flag for renewal 30 days out, auto-lapse to Inactive after a 30-day grace period, and a dues invoice opens automatically the moment a renewal window starts.
Renewal watchlist
Every Active or Needs-Renewal member, soonest renewal first.
| Business | Tier | Renewal Date | Reminder Stage |
|---|
Dues invoices
Auto-generated when a member enters their renewal window. "Mark Paid" simulates a successful charge and renews the member 365 days out.
| Business | Tier | Amount | Issued | Due | Status |
|---|
Chamber events.
Create an event, then share its registration link. Registrations and check-ins land right here.
Hot deals board.
Deals members post from the Member Portal — or add one on their behalf. Shows publicly on deals.html until it expires.
Chamber emails.
Write the update once and hit Send Now to email it directly — every send is logged automatically. "Open in Email Client" is still there as a manual fallback.
Compose
Recipients pull live from the member list based on the scope you pick.
0 recipients
No email backend is connected — this doesn't send anything itself. Copy the recipient list into your email client's BCC field (most reliable for 40+ recipients), or use "Open in Email Client" for smaller lists. "Log This Send" records it below once you've actually sent it.
Sent history
Every chamber email logged so far.
| Date | Subject | Sent To | Recipients | Sent By |
|---|
Job board.
Delivers the "post job openings" benefit your tiers already promise. Live on the public site at job-board.html.
Committee rosters.
Who's actually in each program you run, plus a running log of meeting notes per program.
Sponsorships.
Event and corporate sponsorships tracked separately from membership dues — who sponsored what, and whether it's been fulfilled.
| Business | Package | Amount | Status | Logged |
|---|
Who can access the CRM.
Backed by a real database with row-level security — this list is the only thing that grants entry. Anyone can create a login on the sign-in page, but they only get in if their email is on this list.
| Name | Role | Added |
|---|
Excel-style tracking & backups.
Export the full member list as a CSV to open in Excel or Google Sheets for reporting, mail merges, or board packets.
Import data from CSV
Matches rows to existing members by Business name and updates their info — this never creates new members, only enriches ones already here. Recognized columns (any order, extras ignored): Business, Contact, Email, Phone, Website, Category, Notes.
What's simulated here vs. what's real
This is a working front-end prototype. To go live for staff, wire these pieces to a real backend:
- Storage: currently browser localStorage (this device only) → move to a hosted database (e.g. Supabase, Airtable, or Postgres via a Netlify Function).
- Human verification on the Join flow: currently a math challenge + honeypot → swap for Cloudflare Turnstile or hCaptcha.
- Payment & invoicing: currently a UI mock with no real charge → wire to Stripe Checkout/Billing via a Netlify Function, and sync paid invoices to QuickBooks.
- Renewal reminder emails: the milestone badges on the Billing tab are calculated correctly, but nothing is actually emailed yet → add a Netlify scheduled Function + SendGrid/Postmark to send them for real.
- Staff logins: currently a local session with no real account check → move to Supabase Auth before this leaves the internal team.
Utah Chamber CRM