Skip to content

[NightlyBuildAgent] NEEDLE×3: announcement bar urgency, pricing CTA, signals honesty - #489

Open
manazoid4 wants to merge 9 commits into
mainfrom
claude/ecstatic-volta-suabj8
Open

[NightlyBuildAgent] NEEDLE×3: announcement bar urgency, pricing CTA, signals honesty#489
manazoid4 wants to merge 9 commits into
mainfrom
claude/ecstatic-volta-suabj8

Conversation

@manazoid4

Copy link
Copy Markdown
Owner

Summary

Three highest-impact issues found across the full site audit. All fixes are targeted copy/label changes — no new features, no logic changes.

NEEDLE — Top 3 Issues

Issue 1 (highest reach): Announcement bar on every page repeated hero messaging
Every visitor on every page saw: "Find a Tender is free and public · JobFilter helps contractors decide BID, WATCH, SUBCONTRACT or SKIP · Official source links included" — pure marketing explanation that duplicates the hero. Zero urgency. Wastes the highest-attention real estate on the page.

Issue 2: Pricing page had two different button labels for the same action
"START £39/MO →" (hero) vs "START AFTER COVERAGE CHECK →" (plan card) — both called the same CheckoutButton with identical props. Confusion at the critical conversion moment.

Issue 3: Signals page made promises the product doesn't currently keep
PRODUCT.md states: only FTS is live; Planning Data is experimental/disabled; EPC is credential-required. The signals page presented all 10 signal types with live glowing dots, promised "WhatsApp alerts", and said "You get the WhatsApp alert before the job hits any board." A tradesman paying £39 expecting planning/EPC leads gets nothing — kills trust and drives refund requests.


CHANGE

File What changed
app/layout.tsx Announcement bar → "FTS LIVE · Public contracts for your trade — 60-second check. No card. No signup." with pulsing dot
src/pages/PricingPage.tsx Plan card CTA unified to "START £39/MO →" (was "START AFTER COVERAGE CHECK →")
src/pages/SignalsPage.tsx Hero copy no longer promises WhatsApp; Step 3 in "How It Works" WhatsApp copy replaced with honest qualification copy; source strip now marks CONTRACTS (FTS) as LIVE and 9 others as COMING; summary paragraph corrected
src/components/Footer.tsx "LOCK YOUR PATCH — £39/MO →""START £39/MO →" (removes false exclusivity implied by "lock your patch")

CRITIC

  • Is it clearer in <3 seconds? Yes — bar now tells you what to do (check), not what the product is (that's the hero's job)
  • Did this reduce confusion? Yes — pricing has one consistent CTA; signals is now honest about live vs coming
  • New issues introduced? No — all text-only changes
  • Hierarchy improved? Yes — announcement bar has a distinct job from the hero now

REVENUE

  • Increases likelihood of paying? Yes — removes misleading promises that cause buyer remorse and refunds; makes the product's actual value (FTS qualification) the clear sell
  • Makes value clearer? Yes — "60-second check. No card." speaks directly to tradesman risk aversion
  • Reduces friction? Yes — one CTA label on pricing, no conflicting signals
  • Feels like a tool, not SaaS? Yes — "FTS LIVE" with pulsing dot is tool-like, not marketing fluff

NEXT

  • Signals page individual signal cards (Planning, Energy, etc.) still describe non-FTS sources as current capabilities — add "COMING SOON" badges to each card
  • Signals page "Works Starting Now" section still references signal modes not tied to FTS

Generated by Claude Code

…+ signals honesty

NEEDLE:
1. Announcement bar repeated hero messaging on every page — zero urgency, zero action
2. Pricing page had two different button labels for identical checkout action (confusion at conversion moment)
3. Signals page overpromised: WhatsApp alerts + 10 live sources — only FTS is live per PRODUCT.md

CHANGE:
- layout.tsx: Announcement bar → "FTS LIVE · Public contracts for your trade — 60-second check. No card. No signup." (pulsing dot)
- PricingPage.tsx: Plan card CTA unified to "START £39/MO →" (was "START AFTER COVERAGE CHECK →")
- SignalsPage.tsx: Hero no longer promises WhatsApp; "How It Works" Step 3 WhatsApp copy removed; source strip now shows CONTRACTS as LIVE and 9 others as COMING; h2 and summary paragraph corrected
- Footer.tsx: "LOCK YOUR PATCH — £39/MO →" → "START £39/MO →" (removes false exclusivity claim)

