diff --git a/web/src/padelnomics/businessplan.py b/web/src/padelnomics/businessplan.py index e8e0560..3a67f0c 100644 --- a/web/src/padelnomics/businessplan.py +++ b/web/src/padelnomics/businessplan.py @@ -194,12 +194,16 @@ async def _fetch_market_data(location: str, language: str) -> dict | None: rows = await fetch_analytics( """ - SELECT city_slug, city_name, country, - padel_venue_count, venues_per_100k, market_score, + SELECT city_slug, city_name, country_name_en AS country, + city_padel_venue_count AS padel_venue_count, + city_venues_per_100k AS venues_per_100k, + opportunity_score, median_peak_rate, median_offpeak_rate, median_occupancy_rate, population - FROM serving.city_market_overview - WHERE city_slug = ? OR lower(city_name) = lower(?) + FROM serving.location_profiles + WHERE city_slug IS NOT NULL + AND (city_slug = ? OR lower(city_name) = lower(?)) + ORDER BY opportunity_score DESC LIMIT 1 """, [city_slug, location.strip()], @@ -485,7 +489,7 @@ def get_plan_sections(state: dict, d: dict, language: str = "en", bp_details: di "funded_by_equity": t["bp_lbl_funded_by_equity"], "total": t["bp_lbl_total"], "venues_per_100k": t["bp_lbl_venues_per_100k"], - "market_score": t["bp_lbl_market_score"], + "padelnomics_score": t["bp_lbl_padelnomics_score"], "median_peak_rate": t["bp_lbl_median_peak_rate"], "median_offpeak_rate": t["bp_lbl_median_offpeak_rate"], "median_occupancy": t["bp_lbl_median_occupancy"], diff --git a/web/src/padelnomics/locales/de.json b/web/src/padelnomics/locales/de.json index daaf050..0fa9a08 100644 --- a/web/src/padelnomics/locales/de.json +++ b/web/src/padelnomics/locales/de.json @@ -1589,7 +1589,7 @@ "bp_lbl_funded_by_equity": "Eigenfinanziert", "bp_lbl_total": "Gesamt", "bp_lbl_venues_per_100k": "Anlagen je 100.000 Einwohner", - "bp_lbl_market_score": "Markt-Score", + "bp_lbl_padelnomics_score": "Padelnomics Score", "bp_lbl_median_peak_rate": "Median Hauptzeit-Preis", "bp_lbl_median_offpeak_rate": "Median Nebenzeit-Preis", "bp_lbl_median_occupancy": "Median-Auslastung", @@ -1690,80 +1690,54 @@ "email_business_plan_preheader": "Professioneller Padel-Finanzplan — jetzt herunterladen", "email_footer_tagline": "Die Planungsplattform für Padel-Unternehmer", "email_footer_copyright": "© {year} {app_name}. Du erhältst diese E-Mail, weil du ein Konto hast oder eine Anfrage gestellt hast.", - "footer_market_score": "Market Score", - "mscore_page_title": "Der padelnomics Market Score — So messen wir Marktpotenzial", - "mscore_meta_desc": "Der padelnomics Market Score bewertet Städte von 0 bis 100 nach ihrem Potenzial für Padel-Investitionen. Erfahre, wie Demografie, Wirtschaftskraft, Nachfragesignale und Datenabdeckung einfließen.", - "mscore_og_desc": "Ein datengestützter Komposit-Score (0–100), der die Attraktivität einer Stadt für Padelanlagen-Investitionen misst. Was steckt dahinter — und was bedeutet er für Deine Planung?", - "mscore_h1": "Der padelnomics Market Score", - "mscore_subtitle": "Ein datengestütztes Maß für die Attraktivität einer Stadt als Padel-Investitionsstandort.", - "mscore_dual_h2": "Zwei Scores, zwei Fragen", - "mscore_dual_intro": "Padelnomics veröffentlicht zwei eigenständige Scores für jeden Markt. Sie beantworten unterschiedliche Fragen und basieren auf unterschiedlichen Methoden — beide zu kennen ist entscheidend für eine fundierte Investitionsentscheidung.", - "mscore_reife_chip": "padelnomics Marktreife-Score™", - "mscore_reife_question": "Wie etabliert ist dieser Padel-Markt?", - "mscore_reife_desc": "Berechnet für Städte mit mindestens einer Padelanlage. Kombiniert Bevölkerungsgröße, Wirtschaftskraft, Nachfragesignale aus Buchungsplattformen und Datenvollständigkeit.", - "mscore_potenzial_chip": "padelnomics Marktpotenzial-Score™", - "mscore_potenzial_question": "Wo sollte ich eine Padelanlage bauen?", - "mscore_potenzial_desc": "Berechnet für alle Standorte weltweit, auch dort, wo es noch keine Anlagen gibt. Angebotslücken, unterversorgte Einzugsgebiete und Schlägersportkultur schlagen positiv zu Buche — die entscheidenden Signale für Erstinvestitionen.", - "mscore_what_h2": "Marktreife-Score: Was er misst", - "mscore_what_intro": "Der padelnomics Marktreife-Score ist ein Komposit-Index von 0 bis 100, der bewertet, wie etabliert und attraktiv ein bestehender Padel-Markt ist. Er gilt ausschließlich für Städte mit mindestens einer Padelanlage — vier Datenkategorien fließen in eine einzige Kennzahl ein, damit Du schnell einschätzen kannst, welche Märkte sich genauer anzuschauen lohnen.", - "mscore_cat_demo_h3": "Demografie", - "mscore_cat_demo_p": "Bevölkerungsgröße als Indikator für den adressierbaren Markt. Größere Städte tragen in der Regel mehr Anlagen und höhere Auslastung.", - "mscore_cat_econ_h3": "Wirtschaftskraft", - "mscore_cat_econ_p": "Regionale Kaufkraft und Einkommensindikatoren. In Märkten mit höherem verfügbarem Einkommen ist die Nachfrage nach Freizeitsportarten wie Padel tendenziell stärker.", - "mscore_cat_demand_h3": "Nachfrageindikatoren", - "mscore_cat_demand_p": "Signale aus dem laufenden Betrieb bestehender Anlagen — Auslastungsraten, Buchungsdaten, Anzahl aktiver Standorte. Wo sich reale Nachfrage bereits messen lässt, ist das der stärkste Indikator.", - "mscore_cat_data_h3": "Datenqualität", - "mscore_cat_data_p": "Wie umfassend die Datenlage für eine Stadt ist. Ein Score auf Basis unvollständiger Daten ist weniger belastbar — wir machen das transparent, damit Du weißt, wo eigene Recherche sinnvoll ist.", - "mscore_read_h2": "Marktreife-Score: Wie Du ihn liest", - "mscore_band_high_label": "70–100: Starker Markt", - "mscore_band_high_p": "Große Bevölkerung, hohe Wirtschaftskraft und nachgewiesene Nachfrage durch bestehende Anlagen. Diese Städte haben validierte Padel-Märkte mit belastbaren Benchmarks für die Finanzplanung.", - "mscore_band_mid_label": "45–69: Solides Mittelfeld", - "mscore_band_mid_p": "Gute Grundlagen mit Wachstumspotenzial. Genug Daten für fundierte Planung, aber weniger Wettbewerb als in den Top-Städten. Häufig der Sweet Spot für Neueinsteiger.", - "mscore_band_low_label": "Unter 45: Früher Markt", - "mscore_band_low_p": "Weniger validierte Daten oder kleinere Bevölkerung. Das heißt nicht, dass die Stadt unattraktiv ist — es kann weniger Wettbewerb und bessere Konditionen für Früheinsteiger bedeuten. Rechne mit mehr eigener Recherche vor Ort.", - "mscore_read_note": "Ein niedriger Score bedeutet nicht automatisch eine schlechte Investition. Er kann auf begrenzte Datenlage oder einen noch jungen Markt hinweisen — weniger Wettbewerb und günstigere Einstiegsbedingungen sind möglich.", - "mscore_sources_h2": "Datenquellen", - "mscore_sources_p": "Der Market Score basiert auf Daten europäischer Statistikämter (Bevölkerung und Wirtschaftsindikatoren), Buchungsplattformen für Padelanlagen (Standortanzahl, Preise, Auslastung) und geografischen Datenbanken (Standortdaten). Die Daten werden monatlich aktualisiert.", - "mscore_limits_h2": "Einschränkungen", - "mscore_limits_p1": "Der Score bildet die verfügbare Datenlage ab, nicht die absolute Marktwahrheit. Städte, in denen weniger Anlagen auf Buchungsplattformen erfasst sind, können bei den Nachfrageindikatoren niedrigere Werte zeigen — selbst wenn die lokale Nachfrage hoch ist.", - "mscore_limits_p2": "Der Score berücksichtigt keine lokalen Faktoren wie Immobilienkosten, Genehmigungszeiträume, Wettbewerbsdynamik oder regulatorische Rahmenbedingungen. Diese Aspekte sind entscheidend und erfordern Recherche vor Ort.", - "mscore_limits_p3": "Nutze den Market Score als Ausgangspunkt für die Priorisierung, nicht als finale Investitionsentscheidung. Im Finanzplaner kannst Du Dein konkretes Szenario durchrechnen.", - "mscore_cta_markets": "Stadtbewertungen ansehen", - "mscore_cta_planner": "Investment modellieren", - "mscore_faq_h2": "Häufig gestellte Fragen", - "mscore_faq_q1": "Was ist der padelnomics Market Score?", - "mscore_faq_a1": "Ein Komposit-Index von 0 bis 100, der die Attraktivität einer Stadt für Padelanlagen-Investitionen misst. Er kombiniert Demografie, Wirtschaftskraft, Nachfrageindikatoren und Datenqualität in einer vergleichbaren Kennzahl.", - "mscore_faq_q2": "Wie oft wird der Score aktualisiert?", - "mscore_faq_a2": "Monatlich. Neue Daten aus Statistikämtern, Buchungsplattformen und Standortdatenbanken werden regelmäßig extrahiert und verarbeitet. Der Score spiegelt immer die aktuellsten verfügbaren Daten wider.", - "mscore_faq_q3": "Warum hat meine Stadt einen niedrigen Score?", - "mscore_faq_a3": "Meist wegen begrenzter Datenabdeckung oder geringerer Bevölkerung. Ein niedriger Score bedeutet nicht, dass die Stadt unattraktiv ist — sondern dass uns weniger Daten zur Quantifizierung der Chance vorliegen. Eigene Recherche kann die Lücken schließen.", - "mscore_faq_q4": "Kann ich Scores länderübergreifend vergleichen?", - "mscore_faq_a4": "Ja. Die Methodik ist für alle Märkte einheitlich, sodass ein Score von 72 in Deutschland direkt vergleichbar ist mit einem 72 in Spanien oder Großbritannien.", - "mscore_faq_q5": "Garantiert ein hoher Score eine gute Investition?", - "mscore_faq_a5": "Nein. Der Score misst die Marktattraktivität auf Makroebene. Deine konkrete Investition hängt von Anlagentyp, Baukosten, Mietkonditionen und Dutzenden weiterer Faktoren ab. Im Finanzplaner kannst Du Dein Szenario mit echten Zahlen durchrechnen.", - "mscore_pot_what_h2": "Marktpotenzial-Score: Was er misst", - "mscore_pot_what_intro": "Der padelnomics Marktpotenzial-Score bewertet Investitionschancen an Standorten mit wenig oder gar keiner bestehenden Padel-Infrastruktur. Er erfasst alle Standorte weltweit — auch solche ohne eine einzige Anlage. Gedacht für Erstinvestoren auf der Suche nach unbestellten Märkten, nicht für den Vergleich bereits erschlossener Standorte.", - "mscore_pot_cat_market_h3": "Adressierbarer Markt", - "mscore_pot_cat_market_p": "Logarithmisch skalierte Bevölkerungsgröße, begrenzt auf 500.000 Einwohner. Das Potenzial ist bei mittelgroßen Städten am höchsten — groß genug für eine rentable Anlage, aber noch nicht von Großstadt-Betreibern erschlossen.", - "mscore_pot_cat_econ_h3": "Wirtschaftskraft", - "mscore_pot_cat_econ_p": "Kaufkraft auf Länderebene (KKS), normiert auf internationale Benchmarks. Maßgeblich für die Zahlungsbereitschaft bei Platzmieten im Zielbereich von 20–35 €/Std.", - "mscore_pot_cat_gap_h3": "Angebotslücke", - "mscore_pot_cat_gap_p": "Invertierte Anlagendichte: null Plätze pro 100.000 Einwohner ergibt die volle Punktzahl. Das ist das zentrale Signal, das den Marktpotenzial-Score vom Marktreife-Score unterscheidet — der weiße Fleck auf der Karte ist die Chance.", - "mscore_pot_cat_catchment_h3": "Versorgungslücke", - "mscore_pot_cat_catchment_p": "Entfernung zur nächsten bestehenden Padelanlage. Standorte mehr als 30 km vom nächsten Platz entfernt erhalten die volle Punktzahl — echte Versorgungslücken ohne nahe gelegene Alternative.", - "mscore_pot_cat_tennis_h3": "Schlägersportkultur", - "mscore_pot_cat_tennis_p": "Tennisplätze im Umkreis von 25 km als Indikator für etablierte Schlägersportnachfrage. Viele neue Padelanlagen entstehen innerhalb bestehender Tennisvereine oder direkt daneben — ein verlässlicher Frühindikator.", - "mscore_pot_read_h2": "Marktpotenzial-Score: So liest Du ihn", - "mscore_pot_band_high_label": "70–100: Hohes Potenzial", - "mscore_pot_band_high_p": "Unterversorgtes Gebiet mit solider Bevölkerungsstruktur und Kaufkraft. Geringes Angebot, weit entfernt von der nächsten Anlage, nachgewiesene Schlägersportkultur. Hohe Priorität für Erstinvestoren.", - "mscore_pot_band_mid_label": "45–69: Moderates Potenzial", - "mscore_pot_band_mid_p": "Teilweise bereits vorhandenes Angebot, demografische Einschränkungen oder unklare Signallage. Lohnt sich für eine genauere Prüfung — lokale Faktoren können das Bild erheblich verändern.", - "mscore_pot_band_low_label": "Unter 45: Geringeres Potenzial", - "mscore_pot_band_low_p": "Markt bereits gut versorgt, Bevölkerungszahl gering oder Kaufkraft begrenzt. Konzentriere Dich auf höher bewertete Standorte — es sei denn, Du hast einen konkreten lokalen Vorteil.", - "mscore_faq_q6": "Was ist der Unterschied zwischen dem padelnomics Marktreife-Score und dem padelnomics Marktpotenzial-Score?", - "mscore_faq_a6": "Der padelnomics Marktreife-Score misst, wie etabliert und ausgereift ein bestehender Padel-Markt ist — er gilt nur für Städte mit mindestens einer Anlage. Der padelnomics Marktpotenzial-Score bewertet Investitionschancen in noch unbestellten Märkten und erfasst alle Standorte weltweit. Angebotslücken und unterversorgte Einzugsgebiete fließen positiv ein — auch dort, wo es noch gar keine Anlagen gibt.", - "mscore_faq_q7": "Warum hat mein Ort einen hohen padelnomics Marktpotenzial-Score, aber keine Padelanlagen?", - "mscore_faq_a7": "Genau darum geht es. Ein hoher padelnomics Marktpotenzial-Score signalisiert einen unterversorgten Standort: solide Bevölkerungsbasis, wirtschaftliche Kaufkraft, kein bestehendes Angebot und weite Entfernung zur nächsten Anlage. Das sind genau die Signale, die auf eine Pionierchance hinweisen — kein Zeichen für einen schwachen Markt.", + "footer_padelnomics_score": "Padelnomics Score", + "pnscore_page_title": "Padelnomics Score — So bewerten wir Padel-Investitionsstandorte", + "pnscore_meta_desc": "Der Padelnomics Score bewertet das Investitionspotenzial von Padel-Standorten in Europa. Versorgungslücken, Einzugsgebiet, Marktreife und Sportaffinität in einem Score von 0-100.", + "pnscore_og_desc": "Ein Score, der zeigt, wo sich eine Padelhalle lohnt. Methodik, Komponenten und Datenquellen erklärt.", + "pnscore_subtitle": "Ein Score für Padel-Investitionspotenzial — Versorgungslücken, Einzugsgebiet, Marktreife und Sportaffinität auf einer Skala von 0 bis 100.", + "pnscore_what_h2": "Was ist der Padelnomics Score?", + "pnscore_what_intro": "Der Padelnomics Score ist ein Komposit-Index von 0 bis 100, der bewertet, wie attraktiv ein Standort für eine neue Padelanlage ist. Er kombiniert angebotsseitige Lücken (gibt es genug Courts?) mit nachfrageseitigen Signalen (Bevölkerung, Einkommen, Sportaffinität) und berücksichtigt die Marktreife. Ein hoher Score bedeutet: Es gibt adressierbare Nachfrage, das Gebiet ist unterversorgt und die Rahmenbedingungen begünstigen ein Investment.", + "pnscore_components_h2": "Was der Score misst", + "pnscore_components_intro": "Sechs gewichtete Komponenten fließen in den Gesamtscore ein. Jede erfasst einen anderen Aspekt des Investitionspotenzials.", + "pnscore_cat_market_h3": "Adressierbarer Markt (20 Pkt)", + "pnscore_cat_market_p": "Einzugsgebiet-Bevölkerung im Umkreis von ~24 km (H3 Res-5-Zelle + Nachbarn). Logarithmisch skaliert — eine Stadt mit 500K Einwohnern erreicht das Maximum. Größeres Einzugsgebiet bedeutet mehr potenzielle Spieler.", + "pnscore_cat_econ_h3": "Wirtschaftskraft (15 Pkt)", + "pnscore_cat_econ_p": "Regionales Einkommen in Kaufkraftstandards (KKS). Höheres verfügbares Einkommen stützt Premium-Preise und häufigeres Spielen. Daten von Eurostat (EU), Census (USA), ONS (UK).", + "pnscore_cat_gap_h3": "Versorgungslücke (40 Pkt)", + "pnscore_cat_gap_p": "Die gewichtigste Komponente. Misst zwei Signale: Anlagendichte-Lücke (wie weit unter 5 Courts pro 100K?) und Entfernungslücke (wie weit zur nächsten Anlage?). Null Courts = maximale Punktzahl. Bereits gut versorgte Gebiete erhalten kaum Punkte.", + "pnscore_cat_sports_h3": "Sportaffinität (10 Pkt)", + "pnscore_cat_sports_p": "Tennisplatz-Dichte im Umkreis von 25 km als Proxy für Racketsport-Affinität. Regionen mit starker Tennis-Infrastruktur haben ein bereites Publikum für Padel — einen eng verwandten Sport mit niedrigerer Einstiegshürde.", + "pnscore_cat_catchment_h3": "Baukosten-Erschwinglichkeit (5 Pkt)", + "pnscore_cat_catchment_p": "Einkommen relativ zu lokalen Baukosten (Eurostat-Preisniveau-Index). Höhere Erschwinglichkeit bedeutet bessere Margen beim Bau — das Umsatzpotenzial wird nicht von den Baukosten aufgefressen.", + "pnscore_cat_maturity_h3": "Markt-Spielraum (10 Pkt)", + "pnscore_cat_maturity_p": "Invers zur durchschnittlichen Marktreife des Landes. Länder mit bereits gesättigten Märkten (z.B. Spanien) erhalten hier weniger Punkte — der nationale Markt ist wettbewerbsintensiv. Aufstrebende Märkte punkten höher — mehr Raum zum Wachsen.", + "pnscore_read_h2": "Wie man den Score liest", + "pnscore_band_high_label": "80+ — Ausgezeichnet", + "pnscore_band_high_p": "Erstklassiges Investitionspotenzial. Erhebliche Versorgungslücken, starkes Einzugsgebiet und günstige Marktbedingungen. Diese Standorte sind erste Wahl für neue Anlagen.", + "pnscore_band_good_label": "60-79 — Gut", + "pnscore_band_good_p": "Starkes Potenzial bei etwas mehr Wettbewerb oder kleinerem Einzugsgebiet. Weiterhin attraktiv für gut positionierte Projekte mit klarer Differenzierungsstrategie.", + "pnscore_band_mid_label": "40-59 — Moderat", + "pnscore_band_mid_p": "Solide Grundlagen, aber der Markt ist teilweise versorgt. Erfolg hängt von präziser Standortwahl, Preisgestaltung und Anlagenqualität ab.", + "pnscore_band_low_label": "20-39 — Unterdurchschnittlich", + "pnscore_band_low_p": "Das Gebiet ist vergleichsweise gut versorgt oder zeigt schwächere Nachfragesignale. Neue Anlagen stehen im stärkeren Wettbewerb und brauchen ein überzeugendes Konzept.", + "pnscore_sources_h2": "Datenquellen", + "pnscore_sources_p": "Der Score nutzt mehrere offene und proprietäre Datenquellen: GeoNames (globale Städtebevölkerung, 140K+ Standorte), Eurostat (regionales Einkommen, Preisniveaus, NUTS-2-Grenzen), US Census und ONS UK (Bevölkerung/Einkommen außerhalb der EU), OpenStreetMap via Overpass (Padel- und Tennisplatz-Standorte) sowie Playtomic (Anlagenverzeichnisse, Court-Zahlen). Alle Daten werden regelmäßig aktualisiert und durch unsere SQLMesh-Pipeline verarbeitet.", + "pnscore_limits_h2": "Einschränkungen", + "pnscore_limits_p1": "Der Score bewertet Standortpotenzial, nicht Projektdurchführbarkeit. Er kann standortspezifische Faktoren wie Grundstücksverfügbarkeit, Bebauungsvorschriften, Mietkosten oder lokale Wettbewerbsdetails nicht berücksichtigen. Den Score immer mit eigener Vor-Ort-Recherche kombinieren.", + "pnscore_limits_p2": "Die Datenabdeckung variiert nach Land. Europäische Märkte haben die stärkste Datenbasis (Eurostat-Einkommen, dichte Anlagenverzeichnisse). Aufstrebende Märkte haben teils weniger granulare Einkommensdaten, was die Komponenten Wirtschaftskraft und Erschwinglichkeit beeinflusst.", + "pnscore_cta_markets": "Märkte entdecken", + "pnscore_cta_planner": "Finanzplaner", + "pnscore_faq_h2": "Häufige Fragen", + "pnscore_faq_q1": "Was ist der Padelnomics Score?", + "pnscore_faq_a1": "Ein Komposit-Index von 0 bis 100, der bewertet, wie attraktiv ein Standort für den Bau einer neuen Padelanlage ist. Er kombiniert Versorgungslücken, Einzugsgebiet, Wirtschaftskraft, Sportaffinität, Baukosten-Erschwinglichkeit und Markt-Spielraum in einer einzigen Kennzahl.", + "pnscore_faq_q2": "Wie oft wird der Score aktualisiert?", + "pnscore_faq_a2": "Der Score wird täglich neu berechnet. Anlagenverzeichnisse, Bevölkerungsdaten und Einkommensstatistiken werden in ihren jeweiligen Intervallen aktualisiert (täglich für Anlagen, monatlich für Bevölkerung, jährlich für Einkommen).", + "pnscore_faq_q3": "Warum hat eine Stadt mit vielen Padel-Courts einen niedrigen Score?", + "pnscore_faq_a3": "Der Score belohnt unterversorgte Gebiete. Eine Stadt mit hoher Court-Dichte relativ zur Bevölkerung hat eine geringe Versorgungslücke — die gewichtigste Komponente (40 von 100 Punkten). Gut versorgte Städte können dennoch moderat punkten, wenn andere Faktoren (Einzugsgebiet, Wirtschaftskraft) stark sind.", + "pnscore_faq_q4": "Wie beeinflusst Marktreife den Score?", + "pnscore_faq_a4": "Marktreife fließt auf zwei Wegen ein: Die Versorgungslücke misst direkt die lokale Court-Dichte, und der Markt-Spielraum gewichtet die landesweite Marktreife invers. Länder mit dominantem Padel-Markt (z.B. Spanien) bieten weniger Spielraum als aufstrebende Märkte.", + "pnscore_faq_q5": "Kann ich den Score für meinen Businessplan verwenden?", + "pnscore_faq_a5": "Ja — der Score ist als Screening-Tool für die Standortsuche konzipiert. Nutze ihn, um vielversprechende Standorte vorzuselektieren, und vertiefe dann mit dem Finanzplaner die Umsatz-, Kosten- und Renditeanalyse für Dein konkretes Szenario.", "sup_cta_btn": "Kostenlos starten", "sup_basic_free_label": "Kostenlos", "sup_pricing_eur_note": "Alle Preise in EUR", diff --git a/web/src/padelnomics/locales/en.json b/web/src/padelnomics/locales/en.json index 758d7ea..8fb7c12 100644 --- a/web/src/padelnomics/locales/en.json +++ b/web/src/padelnomics/locales/en.json @@ -1617,7 +1617,7 @@ "bp_lbl_funded_by_equity": "Funded by Equity", "bp_lbl_total": "Total", "bp_lbl_venues_per_100k": "Venues per 100K population", - "bp_lbl_market_score": "Market Score", + "bp_lbl_padelnomics_score": "Padelnomics Score", "bp_lbl_median_peak_rate": "Median Peak Rate", "bp_lbl_median_offpeak_rate": "Median Off-Peak Rate", "bp_lbl_median_occupancy": "Median Occupancy", @@ -1721,80 +1721,54 @@ "email_business_plan_preheader": "Professional padel facility financial plan — download now", "email_footer_tagline": "The padel business planning platform", "email_footer_copyright": "© {year} {app_name}. You received this email because you have an account or submitted a request.", - "footer_market_score": "Market Score", - "mscore_page_title": "The padelnomics Market Score — How We Measure Market Potential", - "mscore_meta_desc": "The padelnomics Market Score rates cities from 0 to 100 on their potential for padel investment. Learn how demographics, economic strength, demand signals, and data coverage feed into the score.", - "mscore_og_desc": "A data-driven composite score (0–100) that measures how attractive a city is for padel court investment. See what goes into it and what it means for your planning.", - "mscore_h1": "The padelnomics Market Score", - "mscore_subtitle": "A data-driven measure of how attractive a city is for padel investment.", - "mscore_dual_h2": "Two Scores, Two Questions", - "mscore_dual_intro": "Padelnomics publishes two distinct scores for every market. They answer different questions and are calculated using different methodologies — knowing both is essential for a well-informed investment decision.", - "mscore_reife_chip": "padelnomics Marktreife-Score™", - "mscore_reife_question": "How established is this padel market?", - "mscore_reife_desc": "Calculated for cities with at least one padel venue. Combines population size, economic power, demand evidence from booking platforms, and data completeness.", - "mscore_potenzial_chip": "padelnomics Marktpotenzial-Score™", - "mscore_potenzial_question": "Where should I build a padel court?", - "mscore_potenzial_desc": "Calculated for all locations globally, including those with zero courts. Rewards supply gaps, underserved catchment areas, and racket sport culture — the signals that matter for greenfield investors.", - "mscore_what_h2": "Marktreife-Score: What It Measures", - "mscore_what_intro": "The padelnomics Marktreife-Score is a composite index from 0 to 100 that evaluates how established and attractive an existing padel market is. It only applies to cities with at least one padel venue, combining four categories of data into a single number designed to help you prioritize markets worth investigating further.", - "mscore_cat_demo_h3": "Demographics", - "mscore_cat_demo_p": "Population size as a proxy for the addressable market. Larger cities generally support more venues and higher utilization.", - "mscore_cat_econ_h3": "Economic Strength", - "mscore_cat_econ_p": "Regional purchasing power and income indicators. Markets where people have higher disposable income tend to sustain stronger demand for leisure sports like padel.", - "mscore_cat_demand_h3": "Demand Evidence", - "mscore_cat_demand_p": "Signals from existing venue activity — occupancy rates, booking data, and the number of operating venues. Where real demand is already measurable, it’s the strongest indicator.", - "mscore_cat_data_h3": "Data Completeness", - "mscore_cat_data_p": "How much data we have for that city. A score influenced by incomplete data is less reliable — we surface this explicitly so you know when to dig deeper on your own.", - "mscore_read_h2": "Marktreife-Score: How To Read", - "mscore_band_high_label": "70–100: Strong market", - "mscore_band_high_p": "Large population, economic power, and proven demand from existing venues. These cities have validated padel markets with reliable benchmarks for financial planning.", - "mscore_band_mid_label": "45–69: Solid mid-tier", - "mscore_band_mid_p": "Good fundamentals with room for growth. Enough data to plan with confidence, but less competition than top-tier cities. Often the sweet spot for new entrants.", - "mscore_band_low_label": "Below 45: Early-stage market", - "mscore_band_low_p": "Less validated data or smaller populations. This does not mean a city is a bad investment — it may mean less competition and first-mover advantage. Expect to do more local research.", - "mscore_read_note": "A lower score does not mean a city is a bad investment. It may indicate less available data or a market still developing — which can mean less competition and better terms for early entrants.", - "mscore_sources_h2": "Data Sources", - "mscore_sources_p": "The Market Score draws on data from European statistical offices (population and economic indicators), court booking platforms (venue counts, pricing, occupancy), and geographic databases (venue locations). Data is refreshed monthly as new extractions run.", - "mscore_limits_h2": "Limitations", - "mscore_limits_p1": "The score reflects available data, not absolute market truth. Cities where fewer venues are tracked on booking platforms may score lower on demand evidence — even if local demand is strong.", - "mscore_limits_p2": "The score does not account for local factors like real estate costs, permitting timelines, competitive dynamics, or regulatory environment. These matter enormously and require on-the-ground research.", - "mscore_limits_p3": "Use the Market Score as a starting point for prioritization, not a final investment decision. The financial planner is where you model your specific scenario.", - "mscore_cta_markets": "Browse city scores", - "mscore_cta_planner": "Model your investment", - "mscore_faq_h2": "Frequently Asked Questions", - "mscore_faq_q1": "What is the padelnomics Market Score?", - "mscore_faq_a1": "A composite index from 0 to 100 that measures how attractive a city is for padel court investment. It combines demographics, economic strength, demand evidence, and data completeness into a single comparable number.", - "mscore_faq_q2": "How often is the score updated?", - "mscore_faq_a2": "Monthly. New data from statistical offices, booking platforms, and venue databases is extracted and processed on a regular cycle. Scores reflect the most recent available data.", - "mscore_faq_q3": "Why is my city’s score low?", - "mscore_faq_a3": "Usually because of limited data coverage or smaller population. A low score doesn’t mean the city is unattractive — it means we have less data to quantify the opportunity. Local research can fill the gaps.", - "mscore_faq_q4": "Can I compare scores across countries?", - "mscore_faq_a4": "Yes. The methodology is consistent across all markets we track, so a score of 72 in Germany is directly comparable to a 72 in Spain or the UK.", - "mscore_faq_q5": "Does a high score guarantee a good investment?", - "mscore_faq_a5": "No. The score measures market attractiveness at a macro level. Your specific investment depends on venue type, build costs, lease terms, and dozens of other factors. Use the financial planner to model your scenario with real numbers.", - "mscore_pot_what_h2": "Marktpotenzial-Score: What It Measures", - "mscore_pot_what_intro": "The padelnomics Marktpotenzial-Score evaluates investment opportunity for locations with little or no existing padel infrastructure. It covers all locations globally, including those with zero courts — designed for greenfield investors scouting white-space markets, not for benchmarking established venues.", - "mscore_pot_cat_market_h3": "Addressable Market", - "mscore_pot_cat_market_p": "Log-scaled population, capped at 500K. Opportunity peaks in mid-size cities that can support a court but are not yet served by large-city operators.", - "mscore_pot_cat_econ_h3": "Economic Power", - "mscore_pot_cat_econ_p": "Country-level purchasing power (PPS), normalised to international benchmarks. Drives willingness to pay for court fees in the €20–35/hr target range.", - "mscore_pot_cat_gap_h3": "Supply Gap", - "mscore_pot_cat_gap_p": "Inverted venue density: zero courts per 100K residents earns full marks. This is the key signal separating the Marktpotenzial-Score from the Marktreife-Score — white space is the opportunity.", - "mscore_pot_cat_catchment_h3": "Catchment Gap", - "mscore_pot_cat_catchment_p": "Distance to the nearest existing padel court. Locations more than 30km from any court score maximum points — they represent genuinely underserved catchment areas with no nearby alternative.", - "mscore_pot_cat_tennis_h3": "Racket Sport Culture", - "mscore_pot_cat_tennis_p": "Tennis courts within 25km as a proxy for established racket sport demand. Many new padel facilities open inside or next to existing tennis clubs, making this a reliable lead indicator.", - "mscore_pot_read_h2": "Marktpotenzial-Score: How To Read", - "mscore_pot_band_high_label": "70–100: High potential", - "mscore_pot_band_high_p": "Underserved area with strong demographics and economic fundamentals. Low supply, significant catchment gap, and proven racket sport culture. Priority market for greenfield investment.", - "mscore_pot_band_mid_label": "45–69: Moderate potential", - "mscore_pot_band_mid_p": "Some supply already exists, demographic limitations, or mixed signals. Worth investigating further — local factors may significantly change the picture.", - "mscore_pot_band_low_label": "Below 45: Lower potential", - "mscore_pot_band_low_p": "Market is already well-served, population is small, or economic purchasing power is limited. Focus resources on higher-scoring locations unless you have a specific local advantage.", - "mscore_faq_q6": "What is the difference between the padelnomics Marktreife-Score and the padelnomics Marktpotenzial-Score?", - "mscore_faq_a6": "The padelnomics Marktreife-Score measures how established and mature an existing padel market is — it only applies to cities with at least one venue. The padelnomics Marktpotenzial-Score measures greenfield investment opportunity and covers all locations globally, rewarding supply gaps and underserved catchment areas where no courts exist yet.", - "mscore_faq_q7": "Why does my town have a high padelnomics Marktpotenzial-Score but no padel courts?", - "mscore_faq_a7": "That is exactly the point. A high padelnomics Marktpotenzial-Score indicates an underserved location: strong demographics, economic purchasing power, no existing supply, and distance from the nearest court. These are precisely the signals that suggest a greenfield opportunity — not a sign of a weak market.", + "footer_padelnomics_score": "Padelnomics Score", + "pnscore_page_title": "Padelnomics Score — How We Rate Padel Investment Locations", + "pnscore_meta_desc": "The Padelnomics Score evaluates investment potential for padel locations across Europe. Learn how supply gaps, catchment area, market maturity, and sports culture combine into a single 0-100 score.", + "pnscore_og_desc": "A single score that tells you where to build a padel center. Methodology, components, and data sources explained.", + "pnscore_subtitle": "One score to evaluate padel investment potential — supply gaps, catchment area, market maturity, and sports culture combined into 0-100.", + "pnscore_what_h2": "What Is the Padelnomics Score?", + "pnscore_what_intro": "The Padelnomics Score is a 0-100 composite index that evaluates how attractive a location is for a new padel facility. It combines supply-side gaps (are there enough courts?) with demand-side signals (population, income, sports culture) and adjusts for market maturity. A high score means: there is addressable demand, the area is underserved, and conditions favor a new investment.", + "pnscore_components_h2": "What It Measures", + "pnscore_components_intro": "Six weighted components combine into the final score. Each captures a different aspect of investment potential.", + "pnscore_cat_market_h3": "Addressable Market (20 pts)", + "pnscore_cat_market_p": "Catchment population within ~24 km (H3 res-5 cell + neighbors). Log-scaled — a city of 500K scores the maximum. Larger catchment means more potential players.", + "pnscore_cat_econ_h3": "Economic Power (15 pts)", + "pnscore_cat_econ_p": "Regional income in purchasing power standard (PPS). Higher disposable income supports premium pricing and more frequent play. Data from Eurostat (EU), Census (US), ONS (UK).", + "pnscore_cat_gap_h3": "Supply Deficit (40 pts)", + "pnscore_cat_gap_p": "The single biggest component. Measures two signals: court density gap (how far below 5 courts per 100K?) and distance gap (how far to the nearest existing court?). Zero courts = maximum score. Already well-served areas score near zero.", + "pnscore_cat_sports_h3": "Sports Culture (10 pts)", + "pnscore_cat_sports_p": "Tennis court density within 25 km as a proxy for racquet sport adoption. Regions with strong tennis infrastructure have a ready audience for padel — a closely related sport with a lower barrier to entry.", + "pnscore_cat_catchment_h3": "Construction Affordability (5 pts)", + "pnscore_cat_catchment_p": "Income relative to local construction costs (Eurostat Price Level Index). Higher affordability means better margins on the build — your revenue potential isn’t eaten by construction costs.", + "pnscore_cat_maturity_h3": "Market Headroom (10 pts)", + "pnscore_cat_maturity_p": "Inverse of the country’s average market maturity. Countries with already saturated markets (e.g. Spain) score lower here — the national market is competitive. Emerging markets score higher — more room to grow.", + "pnscore_read_h2": "How to Read the Score", + "pnscore_band_high_label": "80+ — Excellent", + "pnscore_band_high_p": "Top-tier investment potential. Significant supply gaps, strong catchment, and favorable market conditions. These locations are prime targets for new facilities.", + "pnscore_band_good_label": "60-79 — Good", + "pnscore_band_good_p": "Strong potential with some competition or smaller catchment. Still attractive for well-positioned projects with a clear differentiation strategy.", + "pnscore_band_mid_label": "40-59 — Moderate", + "pnscore_band_mid_p": "Decent fundamentals but the market is partially served. Success depends on precise site selection, pricing, and facility quality.", + "pnscore_band_low_label": "20-39 — Below Average", + "pnscore_band_low_p": "The area is comparatively well-served or has limited demand signals. New facilities face stiffer competition and need a strong value proposition.", + "pnscore_sources_h2": "Data Sources", + "pnscore_sources_p": "The score draws on multiple open and proprietary data sources: GeoNames (global city population, 140K+ locations), Eurostat (regional income, price levels, NUTS-2 boundaries), US Census and ONS UK (population/income outside EU), OpenStreetMap via Overpass (padel and tennis court locations), and Playtomic (venue listings, court counts). All data is refreshed on a regular schedule and processed through our SQLMesh pipeline.", + "pnscore_limits_h2": "Limitations", + "pnscore_limits_p1": "The score evaluates location-level potential, not project-level feasibility. It cannot account for site-specific factors like land availability, zoning, lease costs, or local competition details. Always combine the score with on-the-ground research.", + "pnscore_limits_p2": "Data coverage varies by country. European markets have the strongest data (Eurostat income, dense venue listings). Emerging markets may have less granular income data, which affects the economic power and affordability components.", + "pnscore_cta_markets": "Explore Markets", + "pnscore_cta_planner": "Financial Planner", + "pnscore_faq_h2": "Frequently Asked Questions", + "pnscore_faq_q1": "What is the Padelnomics Score?", + "pnscore_faq_a1": "A composite 0-100 index that evaluates how attractive a location is for building a new padel facility. It combines supply gaps, catchment population, economic power, sports culture, construction affordability, and market headroom into a single number.", + "pnscore_faq_q2": "How often is the score updated?", + "pnscore_faq_a2": "The score is recalculated daily as new data flows through our pipeline. Venue listings, population data, and income statistics are refreshed on their respective schedules (daily for venues, monthly for population, annually for income).", + "pnscore_faq_q3": "Why does a city with many padel courts score low?", + "pnscore_faq_a3": "The score rewards underserved areas. A city with high court density relative to population has a small supply deficit — the biggest component (40 of 100 points). Well-served cities can still score moderately if other factors (catchment, economics) are strong.", + "pnscore_faq_q4": "How does market maturity affect the score?", + "pnscore_faq_a4": "Market maturity is captured in two ways: the supply deficit component directly measures local court density, and the market headroom component inversely weighs country-level maturity. Countries where padel is already dominant (like Spain) provide less headroom than emerging markets.", + "pnscore_faq_q5": "Can I use the score for my business plan?", + "pnscore_faq_a5": "Yes — the score is designed as a screening tool for site selection. Use it to shortlist promising locations, then dive deeper with the financial planner to model revenue, costs, and returns for your specific scenario.", "report_q1_eyebrow": "Global Market Intelligence", "report_q1_meta_description": "77,355 padel courts worldwide, +29% in 18 months. The most complete independent market report on global padel — FIP, Playtomic/PwC, and the Padelnomics data pipeline.", diff --git a/web/src/padelnomics/public/routes.py b/web/src/padelnomics/public/routes.py index 7497305..749a8bb 100644 --- a/web/src/padelnomics/public/routes.py +++ b/web/src/padelnomics/public/routes.py @@ -3,7 +3,7 @@ Public domain: landing page, marketing pages, legal pages, feedback. """ from pathlib import Path -from quart import Blueprint, abort, g, render_template, request, session +from quart import Blueprint, abort, g, redirect, render_template, request, session, url_for from ..analytics import fetch_analytics from ..core import check_rate_limit, count_where, csrf_protect, execute, fetch_all, fetch_one @@ -67,9 +67,14 @@ async def about(): return await render_template("about.html") +@bp.route("/padelnomics-score") +async def padelnomics_score(): + return await render_template("padelnomics_score.html") + + @bp.route("/market-score") async def market_score(): - return await render_template("market_score.html") + return redirect(url_for("public.padelnomics_score"), 301) @bp.route("/opportunity-map") diff --git a/web/src/padelnomics/public/templates/market_score.html b/web/src/padelnomics/public/templates/market_score.html deleted file mode 100644 index ad875b0..0000000 --- a/web/src/padelnomics/public/templates/market_score.html +++ /dev/null @@ -1,265 +0,0 @@ -{% extends "base.html" %} - -{% block title %}{{ t.mscore_page_title }}{% endblock %} - -{% block head %} - - - - -{% endblock %} - -{% block content %} -
-
- - -
-

- padelnomics - Market Score -

-

{{ t.mscore_subtitle }}

-
- - -
-

{{ t.mscore_dual_h2 }}

-

{{ t.mscore_dual_intro }}

-
-
-
{{ t.mscore_reife_chip }}
-
{{ t.mscore_reife_question }}
-

{{ t.mscore_reife_desc }}

-
-
-
{{ t.mscore_potenzial_chip }}
-
{{ t.mscore_potenzial_question }}
-

{{ t.mscore_potenzial_desc }}

-
-
-
- - -
-

padelnomics {{ t.mscore_what_h2 }}

-

{{ t.mscore_what_intro }}

- -
-
-
👥
-

{{ t.mscore_cat_demo_h3 }}

-

{{ t.mscore_cat_demo_p }}

-
-
-
💶
-

{{ t.mscore_cat_econ_h3 }}

-

{{ t.mscore_cat_econ_p }}

-
-
-
📈
-

{{ t.mscore_cat_demand_h3 }}

-

{{ t.mscore_cat_demand_p }}

-
-
-
🔍
-

{{ t.mscore_cat_data_h3 }}

-

{{ t.mscore_cat_data_p }}

-
-
-
- - -
-

padelnomics {{ t.mscore_read_h2 }}

-
-
-
- - {{ t.mscore_band_high_label }} -
-

{{ t.mscore_band_high_p }}

-
-
-
- - {{ t.mscore_band_mid_label }} -
-

{{ t.mscore_band_mid_p }}

-
-
-
- - {{ t.mscore_band_low_label }} -
-

{{ t.mscore_band_low_p }}

-
-
-

{{ t.mscore_read_note }}

-
- - -
-

padelnomics {{ t.mscore_pot_what_h2 }}

-

{{ t.mscore_pot_what_intro }}

- -
-
-
📊
-

{{ t.mscore_pot_cat_market_h3 }}

-

{{ t.mscore_pot_cat_market_p }}

-
-
-
💶
-

{{ t.mscore_pot_cat_econ_h3 }}

-

{{ t.mscore_pot_cat_econ_p }}

-
-
-
🎯
-

{{ t.mscore_pot_cat_gap_h3 }}

-

{{ t.mscore_pot_cat_gap_p }}

-
-
-
📍
-

{{ t.mscore_pot_cat_catchment_h3 }}

-

{{ t.mscore_pot_cat_catchment_p }}

-
-
-
🎾
-

{{ t.mscore_pot_cat_tennis_h3 }}

-

{{ t.mscore_pot_cat_tennis_p }}

-
-
-
- - -
-

padelnomics {{ t.mscore_pot_read_h2 }}

-
-
-
- - {{ t.mscore_pot_band_high_label }} -
-

{{ t.mscore_pot_band_high_p }}

-
-
-
- - {{ t.mscore_pot_band_mid_label }} -
-

{{ t.mscore_pot_band_mid_p }}

-
-
-
- - {{ t.mscore_pot_band_low_label }} -
-

{{ t.mscore_pot_band_low_p }}

-
-
-
- - -
-

{{ t.mscore_sources_h2 }}

-

{{ t.mscore_sources_p }}

-
- - -
-

{{ t.mscore_limits_h2 }}

-
-

{{ t.mscore_limits_p1 }}

-

{{ t.mscore_limits_p2 }}

-

{{ t.mscore_limits_p3 }}

-
-
- - - - - -
-

{{ t.mscore_faq_h2 }}

-
- {% for i in range(1, 8) %} -
- {{ t['mscore_faq_q' ~ i] }} -

{{ t['mscore_faq_a' ~ i] }}

-
- {% endfor %} -
-
- -
-
-{% endblock %} diff --git a/web/src/padelnomics/public/templates/padelnomics_score.html b/web/src/padelnomics/public/templates/padelnomics_score.html new file mode 100644 index 0000000..f54364f --- /dev/null +++ b/web/src/padelnomics/public/templates/padelnomics_score.html @@ -0,0 +1,196 @@ +{% extends "base.html" %} + +{% block title %}{{ t.pnscore_page_title }}{% endblock %} + +{% block head %} + + + + +{% endblock %} + +{% block content %} +
+
+ + +
+

+ padelnomics + Score +

+

{{ t.pnscore_subtitle }}

+
+ + +
+

{{ t.pnscore_what_h2 }}

+

{{ t.pnscore_what_intro }}

+
+ + +
+

{{ t.pnscore_components_h2 }}

+

{{ t.pnscore_components_intro }}

+ +
+
+
👥
+

{{ t.pnscore_cat_market_h3 }}

+

{{ t.pnscore_cat_market_p }}

+
+
+
💶
+

{{ t.pnscore_cat_econ_h3 }}

+

{{ t.pnscore_cat_econ_p }}

+
+
+
🎯
+

{{ t.pnscore_cat_gap_h3 }}

+

{{ t.pnscore_cat_gap_p }}

+
+
+
🎾
+

{{ t.pnscore_cat_sports_h3 }}

+

{{ t.pnscore_cat_sports_p }}

+
+
+
📍
+

{{ t.pnscore_cat_catchment_h3 }}

+

{{ t.pnscore_cat_catchment_p }}

+
+
+
📊
+

{{ t.pnscore_cat_maturity_h3 }}

+

{{ t.pnscore_cat_maturity_p }}

+
+
+
+ + +
+

{{ t.pnscore_read_h2 }}

+
+
+
+ + {{ t.pnscore_band_high_label }} +
+

{{ t.pnscore_band_high_p }}

+
+
+
+ + {{ t.pnscore_band_good_label }} +
+

{{ t.pnscore_band_good_p }}

+
+
+
+ + {{ t.pnscore_band_mid_label }} +
+

{{ t.pnscore_band_mid_p }}

+
+
+
+ + {{ t.pnscore_band_low_label }} +
+

{{ t.pnscore_band_low_p }}

+
+
+
+ + +
+

{{ t.pnscore_sources_h2 }}

+

{{ t.pnscore_sources_p }}

+
+ + +
+

{{ t.pnscore_limits_h2 }}

+
+

{{ t.pnscore_limits_p1 }}

+

{{ t.pnscore_limits_p2 }}

+
+
+ + + + + +
+

{{ t.pnscore_faq_h2 }}

+
+ {% for i in range(1, 6) %} +
+ {{ t['pnscore_faq_q' ~ i] }} +

{{ t['pnscore_faq_a' ~ i] }}

+
+ {% endfor %} +
+
+ +
+
+{% endblock %} diff --git a/web/src/padelnomics/templates/base.html b/web/src/padelnomics/templates/base.html index 144f455..3b8b542 100644 --- a/web/src/padelnomics/templates/base.html +++ b/web/src/padelnomics/templates/base.html @@ -172,7 +172,7 @@
  • {{ t.nav_planner }}
  • {{ t.nav_directory }}
  • {{ t.nav_markets }}
  • -
  • {{ t.footer_market_score }}
  • +
  • {{ t.footer_padelnomics_score }}
  • {{ t.nav_suppliers }}
  • diff --git a/web/src/padelnomics/templates/businessplan/plan.html b/web/src/padelnomics/templates/businessplan/plan.html index f2bfff5..d85ffa6 100644 --- a/web/src/padelnomics/templates/businessplan/plan.html +++ b/web/src/padelnomics/templates/businessplan/plan.html @@ -219,10 +219,10 @@
    {{ s.labels.median_offpeak_rate }}
    {% endif %} - {% if s.market_data.market_score %} + {% if s.market_data.opportunity_score %}
    -
    {{ "%.0f"|format(s.market_data.market_score) }}/100
    -
    {{ s.labels.market_score }}
    +
    {{ "%.0f"|format(s.market_data.opportunity_score) }}/100
    +
    {{ s.labels.padelnomics_score }}
    {% endif %}