Asheville Monday Night Contra Dance
A community website and content dashboard for a weekly Asheville dance.

The problem
The dance's old Wix site had fallen behind reality. It still listed a previous venue, old start times and outdated prices, and keeping it current was awkward for volunteers.
Most visitors arrive on a phone wanting the basics fast: when the next dance is, where, what it costs and whether beginners are welcome.
The solution
A fast, accessible public site built around "the next dance", with a list and month calendar, event pages, add-to-calendar links, a subscribable calendar feed, directions, newcomer and safety information, a photo gallery and a donation page.
Behind it, a custom dashboard lets authorized organizers manage events, announcements, the weekly schedule, admission prices, venues, page text and photos.
Key decisions
- One app, one database A single Next.js application talks to one MySQL database. There is no separate CMS or API server, which means fewer moving parts for a volunteer organization to depend on.
- Fast monthly updates Events inherit the regular schedule unless overridden. "Duplicate" and "save & add next week" turn entering a month of dances into a few minutes of work.
- Locked-down administration There is no public signup. Setup is a one-time owner step, and the site has role-based access, rate limiting, a strict Content Security Policy and an activity log of every change.
- Safe to evolve Versioned database migrations and an insert-only seed protect live content. CI runs linting, type checks, unit tests, and browser tests with automated accessibility checks.
- No payment handling Donations link out to Venmo. The site never processes payments itself.
Outcome
The new site is live at mondaynightcontra.com. Schedules, announcements and photos are managed through the dashboard instead of a developer.
Screens