CRITIC: All 3 changes reduce confusion without adding complexity. Site is clearer in <3s.
REVENUE: Removes misleading promises that would cause buyer regret and refund requests. Tightens trust chain from first impression → checkout.
NEXT: Signals page signal cards still describe Planning/EPC/etc as current capabilities — add "coming soon" badges to each non-FTS card.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UBbSQhxkGZc29HVFqdtiUn
@vercel

vercel Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
job-filter-v1 Ready Ready Preview Aug 20, 2026 11:15am

@supabase

supabase Bot commented Aug 20, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project nfjwuwsuaapufmkppoeo because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@alwaysmeticulous

alwaysmeticulous Bot commented Aug 20, 2026

Copy link
Copy Markdown

✅ Meticulous spotted 0 visual differences across 169 screens tested: view results.

Meticulous evaluated ~4 hours of user flows against your PR.

Expected differences? Click here. Last updated for commit cba12de fix(signals): sync trade-targeting matrix with Contracts card trades. This comment will update as new commits are pushed.

…ties

nanoid < 3.3.18 (GHSA-2v37-7h3g-55p8) and postcss <= 8.5.22 (GHSA-fxqj-rqcc-2cmp)
were flagged by CI. Updated lockfile via npm audit fix; 0 vulnerabilities remaining.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UBbSQhxkGZc29HVFqdtiUn

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e75a8d9c65

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/pages/SignalsPage.tsx
{['PLANNING', 'ENERGY', 'PROPERTY SALES', 'NEW BUSINESS', 'HMO', 'BUILDING CONTROL', 'AUCTION', 'INSOLVENCY', 'RETROFIT'].map((src) => (
<span key={src} className="flex items-center gap-2 text-sm font-black uppercase text-white/40">
<span className="h-2.5 w-2.5 rounded-full bg-white/20" />
{src} <span className="ml-1 text-[10px] text-white/30">COMING</span>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reconcile the plan promise with the coming-source labels

When a visitor evaluates the £39 plan, this page now labels nine sources as COMING, but the pricing bridge immediately above still states “All 10 signals included.” Those mutually incompatible claims make it unclear whether paying unlocks these sources now or only at some future date; update the plan copy or qualify what “included” means before directing visitors to pricing.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 9586374. Changed "All 10 signals included" → "FTS qualification included. Additional signal types in development." — now consistent with the source strip.


Generated by Claude Code

Comment thread src/pages/SignalsPage.tsx Outdated
</h1>
<p className="mt-6 max-w-2xl text-xl font-bold leading-snug text-white/85">
Ten data sources. Planning, energy, council tenders, property sales. You get the WhatsApp alert before the job hits any board.
Public tender notices qualified for your trade, region and firm size. Current live source: Find a Tender. Additional signal types in development.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the unsupported firm-size qualification claim

The linked scanner cannot qualify notices against firm size: FindJobsPage.submit sends only postcode, trade, radius, and mode, server/routes/leadsSearch.ts scans using only those fields and access tier, and neither signup nor activation collects headcount. Consequently this new headline promises a dimension that every scan currently ignores; describe only trade/region qualification or add firm-size data to the scoring path.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 9586374. Removed "firm size" from the hero subtitle — now reads "qualified for your trade and region" only, matching what the scanner actually does.


Generated by Claude Code

Comment thread src/pages/SignalsPage.tsx Outdated
['STEP 1', 'SIGNAL DETECTED', 'One of ten signal classes flags activity in your postcode. Planning approval. Property sale. Legal retrofit trigger. Council contract. Compliance pressure.'],
['STEP 2', 'SCORED INSTANTLY', 'Every signal gets a score. GOLD means act now. SILVER means worth watching. BRONZE goes on your quiet-week list. You only see what\'s worth your time.'],
['STEP 3', 'STRAIGHT TO YOUR WHATSAPP', 'Gold leads hit your phone within minutes. Not an email. Not a dashboard you have to log into. Your WhatsApp. The job detail, the location, the source. Ready to act.'],
['STEP 3', 'DECISION IN SECONDS', 'BID, WATCH, SUBCONTRACT or SKIP. Each result includes the official source link, buyer, deadline and your firm\'s fit evidence. No noise — only what matches your trade and region.'],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Limit the result-fields promise to paid access

For visitors following this page's free-scan CTA, not every result includes the fields promised here: toFreePreviewLead in server/routes/leadsSearch.ts deliberately returns empty buyer, deadline, and URL fields and replaces the recommended action with an upgrade prompt. Qualify this sentence as describing paid results, or it overpromises what users receive from the prominently advertised free scan.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 9586374. Step 3 now reads: "Each qualified result shows your fit against the notice. Buyer, deadline and source link included on the paid plan." — clearly scopes the full-detail promise to paid access.


Generated by Claude Code

…ignals included' vs COMING labels, qualify free-scan result fields

P1: Pricing bridge said 'All 10 signals included' but source strip showed 9 as COMING.
Fixed to 'FTS qualification included. Additional signal types in development.'

P2: Hero subtitle claimed 'trade, region and firm size' qualification — scanner
only filters on trade/postcode/radius. Removed 'firm size' from copy.

P2: Step 3 promised 'buyer, deadline, source link' to all users — toFreePreviewLead
strips these fields. Qualified: 'Buyer, deadline and source link included on the paid plan.'

Also fixed Steps 1 and 2 which still referenced '10 signal classes' and
GOLD/SILVER/BRONZE scoring that don't exist yet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UBbSQhxkGZc29HVFqdtiUn

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9586374931

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/pages/SignalsPage.tsx Outdated
['STEP 3', 'STRAIGHT TO YOUR WHATSAPP', 'Gold leads hit your phone within minutes. Not an email. Not a dashboard you have to log into. Your WhatsApp. The job detail, the location, the source. Ready to act.'],
['STEP 1', 'NOTICE DETECTED', 'A current Find a Tender notice is matched to your trade and delivery region. Contract value, buyer, CPV codes and deadline are extracted.'],
['STEP 2', 'FIT CHECKED', 'The notice is checked against your trade, region and contract range. Requirements you meet and those you are missing are listed before you spend time on a bid.'],
['STEP 3', 'DECISION IN SECONDS', 'BID, WATCH, SUBCONTRACT or SKIP. Each qualified result shows your fit against the notice. Buyer, deadline and source link included on the paid plan. No noise — only what matches your trade and region.'],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Authenticate scans before promising paid result fields

For a paid subscriber using the normal /find-jobs flow, these fields still remain locked: FindJobsPage.submit sends no bearer token, while resolveAccessContext returns preview access whenever the Authorization header is absent, causing toFreePreviewLead to blank the buyer, deadline, and URL. Fresh evidence beyond the earlier free-preview concern is that the new paid-plan qualification is also false for real subscribers unless FULL_ACCESS_TEST_MODE is enabled; pass the Supabase session to this API or authenticate its cookies before making this promise.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partially addressed in commit 6c6de62. The specific field promise ("buyer, deadline and source link") has been softened to "Full qualification detail available on the paid plan" — accurate regardless of auth state.

The underlying auth issue (FindJobsPage.submit sends no bearer token → resolveAccessContext falls back to preview for all users) is a pre-existing problem that needs a dedicated fix: pass the Supabase session token in the Authorization header on submit, then verify resolveAccessContext correctly identifies paid subscribers. Flagging for a separate PR rather than widening this one.


Generated by Claude Code

Comment thread src/pages/SignalsPage.tsx Outdated
['STEP 2', 'SCORED INSTANTLY', 'Every signal gets a score. GOLD means act now. SILVER means worth watching. BRONZE goes on your quiet-week list. You only see what\'s worth your time.'],
['STEP 3', 'STRAIGHT TO YOUR WHATSAPP', 'Gold leads hit your phone within minutes. Not an email. Not a dashboard you have to log into. Your WhatsApp. The job detail, the location, the source. Ready to act.'],
['STEP 1', 'NOTICE DETECTED', 'A current Find a Tender notice is matched to your trade and delivery region. Contract value, buyer, CPV codes and deadline are extracted.'],
['STEP 2', 'FIT CHECKED', 'The notice is checked against your trade, region and contract range. Requirements you meet and those you are missing are listed before you spend time on a bid.'],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove unsupported contract-range qualification

The replacement copy now claims each notice is checked against the user's contract range, but the linked scanner submits only postcode, trade, radius, and mode, and the backend receives no firm-specific range or requirements profile; its value bounds are fixed globally per trade in leadEngine/config.ts. Consequently two firms with different capacity ranges receive the same qualification, so either pass the saved profile into scoring or limit this description to trade and region.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 6c6de62. Removed "contract range" from Step 2 — now reads "checked against your trade and region" only, matching what the scanner actually submits.


Generated by Claude Code

…en result-fields promise

P2: Step 2 said 'checked against trade, region and contract range' — scanner
submits only postcode/trade/radius/mode; value bounds are globally fixed per
trade in leadEngine/config.ts, not per-firm. Removed 'contract range'.

P1: Step 3 promised specific fields (buyer, deadline, source link) 'on the paid
plan', but FindJobsPage.submit sends no bearer token so resolveAccessContext
falls back to preview access for all users. Softened to 'Full qualification
detail available on the paid plan' — accurate without making specific field
promises that depend on auth working correctly. The underlying auth issue
(no Authorization header in submit) is a pre-existing concern in FindJobsPage
that warrants a separate fix.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UBbSQhxkGZc29HVFqdtiUn
Cards for Planning, Energy, Property Sales, New Business, HMO,
Building Control, Auction, Insolvency and Retrofit now show a
"COMING SOON" badge, muted source label, greyed headline, and
"IN DEVELOPMENT" footer tag instead of the coloured signalType badge.

Card copy is updated to avoid implying those sources are live
("Source in development — not yet live.").

Signal 2 (Contracts / FTS) retains full colour and LIVE styling.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5e214b0553

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/pages/SignalsPage.tsx Outdated
['STEP 2', 'SCORED INSTANTLY', 'Every signal gets a score. GOLD means act now. SILVER means worth watching. BRONZE goes on your quiet-week list. You only see what\'s worth your time.'],
['STEP 3', 'STRAIGHT TO YOUR WHATSAPP', 'Gold leads hit your phone within minutes. Not an email. Not a dashboard you have to log into. Your WhatsApp. The job detail, the location, the source. Ready to act.'],
['STEP 1', 'NOTICE DETECTED', 'A current Find a Tender notice is matched to your trade and delivery region. Contract value, buyer, CPV codes and deadline are extracted.'],
['STEP 2', 'FIT CHECKED', 'The notice is checked against your trade and region. Requirements you meet and those you are missing are listed before you spend time on a bid.'],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the unsupported requirements-matching claim

For any notice whose eligibility depends on accreditation, insurance, capacity, or similar requirements, the scanner cannot determine which requirements the contractor meets: FindJobsPage.submit sends only postcode, trade, radius, and mode, while registerLeadSearchRoute passes only those fields plus access tier to scan and never loads a firm requirements profile. The results therefore provide generic scoring evidence rather than the promised met/missing comparison, so this copy should be limited to the trade-and-region checks that actually run.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit aa12213. Step 2 now reads: "The notice is checked against your trade and region. A fit summary is returned before you spend time on a bid." — removes the unsupported requirements-matching claim.


Generated by Claude Code

Comment thread src/pages/SignalsPage.tsx Outdated
Comment on lines +190 to +192
<span className="absolute top-3 right-3 bg-[var(--muted)] px-2 py-0.5 text-[0.6rem] font-black uppercase tracking-wider text-white">
COMING SOON
</span>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reserve space for the absolute status badge

On narrow mobile viewports, long labels such as SIGNAL 9 · INSOLVENCY / VOID WORKS extend beneath this absolutely positioned COMING SOON badge because the source row reserves no space on the right. The two muted labels overlap and become unreadable; keep the badge in normal flow or add sufficient right padding to the source row/card.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit aa12213. Moved the COMING SOON badge out of absolute positioning into normal flex flow alongside the source label (flex items-start justify-between gap-2 + shrink-0 on the badge). No overlap possible regardless of label length.


Generated by Claude Code

- Move COMING SOON badge into normal flex flow alongside source label
  (was absolute-positioned; overlapped long source text on narrow mobile)
- Remove unsupported requirements-matching claim from Step 2:
  scanner sends only trade/region, no firm requirements profile
  (was: "Requirements you meet and those you are missing are listed")

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aa12213994

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/pages/SignalsPage.tsx
source: 'SIGNAL 1 · PLANNING',
name: 'PLANNING APPROVED. BUILDER NOT PICKED.',
description: 'A 4-bed extension approved this morning in your postcode. The homeowner hasn\'t called anyone yet. You get the alert. They don\'t.',
description: 'Planning approvals matched to your trade and postcode. Alerts when a decision lands near you. Source in development — not yet live.',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the still-advertised paid Start Signal mode

Once Planning and the other non-FTS sources are marked as not live, the “WORKS STARTING NOW” section later on this page still contradicts that status by advertising a paid mode based on planning, building-control, energy, and property-sale signals and linking to ?mode=start_now. FindJobsPage accepts that query parameter even though the mode controls are hidden, while server/routes/leadsSearch.ts ignores the submitted mode, so visitors receive the ordinary FTS scan rather than the advertised timing signals. Remove or clearly disable that section until those sources and mode are implemented.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 5a7b16a. Removed the entire "WORKS STARTING NOW" section (section 2c). It relied on planning/building-control/energy/property-sale sources (all now marked COMING SOON) and mode=start_now is ignored by leadsSearch.ts anyway.


Generated by Claude Code

…de section

The "WORKS STARTING NOW" section advertised ?mode=start_now, which
depends on planning/building-control/energy/property-sale sources
(all marked COMING SOON) and is ignored by leadsSearch.ts anyway.
Remove until those sources and the mode are implemented.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5a7b16a671

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/pages/SignalsPage.tsx Outdated
Comment on lines +19 to +21
trades: ['Building', 'Electrical', 'Plumbing', 'HVAC', 'Landscaping'],
signalType: 'LIVE TENDER',
isLive: true,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Add all supported trades to the live Contracts card

When a visitor filters by Roofer, Carpenter, or Painter, visibleSignals removes this sole live card because its trades list omits Roofing, Carpentry, and Painting, leaving only COMING SOON sources. Those trades are supported by the linked scanner: server/routes/leadsSearch.ts accepts all three and leadEngine/fetchers/contractsFetcher.ts defines FTS CPV/keyword matching for each. Include those labels so supported users are not incorrectly shown that no live signal applies to them.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit a5f5976. Added Roofing, Carpentry, and Painting to the Contracts card trades list — Roofer, Carpenter, and Painter filters now show the live FTS card rather than only COMING SOON results.


Generated by Claude Code

… trades

Filtering by Roofer/Carpenter/Painter previously hid the sole live
signal card, leaving only COMING SOON results. FTS supports all
three trades via contractsFetcher CPV/keyword matching.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a5f5976601

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/pages/SignalsPage.tsx
name: 'COUNCIL WORK. NO BIDDING WAR.',
description: 'Council and government contracts for your trade, in your area, before the closing date. No directory. No middleman. Official notice, straight to your scan.',
trades: ['Building', 'Electrical', 'Plumbing', 'HVAC', 'Landscaping'],
trades: ['Building', 'Electrical', 'Plumbing', 'HVAC', 'Roofing', 'Carpentry', 'Landscaping', 'Painting'],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the trade-targeting matrix in sync

Adding Roofing, Carpentry, and Painting to the live Contracts card makes that signal appear when those trade filters are selected, but the unchanged tradeSignals entries at lines 118 and 121–122 still render a red beside Contracts for Roofer, Carpenter, and Painter. Fresh evidence after the earlier card fix is this contradictory trade-targeting matrix on the same page; add Contracts to those three entries or derive the matrix from signals so users receive one consistent availability message.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit cba12de. Added 'Contracts' to the active arrays for Roofer, Carpenter, and Painter in tradeSignals — the matrix now shows ✓ for Contracts beside those trades, consistent with the card's trades list.


Generated by Claude Code

Roofer, Carpenter, and Painter were missing Contracts in tradeSignals,
showing ✗ in the matrix despite the card now appearing for those filters.
Add Contracts to all three entries for consistency.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants