Checking access…
UPIC logo Utah Chamber CRM Member Management
Overview

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.

      Member Directory

      Members — spreadsheet view.

      Filter by status, search, edit inline. Export to CSV any time from the Data tab to work in Excel/Sheets.

      0 selected
      Business Tier Status Last Contact Joined Renewal Date Onboarding Actions
      Pipeline

      Onboarding in progress.

      Click a step circle to mark it complete. Once all four steps are done, the member automatically moves to Active.

      Automated Renewal Engine

      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.

      BusinessTierRenewal DateReminder 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.

      BusinessTierAmountIssuedDueStatus
      Event Management

      Chamber events.

      Create an event, then share its registration link. Registrations and check-ins land right here.

      Member-to-Member

      Hot deals board.

      Deals members post from the Member Portal — or add one on their behalf. Shows publicly on deals.html until it expires.

      Communications

      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

      Open in Email Client

      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.

      DateSubjectSent ToRecipientsSent By
      Member Benefit

      Job board.

      Delivers the "post job openings" benefit your tiers already promise. Live on the public site at job-board.html.

      Programs & Committees

      Committee rosters.

      Who's actually in each program you run, plus a running log of meeting notes per program.

      Non-Dues Revenue

      Sponsorships.

      Event and corporate sponsorships tracked separately from membership dues — who sponsored what, and whether it's been fulfilled.

      BusinessPackageAmountStatusLogged
      Real Login, Not a Prototype

      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.

      NameEmailRoleAdded
      Data & Export

      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.