design system 100% - #46
Open
samuelxanda wants to merge 142 commits into
Open
samuelxanda wants to merge 142 commits into
samuelxanda wants to merge 142 commits into
Conversation
feat(ui): standardize dark theme and improve UX consistency
fix build errors
fix: resolve Tailwind v4 CSS minification errors for Vercel deployment
Updated dependencies to fix Next.js and React CVE vulnerabilities. The fix-react2shell-next tool automatically updated the following packages to their secure versions: - next - react-server-dom-webpack - react-server-dom-parcel - react-server-dom-turbopack All package.json files have been scanned and vulnerable versions have been patched to the correct fixed versions based on the official React advisory. Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
- Add stripe dependency and lazy initialization helper - Update Salon model with stripeCustomerId and stripeSubscriptionId - Create billing API endpoints (checkout and webhook) - Update billing page with Stripe checkout flow - Add success/error state handling for payment flow
The empty-day EmptyState showed a '+ Book one now' action to every role. For stylists (canCreateAppointment: false) the QuickBookingForm is already hidden, so the CTA scrolled to nothing — a dead-end create affordance. Gate the action behind canCreateAppointment so only bookers (admin/receptionist/owner) see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(appointments): hide '+ Book one now' from non-booking roles
…-staff-page feat(staff): invite staff from /staff + link roster records
Replace the 'Add staff' button (roster-only, no login) with 'Invite staff' as the single primary action, and point the empty-state CTA at the invite flow too. The edit dialog is retained for editing existing members; direct roster-only creation is dropped from the UI in favour of the invite link flow. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…-staff-page feat(staff): make Invite staff the primary action on /staff
…ce invite Standardize onboarding on owner-provisioned accounts (Add user) + forced password reset on first login (mustResetPassword, already enforced in AppShell), so every worker is an accountable identity and the owner provisions in one step. - api/users POST: auto-create + link a Staff roster slot when a stylist is added with no existing link, so they're bookable the moment they're provisioned. No anonymous roster entries, no separate 'add staff' step. - StaffView (/staff): drop Invite + Add staff buttons and the create CTA; the page is now roster display + manage (view, activate, edit) only. Stylists appear here automatically when their account is created. - UsersTab (Settings): remove the Invite staff button, rotate/revoke actions, and pending/expired badges. 'Add user' is the single creation flow. - api/users GET: drop inviteStatus from the response. The self-service invite link backend (routes, accept page) is left dormant in the tree, not deleted. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…d-onboarding # Conflicts: # src/components/salon/StaffView.tsx
…ed-onboarding feat(staff): one owner-provisioned onboarding flow; retire self-service invite
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…slot The picker only existed to attach a login to a pre-existing orphan Staff row. Under the owner-provisioned model no orphan roster entries exist, so it had nothing legitimate to point at. Stylists get their slot auto-created on create. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ly door) Remove POST /api/staff and the dead create branch in StaffView so no bookable roster entry can exist without a provisioned worker — no ghost staff. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…list PATCH only created the Staff slot on initial create; promoting receptionist to stylist via edit left them bookable-less. Now mirrors onboarding in a transaction. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Editing a user's name now propagates to their Staff record in the same transaction, so the calendar and reports stay in sync with the account (removes the User/Staff name-drift smell). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Prepares the cross-domain handoff nonce to carry a staff User subject as well as an Owner, for apex staff login. Exactly one of ownerId/userId is set. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Parallel to the owner tokens; owner path untouched. root-staff carries the
password-verified {userId,salonId} pairs; staff-exchange is the single-use
cross-domain handoff for the staff session.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds a staff-exchange branch (consume nonce, re-verify active User, mint staff session) above the unchanged owner branch; shares subdomain/salon resolution. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Apex submit tries owner login then staff login; the salon picker tracks whether to select as owner or staff; reload-restore checks owner/me then staff/me. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Activity log + staff-model cleanup + apex staff login
…e UI Make the UI 100% driven by the design-system source of truth (no drift): - Named fontSize roles (micro/caption/body/subtitle/title) in tailwind.config, documented in DESIGN_SYSTEM.md as the single source of truth. - scripts/check-design.mjs (npm run lint:design): fails CI on arbitrary text-[Npx] and raw hex/rgb/hsl colors; exempts vendored ui/ + the no-JS fallback. - Normalized all 83 violations across 15 components/screens to the scale (text-[13px]->text-body, etc.) and removed a stray rgba() tooltip shadow. npm run lint:design now passes clean. tsc clean. Zero intended visual change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Changes
Testing
Checklist
mainCo-authored-by:trailer where applicablenpm run buildwhile the dev server is running)