Readable render of the current repository `version-log.md` and `roadmap.md` files.

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.

  1. **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.

  1. **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.

  1. **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

  1. Documented environment variables from old stale service
  2. Deleted old Railway service (ID: `b804ac82-6ba0-4488-a18a-0a085a039a92`)
  3. Created fresh Railway service from GitHub repo
  4. Restored environment variables: `APP_RELEASE_LABEL`, `DJANGO_SETTINGS_MODULE`, Google OAuth credentials, `DATABASE_URL` service reference
  5. Verified fresh deployment from commit `789c355` (v0.2.6)
  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:
  1. user signs up as customer,
  2. supplier invites by primary email,
  3. 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.

Roadmap

Roadmap

Product principle - engagement continuity

  • Before changing a user-facing surface, inventory useful cards, carousels, discovery paths,

quick starts, previews, guidance, progress cues, return cues, and primary calls to action.

  • Retain each element, deliberately improve it, or replace it with an equal-or-better path and

record the product reason. Preserve an existing feature when replacement value is uncertain.

  • Engagement must help the user discover, understand, book, manage, or return to useful work;

dark patterns and vanity interaction do not qualify.

  • Regression coverage must protect discoverability and interaction continuity, while sample,

onboarding, and unverified supply remains clearly labelled and never appears genuinely bookable.

Released - v0.13.1 / Business Mobile v0.9.0 native workspace

  • Make successful supplier activation explicit and route the owner into Today.
  • Keep service management scan-friendly with summary cards, pencil editing, separate creation,

and the existing coverage path.

  • Replace the More sheet with a horizontally scrollable safe-area dock and promote Teams to a

first-class destination without removing any existing workspace.

  • Connect supplier Google Calendar natively with server-authoritative member and organisation

scoping; retain the separately gated event-write boundary.

  • Give the public customer homepage the mobile product page's visual hierarchy while preserving

every discovery rail, supplier carousel, guidance path, CTA, and genuine-supply filter.

  • Local CI-equivalent and Business Mobile tests pass. Hosted APK, exact-head CI, Railway release,

and direct endpoint checks pass; physical-device acceptance remains pending-unverified.

  • Hosted ARM64 packaging and artifact inspection pass at application commit `64ed19b`. The

workflow can also produce a same-source x86_64 package for the available desktop emulator;

physical-device acceptance remains a separate pending gate.

  • Emulator launch validation passed at workflow commit `2ca0719`. Artifact-bearing commit

`481f809` passed exact-head CI and terminal Railway deployment, and the stable public Business

APK matches the verified ARM64 checksum and size.

  • Scope: `docs/releases/v0.13.1-business-mobile-workspace-polish.md` and

`docs/releases/business-mobile-v0.9.0-native-workspace.md`.

Released - v0.13.0 live £0 marketplace / Customer Mobile v0.4.0

  • Promote the 18 active seeded service titles into one genuine, active supplier organisation

owned by Marcus without changing genuine third-party supplier records.

  • Make those services immediately bookable for £0 with server-authoritative availability and

automatic confirmation.

  • Create an auditable `NOT_REQUIRED` receipt showing £0 due and nothing charged.
  • Keep the £0 and instant-confirmation promise consistent from carousel to service detail,

checkout, and receipt.

  • Keep Selected, Popular, New, £0 introduction, more-services, supplier, and service-collection

discovery rails populated from genuine live supply.

  • Support same-account supplier ownership and customer booking; use a second customer only when

evaluating genuinely two-sided messages and notifications.

  • Scope: `docs/releases/v0.13.0-live-zero-price-marketplace.md` and

`docs/releases/mobile-v0.4.0-zero-price-booking.md`.

  • Exact-head CI and hosted Customer Android packaging are green; the inspected v0.4.0/code 13

APK is published through the stable Git-backed download.

  • APK-bearing commit `9ac254f` passed CI run `34858971001`; Railway deployment

`5988c639-0841-4f6e-8874-59c66dc819a0` reached terminal `SUCCESS`. Production reports

`0.13.0+9ac254f`, 18 active genuine £0 services owned by Marcus, complete activation readiness,

full live discovery rails, and a stable APK hash matching the hosted artifact.

  • Physical-device booking, notification, and visual acceptance remains pending-unverified.

Internal preview released - Business Mobile v0.8.5 guided start and floating navigation

  • Explain the onboarding stages and practical supplier benefits before the existing wizard CTA.
  • Preserve Today, Jobs, Messages, Calendar, Services, and Business while replacing the crowded

six-item bar with three primary destinations and a discoverable More sheet.

  • Keep essential routes independent of swipe-only discovery and respect the Android bottom safe

area with a floating dock and sufficient page clearance.

  • Keep authentication, tenant permissions, onboarding fields, and activation rules unchanged.
  • Published v0.8.5/code 13 remains update-compatible with v0.8.4; physical-device system-

navigation clearance and sheet interaction remain pending-unverified.

  • Scope: `docs/releases/business-mobile-v0.8.5-guided-start-floating-navigation.md`.

Released - v0.12.8 mobile customer brochure

  • Explain customer value, service discovery, published pricing, availability, and request

management before asking mobile visitors to install the app.

  • Show clearly labelled service previews, conditional £1 offer language, and a four-step journey.
  • Keep the Customer app CTA primary, the separate Business app secondary, and retain a neutral

full-website escape link.

  • Keep routing, authentication, supplier eligibility, bookings, and payments unchanged.
  • Scope: `docs/releases/v0.12.8-mobile-customer-brochure.md`.
  • Commit `fbd234c` passed CI run `34828464910`; Railway deployment

`7264642f-5456-4b3a-9933-18526cd14e03` reached terminal `SUCCESS`, and production reported

`0.12.8+fbd234c` with every expected brochure marker present for an Android user agent.

Internal preview released - Customer Mobile v0.3.2 preview discovery and engagement

  • Populate the five existing Home discovery rails from the seeded preview catalogue only when

genuine customer-bookable supply is empty; genuine supply always takes priority.

  • Add tappable supplier and bundle-idea rails without claiming combined checkout or availability.
  • Keep every preview visibly labelled in Home, Explore, service detail, and bundle detail.
  • Route preview details toward genuine browsing instead of allowing sample bookings.
  • Preserve the prominent **Browse and book services** CTA and all v0.3.1 discovery rails.
  • Physical-device visual, carousel, image-loading, navigation, and session acceptance remains

pending-unverified before promotion beyond internal preview.

  • Scope: `docs/releases/mobile-v0.3.2-preview-discovery-engagement.md`.

Internal preview released - Business Mobile v0.8.4 Google sign-in activation

  • Dedicated Android OAuth client configured for the Business package and internal signing key.
  • Publishing gate requires both web and Android OAuth client configuration.
  • Keep Business, Customer Mobile, and website sessions separate.
  • Physical-phone Google sign-in and restoration acceptance is waived-unverified for the internal

preview and remains required before promotion.

  • Reproducible GitHub Android workflow produced the inspected ARM64 APK after the local Windows

Gradle loopback transport failed; package, signer, ABI, and checksum evidence is preserved.

  • Keep runner setup independent of native files that Expo generates later in the build.
  • Scope: `docs/releases/business-mobile-v0.8.4-google-sign-in-activation.md`.

Validation - v0.12.7 customer and supplier workspace switcher

  • Give signed-in website users a persistent **Book services** / **Supplier management** switch.
  • Keep customer and supplier navigation visually separate with an explicit active workspace.
  • Route users without a supplier organisation into onboarding; do not broaden permissions.
  • Provide a complete tenant-isolated demo supplier workspace whose access password is supplied

only through an environment secret; keep all of its services out of genuine inventory.

  • Keep exact-head Linux type checking green for the cross-platform demo seed.
  • Scope: `docs/releases/v0.12.7-workspace-switcher.md`.

