Tech Work Updates

Recently shipped work and fixes, sourced from merged pull requests.

Shipped Shipped

Add Tech Updates Control Center

Adds a staff-only Django Admin Tech Updates Control Center. - Lets staff discover organization repositories from the browser, inactive by default. - Adds bulk repository activation/deactivation and a sync action for active repositories. - Adds browser creation of release-note drafts for one repository or System and a date range. - Reuses existing GitHub discovery, updates sync, and deterministic release-note services.

SNH Index · snh-index · Sep 1, 2026

Shipped Shipped

Add a bulk CRM push for events that have never been synced

Add a bulk CRM push for events that have never been synced

TX B2B · tx-b2b-do-app · Sep 1, 2026

Shipped Shipped

Stop droplet deploys from hanging when compose run steals SSH stdin

Stop droplet deploys from hanging when compose run steals SSH stdin

TX B2B · tx-b2b-do-app · Sep 1, 2026

Shipped Shipped

feat(layout): implement smooth scrolling to top for active account li…

feat(layout): implement smooth scrolling to top for active account li…

HCP Portal · tx-hcp · Sep 1, 2026

Shipped Shipped

Run the full PR test suite on every non-draft pull request

Run the full PR test suite on every non-draft pull request

TX B2B · tx-b2b-do-app · Sep 1, 2026

Shipped Shipped

Turn event portfolio into a practitioner-funnel ranking

Turn event portfolio into a practitioner-funnel ranking

TX B2B · tx-b2b-do-app · Sep 1, 2026

Shipped Shipped

fix(analytics): show practitioner link source

fix(analytics): show practitioner link source

TX B2B · tx-b2b-do-app · Aug 31, 2026

Shipped Shipped

gm/feat: add n8n practitioner id side effect

Adds durable B2B → Odoo Practitioner identity mapping when an Odoo CRM lead reaches an approved stage. - Resolves a Practitioner only from stable Shopify customer evidence; email never establishes identity. - Creates an immutable, idempotent mapping delivery and sends it post-commit through Hatchet. - Signs the exact stored JSON body with HMAC and handles delivered, review-required, retryable, and terminal outcomes. - Normalizes webhook lead aliases (`odoo_lead_id`, `id`, `_id`) and preserves existing manual-link behavior. - Adds admin visibility, configuration, tests, documentation, and synced/archived OpenSpec artifacts.

TX B2B · tx-b2b-do-app · Aug 31, 2026

Shipped Shipped

Import LeadUpload in the long-header upload regression test

Import LeadUpload in the long-header upload regression test

TX B2B · tx-b2b-do-app · Aug 31, 2026

Shipped Shipped

Rename the EventCrmPush index to Django's autogenerated name

Rename the EventCrmPush index to Django's autogenerated name

TX B2B · tx-b2b-do-app · Aug 31, 2026

Shipped Shipped

Show event portfolio stats, keep CSV leads local, and make attributed ROAS usable

Show event portfolio stats, keep CSV leads local, and make attributed ROAS usable

TX B2B · tx-b2b-do-app · Aug 31, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 31, 2026

Shipped Shipped

Verify merge candidates and split Commerce Reporting date ranges

Verify merge candidates and split Commerce Reporting date ranges

TX B2B · tx-b2b-do-app · Aug 29, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 28, 2026

Shipped Shipped

fix(observability): avoid duplicate dashboard captures

Prevent the practitioner dashboard server loader from emitting a second Sentry event for a BFF failure that was already captured at the proxy boundary.

HCP Portal · tx-hcp · Aug 28, 2026

Shipped Shipped

Give events a dedicated detail page with unique leads and HCP chrome

Give events a dedicated detail page with unique leads and HCP chrome

TX B2B · tx-b2b-do-app · Aug 28, 2026

Shipped Shipped

Improve Exception Payout Requests filtering and loading

Improve Exception Payout Requests filtering and loading

TX B2B · tx-b2b-do-app · Aug 28, 2026

Shipped Shipped

Improve payout exception recovery and patient sales run controls

Improve payout exception recovery and patient sales run controls

