Skip to content

Avarii Termoenergetica azi: pagina oraș /avarii - #49

Open
tiXor-code wants to merge 1 commit into
mainfrom
sentinel/avarii-termoenergetica
Open

tiXor-code wants to merge 1 commit into
mainfrom
sentinel/avarii-termoenergetica

Conversation

@tiXor-code

Copy link
Copy Markdown
Owner

TLDR: 'termoenergetica avarii' gets 4,592 impressions/28d at position 9.7, but Google splits it across /sector/6, /sector/1 and the contact guide because no page owns the city-wide intent. This PR adds /avarii, a city-wide roll-up of the ongoing Termoenergetica announcements, and links it from the nav, homepage, sector pages, sitemap and llms.txt.

Why

GSC query-page data (last 30d) for 'termoenergetica avarii': /sector/6 (2,435 imp, pos 9.6), /sector/1 (1,161 imp, pos 9.9), contact guide (538 imp, pos 10.2, 0 clicks). Sector pages answer the per-sector version of this query; nothing answers the city-wide version. Same pattern the site already uses for map queries (/harta owns them, the homepage links there).

What changed

  • New app/avarii/page.tsx: answer-first dated status sentence (count of ongoing interruptions, how many are avarii), the operator's announced restore terms (marked as operator estimates, never our forecast), the grouped announcements table with a Sector column (same rendering idiom as /sector/[id]), a per-sector summary table (ongoing / avarii / PTs hit in the last 30 days), a contact section (TELVERDE, 031.9442, cmteb.ro, TERMOALERT, all repeating facts already sourced in the contact guide), and a 5-question FAQ with FAQPage JSON-LD via lib/seo.ts faqJsonLd.
  • City data comes from the existing getSectorLive per sector, rolled up at build time; no new data-layer code, pure SSG preserved (dynamic = 'error').
  • Internal links to the new page: SiteNav ('Avarii azi'), homepage 'Avarii azi' bullet, sector page footer ('Toate sectoarele: avariile de azi'), sitemap.ts, llms.txt.

Verification

  • npm test: 137/137 passing.
  • npm run build: compiled clean, 6,335 static pages including /avarii; the one Turbopack NFT warning pre-exists on main (verified by building main).
  • Rendered /avarii HTML inspected: status sentence, both tables, FAQPage JSON-LD with 5 questions, breadcrumb JSON-LD all present; copy uses proper diacritics and the dated-snapshot framing (never implies real time).

Order: SEO Sentinel content/brief id 121.

Generated with Claude Code

Target query: 'termoenergetica avarii' (GSC: 4.592 impressions/28d, pos 9.7,
split across /sector/6, /sector/1 and the contact guide with no single
owning page). New /avarii rolls up the per-sector live views city-wide:
dated answer-first status, grouped announcements table, per-sector summary,
contact pointers and FAQ with FAQPage JSON-LD. Internal links added from
the nav, the homepage intro bullet, sector page footers, sitemap and
llms.txt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
termo-site Ready Ready Preview Nov 2, 2026 8:50am UTC

@claude claude 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.

Reviewed the full diff plus the lib it depends on (lib/sector-live.ts, lib/seo.ts, lib/format.ts, lib/data.ts).

  • Correctness: getCityLive rolls up getSectorLive per sector correctly; group sort (avarie-first, newest-first) matches /sector/[id]; statusSentence/restoreSentence/metaStatus branch consistently for the n=0/1/mixed/all-avarie/all-programat cases. The /ghid/care-sunt-informatiile-de-contact-pentru-avarii-la-termoenergetica link target exists in content/ghid/.
  • Security: FAQPage JSON-LD goes through JsonLd in lib/seo.ts (the required < escaping is intact), and the table renders scraped PT/street names as plain JSX text (React-escaped), not via dangerouslySetInnerHTML — consistent with the CLAUDE.md rule on untrusted CMTEB input.
  • SSG constraint respected: dynamic = 'error', no client components, data read at build time only.
  • Minor non-blocking nit: generateMetadata() and the page body each independently call getCityLive(lcy), so getSectorLive scans all 6 sectors twice per build of this one page — harmless for a single static route, not worth blocking on.

Nav/homepage/sector-footer/sitemap/llms.txt link additions are small and consistent with existing idioms.

This branch was successfully deployed

1 active deployment
Preview — 51683c35 Deployed Nov 2, 2026 by vercel[bot]
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.

1 participant