Released - v0.12.6 customer marketplace entry / Mobile v0.3.1 source validated

  • Keep the public root page customer-first before login, even when genuine supply is empty.
  • Show Selected, Popular, New, Special offer, and £1 welcome rails on the website and Customer

Mobile Home; use honest empty states rather than redirecting attention to supplier onboarding.

  • Continue excluding sample, onboarding, paused, and otherwise non-bookable supplier services.
  • Rank Popular by genuine non-cancelled fulfilment activity; Selected remains a deterministic

current selection of eligible services and New uses genuine creation time.

  • Customer Mobile v0.3.1/code 11 removes the search-first hero action and keeps its discovery

rails visible. Source/typecheck/tests are ready; APK regeneration remains blocked by the

recorded Windows Gradle loopback failure and the published v0.3.0 APK is unchanged.

  • Scope: `docs/releases/v0.12.6-customer-marketplace-entry.md` and

`docs/releases/mobile-v0.3.1-home-discovery-rails.md`.

  • Website commit `dd82afb` passed exact-head CI run `34773711924`; Railway deployment

`c6d34d08-82df-4f93-853f-b887271c0ade` reached terminal `SUCCESS`, and production reported

`0.12.6+dd82afb` with the customer-first entry and all five rails.

  • Mobile remains source-validated rather than APK-released: the Windows Gradle host failed

before compilation, so the verified v0.3.0 internal-preview APK remains the public download.

Released - v0.12.5 truthful marketplace landing

  • Apply transferable product patterns from the owner-requested Sprive review without copying

its brand, incentive mechanics, regulated claims, customer evidence, or layout.

  • Make the first-value CTA supply-aware: customer booking is dominant only when genuine

bookable supply exists; otherwise verified supplier onboarding is the primary journey.

  • Separate the brochure preview from the authenticated application and repeat the primary

action at natural decision points.

  • Show a concrete supplier-readiness preview and visible privacy, help, pricing, and current-

limitation links without inventing metrics, testimonials, demand, or supplier proof.

  • Do not promote the debug-signed Customer or Business APKs from the landing page. QR/store

treatment remains gated on production signing, release verification, and device acceptance.

  • Scope: `docs/releases/v0.12.5-truthful-marketplace-landing.md`.
  • Implementation commit `0ac5a58` passed CI run `34771402764` and Railway deployment

`446f4587-c106-4cce-b7a5-d521d9dbc138` reached terminal `SUCCESS`. Direct production checks

confirmed the zero-supply supplier CTA, absent customer-booking and APK links, ready health,

and runtime `0.12.5+0ac5a58`.

Released - v0.12.4 genuine supplier activation

  • Give website suppliers the same explicit owner-only activation path as the Business API.
  • Use one server-derived readiness gate across both clients: verified owner email, customer

contact details, a genuine service, workable staff calendar, overlapping service hours, and

conditional postcode coverage only where a live service is location-bound.

  • Keep sample organisations and incomplete delivery configurations fail-closed. Scope:

`docs/releases/v0.12.4-genuine-supplier-activation.md`.

  • Report each genuinely missing owner action separately so completed profile fields are not

presented as incomplete.

  • Released from implementation commit `8bab587`; CI run `34747420951` and Railway deployment

`828b3353-667d-45a6-af26-d63aeea5bce9` are verified.

Released - v0.12.3 trustworthy live catalogue

  • Show and accept bookings only for genuine active services owned by genuine active suppliers.
  • Keep sample records available to administrators without presenting them as fulfilable

customer appointments.

  • Use the same rule across website, Customer Mobile API, availability, holds, and booking

creation. Scope: `docs/releases/v0.12.3-trustworthy-live-catalogue.md`.

  • Candidate `f65bd07` is pushed with local regression gates passed. A separate mechanical

follow-up removes the 64-finding repository-wide Ruff baseline without rule suppression;

repository-wide Ruff now passes. A second mechanical follow-up resolves the 23 mypy findings

that CI exposed next, with all 260 source files and regression checks passing locally.

Diagnostic CI identified Linux runtime evaluation of generic Django field annotations as

the plugin-construction fault. Annotation evaluation is now postponed and the temporary

mypy pin has been removed. Exact-head CI run `34745821714` passed at `c0da346`.

The release is live from `master`; final evidence commit `4ede7f3`, CI run `34746304715`,

and Railway deployment `beaf9781-af50-465a-aa7b-2bab74352cee` are verified.

Building - Customer Mobile v0.3.0 guided native flow

  • Require two Android back presses within two seconds to exit from Home, with a clear first-

press prompt.

  • Give every shared button stronger pressed feedback and show explicit live success/error

acknowledgement for asynchronous booking and calendar actions.

  • Replace the customer calendar website handoff with native Google Calendar consent,

authenticated server-code exchange, connection status, and disconnect management.

  • Simplify booking-time selection to one context-aware recommended action plus one manual

time check, with the selected time confirmed immediately.

  • v0.3.0 scope: `docs/releases/mobile-v0.3.0-guided-native-flow.md`.

Validation - Customer Mobile v0.2.x foundation

  • v0.2.1 hardens Google session establishment and restoration after physical-device v0.2.0

testing exposed a successful provider exchange followed by a refresh-worker crash.

  • Persist and validate the encrypted short-lived access token before rotating the refresh

token, and never erase credentials for temporary service failures.

  • Establish a website-aligned Customer Mobile home with native marketplace discovery,

a centred Home action, and customer workflows across the bottom navigation bar.

  • Keep Android system bars visible while respecting their safe areas and adding deliberate

top/bottom breathing room.

  • Make the independent app version visible and retain Google-only authentication.
  • Keep marketplace motion consistent across web and Customer Mobile, with smooth

adjacent-card snapping and reduced-motion support.

  • Website autoplay now requires the complete carousel to be visible, avoiding background

motion that can make the wider page appear to slide while the user is between sections.

  • Prioritise the next few minor releases around customer discovery, booking confidence,

booking management, messaging, and mobile polish before expanding other app surfaces.

  • v0.2.0 scope: `docs/releases/mobile-v0.2.0-customer-marketplace-home.md`.
  • v0.2.1 scope: `docs/releases/mobile-v0.2.1-google-session-resilience.md`.

Validation - Customer Mobile v0.1.6 Google Session Hotfix

  • Google is the sole Customer app sign-in method; app email/password fields are removed.
  • Secure-store session restoration runs once and refresh-token rotation is single-flight,

preventing a successful sign-in from immediately invalidating itself.

  • Protected booking UI waits for restoration before deciding that the customer is signed

out, and authenticated-only calendar queries no longer run for anonymous users.

  • Source typecheck and five tests pass. APK rebuild, manifest inspection, production download

replacement, and physical-device booking acceptance remain release gates.

Validation - Native calendar parity

  • Customer Mobile v0.1.4 and Business Mobile v0.8.3 source retain v0.11 offer parity and

now expose the shared v0.12 live-calendar behavior: customer staff/slot selection uses

the authoritative availability engine, while Business reports connection/sync status

and opens the secure per-staff Google consent handoff.

  • Backend/API and both mobile source gates pass. APK regeneration remains blocked by the

host Gradle loopback failure; physical-device auth/booking UAT, Business Google console

configuration, and production signing remain distribution gates.

Validation - Railway sample offer catalogue

  • The idempotent demo seed maintains five public special offers and five separate £1

welcome offers across household, wellbeing, coaching, technology, and advisory services.

  • Promotion values are applied only to records marked as sample data; real supplier pricing

and £1 participation are never changed by startup reseeding.

  • Repeated-seed coverage verifies exact offer counts, separation, and representative prices.

Validation - v0.12.0 Booking Logistics

  • Staff-owned, multi-calendar Google free/busy connections with separately consented,