TX B2B · tx-b2b-do-app · Aug 28, 2026

Shipped Shipped

Show lead-upload results and add entered_by migration

Follow-up to #40: after a lead CSV/XLSX import, operators see generated, attributed, pending-review, duplicate, and rejected counts (flash message and latest import on the event page). - Adds `analytics/migrations/0015_alter_eventspendline_entered_by.py`, which depends on `0014_eventspendline_samples_category` already on `main`. This records `EventSpendLine.entered_by` as `blank=True` (state-only; no column change). `0014` is not duplicated.

TX B2B · tx-b2b-do-app · Aug 27, 2026

Shipped Shipped

Handle projection conflicts and sales-sync contention

Handle projection conflicts and sales-sync contention

TX B2B · tx-b2b-do-app · Aug 27, 2026

Shipped Shipped

Complete event operations and make lead uploads durable

Completes event detail operations: spend (including Samples), activity, media, retrospective, delete, and lead profile links (Shopify, Practitioner, Odoo), with events defaulting to all-time. - Makes lead CSV uploads durable: reconcile existing practitioner contacts instead of failing the whole file on identity conflict, and retry the same event+file instead of rejecting on sha256 uniqueness. - Adds leads-directory search and event filter, rebased onto latest `main` (applications, media-links, and migration `0013` from vanity short links).

TX B2B · tx-b2b-do-app · Aug 27, 2026

Shipped Shipped

Improve Finance payout exception and practitioner tools

Improve Finance payout exception and practitioner tools

TX B2B · tx-b2b-do-app · Aug 27, 2026

Shipped Shipped

fix(catalog): position new badge on product image

fix(catalog): position new badge on product image

HCP Portal · tx-hcp · Aug 27, 2026

Shipped Shipped

Cache payout exception authorization roles

Cache payout exception authorization roles

TX B2B · tx-b2b-do-app · Aug 27, 2026

Shipped Shipped

Add finance payout exception management

Add finance payout exception management

TX B2B · tx-b2b-do-app · Aug 27, 2026

Shipped Shipped

feat(catalog): badge new Tro+ Blue pack

feat(catalog): badge new Tro+ Blue pack

HCP Portal · tx-hcp · Aug 26, 2026

Shipped Shipped

Fix event lead CRM timestamps and nameless delivery

Event lead uploads now record engagement `occurred_at` as the event start time, not the upload/row-created time, so CRM activity matches when the event actually happened. - CRM delivery no longer rejects leads that have email or mobile but no first/last name. Those payloads send `contact_name: null` instead of aborting the whole event push.

TX B2B · tx-b2b-do-app · Aug 26, 2026

Shipped Shipped

fix(catalog): hide 15-troche patient variant

fix(catalog): hide 15-troche patient variant

HCP Portal · tx-hcp · Aug 26, 2026

Shipped Shipped

refactor(download): disallow Google Drive files in download route and…

refactor(download): disallow Google Drive files in download route and…

HCP Portal · tx-hcp · Aug 26, 2026

Shipped Shipped

feat(download): allow Google Drive files in download route and add co…

feat(download): allow Google Drive files in download route and add co…

HCP Portal · tx-hcp · Aug 26, 2026

Shipped Shipped

Add campaign vanity short links for branded media URLs

Add campaign vanity short links for branded media URLs

TX B2B · tx-b2b-do-app · Aug 25, 2026

Shipped Shipped

Update Symposium 2026 schedule: adjust times, normalize durations, add Day 1 Q&A

Update Symposium 2026 schedule: adjust times, normalize durations, add Day 1 Q&A

HH Shopify · snh-homehope-headless · Aug 25, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 25, 2026

Shipped Shipped

Restore commerce reporting compatibility

Restore commerce reporting compatibility

TX B2B · tx-b2b-do-app · Aug 25, 2026

Shipped Shipped

Harden wholesale application bot-risk grading

Fetch websites stored without a scheme as `https://clinic.com` instead of recording `MissingSchema` as unreachable. - Use the linked practitioner name for NPI lookup when the application first/last name is blank. - Let reviewers filter Applications by whether an account exists, and list other applications that share the same phone number.

