Language and logout bug
Some checks failed
CI / Check (push) Failing after 6m56s
Build and publish Docker image / build-and-push (push) Successful in 7m26s

This commit is contained in:
Andras Schmelczer 2026-06-27 10:45:48 +01:00
parent f047e50989
commit f1601257c7
12 changed files with 287 additions and 122 deletions

View file

@ -30,14 +30,14 @@ export const OVERLAYS: OverlayDefinition[] = [
label: 'Crime hotspots',
description: 'Approximate police.uk street-crime heatmap',
detail:
'Client-side heatmap of street-level crimes published by police.uk over the most recent months. Police.uk coordinates are anonymised snap-to-grid points, not exact offence locations, so the heatmap should be read as an approximation of relative density rather than a precise map of incidents.',
'A heatmap of street-level crimes published by police.uk over the most recent months. Police.uk coordinates are anonymised snap-to-grid points, not exact offence locations, so the heatmap should be read as an approximation of relative density rather than a precise map of incidents.',
},
{
id: 'trees-outside-woodlands',
label: 'Trees & woodland',
description: 'Tree canopy and woodland polygons',
detail:
'Forest Research Trees Outside Woodland (TOW) v1 canopy polygons — lone trees and groups of trees — unioned with National Forest Inventory (NFI) woodland blocks (≥0.5 ha) that TOW deliberately excludes. Together they cover both street trees and actual woods. Polygon opacity scales with canopy area.',
'Forest Research Trees Outside Woodland (TOW) v1 canopy polygons — lone trees and groups of trees — combined with National Forest Inventory (NFI) woodland blocks (≥0.5 ha) that TOW deliberately excludes. Together they cover both street trees and actual woods. Polygon opacity scales with canopy area.',
defaultEnabled: true,
},
{
@ -45,7 +45,7 @@ export const OVERLAYS: OverlayDefinition[] = [
label: 'Property borders',
description: 'Individual freehold property/land-parcel boundaries',
detail:
'HM Land Registry INSPIRE Index Polygons — the position and indicative extent of freehold registered property in England & Wales, drawn as outlines at street level. These are "general boundaries" for guidance only, not the precise legal boundary of a property, and they exclude leasehold-only interests and unregistered land (roughly 8590% of freehold land is covered). This information is subject to Crown copyright and database rights 2026 and is reproduced with the permission of HM Land Registry. The polygons (including the associated geometry, namely x, y co-ordinates) are subject to Crown copyright and database rights 2026 Ordnance Survey AC0000851063. Licensed under the Open Government Licence v3.0.',
'HM Land Registry INSPIRE Index Polygons — the position and indicative extent of freehold registered property in England & Wales, drawn as outlines at street level. These are “general boundaries” for guidance only, not the precise legal boundary of a property, and they exclude leasehold-only interests and unregistered land (roughly 8590% of freehold land is covered). This information is subject to Crown copyright and database rights 2026 and is reproduced with the permission of HM Land Registry. The polygons (including the associated geometry, namely x, y co-ordinates) are subject to Crown copyright and database rights 2026 Ordnance Survey AC0000851063. Licensed under the Open Government Licence v3.0.',
defaultEnabled: true,
},
{
@ -53,7 +53,7 @@ export const OVERLAYS: OverlayDefinition[] = [
label: 'New developments',
description: 'Planned new-home sites (brownfield register + Homes England)',
detail:
'A forward-looking pipeline of new housing. Blue markers mark sites on the statutory MHCLG Brownfield Land registers — each carrying an estimated net-dwelling capacity and planning-permission status — together with Homes England Land Hub disposal sites. These show where new homes are planned, often years before they appear in EPC or sale records. Dwelling figures are capacity estimates, not commitments, and a site on a register is an opportunity rather than a guarantee of construction. Licensed under the Open Government Licence v3.0.',
'A pipeline of new housing. Blue markers show sites on the statutory MHCLG Brownfield Land registers — each carrying an estimated net-dwelling capacity and planning-permission status — together with Homes England Land Hub disposal sites. These show where new homes are planned, often years before they appear in EPC or sale records. Dwelling figures are capacity estimates, not commitments, and a site on a register is an opportunity rather than a guarantee of construction. Licensed under the Open Government Licence v3.0.',
defaultEnabled: true,
},
];

View file

@ -122,9 +122,9 @@ export const SEO_LANDING_PAGES: Record<SeoLandingKey, SeoLandingContent> = {
],
faq: [
{
question: 'Is this a replacement for Rightmove or Zoopla?',
question: 'How is Perfect Postcode different from a property listings site?',
answer:
'No, it does a different job. Listing portals show whats for sale today; Perfect Postcode shows where the value is across Englands postcodes.',
'It does a different job. Listing portals show whats for sale today; Perfect Postcode shows where the value is across Englands postcodes.',
},
{
question: 'Can I compare price with schools or commute time?',
@ -178,7 +178,7 @@ export const SEO_LANDING_PAGES: Record<SeoLandingKey, SeoLandingContent> = {
},
{
title: 'Keep trade-offs visible',
body: 'When there are too many or too few matches, adjust one constraint at a time and see exactly which postcodes reappear. That makes compromises explicit instead of relying on guesswork.',
body: 'With too many or too few matches, the map shows exactly which postcodes you gain or lose as you change each filter, so every compromise is a deliberate choice.',
},
],
methodology: [
@ -195,7 +195,7 @@ export const SEO_LANDING_PAGES: Record<SeoLandingKey, SeoLandingContent> = {
{
question: 'Can I save a postcode property search?',
answer:
'Yes. Licensed users can save searches and return to them later. Saved searches are designed for shortlists and comparison notes.',
'Yes. Signed-in users can save searches and return to them later. Saved searches are designed for shortlists and comparison notes.',
},
{
question: 'Can I search without knowing the area?',
@ -205,7 +205,7 @@ export const SEO_LANDING_PAGES: Record<SeoLandingKey, SeoLandingContent> = {
{
question: 'Are the results live property listings?',
answer:
'No. The tool compares postcode data and historical/contextual property signals. You still need listing portals for current availability.',
'No. The tool compares postcode data and historical, contextual property signals rather than live listings; check current availability separately.',
},
],
relatedLinks: [
@ -249,7 +249,7 @@ export const SEO_LANDING_PAGES: Record<SeoLandingKey, SeoLandingContent> = {
},
{
title: 'Balance journey time with the rest of the move',
body: 'A fast commute only helps if the area also fits your budget, housing needs, school preferences, safety threshold, broadband requirement, and tolerance for road noise.',
body: 'Once the reachable postcodes are in view, rank them on budget, space, schools, and local context so the shortest journey isnt the only thing driving the decision.',
},
],
methodology: [
@ -291,8 +291,8 @@ export const SEO_LANDING_PAGES: Record<SeoLandingKey, SeoLandingContent> = {
},
'school-property-search': {
path: '/school-property-search',
eyebrow: 'Schools and property search',
title: 'Find property search areas with schools and family trade-offs in view',
eyebrow: 'School property search',
title: 'Find areas to search with school quality and family trade-offs in view',
metaTitle: 'School property search - Compare postcodes for family moves',
metaDescription:
'Compare nearby schools, property size, prices, parks, safety, commute and local amenities before building a viewing shortlist.',
@ -319,8 +319,8 @@ export const SEO_LANDING_PAGES: Record<SeoLandingKey, SeoLandingContent> = {
body: 'Perfect Postcode helps you compare nearby school data with the other practical constraints that shape a family move: space, price, commute, parks, safety, and local services.',
},
{
title: 'Check catchments before making decisions',
body: 'Admissions rules and catchment boundaries can change. Use postcode-level school data to find promising areas, then verify current admissions details with the school or local authority.',
title: 'What the school data shows',
body: 'The map compares nearby Ofsted ratings and distance to schools, so you can weigh education against price, space, and commute as you build a shortlist.',
},
],
methodology: [
@ -386,7 +386,7 @@ export const SEO_LANDING_PAGES: Record<SeoLandingKey, SeoLandingContent> = {
],
sections: [
{
title: 'Useful before and alongside listing portals',
title: 'See past the listing photos',
body: 'Listing photos rarely tell you enough about the surrounding street. Perfect Postcode gives you an evidence-led postcode check before you commit time to a viewing.',
},
{
@ -487,7 +487,7 @@ export const SEO_CONTENT_PAGES: Record<SeoContentKey, SeoContentPage> = {
'manchester-property-search': {
path: '/property-search/manchester',
eyebrow: 'Regional guide',
title: 'How to compare Manchester postcodes for a property search',
title: 'How to compare Manchester postcodes before a property search',
metaTitle: 'Manchester property search - Compare postcodes before viewing',
metaDescription:
'Compare Manchester-area postcodes by budget, commute, property type, schools, broadband, crime, noise and amenities before booking viewings.',
@ -668,8 +668,8 @@ export const SEO_CONTENT_PAGES: Record<SeoContentKey, SeoContentPage> = {
body: 'After filtering, colour the remaining map by one signal at a time: price per square metre, road noise, school context, commute time, broadband, or crime. This makes trade-offs easier to discuss.',
},
{
title: 'Measure whats working',
body: 'Use Search Console and analytics to track which public pages are indexed, which queries produce impressions, and which pages convert visitors into dashboard exploration. Review Core Web Vitals after every substantial frontend change.',
title: 'Validate before you commit',
body: 'Once the map narrows to a few postcodes, confirm what matters in person: visit the streets, check current listings and sold-price comparables, and verify schools, transport, and legal details against current official sources.',
},
],
faq: [
@ -710,31 +710,31 @@ export const SEO_CONTENT_PAGES: Record<SeoContentKey, SeoContentPage> = {
metaDescription:
'Learn how Perfect Postcode treats saved searches, account data and property research workflows with privacy and security in mind.',
intro:
'Property research can reveal personal priorities, budgets, and locations. The product keeps public SEO pages separate from account-only areas and marks private dashboard/account routes as noindex.',
'Property research can reveal personal priorities, budgets, and the areas youre considering. Your dashboard, account, and saved searches stay private to your account, and are never made public or searchable.',
sections: [
{
title: 'Public pages and private areas are separated',
body: 'Marketing, methodology, guide, and support pages are indexable. Dashboard, account, saved searches, invites, and invitation routes are marked noindex or blocked from crawler access where appropriate.',
title: 'Your account stays separate from the public site',
body: 'The guides, methodology, and support pages are public. Everything tied to your account — your dashboard, saved searches, and invitations — is kept out of public view and out of search engines.',
},
{
title: 'Saved search data is account-scoped',
body: 'Saved searches and shared links are intended for signed-in use. They arent included in the public sitemap and shouldnt be crawlable as public content.',
title: 'Saved searches belong to your account',
body: 'Your saved searches stay in your account. Any link you choose to share works only for the people you send it to, and is never listed publicly or indexed by search engines.',
},
{
title: 'Search measurement without exposing private data',
body: 'SEO measurement should happen on public pages using aggregated analytics and Search Console data. Private query parameters and account views shouldnt become indexable landing pages.',
title: 'We measure usage without exposing your searches',
body: 'We improve the product using aggregated analytics on public pages only. The specific postcodes, filters, and searches in your account are never published or turned into pages anyone else can find.',
},
],
faq: [
{
question: 'Are saved searches listed in the sitemap?',
question: 'Can anyone else see my saved searches?',
answer:
'No. Public SEO pages are listed; account and saved-search routes are intentionally excluded.',
'No. Your saved searches stay in your account and are never listed publicly or indexed by search engines. A search is only visible to someone else if you deliberately create a share link and send it to them.',
},
{
question: 'Can private dashboard URLs appear in search?',
question: 'Will my dashboard or account pages show up in Google?',
answer:
'They shouldnt be indexed. The server marks private routes noindex and the sitemap only lists public pages.',
'No. Account and dashboard pages are blocked from search engines, so only the public guides and information pages can appear in search results.',
},
],
relatedLinks: [