recommended direct event creation or invitation-only delivery.

  • Service-level auto-confirm/request-confirmation and customer-choice/auto-assignment

policies, backed by one authoritative availability and next-slot engine.

  • Customer booking choices: `Any staff member`, `View staff availability`, and

`Next available slot`.

  • Website implementation and automated website/API/mobile gates are complete. Google

Calendar API, production callback, read-only scopes, encrypted token storage, and

Railway feature activation are live. Regenerated APKs and physical Android acceptance

remain mobile release gates.

  • Production activation uses calendar-list read-only plus free/busy access; event-write

remains a separate opt-in. Google OAuth scope verification and physical acceptance

remain launch follow-ups after the live connector is enabled.

  • Direct Google event creation stays feature-gated until the verification justification

and demonstration video are approved; invitation delivery is the production fallback.

  • **Connector roadmap after Google:** Microsoft Outlook/Microsoft 365, then Apple

Calendar/iCloud and Yahoo Calendar, subject to provider API, consent, privacy, webhook,

and reliability validation. Do not simulate unsupported connectors with calendar feeds.

Validation - v0.12.1 Customer Calendar Overlay

  • Customer-only Google free/busy consent, private busy-block overlay, calendar selection,

refresh/disconnect, and **Next slot we're both free** moved forward from v0.13.

  • Website and Customer Mobile use the shared authoritative mutual-availability API.
  • Customer and supplier connection scopes and busy storage remain isolated server-side.
  • Next-weekend, next-daytime, and multi-service AI assistance remain future work.

Validation - v0.12.2 Account Connection Hub

  • Account settings now distinguishes Google sign-in identity from separately consented

customer and supplier calendar access.

  • Connected calendar summaries show purpose, account address, status, selected calendars,

last free/busy refresh, privacy boundaries, and business booking delivery behavior.

  • Detailed mutations remain in the permission-checked customer and business calendar

workspaces; both mobile apps retain secure website handoff.

  • No OAuth scopes, tokens, migrations, APIs, or calendar provider coverage changed.

Candidate next minor - v0.13.0 Assisted Booking

v0.12.1 pulled forward the customer Google overlay and mutual-slot search. The remaining

weekend/daytime helpers and AI assistant are candidate v0.13.0 scope and remain roadmap-only

until explicitly approved for development.

Customer calendar overlay and scheduling assistant

  • **Delivered in v0.12.1:** let a customer separately connect one or more personal

calendars with least-privilege Google consent; supplier-calendar consent never implies

customer-calendar consent.

  • **Delivered in v0.12.1:** overlay the connected calendar in the customer booking calendar

with a clear show/hide control labelled **“My [email address] calendar”**.

  • **Delivered in v0.12.1:** default to private busy blocks rather than importing event names, attendees, descriptions,

locations, or other content. The customer can disconnect an account and clear cached

availability at any time.

  • Add a compact scheduling assistant with these single-choice radio options:
  • **Delivered in v0.12.1: Next slot we’re both free** — intersect the customer's selected

calendars with the authoritative service and staff availability engine.

  • **Next weekend slot** — find the earliest valid Saturday or Sunday slot.
  • **Next daytime slot** — find the earliest valid weekday daytime slot, with the exact

daytime window defined during scope approval.

  • Always show the proposed time, supplier, staff-selection behaviour, price, and confirmation

policy for review before creating a hold or booking.

  • Apply the same freshness, timezone, daylight-saving, conflict, eligibility, and atomic

checkout revalidation rules used by Booking Logistics. Stale or unavailable customer

calendar data must fail safely and never be described as confirmed availability.

Book with the AI Assistant

  • Add a glowing blue **“Book with the AI Assistant”** action with an AI-twinkle icon directly

beneath the existing **“Book services now”** action on supported customer surfaces.

  • Accept natural-language requests containing one or several jobs, desired timing,

preferences, and constraints. Example: lawn mowing next weekend, a car clean as soon as

possible, and a weekday house clean this week before midday.

  • Convert each requested job into a reviewable structured requirement, ask only necessary

follow-up questions, then match it against live services, coverage, customer and supplier

availability, staff policy, genuine prices/offers, and customer eligibility.

  • Present a separate ranked option list for every requested job, including the reason each

option matched, total price, offer conditions, available time, supplier, and whether it

will auto-confirm or require supplier approval.

  • The language model may interpret intent and explain results, but deterministic server-side

catalogue, pricing, coverage, availability, eligibility, and booking services remain

authoritative. The assistant must never invent a service, price, discount, slot, or

confirmation.

  • Require explicit customer review and confirmation before creating holds or bookings;

multi-service requests must not silently become a single transaction.

  • Add **Common requests** suggested prompts, initially including:
  • “Find me the best offers in my area.”
  • “Find the next service slot that fits my calendar.”
  • “Help me get my home jobs done this weekend.”
  • “Show me highly rated services available this week.”
  • Define “best” transparently using configurable factors such as coverage, availability,

total price, genuine offer value, rating confidence, customer preferences, and supplier

fairness—not hidden paid placement unless clearly labelled.

  • Preserve conversation privacy, minimise retained prompt/profile data, protect sensitive

inferences, moderate unsafe requests, and provide a non-AI catalogue/booking route at all

times.

  • **Status:** Roadmap concept only. No AI provider integration, customer-calendar access,

interface change, automated booking, release commitment, or infrastructure spend is

authorised yet.

Future growth - Personalised periodic offers

  • Periodically present an optional, dismissible message such as: **“An offer just for

you: treat yourself to a massage for £1.”**

  • Draw candidates from the live, supplier-funded `£1 eligible` service pool across all

participating suppliers, then rank them against the customer's explicitly provided

profile, location, preferences, prior bookings, and engagement history.

  • Apply the existing customer £1 eligibility and redemption limits at selection and again

at checkout; never advertise an unavailable, uncovered, expired, or exhausted offer.

  • Add customer controls for offer personalisation and promotional notifications, including

channel-specific opt-in/out, dismissal, frequency limits, quiet periods, and a clear

explanation of why an offer was suggested.

  • Protect supplier fairness with rotation, exposure caps, performance monitoring, and

transparent participation reporting so ranking does not permanently favour the largest

or earliest suppliers.

  • Treat sensitive-service inference carefully: do not derive or target health, disability,

financial, religious, or similarly sensitive characteristics without a separately

approved privacy and consent design.

  • Measure incremental first bookings, repeat bookings, supplier retention, dismissal and

opt-out rates before expanding beyond a controlled experiment.

  • **Status:** Roadmap concept only. No development, automated targeting, notification

delivery, or release assignment is authorised yet.

In progress - v0.11.0 Welcome Offers

  • Supplier-funded, opt-in £1 welcome services with a three-booking customer allowance.
  • Truthful public offer prices and configurable first/second/third booking discounts.
  • Server-authoritative, non-stacking pricing with auditable funding records.
  • **Parked idea - customer membership pricing:** explore a non-member/member price model

only after welcome-offer economics are measured; no implementation in v0.11.0.

Native mobile programme

  • **Validation - At-You Business v0.8.0:** a separate professional supplier app with

an independent package and session, supplier dashboard, request decisions, and

focused website handoffs. Native Google sign-in and verified primary/backup login

addresses allow personal and business emails without merging user records.

  • **Required next - Business app Google authentication integration:** finish the Android

OAuth client and native Credential Manager configuration for the Business package,

connect it to the existing allauth token exchange, and complete physical-device login,

logout, account-choice, token-refresh, and recovery acceptance before public distribution.

  • **Product boundary:** the website is the primary, complete feature surface; native

mobile is a customer-focused companion. Website-only capabilities remain discoverable

through clear, deep-linked `Manage this on the At-You website` handoffs rather than

incomplete native screens. Django owns shared rules and mobile uses `/api/v1/` rather

than Railway data services directly. The maintained capability matrix and delivery

