Calvert County Chamber of Commerce

Design mockups for the Laravel rebuild

Five screens that settle every pattern the remaining thirty inherit. Built with real Chamber data — real members, real events, real dues, real gaps.

The screens

Each one is a working page — resize it, use the filters, record a payment.

What to look at

Five calls worth a yes or no before the remaining screens get built.

The directory is map-led, full width

Single-column results on the left 30%, map on the right 70%, no page chrome around it. Cards and pins are linked both ways. The map states how many members it can show — 78 have no address, and they stay in the list rather than vanishing.

Missing logos are designed for, not patched

213 of 345 members have no logo. Rather than a broken image or a grey box, every listing gets a navy monogram and a brand cover that look deliberate. A complete profile still looks better — the portal nudges toward it.

Check payment is a first-class flow

The ledger treats card and check as equals: same invoice, same term extension, same receipt, same audit trail. Check number, received date and deposit date are real fields, not a note in a spreadsheet.

176 categories become 14

The directory filter shows the proposed consolidation. Every old term maps to one of these, so no listing loses its category. Worth a read before it gets locked in.

Staff and members get different shells

Both are two-column with a navy sidebar, but the staff side is built for scanning volume — tables, filters, summary tiles — and the member side for a single business. Same system, different density.

The overdue number is real

53 overdue members and 13 comped are not placeholders — they're the counts sitting in production right now, where 53 listings still carry an expiry of 1 April 2025 and remain published.

Design system

Everything on these screens comes from these tokens. They map straight onto a Tailwind theme extension.

Navy#272c6d
Periwinkle#c4c8e2
Gold#bd8732
Gold deep#8f6320
Sand#c9b288
Membership has its benefits

EB Garamond, 400–600. Every heading — one colour, one face, one weight range. No two-tone words, no mixed faces mid-line.

Montserrat carries body copy, navigation, labels, tables and every button. Running text stays near 65 characters. Figures in tables use tabular numerals so columns align: $1,080 · $250 · $165.

Uppercase labels get generous letter-spacing.

No eyebrows

Headings stand alone. No kicker line above a title.

No marquees

Nothing scrolls on its own. Sponsors sit in a static grid.

Single-treatment headings

One colour, one typeface, throughout.

Two columns by default

Filters and results. Content and rail. Table and action panel.

Lucide icons only

One stroke weight, used for wayfinding — never decoration.

Gold once per view

If two things are gold, neither reads as primary.

State has shape

Chips and dots, legible without relying on colour.

Light, always

One palette for every viewer. Native controls locked to match.

Tailwind mapping. Extend the theme with navy, periwinkle, gold and sand scales rather than overriding the defaults; set font-display to EB Garamond and font-sans to Montserrat; define the neutral ramp explicitly so nothing falls back to Tailwind's stock grey. assets/app.css is the source of truth and is organised to be lifted section by section.