
Who
I kept watching one store, 424 Russ Avenue, Waynesville, NC, try to be three products at once: a community lander for locals and tourists, a hiring funnel, and a shift office that still lived in spreadsheets, Steritech PDFs, and whoever answered the group text first.
This is not the multi-unit franchise SaaS story. That sibling already has its own pack. This one is for the GM and shift leaders who need lunch daypart labor against a ≤17% goal before the dinner rush, and for the parent looking up Kids Night on the same domain.
If you run MarTech by day and still care whether a CAP finding has an observation, cause, prevention trail, this is for you. If you only want a pricing page with fake "500+ locations," read the franchise platform post.
What
I built a single-store Zaxby's management and customer portal.
Public surface (app/(public)): home with local events (Wheelin' Wednesdays, bounce party, Kids Night), about, careers + apply, catering (redirects to corporate catering), community, events, menu (redirects to zaxbys.com menu), contact. Store truth lives in _project.ts: 424 Russ Avenue, Waynesville NC 28786, phone 828-456-2888, email eat@waynesville.yourzaxbys.com, hours 10:30–21:00, dayparts lunch / snack / dinner / late.

Private surface: /dashboard with live shift, performance, metrics (including SOS and SMG pages), goals and 6-week trends, hiring Kanban, schedule + swaps + time-off, daypart checklists, Steritech CAP reports, training sessions + Zaxby's University tracking, attendance + points, leadership scores, maintenance, uniforms/smallwares orders, announcements, events CRUD, and CSV ingest under /dashboard/injest.
Convex is the spine: thirty-plus modules. Employees, applicants, shifts, metrics daily/weekly/periodic, caps, checklists, training/ZU progress, attendance points, orders. Package name matches the host: waynesville.yourzaxbys.com 0.1.0. Stack: Next 16.1.6, React 19, Convex, Clerk, Resend + React Email, Sentry, PostHog, Radix + Tailwind 4, Bun, Blacksmith ship.yml.

Honesty checks: sitrep still whispers WIP and "maybe superseded by www." HEAD has more store-ops depth than the franchise sibling. Custom domain waynesville.yourzaxbys.com did not resolve from pack hosts. Vercel alias answered with a 429 bot challenge, so there is no clean live screenshot and composites are labeled. README growth notes and franchise-purchase storytelling are provenance in the repo. AUTOPSY roasted missing SEO files; HEAD has manifest.ts, sitemap.ts, robots.ts.
Where
Code: github.com/HurleyUS/waynesville.yourzaxbys.com. Private. Empty description. Empty topics. Zero stars.
GitHub homepage field: waynesvilleyourzaxbyscom.vercel.app. Alias host resolves; HTTPS challenged at pack time. Canonical claim https://waynesville.yourzaxbys.com/ sits in _project.ts and README. DNS unresolved here.
Sibling franchise platform (already packed): www.yourzaxbys.com. Same family. Different job. Platform sells above-store; this repo runs one store's public face and back-office.
Audience: independent franchisees who need store software that knows Russ Avenue dayparts, and builders who can tell a "restaurant dashboard" template from a Steritech CAP form.
When
2025-05-02. Create Next App to init to first Vercel deploy. Repo created on GitHub the same day. Package starts as a location product.
2025-05 to 08. Fonts, navbar, employee headway, image upload fights, ranking UI. The slow work of making a store site feel like a store.
2025-10-16 to 10-21. Security and Convex hardening week. Secure server-side SSN verification. External-link rel discipline. Full-text employee search. Build compilation fixes for production.
2026-01-03 to 01-04. Dashboard redesign: Spotify Wrapped energy, scroll snap, metrics tables that calculate labor %, LY comparisons, placeholder rows for the current week, double-click cell edits, charts with 6-week averages and goals.
2026-01-08 to 01-09. The suite ships in a day: CSV import/reporting, employee onboarding/self-registration, Indeed hiring Kanban, live shift dashboard, shift checklists, announcements, scheduling, uniforms/smallwares, Steritech CAP, training agendas, attendance tracker, then a training rebuild with scheduled sessions and ZU course tracking.
2026-01-12. Delete buttons and missing-week detection on metrics. Practical GM requests.
2026-02-15 to 02-26. Security that matters: remove hardcoded encryption key fallback; fix proxy middleware that had made routes public; encrypt SSN at rest AES-256-GCM (#34/#41); strip SSN context from console logs (#43/#50); enforce auth on Convex public mutations (#42/#51).
2026-03-21. Remaining console.* to Sentry logging (#53).
2026-05-14. Blacksmith CI gates standardized across a stack of commits. Clerk/email client check fixes. Lazy Resend. Skip Convex provider without public env.
2026-08-08. fix: set X-Robots-Tag to index, follow on Vercel. HEAD c9f97b7. Two hundred thirty-five commits on the ledger. Pack day is September 8, 2026.
May Create-Next-App on Russ Avenue to a versioned single-store ops portal that still wears package 0.1.0.
Why
I did not want one location's public community face and its shift office to keep living on different planets.
So I put events and careers on the same origin as live dayparts, Steritech CAPs, hiring, training, and attendance. I put Clerk on the door and Convex under the floor. I left package 0.1.0 because "store software that GMs touch" is not the same milestone as a franchise SaaS 1.0.0 marketing claim. I left the sibling relationship explicit: www is the platform pack; this is the store pack.
sitrep can keep saying LOW priority. The git log disagrees with "empty." The schema disagrees with "template."
Would you point real DNS at this alias and run a week of live shift entry next, or keep the franchise platform and the store portal honest as two products with two jobs?