policy are in `docs/product/feature-parity.md`.

  • **Validation - Platform v0.8.0 Customer Mobile API:** versioned customer discovery,

profile/address, request-to-book, booking-management, and messaging endpoints with

mobile bearer authentication. Payments and supplier operations are deferred.

  • **Internal distribution - Mobile v0.1.1 Authentication Hotfix:** Android-first Expo

customer app with an iOS-compatible path. v0.1.1 replaces the rejected Android

browser OAuth callback with native Google Credential Manager, restores visible

email/password login, and updates the stable ARM64 website download. Native supplier

functions remain a `please use the full website` handoff; device auth UAT remains open.

  • **Mobile website acquisition - validation:** offer mobile-browser visitors the stable

Android app download on first homepage entry, with an explicit session-scoped route to

continue using the complete website. Desktop browser journeys remain unchanged.

  • **At-You Business roadmap after v0.1.0:** job status and customer messaging;

staff assignment and business calendar;

service/coverage management; teams and permissions; plans, payments, analytics,

and full supplier onboarding. These ship only after the customer MVP is validated.

The implementation sequence through Business Mobile v0.8.0 is complete locally and

awaits Android device acceptance and distribution approval.

The feature-parity matrix has been reconciled to the implemented API and native screens.

Completed now

  • **v0.10.1 mobile handoff follow-up (2026-08-30):** Phone visitors can choose the

Customer app, Business app, or continue to the complete website for the current

session. Supplier dashboards link to the Business APK, while Customer Mobile source

includes Android system-bar safe areas. Authenticated desktop navigation also surfaces

upcoming booking and message counts. Homepage guidance is now a dismissible,

preference-controlled banner with administrator reset support, while Help carries the

journey and both app links. The primary booking CTA has an accessible attention glow,

and all seeded services now use unique, relevant imagery. Desktop guidance advertises

app availability without download buttons, while the mobile gateway uses clearer

customer-app copy and explicitly cautions against the website bypass. APK regeneration

and Business-app Google authentication acceptance remain open tasks.

  • **v0.10.1 (2026-08-23):** Supplier-aware homepage continuation with the next three

incomplete onboarding stages, plus coordinated Customer Mobile v0.1.2 and Business

Mobile v0.8.1 internal ARM64 APK refreshes.

  • **v0.9.1 (2026-08-18):** Phone browsers now expose only the isolated Android app

download gateway while desktop retains the complete website and app/API/operational

endpoints remain reachable.

  • **v0.9.0 (2026-08-17):** Authoritative booking lifecycle, supplier decisions, customer

cancellation/amendment, atomic availability, and expiring basket slot holds.

  • **v0.5.5 (2026-08-11)**: Shared line-art SVG icon system and a selectable

ultra-modern Minimal theme across desktop, mobile, homepage, catalogue, and

account controls, with Green and Blue retained.

  • **v0.5.4 (2026-08-11)**: Shared aesthetic polish plus a streamlined supplier

onboarding progression, prerequisite stage locking, navigation progress, Team-first

introductory plan selection, responsive live tier summaries, and explicit

Enterprise pricing.

  • **v0.5.3 (2026-08-10, source-control package)**: Shared supplier staff

calendars, multi-member assignments, service/staff availability intersection,

service archive/unpublish confirmations, and guarded supplier-profile reset tools.

Railway deployment completed, with commit-aware production version metadata and

an environment-derived release label protected from stale external overrides.

  • **Supplier reset onboarding focus (2026-08-11, local commit)**: users without a

persisted supplier organisation receive an Onboarding-only My Business menu on

desktop, sidebar, and mobile; full navigation unlocks after profile creation.

While mandatory onboarding remains incomplete, its workspace is full-width and

the My Business sidebar remains hidden. This accepted behavior is included in

the released v0.5.3 package.

  • **Session handoff (2026-08-05)**: claude-opus-4.7 → gpt-codex after v0.5.1 shipped to Railway UAT. See `docs/journal-2026-08-05.md` for full state snapshot (HEAD, server binding, hooks, deferred items).
  • Milestone 0 skeleton: Django project, custom user, settings split, Docker, Railway config, health endpoints, Celery bootstrapping.
  • OAuth-first authentication with hidden emergency password route.
  • Provider onboarding, core catalogue publishing flow, booking creation flow, usage thresholds.
  • Demo data seeding including default admin.
  • Google OAuth is live on local and Railway with account connection flow.
  • v0.2.4 delivered supplier left-sidebar IA, dedicated Tiers workspace, and dashboard sectioning refinements.
  • v0.2.5 delivered customer-first supplier team invitation workflow (invite, accept, revoke, post-signup linking) and bookings dashboard hub.
  • Added per-version GUI testing playbooks under `docs/testing/` to support patch-release validation.
  • **Dev-tooling (2026-08-04)**: git pre-commit + post-commit hooks enforcing docs discipline and auto-restart of local server.
  • **testkit v0.1.0 (2026-08-04)**: standalone HTTP test module with YAML scenarios; first `uat-smoke` profile green (3/3 in 133ms).
  • **testkit v0.2.0 (2026-08-04)**: Playwright/Chromium browser driver added; new `browser-smoke` profile and `theme-switcher-persistence` scenario proving Blue theme survives reload and cross-page navigation (1/1 green).
  • **v0.3.3 (2026-08-04)**: Teams management and Team detail pages refactored onto CSS design tokens; new `--accent-strong` token added; Teams pages now respect Green/Blue theme selection.
  • **v0.3.4 (2026-08-04)**: Version identity reliability - port-sweep in stop script kills orphaned :7000 listeners, `APP_RELEASE_LABEL` auto-derives from `APP_VERSION`, new public `GET /version/` endpoint. Closes Known Issue #003.
  • **testkit v0.3.0 (2026-08-04)**: Mobile screenshot harness - `set_viewport` and `screenshot` step handlers, per-scenario `output_dir`, new `mobile-baseline` profile with 360/390/768 flows. Baseline evidence captured at `docs/mobile-baseline/before-v0.4.0/`.
  • **v0.4.0 (2026-08-04)**: Mobile compatibility - fixed bottom tab bar for phones (<=480px), 44x44px touch targets, sidebar rail eliminated on narrow viewports. Public/anonymous pages verified. After-evidence at `docs/mobile-baseline/after-v0.4.0/`.
  • **v0.4.1 (2026-08-05)**: Mobile chrome refinements - dedicated two-row top bar (logo, Book Now CTA, search), 4-icon bottom bar (Home/Calendar/Basket/Menu) with basket count badge and Menu drawer, how-it-works section collapsed into a modal on phones. Evidence at `docs/mobile-baseline/v0.4.1/`.
  • **v0.4.2 (2026-08-05)**: Mobile chrome polish - single-row top bar (search + person icon), removed brand mark and Book Now CTA (search is primary), bottom bar hardened with `z-index: 1500` and `!important` on position/display so it always overlays inner pages, `overflow-x: hidden` safety net.
  • **v0.4.3 (2026-08-05)**: Mobile business-mode bottom bar - swaps consumer tabs (Home/Calendar/Basket/Menu) for business-specific tabs (Dashboard/Services/Team/Calendar/Menu) when user is on `/providers/*` or `/calendar/my-business/`. Menu drawer includes "Back to consumer view" action. Closes Known Issue #007 (approach 1).
  • **v0.4.4 (2026-08-05)**: Mobile bugfix trio - (1) allauth Account/Connections/MFA pages now inherit site chrome via local `templates/allauth/layouts/base.html` override, using new `page_content` block wrap in root `base.html`; (2) Calendar mobile-tab no longer highlights while user is on basket/checkout; (3) Homepage CTA copy "See the 4 steps" → "See how it works". Evidence at `docs/mobile-baseline/v0.4.4/`.
  • **v0.4.5 (2026-08-05)**: Basket per-item remove UX - each basket line now has its own Remove button that opens a lightweight confirmation modal ("Are you sure you want to remove X?") and posts directly. Replaces the previous multi-select toggle + "Delete (N) services" flow which was unintuitive on mobile.
  • **v0.4.6 (2026-08-05)**: Basket Amend button - remove-confirmation modal now offers a third action Amend that drops the item from the basket and redirects to the booking-create form pre-filtered to that service, so users can change date/time/details without losing their place.
  • **v0.5.0 (2026-08-05)**: True basket item edit (Save changes / Discard changes / Cancel booking) via new `basket_amend_view` and URL `bookings:basket-amend`; in-place mutation preserves item id, form pre-fills from session state. Also raises desktop `.site-header` and `.nav-dropdown-menu` z-index so the My Bookings and My Business dropdowns no longer get clipped by page content.
  • **v0.5.0.1 (2026-08-05)**: Follow-up bugfix - top-bar dropdowns were still hidden when browser zoom caused the header to wrap onto two lines. Added `.nav-item[open] { z-index: 650 }` so the open dropdown outranks the wrapped line-2 `.header-right` content within the sticky header's stacking context.
  • **v0.5.1 (2026-08-05)**: Header + wizard polish bundle - (1) icon-mode nav layout at 981-1100px keeps all 6 main-nav items on a single row with Book now preserved as green pill; (2) optimistic active-nav JS updates highlight instantly on click, ignoring modifier/middle-button clicks; (3) service-creation wizard: mobile scroll fix (`overflow-y: auto` on `.wizard-form`), `price_gbp` £ DecimalField replaces raw pence input, per-field help text rendered under every step, new Step 4 "Service Delivery" carved out for `assignment_strategy` (progress grid now 5 columns, publish becomes Step 5); (4) basket true-edit workflow (from v0.5.0) shipped as part of this bundle.