TX B2B · tx-b2b-do-app · Aug 25, 2026

Shipped Shipped

Add Client Order sales projection and Commerce Reporting

Add Client Order sales projection and Commerce Reporting

TX B2B · tx-b2b-do-app · Aug 25, 2026

Shipped Shipped

gm/feat: add FAQ search

Add role-scoped FAQ search with accessible results and zero-result recovery - Track aggregate search outcomes and FAQ-card CTA clicks without raw queries or URLs - Sync and archive the FAQ search OpenSpec change

HCP Portal · tx-hcp · Aug 24, 2026

Shipped Shipped

gm/feat(routes): migrate client paths to patient (#422)

gm/feat(routes): migrate client paths to patient (#422)

HCP Portal · tx-hcp · Aug 24, 2026

Shipped Shipped

gm/feat(routes): migrate client paths to patient

gm/feat(routes): migrate client paths to patient

HCP Portal · tx-hcp · Aug 24, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 21, 2026

Shipped Shipped

feat(analytics): enable heatmaps in PostHog configuration and update …

feat(analytics): enable heatmaps in PostHog configuration and update …

HCP Portal · tx-hcp · Aug 21, 2026

Shipped Shipped

Fix Hatchet dispatch for wholesale owner-tag reconciliation

Fix Hatchet dispatch for wholesale owner-tag reconciliation

TX B2B · tx-b2b-do-app · Aug 21, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 21, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 21, 2026

Shipped Shipped

Gm/feat faq page

Gm/feat faq page

HCP Portal · tx-hcp · Aug 21, 2026

Shipped Shipped

Update Shopify GraphQL pull-order test fixture

add required fulfillment and nested-connection completion metadata to the pull-orders GraphQL fixture - assert canonical Shopify order GID persistence instead of the retired legacy numeric identity

TX B2B · tx-b2b-do-app · Aug 21, 2026

Shipped Shipped

Map commerce summaries to the Odoo contract

translate internal commerce projection fields into Odoo's strict external summary schema only at the delivery boundary - verify zero-order, first-order, correlated refresh, idempotent replay, identity-review, and out-of-order outcomes against external-shaped fixtures - expose bounded outbox response diagnostics and flag correlated out-of-order refreshes for operator review - merge the two already-landed wholesale migration branches so deploy migrations remain linear

TX B2B · tx-b2b-do-app · Aug 21, 2026

Shipped Shipped

Add Wholesale Reconciliation Dev Tools and owner-tag repair

Add Wholesale Reconciliation Dev Tools and owner-tag repair

TX B2B · tx-b2b-do-app · Aug 21, 2026

Shipped Shipped

Add wholesale application bot-risk verification in analytics

Score wholesale applications 0–100 for bot/junk risk (website, NPI, local heuristics) via a Hatchet job on intake, without auto-reject or CRM write-back. - Add an Analytics Applications workspace with period summaries, average grade, a filterable list, per-row/detail reasoning, linked practitioner/retailer, and staff regrade. - Link Analytics from the main operations dashboard so reviewers can open HCP Growth OS without typing the URL.

TX B2B · tx-b2b-do-app · Aug 21, 2026

Shipped Shipped

Fix lifecycle refresh callbacks and outbox status counting

allow `refresh_request_id` only for `account_data.refresh_requested` lifecycle payloads - preserve signed refresh callback idempotency while creating the correlated commerce summary - count all declared outbox statuses, including `terminal` and `operator_review`, without worker `KeyError`s

TX B2B · tx-b2b-do-app · Aug 21, 2026

Shipped Shipped

gm/feat: suppress transition banner for patients

gm/feat: suppress transition banner for patients

HCP Portal · tx-hcp · Aug 21, 2026

Shipped Shipped

Fix speaker name to Neil Grunberg on Conference 2026 page

Fix speaker name to Neil Grunberg on Conference 2026 page

HH Shopify · snh-homehope-headless · Aug 20, 2026

Shipped Shipped

fix(catalog): match Tro+ Blue 15 Pack variant

fix(catalog): match Tro+ Blue 15 Pack variant

HCP Portal · tx-hcp · Aug 20, 2026

Shipped Shipped

gm/feat: allow 15 pack variants (#413)

gm/feat: allow 15 pack variants (#413)

HCP Portal · tx-hcp · Aug 20, 2026

Shipped Shipped

Fix subscription-status tests blocking GitHub container builds

Use numeric Shopify customer IDs in the new subscription-status relationship tests so `normalize_shopify_customer_id` does not 403. - Expect `has_active_practitioner_relationship` on the existing token-flow payload now that PR #20 added that field. This is independent of the Spaces change. That merge already got past `/app/var`; these five tests were the remaining CI failures on `main`.

TX B2B · tx-b2b-do-app · Aug 20, 2026

Shipped Shipped

gm/feat: allow 15 pack variants

gm/feat: allow 15 pack variants

HCP Portal · tx-hcp · Aug 20, 2026

Shipped Shipped

Store analytics uploads on DigitalOcean Spaces and unblock non-root CI

Send analytics lead/media uploads to the shared `snhlife` Space under `txb2b/` when Doppler Spaces credentials are set; keep objects private with no public URLs. - Give the non-root image a writable `/app/var/private-media` fallback, and keep `manage.py test` on a temp disk so CI does not write to Spaces or fail with `Permission denied: /app/var`.

TX B2B · tx-b2b-do-app · Aug 20, 2026

Shipped Shipped

gm/feat: extend subscription status endpoint

gm/feat: extend subscription status endpoint

TX B2B · tx-b2b-do-app · Aug 20, 2026

Shipped Shipped

Restore PRs #8-#17 that were dropped from GitHub main after the CRM rewind

Restore PRs #8-#17 that were dropped from GitHub main after the CRM rewind

TX B2B · tx-b2b-do-app · Aug 19, 2026

Shipped Shipped

Archive five completed OpenSpec changes and record GitHub, Hatchet, and payout-generation verification

Archive five completed OpenSpec changes and record GitHub, Hatchet, and payout-generation verification

TX B2B · tx-b2b-do-app · Aug 19, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 19, 2026

Shipped Shipped

feat(protocols): add protocol sorting

feat(protocols): add protocol sorting

HCP Portal · tx-hcp · Aug 19, 2026

Shipped Shipped

Remove the wholesale sales recovery cron

Remove the wholesale sales recovery cron

TX B2B · tx-b2b-do-app · Aug 19, 2026

Shipped Shipped

Support idempotent mixed legacy and hardened PayPal payout sends

Support idempotent mixed legacy and hardened PayPal payout sends

TX B2B · tx-b2b-do-app · Aug 18, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 18, 2026

Shipped Shipped

Fix Hatchet recovery timeouts and sales-sync reclaim collisions, and document wholesale order tag backfill.

Fix Hatchet recovery timeouts and sales-sync reclaim collisions, and document wholesale order tag backfill.

TX B2B · tx-b2b-do-app · Aug 18, 2026

Shipped Shipped

Fix the forced-refill backfill test so mocked syncs persist completeness.

Fix the forced-refill backfill test so mocked syncs persist completeness.

TX B2B · tx-b2b-do-app · Aug 18, 2026

Shipped Shipped

Pin the sales-sync due-at index name so CI makemigrations check passes.

Pin the sales-sync due-at index name so CI makemigrations check passes.

TX B2B · tx-b2b-do-app · Aug 18, 2026

Shipped Shipped

Split Hatchet event and cron workers and retain per-order wholesale sales-sync work.

Split Hatchet event and cron workers and retain per-order wholesale sales-sync work.

TX B2B · tx-b2b-do-app · Aug 18, 2026

Shipped Shipped

Add GitHub org discovery and release notes

Adds GitHub organization repository discovery for Smarter-Not-Harder-capable orgs. - Upserts GitHubRepository records from org metadata, inactive by default unless `--activate-new` is supplied. - Supports archived repo handling, dry-run output, and deterministic System mapping. - Adds ReleaseNote model/admin and deterministic release-note generation from WorkUpdate rows. - Adds `/releases` list and `/releases/<slug>` detail pages. - Adds management commands: - `discover_github_repositories` - `generate_release_notes` - No Slack API ingestion, no AI summarization, no GitHub Releases/tags in V1.

SNH Index · snh-index · Aug 17, 2026

Bug fix Shipped

Add tech work updates feed

Adds /updates executive-readable Tech Work Updates feed. - Adds GitHubRepository and WorkUpdate models/admin. - Adds sync_github_updates management command using GitHub token from environment only. - Imports merged GitHub PRs as durable work updates. - Adds bug-fix classification from PR labels/body and Slack permalink extraction from PR body. - Adds PR template fields for Type, Affected system, Bug source / Slack thread, Impact, and Validation. - No Slack API ingestion and no AI summarization in V1.

SNH Index · snh-index · Aug 17, 2026

Shipped Shipped

gm/feat: add notification system toggle

Adds account-level, per-event notification email preferences for practitioners. - Adds preference persistence, API endpoints, and OpenAPI/frontend contract. - Suppresses opted-out optional email at creation, queue, and worker-send time while preserving in-app notifications and sent history. - Applies preferences to automated, manual, and Global Announcement practitioner email; client and legacy transactional workflows remain unchanged. - Adds authenticated “Manage email notifications” links to optional practitioner emails.

TX B2B · tx-b2b-do-app · Aug 17, 2026

Shipped Shipped

Add Dev Tools forced wholesale sales refill

Add Dev Tools forced wholesale sales refill

TX B2B · tx-b2b-do-app · Aug 17, 2026

Shipped Shipped

Classify invalid-phone client creation responses as expected

Classify the known invalid-phone client-creation response as an expected BFF domain state.

HCP Portal · tx-hcp · Aug 17, 2026

Shipped Shipped

Add status uptime summaries and incidents

Adds 24h / 7d / 30d uptime summaries from observed CheckRun data. - Adds 30-day daily uptime history strips. - Adds active and recently resolved incidents on /status from MonitorOutage. - Keeps no-data distinct from operational; no schema changes.

SNH Index · snh-index · Aug 16, 2026

Shipped Shipped

Document GitHub Actions deployment setup and troubleshooting

Document GitHub Actions deployment setup and troubleshooting

TX B2B · tx-b2b-do-app · Aug 15, 2026

Shipped Shipped

Normalize deployment SSH private keys before use

Normalize deployment SSH private keys before use

TX B2B · tx-b2b-do-app · Aug 14, 2026

Shipped Shipped

Make the droplet deployment script executable in CI

Make the droplet deployment script executable in CI

TX B2B · tx-b2b-do-app · Aug 14, 2026

Shipped Shipped

Status page industry-standard redesign + 6h uptime history

Status page industry-standard redesign + 6h uptime history

SNH Index · snh-index · Aug 14, 2026

Shipped Shipped

Simplify the manual GitHub deployment workflow

Simplify the manual GitHub deployment workflow

TX B2B · tx-b2b-do-app · Aug 14, 2026

Shipped Shipped

Fix CI test contract drift across protocol and wholesale flows

Fix CI test contract drift across protocol and wholesale flows

TX B2B · tx-b2b-do-app · Aug 14, 2026

Shipped Shipped

Migrate CI/CD delivery to GitHub Actions

Migrate CI/CD delivery to GitHub Actions

TX B2B · tx-b2b-do-app · Aug 14, 2026

Shipped Shipped

gm/feat: add redirect and patient since (#403)

gm/feat: add redirect and patient since (#403)

HCP Portal · tx-hcp · Aug 13, 2026

Shipped Shipped

gm/feat: add redirect and patient since

gm/feat: add redirect and patient since

HCP Portal · tx-hcp · Aug 13, 2026

Shipped Shipped

chore: promote staging to main

chore: promote staging to main

HCP Portal · tx-hcp · Aug 12, 2026

Shipped Shipped

fix(discounts): restore practitioner checkout flow

fix(discounts): restore practitioner checkout flow

HCP Portal · tx-hcp · Aug 12, 2026

Shipped Shipped

fix(observability): log discount mismatches

fix(observability): log discount mismatches

HCP Portal · tx-hcp · Aug 12, 2026

Shipped Shipped

gm/feat: apply improve discount state architecture (#398)

gm/feat: apply improve discount state architecture (#398)

HCP Portal · tx-hcp · Aug 12, 2026

Shipped Shipped

gm/feat: apply improve discount state architecture

Centralizes discount state in the portal around existing authenticated B2B contracts—without backend or Django changes. - Patient discounts are now scoped to the selected `storefrontId` and derived from storefront detail. - Practitioner wholesale discounts use the authenticated wholesale response; removes the hard-coded 40% policy. - Browser cart storage no longer retains patient discount codes, percentages, or sync status. - Checkout handoff re-resolves discount authority immediately before Shopify cart creation and rejects unavailable or unverified expected discounts. - Adds privacy-safe observability at portal-read and checkout-handoff failure boundaries.

HCP Portal · tx-hcp · Aug 12, 2026

Shipped Shipped

fix(client-storefront): simplify practitioner selector

fix(client-storefront): simplify practitioner selector

HCP Portal · tx-hcp · Aug 11, 2026

Shipped Shipped

fix(client-portal): guard discovery banner by account role

fix(client-portal): guard discovery banner by account role

HCP Portal · tx-hcp · Aug 11, 2026

Shipped Shipped

fix(dashboard): sort announcements and use link labels

fix(dashboard): sort announcements and use link labels

HCP Portal · tx-hcp · Aug 11, 2026

Shipped Shipped

fix(portal): paginate order history and align contract

fix(portal): paginate order history and align contract

HCP Portal · tx-hcp · Aug 11, 2026

Shipped Shipped

fix(links): update Office Hours registration URL

fix(links): update Office Hours registration URL

HCP Portal · tx-hcp · Aug 11, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 10, 2026

Shipped Shipped

Revert "feat(cart): allow purchase mode changes (#388)" (#390)

Revert "feat(cart): allow purchase mode changes (#388)" (#390)

HCP Portal · tx-hcp · Aug 7, 2026

Shipped Shipped

Revert "feat(cart): allow purchase mode changes"

Revert "feat(cart): allow purchase mode changes"

HCP Portal · tx-hcp · Aug 7, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 7, 2026

Shipped Shipped

feat(cart): allow purchase mode changes

feat(cart): allow purchase mode changes

HCP Portal · tx-hcp · Aug 7, 2026

Shipped Shipped

refactor(client): simplify product variant display by removing price …

refactor(client): simplify product variant display by removing price …

HCP Portal · tx-hcp · Aug 7, 2026

Shipped Shipped

fix(dashboard): update Calendly link for Expert Support session

fix(dashboard): update Calendly link for Expert Support session

HCP Portal · tx-hcp · Aug 7, 2026

Shipped Shipped

fix(client): apply practitioner discounts to subscription plans (#384)

fix(client): apply practitioner discounts to subscription plans (#384)

HCP Portal · tx-hcp · Aug 7, 2026

Shipped Shipped

fix(client): apply practitioner discounts to subscription plans

fix(client): apply practitioner discounts to subscription plans

HCP Portal · tx-hcp · Aug 6, 2026

Shipped Shipped

Classify BFF transport failures (#382)

Classify BFF transport failures (#382)

HCP Portal · tx-hcp · Aug 6, 2026

Shipped Shipped

Classify BFF socket transport failures as retryable

Classify upstream transport failures at the BFF boundary as safe, retryable service-unavailable responses.

HCP Portal · tx-hcp · Aug 6, 2026

Shipped Shipped

Classify commerce handoff timeouts (#378)

Classify commerce handoff timeouts (#378)

HCP Portal · tx-hcp · Aug 5, 2026

Shipped Shipped

Classify commerce handoff timeouts safely

Classify commerce handoff timeout failures as sanitized, retryable gateway timeouts.

HCP Portal · tx-hcp · Aug 5, 2026

Shipped Shipped

feat(health): add liveness endpoint (#375)

feat(health): add liveness endpoint (#375)

HCP Portal · tx-hcp · Aug 4, 2026

Shipped Shipped

feat(health): add liveness endpoint

feat(health): add liveness endpoint

HCP Portal · tx-hcp · Aug 4, 2026

Shipped Shipped

Merge pull request #367 from Smarter-Not-Harder/design-review/hcp-por…

Merge pull request #367 from Smarter-Not-Harder/design-review/hcp-por…

HCP Portal · tx-hcp · Aug 4, 2026

Shipped Shipped

Fix stale header on /notifications; revert Quick Links color change

Two follow-ups after the previous design-review PR (#366) merged and deployed to staging: 1. **Fix: middleware matcher gap.** The FINDING-001 header fix depends on an accurate `pathname` computed from `AUTH_NEXT_HEADER`, which the middleware only sets for routes matching its `matcher` list. Three real protected route prefixes — `/notifications`, `/customer`, `/salesperson` — were missing from that list, so requests there never got the header and silently fell back to `DEFAULT_AUTH_NEXT_PATH` ("/dashboard"). Harmless before FINDING-001 (the greeting always showed unconditionally), but it surfaced as the stale "Home / Dashboard" breadcrumb reappearing on `/notifications` once correctness started depending on it. Added all three missing prefixes and a regression test asserting the matcher covers every directory under `(protected)`. 2. **Revert: Quick Links colors.** Restoring the original per-tile hex colors (whats-a-troche, blogs, podcast, buy-wholesale) that FINDING-002 had unified to `var(--accent)` — per feedback, the varied colors are the preferred look.

HCP Portal · tx-hcp · Aug 4, 2026

Shipped Shipped

gm/feat: add notification instance analytics (#372)

gm/feat: add notification instance analytics (#372)

HCP Portal · tx-hcp · Aug 4, 2026

Shipped Shipped

gm/feat: add notification instance analytics

gm/feat: add notification instance analytics

HCP Portal · tx-hcp · Aug 4, 2026

Shipped Shipped

Staging

Staging

HCP Portal · tx-hcp · Aug 3, 2026

Shipped Shipped

feat(requests): support async client request acceptance

support queued, processing, retryable, and invalid async acceptance states - poll active foreground requests through the existing list/detail APIs and keep analytics PII-safe - document and validate the OpenSpec contract, integration docs, and focused tests

HCP Portal · tx-hcp · Aug 3, 2026

Shipped Shipped

gm/feat(recommendations): add client-side form validation for recommendations builder

gm/feat(recommendations): add client-side form validation for recommendations builder

HCP Portal · tx-hcp · Aug 3, 2026

Shipped Shipped

fix(observability): prevent cross-origin iframe replay errors

Prevent replay tooling from inspecting cross-origin iframes.

HCP Portal · tx-hcp · Aug 3, 2026

Shipped Shipped

Design review fixes: header wayfinding, off-palette colors, touch targets

Fixes 5 findings from a /design-review audit of the deployed practitioner portal (hcp.troscriptions.com): - **FINDING-001**: app shell showed a hardcoded "Home / Dashboard" breadcrumb + "Welcome back" heading on every route regardless of page, producing a duplicate `<h1>` and a stale breadcrumb everywhere except the real dashboard. Now route-aware via the pathname the layout already computes. - **FINDING-002**: Quick Links icon tiles used 4 arbitrary hex colors not in DESIGN.md's token system (one dangerously close to the banned legacy teal `#037178`). Unified to `var(--accent)`. - **FINDING-003**: wholesale purchase-mode radios and two client-discount sliders had no `accent-color`, rendering browser-default blue instead of Clinical Teal. - **FINDING-004**: carousel dot indicators (Announcements/Upcoming Events) were 6-10px, under the 44px touch-target minimum. Added an invisible expanded hit area. - **FINDING-005**: Announcements banner headline overlapped the background photo illegibly on mobile viewports. Narrowed heading + adjusted gradient below `sm:`. - Also includes 2 pre-existing commits on this branch not yet in main (`fix: align tutorial grid and add office hours`, `feat(portal): source transition practitioners from Shopify`).

HCP Portal · tx-hcp · Jul 31, 2026