Mmelite Ngwaahịa
Mgbanwe na ndozi ezipụtara site n'ewepụta nsụgharị.
Caloti na-ebipụta otu nsụgharị ngwaahịa nke otu maka weebụ, ngwa mkpanaka, na metadata mwepụta API. Nsụgharị a na-ebudatara ugbu a bụ 4.4.0.
E mepụtara 24 Mee 2026•Kpọtụrụ nkwado New
- Improve amenity and service category selection.
- Add OSM-based salon discovery script and 35 new amenities.
- Add tutorial-fixtures seed for completed bookings.
- Expand OSM salon discovery coverage.
- Persist google_place_id, wire MAX_IMAGES_PER_SALON, expand workflow countries.
- Require OSM email at discovery and Google match post-enrichment.
- Expand service and amenity picker metadata.
Fixed
- Extend amenities enum with inclusivity/wellness/discounts/products.
- Align ios eas capabilities.
- Downgrade transient SMTP and indexing alerts to warn.
- Preserve OSM hours and country fallbacks.
- Address bing scan findings.
- Address PR review feedback.
- Harden post-deploy SEO contract and keyword-rich CTAs.
Improved
- Reduce directory insight query payload.
- Split featured salons directory query to avoid join cartesian.
Changed
- Bump shared packages.
- Bump shared packages.
Fixed
- Stabilize e2e seed entity registry.
- Bypass signup burst limit for e2e runs.
- Align auth option tap targets.
- Align availability blocking statuses.
- Dismiss guest checkout keyboard.
- Filter occupied stylist slots.
- Hide empty notification destination.
- Hide recurring upgrade prompts from clients.
- Keep guest checkout option reachable.
- Open salon service selection reliably.
- Parse appointment times in salon timezone.
- Recheck occupied slots before submit.
- Submit guest checkout from keyboard.
- Switch guest checkout state atomically.
- Localize public follow-on copy.
- Add login account prompt fallback.
- Allow e2e screen capture bypass.
- Allow local android api cleartext.
- Format waitlist preferred times.
- Guard optional native startup modules.
- Localize salon details error fallback.
- Retain auth tokens after login.
- Smooth salon claim onboarding transition.
- Submit login from password keyboard.
- Address launch cleanup review feedback.
- Address manifest review feedback.
- Align discovery indexation and listing states.
- Avoid false empty search states.
- Canonicalize generic country pages.
- Canonicalize placeholder search urls.
- Clean public page fallbacks and sentry noise.
- Clean search snippets and salon-first copy.
- Localize public follow-on copy.
- Localize pwa manifest metadata.
- Polish public changelog copy.
- Polish public page metadata and fallbacks.
- Preserve city search filters.
- Remove public loading and admin copy leaks.
- Sanitize search placeholder filters.
- Tighten public indexation controls.
- Tighten search indexing and directory consistency.
- Associate floating labels with controls.
Changed
- Set up Dependabot for npm and GitHub Actions updates.
Fixed
- Render directory landing routes dynamically.
Fixed
- Generate lint-valid network security config.
Fixed
- Merge dev launch cleanup.
Fixed
- Tighten crawl controls and indexnow drain.
Fixed
- Force API translation hydration.
- Remove raw translation keys from header test ids.
- Render translated SSR auth forms.
- Render translated SSR chrome.
- Unblock translation startup.
- Clean up bing crawl edge cases.
- Redirect stale crawl paths.
New
- Add SendGrid editorial newsletters.
- Add newsletter contracts.
Fixed
- Keep indexnow deploy submissions body safe.
- Address PR review recommendations.
- Address SendGrid PR review feedback.
- Address console metadata and search map issues.
- Avoid dead service location links.
- Canonicalize www at nginx edge.
- Reduce search payload and seed localized cms posts.
- Stabilize localized CMS sitemap rows.
- Strengthen metadata for bing reports.
New
- Add backend search indexing pipeline.
- Add IndexNow deployment notifications.
- Improve search indexing observability.
Fixed
- Skip throttling for public seo reads.
- Improve article CTA contrast.
- Move trending salons below search.
- Ignore aborted plan requests.
- Address pr review feedback.
- Localize discovery links.
- Add server heading for salon profiles.
- Return 404 for missing salon profiles.
- Restore workspace test stability.
- Detect delete dependencies from pg catalog.
New
- Add shared salon directory details.
- Add marketplace-backed salon directory pages.
- Add salon directory translation text.
Fixed
- Update vulnerable direct packages.
- Suppress expected signup and cms noise.
- Address localization and monitoring feedback.
- Stabilize localized discovery flows.
- Address directory review feedback.
- Harden CMS article rendering.
- Harden directory service URLs.
Changed
- Bump shared packages.
- Bump shared packages.
Breaking Changes
- Add external invitation delivery summary.
New
- Improve provider invite sharing.
- Add external invitation delivery summary.
- Add invite channel helpers.
Fixed
- Pass signup abuse secret to backend runtime.
- Address review feedback.
Changed
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
Breaking Changes
- Registration risk enums move to shared enums.
- Shared User no longer includes signupIpHash or signupUserAgentHash. These fields are only on admin user detail contracts.
- Add registration anti-abuse helpers.
- Add signup anti-abuse contracts.
New
- Add external invitation endpoints with transactional claim flow.
- Add invite.\* translations across 34 supported locales.
- Add signup abuse controls.
- Add FAQ CTA button support.
- Improve editorial authoring.
- Localize FAQ CTA currency examples.
- Support localized FAQ content.
- Replace hero CTAs with integrated search bar and role links.
- Add web invite modal, channel buttons, and /invited landing.
- Add IntegratedSearchBar and redesign BrowseScreen with role CTAs.
- Add invite modal, /invited deep link, and registration token plumbing.
- Add directory content CMS foundations.
- Implement phase 2 indexation cleanup.
- Add external invitation contracts to types and utils.
- Add SEO content contracts.
- Expose invitation auth and anti-abuse contracts.
- Add signup anti-abuse contracts.
- Add registration anti-abuse helpers.
Fixed
- Align store pricing discrepancy detection.
- Contain admin shell horizontal overflow.
- Keep store sync response resilient.
- Preserve filtered pricing selections.
- Remove public chrome from admin routes.
- Stabilize pricing maintenance tables.
- Upsert app store price sync rows.
- Wrap pricing bulk edit controls.
- Support high-denomination country pricing.
- Address signup abuse review findings.
- Derive signup timing server-side.
- Harden signup abuse freshness counters.
- Improve content publishing flow.
- Style cms article links.
- Scope popular cities, services, and featured locations to detected country.
- Address external invitation review findings.
- Address follow-up review feedback.
- Address OAuth review feedback.
- Extend App Store sync timeout.
- Align public signup trust SQL.
- Fetch CMS sitemap posts by locale.
- Shrink sitemap payload.
- Unblock AI crawler indexation.
- Keep signup hashes admin-only.
- Extend store sync request timeout.
Changed
- Add more dependancies.
- Add SEO content contracts.
- Add SEO seed root scripts.
- Update brand and seo messaging.
- Update lock file.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
Fixed
- Use App Store territory currency.
- Preserve distance sorting aliases.
- Resolve recent sentry regressions.
- Centralize store endpoint constants.
- Allow manual employer salon creation.
- Suppress expected handled Sentry errors.
Improved
- Use shared namespace constants.
New
- Support manual salon phone entry.
Fixed
- Address PR 1052 review issues.
- Guard Notification API and quiet expected 4xx leaks to Sentry.
- Order stylist/salon distance by expression to survive .select clone.
- Enforce seat list response contract.
Fixed
- Provide preview API URL to EAS.
- Address dev promotion review.
- Address QA review comments.
- Bridge native login fallback.
- Map client upcoming appointments.
- Merge QA blocker fixes.
- Stabilize login and address QA blockers.
New
- Add country code helpers.
- Add unclaimed employer salon onboarding contract.
Fixed
- Address pr review feedback.
- Resolve open Sentry issues across web and api.
- Harden employer salon setup.
- Scope address country during onboarding.
Changed
- Commit remaining launch updates.
- Bump shared packages.
- Bump shared packages.
- Bump shared packages.
Fixed
- Restore error autopilot cleanup project default.
- Harden production verification flows.
- Prevent completed business onboarding retries.
- Show salon owner final submit action.
- Hydrate onboarding addresses.
- Align email resend flows.
- Improve code delivery flows.
- Stop profile reload loop.
Changed
- Remove error autopilot cleanup workflow.
Fixed
- Return canonical bookings response.
- Resolve active production issues.
Changed
- Update shared package versions - @caloti/types@16.2.26 - @caloti/shared-utils@16.2.25.
- Update shared packages.
- Remove error autopilot issue automation.
Changed
- Update AGENTS.md.
- Update Claude.md.
Fixed
- Stabilize cross-workspace test suites.
- Filter 404/423/security-audit events from Sentry.
- Filter expected HTTP status codes client-side on mobile + web.
- Tighten sentry noise filters.
Fixed
- Localize subscription confirmation pricing.
- Prevent NewConversationScreen infinite update loop.
Fixed
- Allow long app store price identifiers.
- Show localized subscription pricing.
- Address follow-up review feedback.
- Address review feedback.
- Align plan summaries and translations.
Changed
- Update shared package versions - @caloti/types@16.2.25 - @caloti/shared-utils@16.2.24.
- Update shared packages.
Fixed
- Use canonical store sync secrets.
- Wire store price sync credentials.
- Load subscription plans from RevenueCat.
- Untrack production env and tighten subscription tests.
- Address pr review findings.
Fixed
- Address shared-device review feedback.
- Clear persisted store data on account changes.
- Isolate persisted account state and keyboard-safe profile edits.
- Isolate shared-device persisted state.
- Scope persisted state by user.
- Scope remaining shared-device service storage.
- Log invitation-accept failures on the booking page.
Fixed
- Address PR review concerns on subscription contract and auth guard.
- Specific storefront mismatch copy and account-level telemetry.
- Resolve countryPricingId even when event carries pricing.
- Stop logging SALON_NOT_FOUND booking page errors to Sentry.
Changed
- Update shared package versions - @caloti/types@16.2.24 - @caloti/shared-utils@16.2.23.
Fixed
- Subscribe to FCM topics on mid-session grants; gate subscription UI.
- Canonicalize FCM device timezone on registration.
- Add notification permission and restore-mismatch keys.
- Initialize FCM registration after onboarding permission grant.
- Register token on first GRANTED and gate subscription self-management.
- Stop unprompted notification permission alert and add re-enable path.
- Canonicalize optional timezones.
- Enforce subscription ownership on restore and plan changes.
- Harden ownership and sync flows.
- Harden subscription e2e and salon owner contracts.
- Forward worker flags.
- Add restore account role mismatch keys.
Improved
- Consume canSelfManageSubscription/isSoloStylistUser from shared-utils.
- Consolidate NotificationProvider solo-stylist check.
Changed
- Stabilise misc mobile tests, tune test runner, document sub ownership.
- Update shared package versions - @caloti/types@16.2.19 - @caloti/shared-utils@16.2.18.
- Update shared package versions - @caloti/types@16.2.20 - @caloti/shared-utils@16.2.19.
- Update shared package versions - @caloti/types@16.2.21 - @caloti/shared-utils@16.2.20.
- Update shared package versions - @caloti/types@16.2.22 - @caloti/shared-utils@16.2.21.
- Update shared package versions - @caloti/types@16.2.23 - @caloti/shared-utils@16.2.22.
- Update shared packages.
- Update shared packages.
- Resolve ruby dependabot alerts and widen npm brace-expansion override.
- Clear lint errors in notification flow.
- Unblock mobile test type-check after shared types tightening.
New
- Add expired restore purchase status.
Fixed
- Address PR #1034 review feedback.
- Classify schema/query-definition Postgres faults as 500 and enrich logs.
- Exclude endDate from subscription sync snapshot.
- Add expired display e2e coverage.
- Complete owner feature gate follow-up.
- Complete owner feature gate follow-up.
- Resolve owner feature gate merge.
- Align mobile restore and management flows.
Improved
- Use captureContext form for Sentry messages and migrate withScope callers.
Changed
- Update shared package versions - @caloti/types@16.2.18 - @caloti/shared-utils@16.2.17.
- Update ve translations.
Fixed
- Exclude inactive branches from owner context.
- Address additional PR feedback.
- Address PR review feedback.
- Improve nguni and sotho locale quality.
- Improve southern african locale coverage.
- Reduce same-as-English locale debt.
- Sync subscription restore copy in remaining locales.
- Gate locked branches and harden iOS restore.
- Add owner salon context normalization.
Changed
- Update shared package versions - @caloti/shared-utils@16.2.16.
- Update shared package versions - @caloti/types@16.2.17.
New
- Add parked-branches banner on the salon-owner dashboard.
- Route BRANCH_LOCKED_FOR_PLAN responses to the upgrade screen.
- Tag dashboard salons with plan accessibility end-to-end.
- Render locked salon branches with re-subscribe cta.
- Add MobileAppBanner component for mobile install nudge.
- Render locked salon branches with re-subscribe cta.
- Wire up MobileAppBanner + apple-itunes-app meta.
- Add SALON_MANAGEMENT_MY_SALONS endpoint.
- Add BranchLockedReason and SalonAccessibilityFields.
- Tag SalonOwnerDashboardResponse.salons with accessibility.
Fixed
- Address Codex review on salon-management plan-lock path.
- Compute plan access on full owner list and return all salons.
- Gate multi-location branches when the salon owner's plan allows fewer.
- Address Codex review round 2 — plan-access + lock recovery.
- Prefer first accessible branch in salon fallback pickers.
- Localize mobile app banner copy.
- Sync bundled branch lock messaging.
- Sync feature tour locale contracts.
- Centralize access control across messaging flows.
- Stop onboarding auto-save from clobbering in-progress edits.
- Delete stale .well-known static files shadowing dynamic routes.
- Filter address autocomplete by selected country.
- Use canonical my-salons contract.
- Align branch access across clients.
- Sync translation key union.
Improved
- Consume BranchLockedReason + accessibility types from @caloti/types.
- Use SALON_MANAGEMENT_MY_SALONS constant in useParkedBranches.
Changed
- Update shared package versions - @caloti/types@16.2.12 - @caloti/shared-utils@16.2.11.
- Update shared package versions - @caloti/types@16.2.13 - @caloti/shared-utils@16.2.12.
- Update shared package versions - @caloti/types@16.2.14 - @caloti/shared-utils@16.2.13.
- Update shared package versions - @caloti/types@16.2.15 - @caloti/shared-utils@16.2.14.
- Update shared package versions - @caloti/types@16.2.16 - @caloti/shared-utils@16.2.15.
Fixed
- Pass release_notes via env to avoid bash quoting breakage.
Changed
- Restore pre-push hook executable bit.
Fixed
- Batch seo metadata lookups to remove N+1 query.
- Expose Twilio error code and reason on SMS send failures.
- Reject malformed region codes and log full Google error body.
- Stop sending expected 401 responses to sentry.
- Dedupe GOOGLE_PLACES_API_KEY line in backend deploy workflow.
- Align document smoke copy.
- Create and retain shared test users across specs.
- Isolate admin auth and stabilize admin flows.
- Stabilize admin and auth flows.
- Stabilize admin service category flows.
- Align admin service category copy.
- Block unsupported admin access.
- Harden gateway and mobile access guards.
- Emit clarity and expected-state messages as breadcrumbs.
- Gate sibling subscription hooks against anonymous 401s.
- Harden profile and places test contracts.
- Skip current-subscription query for anonymous users.
- Stop surfacing "Session expired" for anonymous 401s.
- Align salon owner e2e and locale state.
- Align test helpers and frontend regressions.
- Bootstrap e2e auth sessions from backend.
- Stabilize service category edit flow.
- Address reviewer feedback for PR #1030.
- Align pricing seeding and e2e flows.
- Persist onboarding state for fixture users.
- Seed stylist portfolio data for e2e.
- Align admin pricing and real auth flows.
- Stabilize auth and salon context fixtures.
- Align profile sharing and stylist not-found ux.
Fixed
- Pin EAS iOS image to Xcode 26.1 and build iOS first.
- Stabilize additional e2e flows.
- Stabilize e2e seat and package flows.
- Stabilize pricing and packages e2e.
Fixed
- Align web fixtures with current contracts.
- Pin EAS iOS image to Xcode 16.2 for Expo SDK 55.
- Stabilize e2e startup and not-found props.
Improved
- Consume shared Google URL helpers in seeds enricher.
Changed
- Drop stale mapbox mocks from jest.setup.js.
New
- Add Google Places types and Maps Platform URL helpers.
Fixed
- Drop Table-B hints from Google Places autocomplete request.
- Return paginated client bookings responses.
- Align booking contracts and translation fallbacks.
- Unpin EAS iOS image to default to avoid Xcode 26.2 breakage.
Improved
- Consume shared Google Places types and URLs.
- Use shared Google URL helpers in clients.
Changed
- Update shared package versions - @caloti/shared-utils@16.2.10.
- Update shared package versions - @caloti/types@16.2.11.
Breaking Changes
- Mapbox is fully removed. All geocoding, autocomplete, routing, and map rendering now uses Google APIs (Places API New, Geocoding, Routes, Maps JavaScript, Static Maps).
- Add GooglePlacesService + PlacesProvider interface; delete MapboxPlacesService.
- Rewrite GeocodingService to call Google Geocoding API only; map OVER_QUERY_LIMIT/REQUEST_DENIED to typed errors.
- Drop MAPBOX_ACCESS_TOKEN from env validator, .env files, and specs; require GOOGLE_PLACES_API_KEY at runtime.
- Rename salons.mapbox_place_id column to external_place_id via migration.
- Add googleMaps.service.ts (Maps JS + Routes) and GoogleMap.tsx.
- Collapse Map.tsx to a single Google provider (no dispatcher).
- Remove mapbox-gl, @types/mapbox-gl, @mapbox/search-js-react deps; add @googlemaps/js-api-loader + @types/google.maps.
- Rewrite Playwright specs + testIDs against Google endpoints.
- Replace Mapbox Static Images URLs with Google Static Maps in chat location previews (web + mobile).
- Extend nginx CSP with maps/places/routes googleapis.com; drop mapbox.
- Replace MAPBOX_ACCESS_TOKEN in CloudFormation (master + ec2-instances), generate-parameters, deploy workflows, and codex env.
- Require GOOGLE_PLACES_API_KEY, GOOGLE_PLACES_WEB_API_KEY, GOOGLE_MAPS_WEB_API_KEY secrets.
- Rewrite ARCHITECTURE Maps section, DEPLOYMENT, GITHUB-SECRETS-SETUP, FEATURE-PARITY, service-providers, platform-differences, copilot-instructions, README, and data-schema to reflect single Google provider.
Fixed
- Address PR #1026 Google migration review findings.
- Address review feedback on env validator, maps loader, mobile docs.
- Align test contracts and stabilize test runtime.
- Prevent language normalizer from throwing before validation.
- Prevent raw error keys leaking to clients.
- Localize registration conflict errors.
- Use EXPO_PUBLIC_GOOGLE_PLACES_API_KEY for chat static map previews.
- Stop calling Routes API from browser with Maps JS key.
Improved
- Replace Mapbox with Google Places across stack.
Fixed
- Address PR #1024 review findings (async prefill, locale, country scope).
- Address PR #1025 review findings (phone regression, auth perf, geocode perf).
- Eliminate cross-country bleed in search, invites, and auth cache.
- Route user-facing dates through device/user locale instead of en-US.
- Resolve Zimbabwe address/phone/profile cross-country bleed.
- Import PASSWORD_MIN_LENGTH from @caloti/shared-utils.
New
- Native iOS, web-direct Places, telemetry, E2E, translations.
- Route address autocomplete through device Google Places.
Fixed
- Address Codex + Copilot review feedback.
- Address fourth-round Codex P2 findings.
- Address second-round Codex P1/P2 findings.
- Address third-round Codex P1/P2 findings.
- Move resolvedSignupCountryName above openManualForm.
- Pass proximity to native Places on web.
- Remove legacy place alias and localize location alerts.
- Restore global.fetch assignment in nativePlaces test.
- Use expo autolinking searchPaths for local places module.
- Address bot-flagged issues in Google Places integration.
Improved
- Localize hardcoded a11y labels and alert strings.
Changed
- Improves google places integration.
New
- Distinguish expired subscriptions from never-subscribed.
- Expired-aware CTAs in feature gates, upgrade prompt, pricing.
Fixed
- Manual-entry country code + expired-sub resubscribe.
- Web parity for sparse-coverage + observability.
- Address autocomplete falls back to native geocoding in sparse-coverage countries.
- IPad keyboard can cover Continue button in country/language pickers.
- Phone country picker now respects manual user selection.
- Address PR 1021 review feedback.
New
- Expand product-supported languages to full catalog.
- Improve salon-owners and stylists landing pages , closes #join-process.
Fixed
- Align mobile subscription tests and backend locale bundles.
- Downgrade Mapbox per-suggestion retrieve failures to warn.
- Log 401 responses at warn level, not error.
- Translate salonOwner.locations.form.createButton across locales.
- Address iOS App Store rejection issues.
- Downgrade expected-behavior subscription telemetry to info.
- Downgrade storefront pricing mismatch from warn to info.
- Expose Restore Purchases to all roles in Settings.
- Route iOS navigation through Apple Maps via nativeMapsService.
- Fingerprint Sentry captureMessage calls by message.
- Improve icon contrast on landing pages.
- Repair plan fixtures and locale translations.
- Align suites with current app contracts.
Improved
- Remove unused GeofenceRegion interface.
Changed
- Update shared package versions - @caloti/shared-utils@16.2.9.
- Update shared package versions - @caloti/types@16.2.10.
- Ignore vscode workspace settings.
Fixed
- Address PR review feedback on Sentry fixes.
- Add fbq stub to prevent ReferenceError on SSO callback.
- Resolve Facebook OAuth emailNotVerified error.
- Add @rollup/rollup-linux-x64-gnu to frontend deploy deps.
- Install rollup + lightningcss linux binaries in deploy script.
- Guard subscription sync against missing auth token.
- Prevent false 'Visible in search results' for incomplete profiles.
- Prevent onboarding form text disappearing on re-render.
- Use graceful fallback when APP_URL is not configured.
- Skip feature check API call for anonymous users.
Improved
- Add in-memory cache to getSEOMetadata to fix N+1 pool connects.
New
- Optional client email, account/salon deletion, and type safety fixes.
- Add web discovery funnel events.
- Make client email optional in types and add optionalEmail validation.
Fixed
- Trace handled failures and clear timeout leaks.
- Stabilize oauth callbacks and enforce app url.
- Repair test workflow entrypoints.
- Bump npm direct dependencies for security.
Improved
- Align manual memoization deps with React Compiler.
- Clear purity/immutability/incompatible-library warnings.
- Hoist inline components out of render (static-components).
- Stop reading refs during render (react-hooks/refs).
- Stop syncing prop->state in effects (set-state-in-effect).
Changed
- Integrate pending WIP across mobile, node-api, and e2e.
- Lint zero errors, SSR dev troubleshooting, store-submission checklist.
- Update lock file.
- Update shared package versions - @caloti/types@16.2.9 - @caloti/shared-utils@16.2.8.
- Remove dead declarations, silence false-positive alt-text.
- Remove unused imports and fix prettier formatting.
New
- Upgrade consent and marketing tracking.
- Widen locale routing to 47 codes and extend plan localisation.
- Localise subscription plans and refresh landing pages , closes #feature-comparison.
- Add localised data deletion anchor and fix stylist footer link , closes #data-deletion.
Fixed
- Guard email verification tokens.
- Harden social sign-in callbacks.
- Preserve oauth callback errors.
- Surface provider oauth errors.
- Align seat confirmation availability.
- Preserve seat selection through confirmation.
- Align salon onboarding validation locales.
- Sync salon owner locale keys.
- Build iOS E2E app without Metro.
- Clarify subscription management.
- Compact service editor on phones.
- Enlarge register terms tap target.
- Expose nested card controls to accessibility.
- Hydrate guest auth register prefill.
- Make notification reads optimistic.
- Preserve guest booking resume state.
- Preserve guest registration resume prefill.
- Restore branch exit and subscription sync.
- Restore keyboard drag dismissal on form screens.
- Restore stylist onboarding salon flows.
- Sync external onboarding step updates.
- Align revenuecat ios dependencies.
- Defer diagnostics prompt until onboarding is done.
- Initialize country state for fresh sessions.
- Keep diagnostics prompt out of auth flows.
- Label client note editor input.
- Persist onboarding step changes before navigation.
- Prefer detected phone country.
- Require salon descriptions before continuing.
- Stabilize async service handlers.
- Suppress diagnostics prompt during onboarding.
- Use stable local ids.
- Capture auth and verification failures.
- Capture auth and verification failures.
- Capture handled auth and alert errors.
- Capture security settings failures.
- Expand request and privacy error capture.
- Expand sentry tracing and handled capture.
- Report verification flow failures.
- Trace password recovery failures.
- Trace profile completion failures.
- Trace profile media and document failures.
- Align e2e booking reset SQL with schema.
- Include pending stylist invitations in enrollment summary.
- Restore filtered seat queries.
- Seed business hours for test salons.
Changed
- Checkpoint local workspace changes.
- Improve localisation.
- Localisation improvements.
- Localisation improvements.
- Localisation improvements.
- Unblock lint + mobile typecheck, safe app-url defaults, plan i18n parity.
- Update shared package versions - @caloti/types@16.2.3.
- Update shared package versions - @caloti/types@16.2.4.
- Update shared package versions - @caloti/types@16.2.5.
- Update shared package versions - @caloti/types@16.2.6.
- Update shared package versions - @caloti/types@16.2.7.
- Update shared package versions - @caloti/types@16.2.8 - @caloti/shared-utils@16.2.7.
- Stabilise maestro flows, a11y labels, and auth-store formatting.
Changed
- Choe: update shared packages.
- Choe: update shared packages.
New
- Add active location owner context.
Fixed
- Address pr1014 review issues.
- Harden follow-on context flows.
- Surface branches in selectors.
- Remove customer-facing google analytics copy.
Improved
- Burn down salon warning debt.
New
- Align preference summaries across apps.
- Persist exact hair subtype ids.
- Add client preference formatters.
- Add client preference summary builder.
- Add communication preference helper.
- Add missing api endpoint contracts.
- Preserve exact client hair subtypes.
Fixed
- Improve branch setup and client details.
- Add hours telemetry and breaks label.
- Improve phone input and hours flow.
- Add telemetry and clean backend build.
- Share preference labels and log mutations.
- Align note access gates and sync locale keys.
- Mirror new location keys across locales.
- Restore onboarding integration runner.
- Address remaining location setup findings.
- Support numeric enum error mappings.
- Correct config and public endpoint contracts.
- Resolve stylist owner and notes parity.
- Unify stylist salon access checks.
- Normalize storefront country codes.
- Normalize storefront country codes.
- Tighten RevenueCat purchase handling.
- Tighten RevenueCat purchase handling.
Improved
- Remove dead preferred times field.
- Consume shared formatters.
- Consume shared summary builder.
- Use shared-utils endpoint contracts.
- Remove stale preferences settings flow.
- Use shared endpoint contracts for public data.
- Use shared verify payment endpoint.
Changed
- Update shared package versions - @caloti/shared-utils@16.2.2.
- Update shared package versions - @caloti/shared-utils@16.2.3.
- Update shared package versions - @caloti/shared-utils@16.2.4.
- Update shared package versions - @caloti/shared-utils@16.2.5.
- Update shared package versions - @caloti/shared-utils@16.2.6.
- Update shared package versions - @caloti/types@16.2.2.
- Reduce test noise and document integration runner.
New
- Enrich third-party integrations with free-tier features.
- Wire up Clarity events and GA4 subscription properties in business flows.
Fixed
- Create branch locations under root salon.
- Address location setup review findings.
- Replace any type in syncFromPaystack with strict shape.
Improved
- Simplify diagnostics consent prompt.
- Migrate RevenueCat REST API from V1 to V2.
- Simplify diagnostics consent banner.
Changed
- Fix API version docs and remove legacy FCM_SERVER_KEY fallback.
- Add location limit translations.
New
- Add diagnostics consent and reusable salon setup.
Fixed
- Persist language cookies consistently.
- Prefer storefront pricing for subscriptions.
- Use direct store quotes for subscriptions.
- Add global expo-web-browser mock to restore HomeScreen test suite.
- Navigate to stylist client details via Modal navigator.
- Surface subscription load failures.
- Align salon gating with runtime entitlements.
- Enforce billable entitlement contracts.
Improved
- Remove HomeScreen dead code and skip subscription fetch for clients.
- Replace local RootStackParamList with canonical navigation types.
Changed
- Fill missing locale keys.
Fixed
- Restore public salon seats route.
- Preserve localized request context.
- Handle storefront currency mismatches.
Fixed
- Address PR review — add Sentry Jest mock and filter active seats only.
- Add missing public seats endpoint for booking flow.
- Add Sentry observability to subscription screen and fix changelog URL.
- Simplify public changelog history.
Fixed
- Resolve sentry cli in eas hook.
- Stabilize replay consent state.
Fixed
- Align sentry expo builds.
- Correlate clarity with sentry.
- Harden clarity correlation state.
New
- Add sentry and clarity monitoring.
Fixed
- Address review feedback.
- Align release semver and mobile store pricing.
- Avoid heredoc parsing in release outputs.
- Block mismatched store currencies on mobile subscriptions.
- Cap semantic-release GitHub release body.
- Deploy main merges without new releases.
- Tighten client monitoring boundaries.
- Tighten replay privacy guards.
- Use clarity for replay only.
- Sync dev after main merges.
- Restrict commitlint pushes to branches.
- Stabilize frontend linux native deps.
- Support manual release deployment backfills.
- Localize public changelog route.
Changed
- Add commitlint dependencies.
Breaking Changes
- Replace monolithic consolidated migration with 7 domain-specific migrations.
New
- Api: implement missing mobile app endpoints.
- Mobile: add Firebase Crashlytics for native crash reporting.
- Mobile: add salon claim flow to onboarding (P1-9).
- Mobile: add stylist clients feature and enhance existing screens.
- Mobile: implement salon creation flow.
- Mobile: migrate to Continuous Native Generation (CNG).
- Mobile: upgrade to Reanimated 4.1.3 for New Architecture optimization.
Fixed
- Api: harden registerPreUploadedImages with transaction, dedup, and correct error behavior.
- Mobile: align launcher icon and restore type-check.
- Mobile: block onboarding navigation while gallery images are still uploading.
- Mobile: pass abort signal to eager gallery upload requests.
- Mobile: register missing gallery images on partial onboarding retry.
- Web: block onboarding Next while gallery images are uploading.
- Web: preserve gallery URLs on step remount and block nav on upload failures.
Improved
- Api: consolidate admin endpoints and standardize API tags.
- Mobile: replace hardcoded emojis with Lucide icons.
- Mobile: simplify Help & Support screen to email only.
- Mobile: use PLAN_FEATURES from @caloti/types as single source of truth.
New
- Add amenity category translations across locales.
- Add amenity slugs to search result summaries.
- Add mobile auth resume booking coverage.
- Add mobile onboarding claim and salon-stylist flows.
Fixed
- Fix locale coverage for service and favorites copy.
- Fix review reminder parity and stale app contracts.
- Fix role-aware subscription gates and booking parity.
- Fix stylist onboarding submit contract and parity regressions.
Improved
- Align search i18n with shipped locale contracts.
- Localize profile and document account surfaces.
- Remove translation fallbacks and isolate edge-safe locale imports.
- Standardize web icon rendering.
New
- Introduced the first coordinated mobile application release for broader internal and preview distribution.
Improved
- Stabilized shared package synchronization and release packaging across the product surfaces.
- General bug fixes and performance improvements.
New
- Initial mobile testing release for internal distribution.