Mobile compatibility stream (v0.4.x)

  • **v0.4.1 (planned, next)**: Auth pages (login, signup), messaging chat

panel mobile rethink, calendar list-mode fallback below 768px, provider

dashboards / customers / teams / services / plans / onboarding (all

currently use hardcoded 260px sidebars).

  • **v0.4.2 (planned, optional)**: PWA manifest + minimal service worker

for Android "Add to Home Screen".

In progress (next)

  • **Validation - v0.10.0 Payments and Checkout Foundation:** per-service payment modes,

authoritative checkout totals, durable payment and provider-event records, customer

receipts, supplier transactions, platform diagnostics, and a mobile website handoff.

Real-money Stripe activation remains gated behind the open marketplace charge-model

decision. The integrated candidate now includes the first Business APK download and

staff-aware customer booking against service hours, staff calendars, bookings, and

temporary basket holds. Scope:

`docs/releases/v0.10.0-payments-and-checkout-foundation.md`.

  • **v0.7.1 Sidebar, Discovery and Welcome Guidance (released):** one responsive vertical

application sidebar plus Popular, New services, Special offers, and supplier

benefits homepage carousels. Scope:

`docs/releases/v0.7.1-sidebar-discovery-and-welcome-guidance.md`.

Final accepted guide placement is a fixed 680 x 590px bottom-left panel with

viewport-safe mobile bounds and screenshot-style previews on every step; live

homepage spotlighting is intentionally excluded.

  • **v0.6.0 Location-Aware Service Discovery (locked, documentation only)**:

customer UK postcode context, reusable addresses, supplier postcode service areas,

remote/location-bound service classification, catalogue relevance, and authoritative

booking/checkout coverage validation. Scope: `docs/releases/v0.6.0-location-aware-discovery.md`.

  • RBAC implementation baseline (`v0.2.0`) with super-admin delegation model.
  • Mandatory 2FA planning and implementation (email OTP), including separate 2FA destination email.
  • **Release plan locked: v0.5.2 (local-only execution)** - primary scope is roadmap item #31 (in-wizard team and schedule creation in Step 4 Service Delivery) with wizard-state persistence and no deploy in this phase.
  • **Basket calendar-hold with checkout timer** (queued, minor feature — target `v0.5.x`):

when a customer adds a service to their basket, place a provisional

hold on the supplier's calendar for the requested slot so no other

customer can book the same time. Convert the hold to a confirmed

booking on successful payment; release the hold if the draft item is

removed or the timer expires. Show the customer a countdown banner:

"Check out in 10 minutes to secure your booking." Needs: hold model

(or reuse Booking with a HELD state), TTL/expiry sweeper (Celery beat

or on-request), calendar rendering to include HELD blocks as busy,

frontend timer + expiry redirect back to basket with message.

Immediate fixes / QoL (patch stream `x.x.X`)

Source: live tester feedback (Jason Lester, 2026-08-01).

1) Location-aware service discovery and booking relevance

  • Ensure service discovery and booking flows respect customer location context.
  • Add explicit location capture/selection (postcode or service area) where missing.
  • Use location in service filtering/ranking and in checkout availability validation.
  • Add service delivery-mode rules:
  • **Location-bound services** (for example massage, home cleaning) must be restricted to provider coverage areas.
  • **Location-flexible services** (for example virtual tutoring/remote advisory) can bypass geography checks.
  • Prevent invalid bookings where customer location is outside provider coverage for location-bound services.
  • Surface clear UX messaging when a service is unavailable in the customer's area.

2) Account navigation parity (customer private area)

  • Fix profile links so each route resolves to its own page/action:
  • My Wallet,
  • My Addresses,
  • My Orders,
  • My Subscriptions,
  • My Bookings.
  • Remove fallback behavior where unrelated links route back to bookings.

2b) Google account chooser consistency

  • Restore and standardize Google account chooser prompt behavior across sign-up/sign-in and account-link flows.
  • Current gap: chooser popup appears on account link page but not reliably on sign-up.
  • Target behavior:
  • user is explicitly prompted to use current Google session or choose another account where applicable,
  • behavior is consistent between registration and account-link contexts.
  • "Current Google session" option should display the session email address for clear user reference.

3) Booking lifecycle controls

  • Add customer-facing booking actions:
  • cancel booking,
  • amend/reschedule booking.
  • Enforce policy windows and state transitions in backend validation.
  • Add clear UX for permitted vs restricted actions by booking state.
  • Add booking datetime validation rules:
  • scheduled start must be in the future (no past datetime allowed),
  • selected slot must satisfy service-level conditions/policies (for example lead time, operating window, duration constraints).

4) Homepage funnel clarity

  • Fix homepage "Step" interactions so they route to the intended discovery/catalogue flow (not generic bookings list redirects).
  • Ensure CTA behavior is consistent for logged-out and logged-in users.

5) Supplier return-path reliability

  • After supplier setup and first service creation, return users to supplier context (onboarding/dashboard/service management), not customer booking flow.
  • Add explicit "Back to My Business" navigation after service create/edit paths.

6) Production blocker

  • Resolve `/providers/onboarding-checklist/` production 500 for authenticated users and add regression checks for provider accounts with mixed/legacy data.

Feature roadmap (minor/major streams)

0) Footer admin visibility + version log link

  • Add a version label in footer with clickable link to `docs/version-log.md` (or public changelog route if exposed).
  • Show footer only to admin roles (`SUPER_ADMIN`, `PLATFORM_ADMIN`) and hide from standard users.
  • Keep implementation RBAC-aware so visibility follows role checks (not template-only assumptions).

1) Sample service flagging and admin toggle

  • Add a visible "Sample" tag for seeded sample services.
  • Ensure all seeded sample services are marked consistently.
  • Add master-admin controls to toggle sample services on/off globally and/or per service.
  • Keep sample visibility policy explicit for customer-facing pages.

