Version Log
Version Log
2026-09-14 - v0.13.1 / Business Mobile v0.9.0 - Native Workspace
Prepares a supplier-workspace usability release with an explicit activation-success state,
list-first service management and pencil-led editing, a horizontally scrollable navigation dock
with Teams as a primary destination, and native Google Calendar consent that returns directly to
the Business app. The public homepage gains an app-like product preview while retaining all
customer service rails, supplier discovery, onboarding guidance, booking CTAs, and live-only
inventory rules. Local repository CI and Business Mobile checks pass. Scope:
`docs/releases/v0.13.1-business-mobile-workspace-polish.md` and
`docs/releases/business-mobile-v0.9.0-native-workspace.md`.
The hosted ARM64 workflow passed for commit `64ed19b` and produced the inspected v0.9.0/code 14
candidate. An architecture selector now also supports an x86_64-only build for desktop-emulator
smoke testing without changing the ARM64 handset release artifact.
The same-source x86_64 build passed run `34883427011` and launched cleanly on Android 15.
Artifact-bearing commit `481f809` passed exact-head CI run `34886208701`; Railway deployment
`7b7bf234-c1f8-466f-b20c-2c6ba5b5842f` reached terminal `SUCCESS`. Production reported
`0.13.1+481f809`, ready health, populated live discovery and brochure sections, and a public APK
whose 45,709,753 bytes and SHA-256 matched the verified ARM64 artifact. Physical-device v0.9.0
workspace and native Google Calendar acceptance remains pending-unverified.
2026-09-14 - v0.13.0 / Customer Mobile v0.4.0 - Live £0 Marketplace
Promotes the 18 seeded service titles into a genuine supplier catalogue owned by Marcus while
preserving hidden sample provenance and unrelated suppliers. The promoted services are active,
calendar-backed, automatically confirmed when available, and priced at £0. Mobile booking creates
one auditable `NOT_REQUIRED` receipt and now shows a clear £0 checkout promise, confirmation,
receipt, and progress experience. Live discovery retains populated Selected, Popular, New, £0
introduction, more-services, supplier, and service-collection rails. Same-account supplier
ownership and customer booking is supported and covered by an API regression test. Scope:
`docs/releases/v0.13.0-live-zero-price-marketplace.md` and
`docs/releases/mobile-v0.4.0-zero-price-booking.md`.
The carousel and service-detail surfaces also label £0 availability before checkout and describe
instant confirmation accurately.
The hosted v0.4.0/code 13 ARM64 candidate passed run `34856294077` and has SHA-256
`21354857c602b6b27a14e207299be43ee5631033088311a29a2feba756f6630d`.
APK-bearing commit `9ac254f` passed exact-head CI run `34858971001`; Railway deployment
`5988c639-0841-4f6e-8874-59c66dc819a0` reached terminal `SUCCESS`. Direct production checks
confirmed runtime `0.13.0+9ac254f`, complete Marcus supplier activation, all 18 genuine active
services at £0, populated live discovery, unchanged unrelated genuine supplier counts, and the
public APK checksum. Physical-device acceptance remains pending-unverified.
2026-09-14 - Business Mobile v0.8.5 - Guided Start and Floating Navigation
Adds a benefit-led, four-step introduction before supplier onboarding and keeps one clear action
into the existing wizard. The crowded full-width tab bar is replaced by a safe-area-aware floating
dock for Today, Jobs, Messages, and More; Calendar, Services, and Business remain explicitly
available in the More sheet. Authentication, tenant permissions, activation rules, and onboarding
fields are unchanged. The inspected, update-compatible ARM64 internal preview is published through
the stable Business APK route; physical-device visual and system-navigation acceptance remains
pending. Scope: `docs/releases/business-mobile-v0.8.5-guided-start-floating-navigation.md`.
2026-09-14 - v0.12.8 - Mobile Customer Brochure
Replaces the mobile-browser download-only gateway with a customer-first brochure explaining the
service-discovery value, pricing and availability benefits, labelled preview examples, conditional
£1 offers, and the four-step request journey. Customer download remains primary, the Business app
remains separate and secondary, and visitors retain a neutral path to the full website. The page
collects no data and does not change marketplace eligibility or booking behavior. Scope:
`docs/releases/v0.12.8-mobile-customer-brochure.md`.
2026-09-14 - Customer Mobile v0.3.2 - Preview Discovery and Engagement
Restores a useful Customer Home when no genuine supplier inventory is live. The API can return
the explicitly seeded preview catalogue on customer-app request, while preserving the default
live-only API and automatically preferring real eligible inventory. Customer Mobile keeps its
Selected, Popular, New, Special, and £1 welcome rails and adds supplier and bundle-idea rails,
tappable preview service details, visible sample labelling, and a prominent genuine booking CTA.
Preview services cannot create bookings. The inspected, update-compatible ARM64 internal preview
is published through the stable Customer APK route; physical-device acceptance remains pending.
Scope:
`docs/releases/mobile-v0.3.2-preview-discovery-engagement.md`.
2026-09-14 - Business Mobile v0.8.4 - Google Sign-In Activation
Repairs the Business app's disabled Google sign-in build configuration, keeps the route tree
mounted while Google's native activity returns, validates token-bearing allauth responses, and
adds an explicit release gate for both web and dedicated Business Android OAuth clients. The
Business app remains session-isolated from Customer Mobile. A GitHub-hosted ARM64 build workflow
provides a reproducible fallback for the documented Windows Gradle loopback failure and orders
Java setup independently of Expo-generated Gradle files. The signed ARM64 internal preview is
published through the stable Business APK route; physical-device and emulator acceptance remain
waived-unverified. Scope:
`docs/releases/business-mobile-v0.8.4-google-sign-in-activation.md`.
Unreleased - v0.12.7 - Customer and Supplier Workspace Switcher
Signed-in website users now get a persistent two-state workspace switch between **Book
services** and **Supplier management**. Each workspace shows its own navigation and clear
active state. Users without a supplier organisation are routed to setup rather than being
shown inaccessible management controls. The business-management banner now includes a visible
**Download supplier app** CTA on desktop as well as narrow screens. Scope:
`docs/releases/v0.12.7-workspace-switcher.md`.
The seed now also provides a complete, isolated **At-You Example Home Services** workspace for
supplier evaluation: one owner, two staff, working calendars, coverage, four active sample
services, and three bookings. Its password is deployment-secret driven, and known legacy shared
demo passwords are disabled. Sample inventory remains excluded from the genuine marketplace.
The seed loop uses explicit typed owner assignment for consistent Windows and Linux mypy results.
2026-09-13 - v0.12.6 - Customer Marketplace Entry / Mobile v0.3.1 Source Validation
The public root page is customer-first before login regardless of current supplier inventory.
It offers customer account and sign-in actions when no service is bookable, while keeping
supplier onboarding secondary. Selected, Popular, New, Special offer, and £1 welcome rails
remain visible with explicit empty states; only genuine customer-bookable services can become
cards. Popular ordering now uses genuine booking activity instead of update time.
Customer Mobile v0.3.1/code 11 mirrors those five rails on Home and no longer makes a search
button the dominant Home action. Source typecheck and fourteen Jest tests pass. Local APK
generation remains blocked before compilation by the host Gradle loopback failure, so the
public v0.3.0 internal-preview APK has not been relabelled or replaced. Scope:
`docs/releases/v0.12.6-customer-marketplace-entry.md` and
`docs/releases/mobile-v0.3.1-home-discovery-rails.md`.
Website implementation commit `dd82afb` passed exact-head GitHub CI run `34773711924` and
Railway deployment `c6d34d08-82df-4f93-853f-b887271c0ade` reached terminal `SUCCESS`.
Direct production checks confirmed ready health, `0.12.6+dd82afb`, the customer-first public
entry and all five discovery rails. The live API returned zero genuine eligible services, so
the rails correctly rendered truthful empty states and no sample supplier was exposed.
2026-09-13 - v0.12.5 - Truthful Marketplace Landing
The public homepage now chooses its first-value journey from genuine customer-bookable
supply. When supply exists, customers see a direct **Find/book a service** action and genuine
service discovery. When it does not, the page leads with verified supplier onboarding, a
concrete activation-readiness preview, and an explicit marketplace-status limitation instead
of empty popularity claims. Privacy, help and terms, supplier pricing, and release limitations
are visible at the decision point. Debug-signed Android previews are no longer promoted on the
landing page. No customer stories, demand metrics, savings, reviews, or supplier proof were
invented. Scope: `docs/releases/v0.12.5-truthful-marketplace-landing.md`.
Implementation commit `0ac5a58` passed exact-head GitHub CI run `34771402764` and reached
Railway terminal `SUCCESS` as deployment `446f4587-c106-4cce-b7a5-d521d9dbc138`. Direct
production checks reported `0.12.5+0ac5a58`, ready health, zero eligible customer services,
the supplier-first CTA, no customer-booking CTA, and no Customer or Business APK link on the
landing page. No production data was changed.
2026-09-13 - v0.12.4 - Genuine Supplier Activation
Website suppliers can now complete the existing owner-only business activation action without
depending on the unreleased Business APK. The onboarding form captures the customer contact
email already required by the API, and both clients use one readiness service. Remote and
location-flexible services no longer require irrelevant postcode coverage; location-bound
services still do. Activation requires a verified owner email, genuine non-sample service,
active delivery member, active staff calendar, and overlapping service/calendar hours. Missing
items are returned as specific owner actions, and successful activation is audited. Scope:
`docs/releases/v0.12.4-genuine-supplier-activation.md`.
Production-safe evaluation further split profile and delivery guidance into field-level actions,
so suppliers are not asked to repeat already-complete setup.
Implementation commit `8bab587` passed GitHub CI run `34747420951` and reached terminal
Railway `SUCCESS` as deployment `828b3353-667d-45a6-af26-d63aeea5bce9`. Direct production
checks reported `0.12.4+8bab587`, ready health, authentication protection, and no eligible
customer services before owner activation. No production supplier or customer data was changed.
2026-09-13 - v0.12.3 - Trustworthy Live Catalogue
Customer discovery and booking now use one server-authoritative eligibility rule: only an
active, non-sample service owned by an active, non-sample supplier can be shown or booked.
The rule covers website and Customer Mobile discovery, detail, coverage, availability,
basket holds, and final booking creation. Production sample records remain available to
administrators but can no longer masquerade as fulfilable customer appointments. Scope:
`docs/releases/v0.12.3-trustworthy-live-catalogue.md`.
Candidate implementation commit `f65bd07` was pushed and locally validated. GitHub CI run
`34744606469` reproduced the repository-wide Ruff baseline and stopped before tests. The
candidate now includes a separate mechanical cleanup of all 64 baseline findings without
disabling Ruff rules. Repository-wide Ruff, focused tests, and the full regression suite pass
locally. CI run `34745014064` then exposed 23 baseline mypy findings; a second typed mechanical
cleanup now passes mypy across all 260 source files without ignores.
CI runs `34745322768` and `34745498439` reproduced a Linux-only Django-plugin construction
crash under mypy 2.3.1 and 2.3.0. Diagnostic run `34745656895` identified runtime evaluation
of generic Django field annotations as the cause. Provider model annotations are now postponed,
the temporary mypy pin is removed, and exact-head CI run `34745821714` passed at `c0da346`.
The release was fast-forwarded to `master` at `3dbccce`; integrated-master CI run
`34746041584` passed and Railway deployment `eed3744d-d8c8-4ee2-a2fd-7af858e02d15`
reached terminal `SUCCESS`. Direct production checks reported `0.12.3+3dbccce`, an empty
eligible catalogue, no customer booking links, and 404 responses for representative sample-
supplier and onboarding-supplier service details. No production data was mutated.
Unreleased - Customer Mobile v0.3.0 - Guided Native Flow
Customer Mobile v0.3.0 adds double-back exit protection on Home, stronger shared button
feedback, explicit booking-time acknowledgements, and a simpler context-aware availability
choice. Customer Google Calendar connection, status, and disconnection now live inside the
app, using native Google consent and a JWT-authenticated server-code exchange rather than a
website handoff. Opening business onboarding now durably hides the homepage supplier-
acquisition carousel before the first profile save. Scope:
`docs/releases/mobile-v0.3.0-guided-native-flow.md`.
2026-08-31 - Customer Mobile v0.2.1 - Google Session Resilience
Production evidence showed Google provider exchange returning 200 before an immediate
refresh request returned 500 on another Railway worker. Customer Mobile v0.2.1 eagerly
loads the cryptography serialization dependency in every Django worker, securely persists
and validates both access and refresh tokens, avoids unnecessary refresh on navigation
remounts, and retains saved credentials through temporary service failures. Signed-in users
are redirected away from the Google prompt. The website also hides its Become a supplier
carousel after business onboarding has started. Scope:
`docs/releases/mobile-v0.2.1-google-session-resilience.md`.
2026-08-31 - v0.12.2 - Viewport-aware carousel autoplay
Website discovery carousels now autoplay only while the complete carousel section is
visible in the browser viewport. Autoplay pauses as soon as the section becomes partially
obscured, remains paused during hover or while the browser tab is inactive, and resumes
when the whole section is visible again. Manual previous/next controls remain available.
2026-08-30 - Customer Mobile v0.2.0 - Customer Marketplace Home
Customer Mobile now follows the customer website's discovery structure with a dedicated
marketplace Home, Popular, New, Special offer, and £1 welcome rails. A five-item bottom bar
places Home in the centre, while device safe areas plus deliberate ten-pixel offsets keep
the At-You header and navigation clear of Android system UI. The app version is visible in
the header and Account, and Google remains the sole customer sign-in option. Scope:
`docs/releases/mobile-v0.2.0-customer-marketplace-home.md`.
Website and Customer Mobile discovery carousels now share smooth adjacent-card movement:
the website schedules GPU-composited transforms per animation frame, while mobile uses
native snapping, fast deceleration, and bounded previous/next controls.
Non-empty rails always render at least five eligible card slots. The website uses seamless
edge clones and balanced 800ms easing so wrapping never reveals empty space or jumps across
the track. The released ARM64 APK is version 0.2.0/code 8.
Unreleased - Customer Mobile v0.1.6 - Google Session Hotfix
Customer Mobile now offers Google as its only sign-in method, restores the encrypted mobile
refresh token once at startup, serializes refresh-token rotation, and prevents protected
booking screens from rendering while session restoration is in progress. This fixes the
v0.1.2 APK behavior where a successful Google login could return to sign-in and repeatedly
request authentication throughout booking. Scope:
`docs/releases/mobile-v0.1.6-google-session-hotfix.md`.
Unreleased - v0.12.2 - Account Connection Hub
Account settings now distinguishes sign-in identities from separately consented calendar
access. It reports customer and business calendar addresses, connection state, selected
calendars, last availability refresh, privacy boundaries, and booking-event delivery mode,
with direct links to the appropriate detailed calendar workspace. The page remains useful
before connection, explaining optional customer overlays and supplier-only work calendars.
Scope: `docs/releases/v0.12.2-account-connection-hub.md`.
The Railway demo catalogue now deterministically includes five public special offers and
five separate supplier-funded £1 welcome offers. Startup reseeding updates only sample
services, so real suppliers retain full control of their own pricing and participation.
Unreleased - v0.12.1 / Customer Mobile v0.1.5 - Customer Calendar Overlay
Customers can separately connect Google Calendar with free/busy-only consent, select the
calendars used for matching, show or hide private busy blocks in the booking chooser, and
ask for the next slot where they and the supplier are both free. Customer Mobile exposes
the same connection status, secure website handoff, conflict feedback, and mutual-slot
search through the shared API. Customer and supplier connections, consent, tokens, and
busy intervals are isolated server-side. Scope:
`docs/releases/v0.12.1-customer-calendar-overlay.md`.
Unreleased - Business Mobile v0.8.3 - Calendar parity
Customer Mobile now receives authoritative effective pricing and displays original price,
offer price, saving, and £1 welcome status. Business Mobile can configure supplier-funded
£1 eligibility, public special pricing, and first/second/third-booking discounts through
the shared API. Customer Mobile now explains that its staff and next-slot results include
live connected-calendar availability. Business Mobile reports production connector and
event-write readiness, shows per-account sync state, and retains the secure website OAuth
handoff. Source tests and typechecks pass. APK replacement remains blocked by the Windows
Gradle `Unable to establish loopback connection` failure; existing verified APKs remain
published.
2026-08-30 - v0.12.0 - Booking Logistics (Web)
Implements staff-owned, multi-calendar Google free/busy connections with encrypted
credentials, incremental write consent, direct event creation or iCalendar invitations,
and safe cancellation. Service-level confirmation and staff-selection policies feed one
authoritative website/API slot engine. Website and Customer Mobile now support `Any staff
member`, visible unavailable staff, and next-slot discovery; Business Mobile reports
connection readiness and provides a secure consent handoff. Outlook, Apple, and Yahoo
remain roadmap connectors. Google sandbox, production OAuth/secrets, APK regeneration,
and physical-device acceptance remain release gates. Scope:
`docs/releases/v0.12.0-booking-logistics.md`.
The booking journey now uses an intuitive calendar-first date/time picker, respects each
service's minimum booking lead time, and displays linked supplier company information.
Suppliers can publish service-specific terms beside the booking action; the accepted terms
are included in the immutable booking snapshot for later audit.
Production activation adds Google's narrow calendar-list read-only permission alongside
free/busy access so staff can select calendars without granting broader read access.
Direct event creation remains feature-gated until Google's sensitive-scope verification is
complete; invitation delivery remains available in the production connector.
Railway deployment `bb058dd5-2933-4729-99c2-e447763e8689` reached `SUCCESS` at commit
`e80bce2`. Live health/version, encrypted-token configuration, callback URI, and Google
OAuth entry checks passed without redirect or client errors.
The customer bookings calendar no longer exposes its legacy local mock connector or
mixes supplier-owned Google connections into the customer list. Customer personal-calendar
overlay subsequently moved into v0.12.1; supplier free/busy matching remains live.
Unreleased - v0.11.0 - Welcome Offers
Adds supplier-funded, opt-in £1 customer acquisition offers, truthful public special
pricing, and configurable first/second/third service-booking discounts. A server-side
three-offer customer allowance, non-stacking price selection, booking snapshots, and
auditable supplier funding protect checkout integrity. Membership pricing is parked.
Scope: `docs/releases/v0.11.0-welcome-offers.md`.
2026-08-30 - v0.10.1 - Coordinated Mobile Handoff Follow-up
Removed the customer-to-business dead end by expanding the phone-browser gateway into
a choice of Customer app, Business app, or a session-scoped full-website bypass. Mobile
website handoffs now preserve their intended local destination and reject external return
URLs. Supplier workspaces advertise the Business app, and Customer Mobile source now
respects Android top and bottom safe areas. The existing APK artifacts remain unchanged
pending a successful Android rebuild. The authenticated desktop sidebar now also shows
upcoming booking and message counts beside their navigation labels. A dismissible homepage
guidance banner groups the tutorial and both app downloads, with user and administrator
preference controls; Help now documents the five-step journey and app links. Mobile website
access is explicitly marked as not recommended, and the primary CTA reads "Book services now".
The CTA now uses a reduced-motion-aware attention glow and the tooltip reads "Browse and
book services today". All 14 seeded services have distinct, title-specific imagery and
descriptive alt text instead of repeating one image across each category.
The login-banner preference now renders as a conventional checkbox. Desktop guidance
advertises Customer and Business app availability without presenting download buttons;
the Android gateway retains downloads and describes the Customer app as the quick,
easy way to browse and book services.
2026-08-23 - v0.10.1 - Supplier Continuation and Mobile Refresh
Authenticated users with an incomplete supplier organisation now see a focused
`Continue supplier onboarding` homepage card instead of the generic supplier-acquisition
carousel. It shows current progress, the next three incomplete checklist stages, and a
direct link to the first outstanding stage. Coordinated internal Android builds refresh
Customer Mobile to v0.1.2 and Business Mobile to v0.8.1. Scope:
`docs/releases/v0.10.1-supplier-continuation-and-mobile-refresh.md`.
Unreleased - Business Mobile v0.8.0 - Native Onboarding
Adds native supplier business creation, default plan and owner membership, a server-derived
readiness checklist, guided setup destinations, and guarded business activation. Scope:
`docs/releases/business-mobile-v0.8.0-native-onboarding.md`.
The local implementation audit now records every supplier roadmap capability through
v0.8.0 as native or intentionally bounded; Android device acceptance remains pending.
Unreleased - Business Mobile v0.7.0 - Plans, Payments and Analytics
Adds server-derived subscription, payment-readiness, transaction, booking, completion,
gross-value and received-funds views, with owner-only plan and setup actions. Scope:
`docs/releases/business-mobile-v0.7.0-plans-payments-and-analytics.md`.
Unreleased - Business Mobile v0.6.0 - Teams and Permissions
Adds owner-controlled staff invitations, operating teams, roles, active status, and
allowlisted supplier permissions for bookings, services, and team management. Scope:
`docs/releases/business-mobile-v0.6.0-teams-and-permissions.md`.
Unreleased - Business Mobile v0.5.0 - Services and Coverage
Adds supplier-scoped draft creation, core service editing, readiness-checked publish,
unpublish and archive actions, plus native postcode coverage management. Scope:
`docs/releases/business-mobile-v0.5.0-services-and-coverage.md`.
Unreleased - Business Mobile v0.4.0 - Staff and Calendars
Adds native shared staff-calendar creation, active-member visibility, and audited
job assignment with organisation and permission enforcement. Scope:
`docs/releases/business-mobile-v0.4.0-staff-and-calendars.md`.
Unreleased - Business Mobile v0.3.0 - Jobs and Messaging
Adds strict audited supplier job progression and a tenant-scoped customer messaging
inbox with thread replies, unread tracking, and existing content moderation. Scope:
`docs/releases/business-mobile-v0.3.0-jobs-and-messaging.md`.
Unreleased - Business Mobile v0.2.0 - Identity and Recovery
Adds native Google authentication, verified primary and backup login addresses,
and an independently managed public business contact email. Login-address changes
retain the same supplier identity and organisation ownership; unverified addresses
cannot become primary. Scope:
`docs/releases/business-mobile-v0.2.0-identity-and-recovery.md`.
Unreleased - Business Mobile v0.1.0 - Operations Foundation
Established At-You Business as a distinct professional supplier app with its own
native package and secure session, supplier-scoped bootstrap dashboard, booking
request list and accept/decline actions, and focused website handoffs. Customer and
business identities may use separate email addresses while sharing the authoritative
Django identity and permission service. Scope:
`docs/releases/business-mobile-v0.1.0-operations-foundation.md`.
Unreleased - v0.10.0 - Payments and Checkout Foundation
Building a payment-aware checkout with per-service payment modes, authoritative price
and deposit calculation, durable payment records, idempotent provider events, customer
receipts, supplier transactions, and platform diagnostics. Local payment simulation is
explicit; real Stripe activation fails closed until the Connect charge model and
merchant-of-record treatment are approved. Scope:
`docs/releases/v0.10.0-payments-and-checkout-foundation.md`.
The integrated release candidate also publishes the first internal At-You Business APK,
refines the supplier-benefits carousel, and makes customer booking staff-aware. Customers
can choose any available staff member or a configured individual; service operating hours,
staff calendars, existing bookings, and basket holds determine availability, while
unavailable staff remain visible but disabled.
2026-08-18 - v0.9.1 - Mobile Browser App Gateway
Made `/mobile/` the only human-facing website page available to phone browsers and
removed the session-scoped website continuation. Native API and authentication paths,
the stable APK download, static/media assets, health, and version endpoints remain exempt
so the Android app and platform operations continue to work. Desktop browsers retain the
complete website. Scope: `docs/releases/v0.9.1-mobile-browser-app-gateway.md`.
2026-08-17 - v0.9.0 - Booking Lifecycle and Availability
Built the next web-primary minor release: an authoritative booking lifecycle, supplier
accept/decline, customer cancellation and amendment/rescheduling, atomic availability
validation, and expiring basket slot holds. Held basket items can now be submitted as
`REQUESTED` bookings without implying that payment occurred. The additive mobile API
exposes permitted actions and the website handoff while remaining compatible with Mobile
v0.1.x. Payments and native supplier management remain explicitly excluded. Scope:
`docs/releases/v0.9.0-booking-lifecycle-and-availability.md`.
Unreleased - Product Delivery Policy
Defined the website as the complete primary At-You product and the native app as a
companion experience. Added an authoritative feature-parity matrix, standard website
handoff behaviour, explicit main/mobile workstream ownership, and mandatory client-impact
fields for future release scopes. No application behaviour or deployed version changed.
Unreleased - Mobile Browser App Welcome
Added a mobile-user-agent-gated welcome page that offers the stable latest Android APK
on the first homepage visit. Visitors can continue to the full website and suppress the
welcome page for the remainder of their browser session; desktop visitors are unaffected.
Unreleased - Mobile v0.1.1 - Authentication Hotfix
Replaced the rejected Android browser OAuth redirect with native Google Credential
Manager authentication and restored an always-visible email/password sign-in form.
The password path uses the existing django-allauth Headless login endpoint and does
not persist password values. The ARM64 APK is version `0.1.1` / code `2`, retains the
registered package and signing certificate, and replaces the Git-tracked stable
latest artifact after automated and binary validation. Physical-device authentication
UAT remains open. Scope: `docs/releases/mobile-v0.1.1-authentication-hotfix.md`.
Unreleased - v0.8.0 - Customer Mobile API
Built a versioned customer API for native service discovery, postcode coverage,
profile and address management, request-to-book, customer booking management, and
contextual messaging. The API uses django-allauth Headless bearer authentication and
keeps payment, baskets, instant confirmation, and all supplier operations out of
scope. Automated validation is complete; manual device UAT and the existing repository
lint baseline remain open. Scope: `docs/releases/v0.8.0-customer-mobile-api.md`.
Unreleased - Mobile v0.1.0 - Customer Alpha
Built an Expo React Native customer app for Android internal testing with an iOS-
compatible code path. The app includes Explore, Bookings, Messages, and Account.
Supplier management is a website-only handoff that says `please use the full website`.
Automated checks and Android export pass; configured Google clients and device UAT
remain open. Scope: `docs/releases/mobile-v0.1.0-customer-alpha.md`.
The 2026-08-17 distribution follow-up adds the verified ARM64 APK to Git and exposes
it from the website homepage through the stable latest-build route
`/downloads/at-you-mobile-latest.apk`. Future approved builds replace the tracked
file without changing the customer-facing URL.
2026-08-14 - v0.7.1 - Sidebar, Discovery and Welcome Guidance
Building a responsive full-height application sidebar with user/admin access first,
outlined active sections, and icon-only narrow-screen behaviour. The homepage scope
adds independent Popular, New services, Special offers, and supplier-benefits
carousels. The final patch adds account-backed welcome tips with live service
spotlighting and maintainable booking-flow previews. Scope:
`docs/releases/v0.7.1-sidebar-discovery-and-welcome-guidance.md`.
Final visual acceptance enlarged the welcome guide to 680 x 590px, expanded its
preview area, and fixed it at the bottom-left beside the sidebar so it remains in
one place throughout all five steps.
The shipped tutorial now uses self-contained screenshot-style interface panels on
all five steps. Live page spotlighting and the Popular services outline were removed
so the homepage never appears permanently selected behind the guide.
Unreleased - v0.6.0 - Location-Aware Service Discovery
Locked the prospective scope for postcode-aware service discovery and booking
validation. Implementation has not started. The release will introduce reusable
customer locations, supplier postcode service areas, delivery classification, and
one authoritative coverage gate spanning catalogue, booking, basket, and checkout.
2026-08-11 - v0.5.5 - Ultra-Modern Minimalist
Replaced platform-dependent emoji interface icons with a shared stroke-only SVG
sprite across desktop navigation, mobile navigation, the homepage journey, service
discovery, and connected-account controls. Icons now inherit colour and use a
consistent geometry, stroke weight, and size system.
Added a selectable Minimal theme alongside Green and Blue. The theme uses neutral
surfaces, monochrome actions, restrained borders and shadows, tighter radii, and
system-first typography while preserving the existing interaction model.
2026-08-11 - v0.5.4 - Supplier Onboarding and Aesthetic Polish
Refined the shared visual system and streamlined the first-supplier journey. New
suppliers now see onboarding first, with a horizontal numbered progression,
prerequisite locks, navigation progress, and a responsive focused workspace.
The supplier plan experience now defaults new organisations to the Team introductory
offer, presents Free, Team, and Enterprise in a stable responsive selector, updates
the selected plan summary live, and prices Enterprise at GBP 29.99 per month. Mobile
navigation now exposes Platform admin to authorised users and keeps onboarding first.
2026-08-10 - v0.5.3 - Shared Staff Calendars (source-control package)
Packaged the local v0.5.3 supplier scheduling and service-management work for
source control. No Railway deployment was performed.
**Included**
- Organisation-owned weekly staff calendars reusable across multiple active members.
- Supplier Calendars workspace with shared assignment, editing, activation state,
tenant isolation, and warnings for members without active availability.
- Central availability resolver requiring service hours and an eligible member's
active staff calendar to overlap.
- Service-management Archive and Unpublish confirmation dialogs; Archive removes a
listing from customers and Unpublish returns an active service to Draft.
- Native and Django-admin supplier-profile reset tools for onboarding testing, with
user-account retention and protected-booking safeguards.
- Smaller rounded Book now header control with a reduced-motion-safe pulse.
**Validation**
- `manage.py check`: pass.
- Migration drift: none.
- Django tests: 30/30 pass.
**Rollback note:** revert application code to packaged v0.5.2. The v0.5.3 provider
migration must be reversed only after calendar records have been reviewed.
Production metadata follow-up
- Railway runtime identity now derives its short SHA from
`RAILWAY_GIT_COMMIT_SHA` when `.git` is unavailable in the container.
- Railway production now always derives `Railway <version>` from the packaged app
version, preventing stale environment overrides; local builds retain configurable
`Local <version>` metadata.
Reset-onboarding navigation follow-up (local commit)
- Users without a persisted supplier organisation now see only Onboarding in the
desktop My Business menu, supplier sidebar, and mobile business navigation.
- The complete supplier navigation returns after the business profile is saved.
- Corrected the reset path's UUID persistence check so an unsaved organisation
cannot create an orphaned subscription record.
- While the mandatory onboarding checklist remains incomplete, the checklist is
presented as a focused full-width workspace and the My Business sidebar is
hidden. The full sidebar returns when onboarding reaches 100%.
Release lock
- The accepted v0.5.3 onboarding-focused build was validated locally and released
from `master` to Railway production.
2026-08-09 - v0.5.2 - Wizard Delivery Completion (local package)
Implemented and validated the v0.5.2 local package. This is a source-control
package only; it has not been deployed to Railway UAT.
**Included**
- Service Delivery roster selection scoped to active organisation members.
- Inline team invitations that remain pending until accepted.
- Service-level weekly hours with organisation timezone and publish validation.
- Responsive wizard layout, fixed always-visible navigation/actions, and explicit
Save as draft / Save and publish controls.
- Review-only AI suggestions in the wizard and a collapsible AI suggestions section
in Service management.
- Create/edit return path to Service management.
- Explicit Edit, Publish/Unpublish, and Copy controls; Copy creates an independent,
pre-populated service for review before saving.
- Corrected emergency-password login regression test.
**Excluded**
- Shared staff calendar templates and staff availability resolution (proposed for
v0.5.3).
- External calendar synchronization, per-date exceptions, booking allocation, and
basket slot holds.
- Railway/UAT deployment.
**Validation**
- `manage.py check`: pass.
- Migration drift: none.
- Django tests: 19/19 pass.
- Testkit UAT smoke: 3/3 pass.
- Testkit mobile baseline: 3/3 pass at 360, 390, and 768px.
**Rollback note:** v0.5.1 remains the deployed Railway baseline until a separate UAT
release is approved.
2026-08-05 - v0.5.2 planning snapshot (local-only)
Planned next patch after v0.5.1 is **v0.5.2**, scoped to roadmap item #31:
inline team-member and schedule creation inside Step 4 (Service Delivery)
of `/catalogue/services/new/`, with wizard-state persistence and no
context loss.
This entry records planning only. Execution mode for this phase is
**local-only** (no push/deploy).
**Included (target scope)**
- Step 4 inline actions: add member and define schedule without leaving
the wizard flow.
- Immediate availability of newly created data in Step 4 selection UI.
- Validation and UX feedback for incomplete/invalid delivery setup.
- Regression guards for header medium-width behavior and GBP pricing flow.
**Excluded (deferred)**
- Railway/UAT release deployment.
- Broader scheduling engine expansion beyond Step 4 workflow completion.
**Risk checks**
- Wizard data persistence across inline create/cancel/save.
- Mobile usability for Step 4 inline interactions.
- No regressions on v0.5.1 header/nav/publish paths.
**Rollback note:** keep v0.5.1 as baseline (`c02ead8` release commit).
2026-08-05 - Model handoff: claude-opus-4.7 → gpt-codex
Session handoff after v0.5.1 was shipped to Railway UAT. Outgoing model
(claude-opus-4.7) captured session state in `docs/roadmap.md` and
`docs/journal-2026-08-05.md`. Incoming model: gpt-codex. No code changes
in this entry - handoff marker only.
2026-08-05 - v0.5.1 - Header + wizard polish (packaged release)
Packaged release bundling multiple locally-iterated fixes and small
features, following the release strategy (local-first, patch-gate,
one deploy per bundle).
**Header / navigation**
- Icon-mode single-row top bar: at the medium desktop width (≤1100 and
≥981) the header no longer stacks vertically; nav items shrink from
word labels to icons via new `.nav-ic` / `.nav-label` spans, keeping
the bar to a single row until the sidebar layout takes over at 980.
- `.header-cta` (Book now) explicitly preserved as a green pill in all
modes - it does not collapse to icon.
- Optimistic client-side `active-nav`: on click, JS moves the highlight
to the clicked link immediately instead of waiting for the server
render. Middle-click / cmd-click / ctrl-click are ignored so
"open in new tab" does not misapply state.
- Active-nav visual strengthened in icon mode (deeper blue background
plus a 3px green inset underline) so the highlight is unmistakable
on tiny emoji buttons.
- `.nav-item[open] { z-index: 650 }` retained from v0.5.0.1 so open
dropdowns still paint above wrapped header-right content.
**Basket**
- True in-place edit workflow retained from v0.5.0: modal "Edit" button
opens `bookings/basket/<item_id>/amend/` with three explicit choices:
Save changes, Discard changes, Cancel booking. Item id preserved on
save; discard uses an `<a>` link, cancel uses `formnovalidate`.
**Service creation wizard (`catalogue/services/new/`)**
- `.wizard-form` switched from `overflow: hidden` to `overflow-y: auto`
so step 2 (Description and scope) can scroll when content overflows.
- Field labelled `Price pence` replaced with `Price (£)`. New
`price_gbp` DecimalField on `ServiceForm` accepts pounds input,
saves as pence to the underlying `price_pence` model field. Edit
view pre-fills from existing pence.
- `instant_bookable` now carries explanatory help text (generic version
plus an IT Advisory-specific variant).
- Wizard template renders `field.help_text` under every field via
new `.wizard-help` style so form guidance is visible inline.
- New step 4 **Service Delivery** containing `assignment_strategy`
(Primary / Secondary / Round-robin), with an inline paragraph
explaining each strategy. Removed `assignment_strategy` from
step 3 (Pricing and delivery). Wizard progress grid updated to
five columns; intro copy updated to "five short steps"; the
previous "Policies and publish" panel is now step 5.
**Rollback:** revert to `ba9681c` (v0.5.0.1).
2026-08-05 - v0.5.0.1 - Top-bar dropdown fix when header wraps to 2 lines
Follow-up to the v0.5.0 z-index bump. User reported that the My Bookings
and My Business dropdowns were still hidden - but only when the desktop
browser is zoomed enough that the top bar wraps onto two lines.
Root cause: when `header` wraps, `.header-right` (user avatar, theme
picker, messages) drops onto line 2 directly beneath the nav-item
triggers. The dropdown menu positions `top: calc(100% + 0.2rem)` below
its trigger, landing in the same visual band as line-2 content. Both
live inside `.site-header`'s stacking context and header-right comes
later in DOM order, so it painted over the dropdown.
Fix: `.nav-item[open] { z-index: 650 }` in `templates/base.html`. The
open details element now creates a stacking context that outranks all
following flex siblings within the header, letting the dropdown paint
over the wrapped line-2 header content.
2026-08-05 - v0.5.0 - True basket item edit with save / discard / cancel + desktop top-bar dropdown z-index fix
Replaces the v0.4.6 delete-and-recreate Amend flow with an actual in-place
edit. Users can now change any field of a basket item without losing the
item id and without an intermediate empty-form step.
- New view `basket_amend_view(request, item_id)` in `bookings/views.py`
handles GET (pre-fills `BookingCreateForm` / `ItAdvisoryBookingForm`
from the stored basket item's `scheduled_start`, `duration_minutes`
and full `details` dict) and POST with three actions:
- `save`: validates form, mutates the target item in place while
preserving its original `id`. Redirect back to basket.
- `discard`: no mutation, redirect back to basket with "Changes
discarded" info message. Exposed as an `<a>` link so form
validation is skipped.
- `cancel`: removes the item from the basket (destructive), redirect
back to basket with confirmation. Uses `formnovalidate` so users
can cancel even if they've entered invalid form data.
- New URL: `bookings/basket/<str:item_id>/amend/` name
`bookings:basket-amend`.
- `templates/bookings/create.html` extended with a new
`is_basket_amend_mode` branch: heading reads "Edit basket item: X",
and the submit row shows three buttons (Save changes, Discard changes,
Cancel booking) instead of a single Book Now button.
- `templates/bookings/basket.html`: the modal "Amend" button renamed to
"Edit" and now navigates (GET) to the amend URL carried on each
remove-form as `data-amend-url`. The previous flip-action-to-amend JS
is gone.
- `bookings/views.py::basket_view`: removed the v0.4.6 `action == "amend"`
branch (delete-and-recreate is no longer the fallback path).
Minor version bump (0.5.0) because this adds a genuinely new workflow
(view + URL + template mode) rather than tweaking existing surface.
**Also in this release - desktop top-bar dropdown z-index fix**:
- `.site-header` `z-index` raised from `30` to `500`; `.nav-dropdown-menu`
raised from `35` to `600`. The header is `position: sticky` which
forms its own stacking context bounded by its own z-index; any page
section painting later at a comparable or higher z-index could clip
the My Bookings and My Business dropdown panels. Raising both values
keeps the dropdowns above all normal page content while remaining
below full-screen modals (which sit at 2000+).
2026-08-05 - v0.4.6 - Basket Amend button
Adds an Amend action to the basket per-item remove confirmation modal so
users can change date/time/details without losing their place.
- `templates/bookings/basket.html`: modal now shows three actions -
Keep it, Amend, Remove. Explanatory line added: "If you want to change
the date, time or details instead, choose Amend." Each remove form now
carries `data-item-id`. Amend click flips the form's `action` hidden
input to `amend` and submits.
- `bookings/views.py::basket_view`: new `action == "amend"` branch
removes the target item from the basket and redirects to
`bookings:create?service=<service_id>` so the user can re-enter
the booking with fresh choices. Falls back to plain remove if the
item has no `service_id`.
2026-08-05 - v0.4.5 - Basket per-item remove with confirmation modal
UX fix. Previous basket used a two-step multi-select flow (tap each item to
toggle a "selected" state, then tap a "Delete (N) services" button, then
confirm) that was unintuitive on mobile.
- `templates/bookings/basket.html`: each item now has its own per-item
`<form>` with `action=remove` and `item_id` posted directly. Submitting
the form is intercepted by JS and opens a lightweight confirmation modal
asking "Are you sure you want to remove [item name] from your basket?"
with "Keep it" and "Remove" actions. Confirm submits the form; cancel
closes the modal with no side effect.
- Multi-select toggle state, the "Delete (0) services" button, and the
associated hidden-input sync JS are all removed. Fewer moving parts,
matches mainstream shopping-cart mental model.
- Backend `basket_view` in `bookings/views.py` unchanged — it already
supported the `action=remove` + `item_id` path.
- Modal actions stack vertically on `<=480px` viewports and use 44px+
touch targets throughout.
2026-08-05 - v0.4.4 - Account page mobile chrome, calendar active-state, label copy
Bugfix release addressing three user-reported issues from real-phone testing of v0.4.3.
- **Account/Connections/MFA pages didn't fit mobile viewport** — django-allauth
ships its own `allauth/layouts/base.html` which extends nothing, rendering
bare HTML with no site chrome. Fix: created local
`templates/allauth/layouts/base.html` that extends our `base.html`, giving
allauth pages the same mobile nav, wrap constraints and card styling as the
rest of the site. To make this possible, `templates/base.html` main content
was wrapped in a new `{% block page_content %}` around the existing
`{% block content %}` so allauth's override can replace the outer wrapper
while non-allauth pages that override `content` continue to work unchanged.
- **Calendar tab highlighted while viewing basket/checkout** — the mobile
bottom-bar Calendar link's active-state check matched any URL containing
`/bookings/`, but the basket lives at `/bookings/basket/`. Fix: consumer-mode
Calendar `<a>` in `templates/base.html` now excludes `/bookings/basket/` and
`/bookings/checkout/` from the active check.
- **Homepage CTA copy**: "See the 4 steps" → "See how it works" in
`templates/home.html`.
Screenshots: `docs/mobile-baseline/v0.4.4/`. Testkit: 3/3 pass.
2026-08-05 - v0.4.3 - Mobile business-mode bottom bar + viewport-fit fix
Feature + bugfix release.
**Business-mode bottom bar**: when the user navigates into any
`/providers/*` path or the `/calendar/my-business/` calendar, the mobile
bottom bar swaps from consumer tabs to a business-specific tab set,
providing dedicated one-tap access to the most-used business surfaces
without buried menu diving.
- **`templates/base.html`**: mobile bottom bar is now conditional on
`request.path`:
- Business mode: Dashboard / Services / Team / Calendar / Menu.
- Menu drawer in business mode contains Customers, Onboarding, Plan
comparison, Tiers, Teams management, plus a highlighted "Back to
consumer view" action that returns the user to `/`.
- Consumer mode: unchanged (Home / Calendar / Basket / Menu).
**Viewport-fit fix (was breaking real-phone rendering)**: user reported
needing to pinch-zoom out on their actual device. Root cause: the
`<=980px` sidebar-rail media block sets `.site-header + .wrap { margin-left: 74px; }`
which continued to apply at 360px because that rule cascaded into the
`<=480px` scope unchallenged. The main content `.wrap` was being pushed
74px to the right, causing the layout to overflow the viewport.
- `.wrap { margin-left: 0 !important; margin-right: 0 !important; padding-left: 12px !important; padding-right: 12px !important; }` override in the `<=480px` block.
- `html, body { max-width: 100vw; overflow-x: hidden; }` safety net.
- `img, video, iframe, table { max-width: 100%; }` prevents wide media from forcing horizontal scroll.
- `.popular-viewport { max-width: 100%; }` contains the popular-services carousel.
- **`pyproject.toml`**: 0.4.2 -> 0.4.3.
- **Evidence**: `docs/mobile-baseline/v0.4.3/`. Login and home at 360x800 now fill the viewport cleanly with no horizontal shift.
- **Known Issue #006 CLOSED** by the viewport-fit fix.
- **Known Issue #007 CLOSED** by the business-mode bottom bar (approach 1).
2026-08-05 - v0.4.2 - Mobile chrome: single-row top bar, defensive z-index
Bugfix/polish release following v0.4.1 user review.
- **`templates/base.html`**:
- Top bar collapsed from two rows to one: full-width search + person
icon (routes to `socialaccount_connections` if authenticated, else
`accounts:login`). Circular `A` brand mark and green Book Now CTA
removed (search covers the primary action).
- Top bar height shrunk ~96px -> ~52px, `body { padding-top: 60px; }`
freed for content.
- Bottom bar hardened: `position: fixed !important`, `z-index: 1500`
(was 1000) so it always sits above page content and cannot be
accidentally covered by higher-z-index widgets on inner pages.
- `body { overflow-x: hidden; }` added on phones as a safety net for
Known Issue #006 (home page horizontal shift).
- `.site-header { display: none !important; }` on phones to prevent
any auth-context override from bringing the desktop header back.
- **`pyproject.toml`**: 0.4.1 -> 0.4.2.
- **Evidence**: 21 PNGs recaptured; check `01-home.png` at 360 for the
new one-row top bar.
2026-08-05 - v0.4.1 - Mobile chrome refinements: two-row top bar, 4-icon bottom bar, how-it-works modal
Feature release refining the v0.4.0 mobile chrome after Amazon-app-style
analysis. Adds a dedicated top bar (logo + Book Now + search) and a
cleaner 4-icon bottom bar with a Menu drawer, and collapses the
how-it-works flow into a modal on phones.
- **`templates/base.html`**:
- New `.mobile-top-bar` element (fixed top, ~96px): row 1 = circular
brand mark + full-width green "Book Now" CTA + basket-or-signin icon;
row 2 = full-width search form pointing at
`catalogue:service-list?q=...`.
- New `.mobile-bottom-bar` element (fixed bottom, 60px): 4 tabs -
Home / Calendar / Basket / Menu. Basket shows red numeric badge when
`basket_count > 0`. Calendar routes to bookings dashboard (auth) or
login (anon). Menu is a `<details>` drawer that pops upward with
Browse services, Messages, My business, My account, Become a
supplier, Help, Privacy.
- Old `<= 480px` sidebar-turned-bottom-bar rule replaced with
`.site-header { display: none }` on phones; the new bars provide all
navigation.
- Blue theme overrides for both bars.
- **`templates/home.html`**:
- On `<= 480px`, hides `.flow-frame` and shows a `.flow-mobile-opener`
button ("See the 4 steps") that opens a fullscreen `.how-modal`.
- Modal uses semantic `<div class="how-modal" open>` toggling via
inline JS, keeps the four steps with icons + descriptions in a
stacked list.
- **`pyproject.toml`**: 0.4.0 -> 0.4.1.
- **Search**: submits `?q=` to the catalogue list view. Server-side
filtering NOT implemented yet - logged as follow-up in Known Issue
#005.
- **Evidence**: `docs/mobile-baseline/v0.4.1/{360,390,768}/*.png`.
2026-08-04 - v0.4.0 - Mobile compatibility: bottom tab bar for phones
Feature release. First mobile-first pass on the public/anonymous surface.
Kills the 74px left sidebar rail on phones (which was eating ~20% of a
360px viewport) and replaces it with a fixed bottom tab bar that reuses
the existing `.compact-nav` emoji markup. Desktop and tablet layouts
untouched.
- **`pyproject.toml`**: 0.3.4 -> 0.4.0.
- **`templates/base.html`**: added `@media (max-width: 480px)` block:
- `.site-header` re-positioned from left-sidebar to fixed bottom bar
(full width, 62px tall, `z-index: 1000`, border-top not border-right).
- `.brand` hidden on phones (saves horizontal space).
- `.compact-nav` switches from vertical column to horizontal row with
`justify-content: space-around`.
- `.compact-nav a` bumped from 2.55rem (~40.8px) to 44x44px for
WCAG-compliant touch targets.
- `body { padding-bottom: 68px; }` so page content is never hidden
beneath the bar.
- `.site-header + .wrap { margin-left: 0; }` overrides the sidebar
inset (was 74px).
- Blue theme override for the bottom bar background.
- **Scope**: anonymous public pages (home, catalogue, become-a-supplier,
login, signup, terms, privacy). Auth-required flows, messaging,
calendar, and provider dashboards deferred to v0.4.1.
- **Evidence**: `docs/mobile-baseline/after-v0.4.0/{360,390,768}/*.png`
(21 PNGs) captured via `testkit run mobile-baseline`.
2026-08-04 - testkit v0.3.0 - Mobile screenshot harness (no app bump)
Adds screenshot capture to the standalone testkit so we can produce
before/after visual evidence across mobile viewports. No changes to the
Django app; app version stays at 0.3.4.
- **`testkit/testkit/drivers/browser_driver.py`**: added `set_viewport`
and `screenshot` step handlers. Constructor now accepts `output_dir`
and writes PNGs to `<output_dir>/screenshots/<name>.png`.
- **`testkit/testkit/runner.py`**: passes the per-scenario results
directory into `BrowserDriver` so artifacts land in the run tree.
- **New profile** `testkit/scenarios/profiles/mobile-baseline.yaml` with
three flows: `mobile-baseline-360`, `mobile-baseline-390`,
`mobile-baseline-768`. Each captures 7 anonymous pages (home,
catalogue, become-a-supplier, login, signup, terms, privacy).
- **Baseline evidence** copied to `docs/mobile-baseline/before-v0.4.0/`
(21 PNGs at three viewports) proving the pre-v0.4.0 mobile state.
2026-08-04 - v0.3.4 - Version identity reliability (closes Known Issue #003)
Bugfix release. Kills the class of failure where the admin footer or a
tester's browser reports a stale version string after a commit +
auto-restart, because orphaned `runserver` processes from earlier terminal
sessions were still bound to :7000 and kept serving their boot-time
snapshot of `APP_RUNTIME_VERSION`.
- **`scripts/stop_local_silent.ps1`**: after killing the tracked PID in
`.django-server.pid`, now sweeps any process listening on TCP :7000 via
`Get-NetTCPConnection` and force-kills it. Orphans can no longer
accumulate silently.
- **`config/settings/base.py`**: `APP_RELEASE_LABEL` now defaults to
`f"Local {APP_VERSION}"` when the env var is unset - was previously
hardcoded via `.env` and drifted (stuck on `Local 0.3.0` since v0.3.0).
- **`.env`**: removed the stale `APP_RELEASE_LABEL=Local 0.3.0` line.
- **New public endpoint `GET /version/`** (`common.views.app_version`,
wired in `config/urls.py`): returns JSON with `app_version`,
`runtime_version`, `release_label`, `last_commit`, `last_deployment`,
`pid`, `process_uptime_seconds`. Lets any tester verify what the running
process actually booted with, without needing admin login to see the
footer. Works locally and on Railway.
- **Docs**: `docs/known-issues.md` Issue #003 marked RESOLVED.
2026-08-04 - v0.3.3 - Teams pages respect Green/Blue theme
Bugfix release. Prior to v0.3.3 the Teams management and Team detail pages
were built with hardcoded hex colors and did not respect the user's theme
selection - they looked bluish in both Green and Blue mode.
- **Refactor** `templates/providers/teams_management.html` and
`templates/providers/team_detail.html` onto CSS design tokens:
`--card`, `--bg-soft`, `--ink`, `--muted`, `--line`, `--line-strong`,
`--accent`, `--accent-soft`, `--accent-strong`.
- **New token** `--accent-strong` added to `base.html` for the darker
hover-state accent (Green: `#0b5a54`, Blue: `#1d4ed8`). Replaces three
hardcoded `#1d4ed8` occurrences in `base.html` (`.btn:hover`,
`nav a.book-online-nav:hover`, `.header-cta:hover` under Blue theme).
- **Semantic colors preserved** (theme-invariant by intent):
- Success status `#e7f5e9` / `#1e7028`
- Destructive buttons `#dc2626` / `#b91c1c`
- White button text `#fff`
- **Verification**: existing `uat-smoke` (3/3) and `browser-smoke`
`theme-switcher-persistence` (1/1) still green. Teams page theming
verified manually - automated Teams theming scenario deferred until
the testkit seed endpoint exists.
2026-08-04 - dev-tooling: testkit v0.2.0 browser layer (no app version bump)
Extends testkit with a Playwright/Chromium browser driver - still local-only,
still zero Django imports.
- **New driver** `testkit/testkit/drivers/browser_driver.py`:
- Playwright sync API, headless Chromium by default (`headed=True` opt-in).
- Single-key step vocabulary matching http driver style:
`goto`, `click`, `reload`, `wait_ms`, `expect_attr`, `expect_local_storage`,
`expect_text`, optional `expect_status` on `goto`.
- Owns browser/context/page for scenario lifetime; cleaned up in `finally`.
- **Runner** now dispatches `layer: browser` scenarios instead of skipping them.
- **New scenario** `theme-switcher-persistence.yaml` - end-to-end proof that:
- Default theme is Green.
- Clicking Blue writes `data-theme="blue"` and `localStorage.ays-theme="blue"`.
- Blue survives a full page reload (pre-hydration inline script works).
- Blue survives cross-page navigation to `/catalogue/services/`.
- Test resets back to Green so no persistent footprint is left behind.
- **New profile** `browser-smoke.yaml` - dedicated browser-layer suite.
- **Deps**: `playwright==1.62.0` installed into `.venv`; Chromium headless
shell downloaded via `playwright install chromium`.
- **First green run**: 1/1 passed, 3.7s warm / 14s cold.
2026-08-04 - dev-tooling: git hooks + testkit v0.1.0 (no app version bump)
Delivered developer-tooling improvements only; no change to `pyproject.toml` app version.
- **Git hooks** (`scripts/hooks/`):
- `pre-commit`: enforces every commit updates `docs/version-log.md`,
`docs/roadmap.md`, and today's `docs/journal-YYYY-MM-DD.md`.
- `post-commit`: stop/starts the local Django dev server via existing
`scripts/stop_local_silent.ps1` and `scripts/start_local_silent.ps1`.
- `install.sh`: idempotent installer to copy hooks into `.git/hooks/`.
- **testkit v0.1.0** — new standalone `testkit/` module at repo root:
- Zero Django imports; treats the app as a black-box HTTP target.
- HTTP driver, YAML scenario + profile loader, runner, per-run artifacts,
tracked history ledger.
- CLI: `python -m testkit {list,lint,run,history}`.
- 3 initial HTTP scenarios (`homepage-anonymous`, `route-matrix-anonymous`,
`theme-switcher-markup`) and one profile (`uat-smoke`).
- First green run: 3/3 passed in 133ms.
- **Design docs**:
- `docs/testing/hybrid-gui-testing-model.md`
- `docs/testing/hybrid-gui-testing-standalone-architecture.md`
(local-only scope decision recorded).
- **Secrets protection**: `railway-env-backup-*.txt` added to `.gitignore` to
prevent future accidental commits of the OAuth client secret that was caught
just before the v0.3.2 push.
Concise deployment scope
- Included: git hooks, testkit module foundation, design docs, .gitignore hardening.
- Excluded (deferred): Playwright browser driver, pre-push hook, test-only Django
bootstrap endpoint, HTML report.
- Not deployed to Railway (dev-tooling only, no runtime code changes).
2026-08-04 - v0.3.2-teams-scheduling-calendar-grids-and-themes
- **Team management** (Roadmap item 25):
- New `Team` and `TeamMember` models (providers app) with multi-team support per organization.
- Team member roles: `TEAM_ADMIN`, `CALENDAR_ADMIN`, `MEMBER`.
- Teams CRUD UI at `/providers/teams/` with create modal and per-team detail/member management.
- "Teams" link surfaced in My Business sub-navigation.
- **Service scheduling foundations** (Roadmap item 25):
- Added `assignment_strategy` field on `Service` (STRICT_PRIMARY, PRIMARY_FALLBACK, PRIORITY_ORDER, BALANCED_LOAD).
- Added `eligible_teams`, `eligible_members` M2M and `schedule_config` JSONField on `Service`.
- Service form wizard Step 3 exposes assignment strategy selection.
- Full allocation engine deferred to v0.3.3.
- **Calendar permissions** (Roadmap item 26):
- New `scheduling/permissions.py` with role-scoped checks: org owners and Calendar Admins get full access, team members see own calendar, customers see only own bookings.
- **Calendar grid views**:
- `my_bookings_calendar` and `my_business_calendar` now support Today / Week / Month / 90 Days / List views via `?view=` query param.
- Added helper generators `_generate_month_calendar`, `_generate_week_days`, `_generate_ninety_days`.
- View switcher buttons on both templates.
- **Theme switcher** (new):
- Top-bar 🎨 icon (visible to all users and guests) opens dropdown with **Green** (default heritage palette) and **Blue** (crisp modern palette).
- Themes implemented via CSS-variable overrides on `:root[data-theme="..."]`; instantly re-themes all components using CSS vars (buttons, cards, forms, header, messaging/chat panel).
- Preference persisted in `localStorage` and applied in `<head>` inline script to prevent flash.
- Version bump to 0.3.2 in `pyproject.toml`.
- Documentation: `TESTING-v0.3.2-READY.md`, `docs/v0.3.2-features.md`, `QUICKSTART-v0.3.2.md`.
Concise deployment scope (v0.3.2)
- Included:
- team management foundation (models, views, templates, admin, migrations),
- service scheduling model fields and assignment strategy selection UI,
- calendar permissions module,
- calendar grid view modes (today/week/month/90-day/list) for both customer and business calendars,
- top-bar theme switcher with Green and Blue palettes.
- Excluded (deferred to v0.3.3):
- full booking allocation engine (assignment strategies not yet enforced at booking time),
- team member availability calendars,
- service capacity model (ONE_TO_ONE vs GROUP),
- complex schedule builder UI (time-slot picker),
- mark-messages-as-unread,
- refactor of Teams templates onto CSS variables (currently hardcoded palette).
- Primary risk checks:
- Teams CRUD renders and add/remove member works,
- service form wizard renders assignment strategy without regression,
- both calendar views render in all five view modes without error,
- theme switcher persists across reloads and does not flash on page load,
- migrations apply cleanly.
2026-08-04 - v0.3.1-messaging-ux-overhaul
- Delivered Roadmap item 27 (messaging workspace UX and status signals):
- Top-bar speech bubble (💬) icon with unread badge.
- Dropdown showing recent conversations (via new API `/messages/api/recent/`).
- Right-side chat panel (~25% viewport width) opens when a conversation is selected, allowing chat while keeping main site visible.
- Send-message API (`/messages/api/conversation/<id>/send/`) and conversation detail API (`/messages/api/conversation/<id>/`).
- Context processor for unread message count available in base template.
- Version bump to 0.3.1 in `pyproject.toml`.
Concise deployment scope (v0.3.1)
- Included: messaging dropdown, chat panel, send/receive API endpoints, unread badge, context processor.
- Excluded (deferred): mark-messages-as-unread, amber attention indicators on nav, WhatsApp/email fan-out.
2026-08-03 - v0.3.0-messaging-and-calendar-foundations
- Added **messaging module** (`messaging` app) with conversation and message models:
- `Conversation` model with origin tracking (catalogue/booking-pending/booking-completed/general), topic, and status (active/close-requested/closed/archived).
- `ConversationMessage` model with sender, body, read status, and moderation flags.
- Conversation list, start, and detail views with send/close/continue actions.
- Baseline safety filtering to block messages containing bank/card/password/OTP patterns.
- Admin interface for conversation and message management.
- Added **calendar/scheduling module** (`scheduling` app) with calendar connection and event models:
- `CalendarConnection` model for Google/Outlook OAuth connections with active sync target flag.
- `CalendarEvent` model for customer/business scoped events linked to bookings/organizations/users.
- My Bookings calendar view (`/calendar/my-bookings/`) for customer event visibility.
- My Business calendar view (`/calendar/my-business/`) for supplier event visibility.
- Admin interface for calendar connections and events.
- **Navigation IA refinements** (Roadmap items 24, 29):
- Moved calendar entry points inside **My Bookings** and **My Business** dropdown navigation groups (removed standalone "My Calendar" top-level nav).
- Moved "Book now" action to first position in left-hand navigation.
- Removed standalone "Services" header from top navigation.
- Calendar links now nested under My Bookings dropdown ("My bookings calendar") and My Business dropdown ("My business calendar").
- Added Messages link to main navigation (full messaging UX overhaul with dropdown/panel deferred to v0.3.1).
- Updated roadmap with items 21-29 capturing messaging, calendar, team roles, and UX refinements planned for v0.3.x series.
- Fixed template variable shadowing issue (renamed `messages` to `conversation_messages` in conversation detail view).
Concise deployment scope (v0.3.0)
- Included:
- messaging app foundation (models, views, templates, migrations, admin),
- calendar/scheduling app foundation (models, views, templates, migrations, admin),
- calendar IA placement (nested in My Bookings and My Business dropdowns per roadmap item 24),
- header nav IA refinements (Book now first, Services header removed per roadmap item 29),
- navigation links for messaging,
- roadmap updates for v0.3.x feature scope.
- Excluded:
- messaging UX overhaul (dropdown, chat panel, unread indicators) - deferred to v0.3.1,
- granular team roles (Team Admin, Calendar Admin, multi-team support) - deferred to v0.3.2+,
- booking metrics consistency (exclude cancelled bookings) - deferred to v0.3.2+.
- Primary risk checks:
- messaging conversation create/list/detail pages render without errors,
- calendar my-bookings and my-business views render without errors,
- navigation structure correct: Book now first, calendar nested in My Bookings/Business dropdowns, no standalone Services or Calendar top-level items,
- migrations apply cleanly on fresh database,
- no Django check warnings or errors.
2026-08-03 - v0.2.6.1-railway-deployment-fix (HOTFIX)
**Railway Deployment Issue Resolution**
- Fixed critical Railway deployment cache poisoning issue where deployments showed SUCCESS but served stale v0.2.2 code instead of latest v0.2.6 from GitHub.
- Implemented nuclear option: complete Railway service recreation to bypass stuck build cache.
- Created new Railway service (ID: `3d46985a-7a41-4c8d-bbe2-9450b37971ec`) connected to GitHub repo `marcuscowles-tech/at-you-home-services` master branch.
- Restored all environment variables and database connection to new service.
- Production deployment now correctly serving v0.2.6 code at `https://at-you-home-services-production.up.railway.app`.
Deployment procedure
- Documented environment variables from old stale service
- Deleted old Railway service (ID: `b804ac82-6ba0-4488-a18a-0a085a039a92`)
- Created fresh Railway service from GitHub repo
- Restored environment variables: `APP_RELEASE_LABEL`, `DJANGO_SETTINGS_MODULE`, Google OAuth credentials, `DATABASE_URL` service reference
- Verified fresh deployment from commit `789c355` (v0.2.6)
- Confirmed `/docs/` version log displays correctly through v0.2.6
Impact
- **Downtime**: ~5 minutes during service recreation
- **Service URL**: Unchanged (preserved by Railway)
- **Database**: Unchanged (Postgres service connection restored)
- **Data Loss**: None
Documentation added
- `docs/journal-2026-08-03.md` - Build journal documenting resolution
- `docs/known-issues.md` - New known issues log with detailed Railway deployment cache poisoning entry
- `railway-env-backup-2026-08-03.txt` - Environment variable backup template
References
- See `docs/railway-deployment-issue.md` for detailed investigation timeline
- See `docs/known-issues.md` Issue #001 for resolution procedure
- GitHub commit: v0.2.6 (`789c355`)
- Railway Project ID: `5e59beb0-35d1-47fc-9fed-8a83ba407d23`
2026-08-02 - v0.2.6-onboarding-progress-and-timezone-hardening
- Standardized supplier onboarding timezone input to a canonical dropdown list of IANA timezone values.
- Refined supplier onboarding checklist sidebar to reduce clutter:
- removed per-item description/example text from sidebar navigation,
- added per-item completion percentages,
- added per-item progress bars.
- Reworked checklist progress math so each step contributes explicit progress percentage and overall onboarding progress is derived from stage progress totals.
Concise deployment scope (v0.2.6)
- Included:
- onboarding timezone dropdown hardening,
- onboarding checklist per-item progress UX,
- checklist aggregate progress math update.
- Excluded:
- calendar module implementation,
- service scheduling/team allocation engine,
- dispute framework buildout.
- Primary risk checks:
- onboarding form timezone selection and save behavior,
- sidebar checklist item rendering and panel navigation,
- progress percentages and bars match underlying step state.
2026-08-02 - v0.2.5-team-invitations-and-bookings-dashboard
- Added a top-level **Bookings dashboard** (`/bookings/dashboard/`) with booking KPIs, basket summary, spend summary, and next-booking quick actions.
- Updated My Bookings top navigation so dashboard is the landing page and added an explicit dashboard link inside the bookings dropdown.
- Reworked supplier team management UI to reduce clutter:
- replaced inline invite form with an invite modal,
- added pending invites section with revoke action,
- added account-level invite acceptance section for invite recipients.
- Implemented supplier team invitation workflow aligned to customer-first accounts:
- user signs up as customer,
- supplier invites by primary email,
- user accepts invite and becomes supplier staff while remaining customer.
- Added invite persistence and lifecycle model (`OrganisationMemberInvite`) with pending/accepted/revoked states.
- Added non-user invite handling with signup-required messaging and queued outbound message records.
- Added post-signup invite linking so newly registered users with pending invites receive in-app invite notifications and queued email records.
Concise deployment scope (v0.2.5)
- Included:
- bookings dashboard page and menu routing updates,
- supplier team invite modal + pending invite controls,
- invite acceptance/revocation endpoints,
- invite model + migration,
- signup-time invite linking and notification records.
- Excluded:
- live email template rendering/send worker implementation,
- notification-center UI in header,
- platform-global service management (roadmap item 19).
- Primary risk checks:
- bookings dashboard and bookings-menu navigation integrity,
- supplier invite create/revoke behavior by owner,
- invite acceptance behavior by matching recipient account email,
- non-user invite guidance messaging and invite persistence across signup.
2026-08-02 - v0.2.4-supplier-sidebar-and-tier-management
- Added a persistent **My Business** vertical left sidebar across supplier private-area pages for clearer section switching.
- Kept supplier dashboard as an overview-only page (data and links), removing direct tier-upgrade/downgrade actions from dashboard cards.
- Added a dedicated supplier **Tiers** page (`/providers/tiers/`) with:
- user-specific current tier visibility,
- tier cards,
- contextual upgrade/downgrade actions,
- confirmation prompts before plan changes,
- in-page comparison table.
- Added provider plan change endpoint (`/providers/plans/change/`) and server-side plan update flow with validation and feedback messaging.
- Added onboarding page sidebar parity and reduced onboarding plan-panel clutter by linking tier actions/comparison to the dedicated Tiers page.
Concise deployment scope (v0.2.4)
- Included:
- supplier left-sidebar IA across core private pages,
- dedicated user tier management page,
- provider plan action flow (upgrade/downgrade) with confirmations,
- onboarding page alignment with supplier workspace navigation.
- Excluded:
- payment options and platform config admin GUI,
- location "near me" mapping/radius model rollout,
- service-hours timezone widget,
- provider tag taxonomy administration.
- Primary risk checks:
- supplier page navigation consistency and active-state behavior,
- tier change action updates subscription and supplier tier cleanly,
- onboarding checklist panel switching and links to tiers page,
- no regression in supplier dashboard/service-management rendering.
2026-08-02 - v0.2.2-booking-basket-and-uat-release-discipline
- Introduced basket-first booking flow: service booking form now adds items to basket (session-backed) instead of immediately creating paid/confirmed bookings.
- Added basket and checkout routes/pages (`/bookings/basket/`, `/bookings/checkout/`) with item review, delete-selected workflow, and payment-ready staging page.
- Added booking-form UX confirmation flow: branded "Added to basket" modal with actions to add another service or review basket.
- Added branded scheduled-start picker modal with in-popup OK confirmation and clear selected datetime display.
- Updated top navigation with a new **My Bookings** dropdown, plus basket trolley icon and count badge in header.
- Updated booking management UX: removed deprecated sidebar, defaulted to Upcoming tab, and introduced clearer status pills.
- Added booking amend flow that updates the existing booking record (`/bookings/<id>/amend/`) instead of creating a new booking.
- Added booking cancellation workflow (`/bookings/<id>/cancel/`) with branded confirmation modal and state transition to `CANCELLED_BY_CUSTOMER`.
- Updated booking list behavior so cancelled upcoming bookings drop out of Upcoming and remain visible in Past (with optional "Show cancelled" toggle).
- Improved cancellation copy to reference booking summary (service + date/time) instead of opaque booking reference codes.
- Updated header active-state styling from underline to light-blue highlight with bold text.
- Added release-process documentation for patch-only UAT deployments:
- `docs/release-strategy.md`
- roadmap additions for immediate stabilization scope and user-agent process-flow testing module.
Concise deployment scope (v0.2.2)
- Included:
- basket-first customer booking funnel,
- booking amend/cancel management controls,
- booking navigation and header usability improvements,
- UAT patch-release discipline documentation.
- Excluded:
- final payment capture integration,
- full location-enforcement logic rollout,
- full account-area parity pages (wallet/orders/addresses),
- service creation flow overhaul (planned for v0.2.3).
- Primary risk checks:
- booking add-to-basket and basket-count integrity,
- amend updates existing booking,
- cancelled bookings lifecycle behavior across tabs,
- supplier onboarding route stability on production.
2026-08-01 - v0.2.1-platform-admin-and-onboarding-updates
- Replaced hard-coded supplier tier definitions with DB-backed `ProviderPlan` metadata so tier cards, limits, pricing, and ordering are controlled from data.
- Added platform admin tier management screen (`/accounts/admin/platform/plans/`) to create new tiers and edit existing tier definitions (price, intro pricing, limits, active flag, display order, summary).
- Migrated provider onboarding tier selection from static enum values to dynamic plan code values and mapped legacy values (`CASUAL` -> `FREE`, `ESTABLISHED` -> `TEAM`) for compatibility.
- Added default `ENTERPRISE` plan seed and robust default-plan fallback logic for new subscriptions when `FREE` is unavailable.
- Rebuilt supplier onboarding UX into a checklist-first flow with panelized guidance, completion states, and business/service/team/security steps.
- Added dynamic plan cards and a full dynamic plan comparison page populated directly from active plans.
- Updated wording and IA to consistently use "Supplier onboarding checklist" and rerouted legacy dashboard/onboarding paths to the checklist journey.
- Added user account lock controls in User Administration with admin guardrails (self-lock blocked, super-admin target restrictions) and clear lock status in list/detail views.
- Added audit trail model for account lock/unlock actions (`UserAccountLockEvent`) with actor, timestamp, action, and reason; surfaced recent history in user detail.
- Added User Administration filters for search (`q`), status (`All/Active/Locked`), and role (`All/User/Platform Admin/Super Admin`).
- Added emergency password reset action per user: generates a strong password, sets it immediately, displays masked one-time value with reveal/copy controls, and emails the user primary email.
- Added branded emergency-password email content with explicit break-glass guidance for social-login failure and direct secure-login URL from `APP_BASE_URL`.
- Updated 2FA enforcement policy: challenge required for password-login sessions only; Google-auth sessions bypass 2FA challenge by default.
- Extended runtime footer metadata with last-commit value from git plus startup deployment timestamp behavior retained.
- Added/updated supporting migrations and templates for plans, onboarding checklist, comparison table, platform admin controls, and security operations.
2026-08-01 - v0.2.1-homepage-and-service-discovery-polish
- Refined homepage customer journey section into a persistent 4-step interactive flow diagram where stage highlight and details cycle while all stages stay visible.
- Updated primary customer CTA language from "Book Online" to "Book Now!" and then "Browse and book now!" in homepage journey context.
- Added "Current popular services" carousel improvements: timed rotation controls, hover pause, previous/next toggles, center-card highlight state, and pulsing active booking CTA.
- Reworked popular service cards to use externally hosted royalty-free stock imagery with category-aware image selection and fallback metadata.
- Updated popular service card interactions so booking CTA targets the specific service booking route (`/bookings/create/?service=<id>`).
- Improved catalogue service card readability by enabling multi-line title/summary wrapping and safer long-text handling.
- Expanded catalogue service `(i)` detail panel content with category, duration, starting price, and delivery-mode context.
- Added click-away dismissal and single-open behavior for catalogue service `(i)` detail panels.
- Added safe `next` URL handling in auth flows so booking-driven sign-in and sign-up journeys can return users to the originally requested service booking path after successful authentication.
- Added roadmap item for provider-configurable new-customer service discounts with explicit UX consistency and server-side eligibility safeguards.
2026-08-01 - v0.2.0-rbac-baseline
- Merged RBAC baseline into main branch with role foundations (`SUPER_ADMIN`, `PLATFORM_ADMIN`) and delegated user role management screens.
- Added role grant audit model and RBAC bootstrap command for repeatable super-admin/group setup.
- Added admin-only footer visibility and clickable version log link.
- Implemented OAuth-first auth posture with hidden emergency password route continuity.
- Implemented 2FA framework with optional secondary email, OTP challenge flow, and activation-pending verification path.
- Added platform admin dashboard sections by admin type and super-admin SMTP settings page.
- Added 2FA safety controls to prevent activation when SMTP is incomplete, with automatic global disable fallback.
- Added runtime version identity display (`version+sha[-dirty]`) so UI reflects the running build.
2026-07-31 - v0.1.1-pre-rbac-auth-ux
- Stabilized Google OAuth on Railway production after redirect URI/client reset in GCP.
- Added OAuth troubleshooting and setup documentation (`docs/oauth-guide.md`).
- Added Google connect-choice modal (current browser session vs select another Google account).
- Refined account connections UI (provider rows, connect actions, disconnect confirmation).
- Added emergency password link from primary sign-in page to hidden secure route.
- Hid standard email/password form from default login page and kept `secure-login` as break-glass path.
- Added local operations shorthand for quick silent web server restart.
- Implemented 2FA architecture (user settings, OTP challenge flow, safety controls, SMTP admin UI) in principle.
- 2FA production readiness is currently blocked pending valid SMTP credentials configuration.
- SMTP-backed end-to-end delivery is not yet fully configured/tested in deployed environments.
Versioning policy
- Post-`v0.2.0` releases increment patch version per shipped patch (`v0.2.x`).
2026-07-28 - v0.1.0-foundation
- Initialized git repository and Django project scaffold.
- Added modular settings (`base`, `local`, `test`, `production`).
- Implemented custom `accounts.User` model with UUID primary key and email login.
- Wired registration/login/logout views and templates.
- Added optional Google auth plumbing via allauth routes and provider settings.
- Added provider org, plan/subscription, catalogue, booking, payment, review, dispute, notification and audit models.
- Added basic provider dashboard and booking flow with threshold enforcement.
- Added health checks and Celery initialization.
- Added docs and operations notes.
- Added an idempotent demo data command creating the original default administrator.
The historical plaintext password has since been removed from tracked source.
- Deployed to Railway production at `https://at-you-home-services-production.up.railway.app`.
- Resolved Railway startup issue by using `/tmp` SQLite fallback when Railway Postgres is not attached.
- Verified live health endpoint returns HTTP 200.
- Rebranded shared UI to a sleek minimalist neutral light theme with refined typography and reduced visual clutter.
- Added silent local Django start/stop scripts to prevent pop-up console windows.
- Completed Google OAuth login and account-connect flow for local and Railway production.
- Added provider connection UX improvements (connect/disconnect controls, account-choice prompt modal, and status list).
- Confirmed working production callback URI and client wiring after GCP client reset.
Known gaps
- Payment flows are placeholders; Stripe adapter/webhooks not yet complete.
- Booking/request workflow is simplified to immediate confirm path.
- Advanced scheduling, disputes, and messaging capabilities are still scaffolds.
- Railway is currently running without attached Postgres/Redis services in this project.