2) Candidate provider intelligence pipeline (separate database)

  • Create a separate datastore named `service_provider_candidates`.
  • Ingest publicly available company/service information for selected service categories.
  • Build candidate company profiles and candidate service catalogue records in draft/offline mode.
  • Capture rich metadata where available: service descriptions, terms, coverage, contact hints, and operational nuances.
  • Use candidate data for:
  • schema learning (discover missing platform fields/nuances),
  • provider outreach with pre-filled draft profile and services.

3) Provider profile setup wizard (high priority)

  • Implement guided provider onboarding screens as a resumable wizard.
  • Track progress via checklist and step completion states.
  • Support save/resume any time.
  • Link wizard state to:
  • provider GUID (`service_provider_id`),
  • primary email address.
  • For candidate providers: pre-create draft profile + draft catalogue and route them to complete remaining steps after account connection.

7) Customer onboarding wizard (new)

  • Introduce a standard customer onboarding wizard at account creation.
  • Clarify role topology in UX and data model:
  • all users are customers by default,
  • suppliers are customers + supplier capabilities.
  • Wizard should support save/resume and checklist completion states similar to supplier onboarding.
  • Capture baseline preferences, communication settings, and booking profile details for faster checkout later.

8) AI Booking Agent (new)

  • Add an AI booking agent entry point for customers:
  • "Tell me what you want done, or what activity you have planned, and I can compile a bundle of services with options that best suits you."
  • Accept two intent styles:
  • task-driven (specific jobs to complete),
  • activity-driven (events/plans such as moving home, hosting, travel prep).
  • Agent output should generate:
  • a recommended service bundle,
  • tiered options (essential / recommended / premium),
  • candidate suppliers per service,
  • estimated total price ranges,
  • suggested schedule/order of services.
  • Enable one-click conversion from AI bundle to draft booking basket for checkout completion.
  • Add user controls for refinement:
  • budget cap,
  • preferred time windows,
  • location constraints,
  • must-have / avoid preferences.
  • Keep this feature transparent and reviewable:
  • show rationale for recommendations,
  • allow manual service edits before booking,
  • keep provider ranking policy auditable.

9) New-customer service discounts (new)

  • Let service providers configure an optional new-customer discount per service (example: 10% off first booking of that service).
  • Display discount eligibility to customers who have not previously booked that service with that provider.
  • Add controls for providers:
  • discount type (start with percentage),
  • value (for example 1-90%),
  • active toggle,
  • optional start/end window.
  • Eligibility rule baseline:
  • eligible only when customer has no prior completed/paid booking history for that specific service-provider combination.
  • UX consistency guard (critical):
  • avoid showing discounts to anonymous users unless confidence is high,
  • if shown pre-login, preserve a temporary quoted offer token through login/signup so the same price is honored at checkout,
  • if token cannot be validated, show neutral messaging before login (for example "New-customer discounts may apply") instead of a hard percentage claim.
  • Security and abuse controls:
  • validate eligibility server-side at booking/checkout regardless of UI state,
  • log discount application decisions for audit,
  • prevent repeated reuse by account switching where feasible (future anti-abuse controls).

10) Provider calendar integration for scheduled bookings (new)

  • Add calendar integration for services that are scheduled at purchase time.
  • Poll or sync provider availability calendars and expose customer-facing available slots during checkout.
  • Support booking-slot modes noted in current scheduling model:
  • auto-confirmed slots,
  • provisional holds,
  • TBC/schedule requests (subject to provider confirmation or change).
  • Define slot-state behavior clearly:
  • **Auto-confirmed:** immediately reserves and confirms booking.
  • **Provisional:** reserves slot for a short hold window, then expires if not completed.
  • **TBC/request:** captures preferred window and sends scheduling request workflow.
  • Prevent oversubscription with server-side locking/idempotency when multiple customers attempt the same slot.
  • Add provider controls:
  • external calendar connection,
  • lead times and buffer windows,
  • working hours/blackout dates,
  • slot mode per service.
  • Add customer UX safeguards:
  • show slot certainty badge (Confirmed / Held / Request),
  • communicate expiry timers for provisional holds,
  • provide fallback options when a selected slot becomes unavailable.
  • Validation baseline for all scheduled bookings:
  • reject any booking datetime in the past,
  • enforce service condition checks server-side before booking confirmation/hold.

12) Service location model and coverage enforcement (new)

  • Add explicit per-service delivery mode classification:
  • in-person (location-bound),
  • remote/virtual (location-less),
  • hybrid.
  • Add provider coverage configuration for location-bound services:
  • supported postcodes/regions/radius,
  • optional travel surcharge rules.
  • Enforce coverage server-side during booking creation and checkout (cannot bypass via direct URL).
  • Keep catalogue behavior consistent:
  • location-bound services shown only when customer location is in range,
  • virtual services shown globally.
  • Add regression tests for out-of-area booking rejection and virtual-service acceptance.

4) Ingestion wizard for existing provider data

  • Build an admin/provider wizard to ingest profile/catalogue content from public sources.
  • Allow source connections from:
  • website URLs,
  • social media profiles (initially Facebook, LinkedIn connectors).
  • Import entities as draft only (never auto-live):
  • provider fields,
  • service entries,
  • terms/policies text blocks.
  • Add approve-to-live / delete moderation actions per imported item.

5) Supplier scheduling and calendar coordination

  • Add availability model by:
  • service,
  • staff member,
  • schedule/calendar window.
  • Add booking intake modes:
  • auto-accept,
  • provisional (requires provider confirmation),
  • enquiry-only (manual confirmation later).
  • Ensure booking state transitions align with selected intake mode.

6) Customer booking management workflow

  • Build comprehensive customer flows for:
  • request booking,
  • cancel booking,
  • adjust/reschedule booking,
  • track confirmation status.
  • Align customer UX and backend state machine with supplier-side scheduling decisions.
  • Include clear messaging for pending/provisional/enquiry outcomes.

11) Release packaging discipline (new)

  • Ship changes in small patch releases with explicit scope and smoke tests.
  • Recommended rhythm:
  • collect feedback continuously,
  • batch into a scoped patch (`v0.2.x`),
  • complete local dev + local QA,
  • commit with release note entry,
  • push + deploy,
  • verify production smoke checklist.
  • Maintain a lightweight per-release checklist:
  • route integrity,
  • login/signup return paths,
  • booking create/cancel/amend actions,
  • supplier onboarding entry/return paths,
  • key navigation links.
  • Operational source of truth: `docs/release-strategy.md` (Railway as UAT, patch-only deployments).

13) User-agent process-flow test module (new)

  • Design and implement an automated user-agent testing module for end-to-end journey validation before each patch release.
  • Module design document: `docs/user-agent-test-module.md`.
  • Initial scope:
  • booking-to-basket-to-checkout flow,
  • login/signup `next` redirect integrity,
  • supplier onboarding checklist render (no 500),
  • header/nav routing sanity,
  • account link routing sanity.
  • Run profile strategy:
  • `uat-smoke` for release gates,
  • expanded regression profile for broader local validation.

14) Mobile optimization pass (minor release)

  • Deliver a mobile-optimized UX pass as a minor release focused on handheld usability and responsive consistency.
  • Scope baseline:
  • responsive navigation/dropdowns,
  • touch-friendly tap targets and spacing,
  • booking, basket, and checkout mobile layouts,
  • onboarding and account-management pages on small screens,
  • overflow/scroll handling for tables/cards/modals.
  • Add mobile acceptance criteria:
  • no clipped critical UI,
  • no horizontal overflow on core pages,
  • primary actions remain visible and reachable,
  • modals and date/time pickers usable on common mobile viewport sizes.
  • Add a dedicated mobile smoke checklist to release gating before UAT deployment.

#### GUI stabilization item

  • Top menu bar overlaps itself at mid-width/half-width browser sizes; implement responsive header/nav behavior to prevent overlap and clipping.

#### Open product question

  • Should we prioritize a mobile-optimized web experience first, or begin a native Android app track in parallel/next?

15) Service payment options + platform configuration admin (target: v0.2.4)

  • Add per-service payment options visible on listings and enforced at checkout:
  • Pay up front,
  • Pay on delivery,
  • Pay in cash.
  • Add service-level payment policy controls in provider/service management.
  • Add a platform-admin configuration area to manage configurable site behavior through GUI rather than code changes.
  • Initial platform-config admin scope:
  • default payment option behavior,
  • allowed payment methods by service type/category,
  • rollout toggles and validation rules for payment-option compatibility.
  • Add guardrails and auditability:
  • role-restricted access,
  • config change history,
  • safe defaults and validation before save.

16) Show services near me + service area mapping (target: v0.2.4)

  • Add customer-facing "Show services near me" flow in service discovery.
  • Require/validate customer postcode for distance-based local results.
  • Add customer-selectable search radius option (for example 1, 3, 5, 10, 25 miles).
  • Add per-service location model:
  • fixed service location and/or
  • service area radius (example: 5 miles from `PE1 1EU`).
  • Add provider GUI controls to define service area in onboarding/service management.
  • Add map visualization for providers showing a radius ring of their coverage area.
  • Keep support for non-location services:
  • virtual/location-independent services (for example Zoom calls) bypass local radius filtering.
  • Add booking eligibility checks:
  • location-bound services must only be bookable when customer location is inside service area.

17) Service-hours and timezone policy (target: v0.2.4)

  • Add service-hours metadata stored in UTC.
  • Add a small widget showing current local time relative to service hours.
  • Initial policy decision: default scheduling and service-hours display to UTC for release stability.
  • Roadmap follow-up: allow customer preferred timezone selection in a later release once timezone conversion rules are fully tested.

18) Provider service tags + platform-editable taxonomy (target: v0.2.4)

  • Add service tags so providers can categorize offerings (examples: `Home Services`, `IT Consultancy`).
  • Allow providers to assign one or more tags to each service in service management.
  • Add platform-admin GUI controls to manage the available tag list without code changes.
  • Include taxonomy governance:
  • create/edit/archive tags,
  • ordering/grouping support,
  • prevent accidental deletion of tags in active use.

19) Platform Administration - global service management (target: v0.2.5)

  • Add a new Platform Administration section: **Service Management**.
  • Platform admins should be able to view and manage every service across every supplier from one page.
  • Initial admin capabilities:
  • global search/filter by supplier, service state, category, service type, location mode,
  • inspect key metadata and moderation flags,
  • open service detail for audit/moderation decisions,
  • perform controlled state actions (pause, unpause, archive) with audit logging.
  • Include governance guardrails:
  • role-restricted access (platform/super admin only),
  • action reason capture,
  • immutable audit trail of admin changes.

20) Supplier dashboard IA refinement (target: v0.2.4)

  • Replace dashboard section "cards" with a persistent left-hand text navigation list for supplier sub-sections.
  • Left navigation style:
  • simple section labels,
  • small preceding icon,
  • optional count suffix in brackets where relevant (for example `Team members (3)`, `Services (8)`).
  • Keep supplier sub-navigation visible while inside My Business modules so only the main content pane changes by subsection.
  • Correct navigation behavior:
  • "Back to onboarding checklist" action should route to Supplier Dashboard (hub) where specified, not force checklist return.
  • Add Current Tier management panel in dashboard:
  • show standard tier cards,
  • show contextual action (`Upgrade` or `Downgrade`) based on current tier,
  • require confirmation popup before tier-change action is applied.

21) Customer-supplier messaging module (target: post-v0.2.5)

  • Add a new **Messages** module with topic-based **Conversations**.
  • A customer can start conversations with a supplier from three contexts:
  • pre-sales from a service catalogue listing,
  • post-sales from a pending booking,
  • post-delivery from a completed service/booking.
  • Conversation grouping model:
  • one customer + one supplier can have multiple separate conversations,
  • each conversation is scoped to a specific topic/context.
  • Auto topic rules:
  • catalogue origin -> topic defaults to service name,
  • booking origin -> topic defaults to `Service name | Date | Status`.
  • Chat safety baseline:
  • inject persistent safety advice at conversation start (no banking details, passwords, etc.),
  • add moderated message validation that detects personal/sensitive info and rejects blocked content.
  • Notification preferences and delivery channels:
  • add user-level notification settings for both customers and supplier admins,
  • allow opt-in/opt-out per conversation event type,
  • initial event examples:
  • new message alert,
  • copy message to email,
  • conversation close requested,
  • conversation closed.
  • Channel expansion roadmap:
  • evaluate WhatsApp integration for conversation participation and notifications,
  • if direct integration is too complex for initial rollout, defer to a later-channel phase and/or mediated integration approach (for example Facebook/Meta messaging module patterns).
  • Conversation lifecycle controls:
  • support archive/close behavior so closed conversations move out of active lists,
  • close requires bilateral agreement,
  • if one side requests close, show prompt to other participant:
  • "The supplier has requested a close of this conversation, if you agree click close otherwise continue chatting."

22) Dispute framework discovery and standards mapping (deferred)

  • Keep full dispute framework as a later-phase initiative due scope size.
  • Discovery/research inputs should benchmark industry standards from platforms such as:
  • Uber,
  • Airbnb,
  • eBay.
  • Future design baseline should cover:
  • dispute lifecycle states,
  • evidence capture and audit trails,
  • role responsibilities and SLAs,
  • customer/supplier UX escalation flows.

23) Timezone UX hardening (target: v0.2.6 patch)

  • Ensure timezone selection uses a standard timezone dropdown list.
  • Use canonical timezone identifiers (IANA) and avoid free-text timezone entry.
  • Keep timezone selection consistent across supplier onboarding and account/settings surfaces.

24) Unified calendar platform (target: v0.3.0 minor)

  • Deliver a new calendar capability as a minor release with two user-facing modules:
  • **My Bookings Calendar** (customer scope),
  • **My Business Calendar** (supplier scope).
  • IA placement rule:
  • expose calendar entry points inside existing **My Bookings** and **My Business** navigation groups,
  • do not add a separate top-level navigation section for calendar.
  • Suppliers remain customers, so accounts may use both calendar modules.
  • Build first-party At-You local calendar as source of truth for booking events.
  • Add OAuth calendar connections (initial connectors: Google Calendar, Outlook Calendar).
  • Sync policy (phase 1):
  • uni-directional from At-You to connected third-party calendar,
  • third-party event updates should not mutate At-You bookings,
  • calendar entries include deep-link back to At-You booking/event page for edits.
  • Calendar connector settings:
  • user can connect multiple providers,
  • user chooses active sync target in calendar settings,
  • clear sync-state indicators and error handling.

25) Service scheduling + team allocation engine (target: v0.3.0 minor)

  • Add service-level schedule configuration for bookable windows (example: Mon-Fri, 09:00-17:00).
  • Add per-service attendance/capacity model:
  • one-to-one sessions (single slot occupancy),
  • group sessions with configurable capacity.
  • Add team-member eligibility mapping per service:
  • supplier admin specifies which team members can deliver each service,
  • each eligible member has individual availability calendar constraints.
  • Add assignment strategy controls (explicit modes):
  1. **Strict primary**: only designated member can deliver; if unavailable, slot is unavailable.
  2. **Primary then fallback**: try primary first, then any configured fallback member.
  3. **Priority order**: assign by configured rank order across members.
  4. **Balanced load**: choose available eligible member with lowest current booking load for period.
  • Clarification:
  • mode 2 and mode 3 are similar but distinct:
  • mode 2 is binary primary-vs-fallback behavior,
  • mode 3 supports explicit multi-member ordered routing.
  • Team model expansion:
  • allow suppliers to create multiple teams,
  • add granular roles:
  • **Team Admin**: create/manage teams, add/remove members, configure availability/schedules,
  • **Team Calendar Admin**: view and adjust calendar bookings.
  • Open design question:
  • should one person be allowed in more than one team,
  • current concern is UX/operational confusion; decide before role-assignment implementation.

26) Calendar permissions and booking interaction model (target: v0.3.0 minor)

  • Supplier admins:
  • can view all business/team calendars,
  • can interact with all business bookings.
  • Supplier team members:
  • can view own calendar and shared business calendar,
  • can interact only with bookings assigned to themselves.
  • Customers:
  • can view and interact only with their own bookings/calendar events.
  • Add access-control tests for all calendar + booking interactions by role and assignment.

27) Messaging workspace UX and status signals (target: v0.3.0 minor)

  • Keep full messaging pages grouped under **My Bookings** and **My Business** (separate customer/supplier context entry points).
  • Add top-bar messaging icon as speech bubble on the right side.
  • Top-bar messaging behavior:
  • click icon opens dropdown with recent conversations,
  • selecting a conversation opens a right-side chat panel (~25% viewport width),
  • panel allows chat while keeping main site visible.
  • Include link from dropdown/panel to full messaging pages.
  • Add unread and attention indicators:
  • messaging icon shows red `(x)` when new/unread messages exist,
  • users can mark messages as unread,
  • unread messages render in bold,
  • show amber `!` on navigation sections requiring user attention.

28) Booking metrics consistency (target: v0.3.0 minor)

  • Exclude cancelled bookings from booking statistics/count/value summaries for customers.
  • Exclude cancelled bookings from booking statistics/count/value summaries for suppliers.

29) Header/nav IA refinements (target: v0.3.0 minor)

  • Remove the standalone `Services` section header label from top navigation.
  • Move `Book now` action to the front/first position in the left-hand top-bar navigation list.

30) Contextual tooltips for restricted UI actions (new)

**Problem identified**: When UI navigation/actions are restricted due to incomplete prerequisites (e.g., My Business navigation requires completed onboarding), users receive no feedback explaining why actions are unavailable or what needs to be done.

**Solution**:

  • Add contextual tooltips/hints when restricted UI elements are detected.
  • Display clear, actionable messaging explaining:
  • **Why** the action is restricted (e.g., "Onboarding incomplete")
  • **What** needs to be done to unlock the action (e.g., "Complete your supplier profile")
  • **How** to proceed (e.g., link to onboarding checklist or next required step)

**Implementation scope**:

  • Detect restricted navigation/button states across the platform
  • Add tooltip/popover component that triggers on hover or click of restricted elements
  • Include prerequisite-checking logic to determine specific blockers
  • Provide deep links to resolution paths (e.g., "Complete step 2 of onboarding")
  • Apply pattern consistently across:
  • My Business navigation (requires completed onboarding)
  • Service management (requires organization setup)
  • Team management (requires minimum subscription tier)
  • Booking actions (requires customer profile completion)
  • Admin controls (requires specific permissions/roles)

**UX patterns**:

  • **Disabled buttons/links**: Show tooltip on hover with reason + action
  • **Grayed-out navigation items**: Include small info icon with explanation
  • **Redirect scenarios**: Show modal/banner before redirect explaining why and offering direct path
  • **Permission-based restrictions**: Clear RBAC messaging (e.g., "Requires Platform Admin role")

**Benefits**:

  • Reduces user confusion and support burden
  • Improves onboarding completion rates
  • Makes prerequisite workflows discoverable
  • Provides clear path forward when blocked
  • Better UX for progressive feature unlocking based on account state

31) In-wizard team & schedule creation for Service Delivery step (new, target: v0.5.x)

**Problem identified (v0.5.1)**: The service-creation wizard now has a dedicated Step 4 "Service Delivery" that lets suppliers pick an `assignment_strategy`, but the wizard has no way to **create new team members or define schedules** inline. If a supplier hasn't set up a team yet, or wants to add a new deliverer specifically for this service, they must leave the wizard, complete the team/schedule setup elsewhere, and return - losing wizard context.

**Solution**:

  • On Step 4 (Service Delivery), surface the current team roster with eligibility toggles per member for this service.
  • Add "Add team member" inline action that opens a modal/drawer to create a new member (name, email, role) without leaving the wizard; on save, the new member appears in the roster and can be marked eligible for the service being created.
  • Add "Define schedule" inline action per eligible member to configure that member's availability window for this service (weekday grid + hours, or reuse existing member calendar constraints).
  • Persist team/schedule changes immediately (they are independent of the draft service) but keep wizard state intact so the supplier can continue to Step 5.

**Dependencies**:

  • Aligns with roadmap item #25 (service scheduling + team allocation engine) - the wizard becomes the primary UI surface for that engine.
  • Needs team/member model and schedule model exposed via wizard-friendly endpoints/partial views.

**Acceptance**:

  • Supplier can complete a full service definition end-to-end (including creating a fresh team member and their schedule) without leaving `/catalogue/services/new/`.
  • Cancelling the wizard does not delete team members or schedules created inline (they persist independently).

32) Reusable supplier staff calendars (packaged locally: v0.5.3)

**Problem identified (v0.5.2 local validation):** A supplier can define service

hours and see current team members, but there is no supplier workspace for creating

staff availability. The owner may be the only member and still has no way to attach

a working schedule. Re-entering the same hours for every person would also create

avoidable duplication.

**Solution:**

  • Add a supplier navigation section named **Calendars**.
  • Let a supplier create reusable organisation-owned calendar templates such as

"Mon-Fri 09:00-17:00" or "Weekend 10:00-14:00".

  • Let one calendar be assigned to one or many active organisation members, including

the supplier owner (for example, one standard calendar assigned to five staff).

  • Support create, edit, activate/deactivate, and assignment management without

duplicating weekly-hour data per member.

  • Resolve customer bookable slots as the intersection of service hours and assigned

staff calendars: service hours define when the service may be offered; staff

calendars determine whether an eligible person is actually available.

  • Clearly show members with no assigned calendar and explain that they produce no

bookable availability.

**Proposed data boundary:**

  • Organisation-owned `StaffCalendar` with name, timezone, weekly schedule, and

active status.

  • Explicit calendar-to-`OrganisationMember` assignment relation so shared calendars

remain reusable and auditable.

  • Do not copy a calendar's JSON onto every member.

**Acceptance:**

  • Supplier can create one "Mon-Fri 09:00-17:00" calendar and assign it to five staff.
  • Editing that shared calendar updates availability for all assigned staff.
  • Cross-organisation calendars and members cannot be associated.
  • An eligible member with no active assigned calendar contributes no slots.
  • Service hours never create a slot unless at least one eligible assigned member is

available at that time.

Notes and constraints for upcoming work

  • Keep candidate ingestion and live provider data strictly separated until explicit approval.
  • Preserve auditability for all draft-to-live actions and admin overrides.
  • Keep legal/compliance review in scope for public-source ingestion and outreach content.

Backlog (after the tomorrow queue)

  • Stripe Connect onboarding and payment capture with webhooks.
  • Add-on selection and separated ledger values in checkout.
  • Booking state machine hardening and cancellation/refund workflows.
  • Notifications fan-out and email templates.
  • Legal content finalization for Terms of Use and Privacy Policy pages.
  • Supplier portal parity pass for private-area domain actions.
  • Account-level parity for subscriptions, wallet, orders, and addresses.

Future features

  • AI URL ingestion pipeline using configurable LLM + extractor adapters.
  • Full AI provider copilot with conversational edit commands and approval workflow.
  • Dispute tooling, review eligibility constraints, and support workflows.
  • Search relevance scoring and postcode/radius matching improvements.
  • Full supplier private-area parity including dedicated pages for subscriptions, wallet, orders, and addresses with linked domain actions.

Conversation