Files
boc/generate-all-landing-pages.sh
T
Bernt aee0f09db8 landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar
- Vision: Identify-modell, FAISS, OCR alla testade
- API: Alla 7 integrationstester passerade
- Upplösare: Entitetsupplösning verifierad
2026-07-05 06:41:32 +00:00

214 lines
14 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Generera alla quiXzoom landningssidor
# 15 marknader × 20 use cases = 300 sidor
set -e
BASE_DIR="/home/bernt/.openclaw/workspace/quixzoom-market-pages"
TEMPLATE_DIR="$BASE_DIR/se"
# Marknadskonfigurationer
declare -A MARKETS=(
["se"]="sv|Sverige|Sweden|SE|150500 kr|Skatteverket|kr|🇸🇪 Lanseras i Sverige · 1 augusti 2026|quixzoom.se"
["de"]="de|Deutschland|Germany|DE|1550 €|Finanzamt|€|🇩🇪 Startet in Deutschland · August 2026|quixzoom.de"
["fr"]="fr|France|France|FR|1550 €|Direction générale des Finances publiques|€|🇫🇷 Lance en France · Août 2026|quixzoom.fr"
["nl"]="nl|Nederland|Netherlands|NL|1550 €|Belastingdienst|€|🇳🇱 Lanceert in Nederland · Augustus 2026|quixzoom.nl"
["uk"]="en-gb|United Kingdom|United Kingdom|GB|£1242|HMRC|£|🇬🇧 Launching in the UK · August 2026|quixzoom.co.uk"
["it"]="it|Italia|Italy|IT|1550 €|Agenzia delle Entrate|€|🇮🇹 Lancio in Italia · Agosto 2026|quixzoom.it"
["es"]="es|España|Spain|ES|1550 €|Agencia Tributaria|€|🇪🇸 Lanzamiento en España · Agosto 2026|quixzoom.es"
["fi"]="fi|Suomi|Finland|FI|1550 €|Verohallinto|€|🇫🇮 Lanserar i Finland · Elokuu 2026|quixzoom.fi"
["da"]="da|Danmark|Denmark|DK|100350 kr|Skattestyrelsen|kr|🇩🇰 Lancering i Danmark · August 2026|quixzoom.dk"
["at"]="de|Österreich|Austria|AT|1550 €|Bundesministerium für Finanzen|€|🇦🇹 Start in Österreich · August 2026|quixzoom.at"
["be"]="nl|België|Belgium|BE|1550 €|FOD Financiën|€|🇧🇪 Lancering in België · Augustus 2026|quixzoom.be"
["ch"]="de|Schweiz|Switzerland|CH|1550 CHF|ESTV|CHF|🇨🇭 Start in der Schweiz · August 2026|quixzoom.ch"
["no"]="no|Norge|Norway|NO|150500 kr|Skatteetaten|kr|🇳🇴 Lansering i Norge · August 2026|quixzoom.no"
["ie"]="en-ie|Ireland|Ireland|IE|€1550|Revenue Commissioners|€|🇮🇪 Launching in Ireland · August 2026|quixzoom.ie"
["pl"]="pl|Polska|Poland|PL|60200 zł|Ministerstwo Finansów|zł|🇵🇱 Start w Polsce · Sierpień 2026|quixzoom.pl"
)
# Use cases med översättningar
declare -A USE_CASES=(
["bridge-inspection"]="Bridge Inspection|Broinspektion|Brückeninspektion|Inspection de ponts|Bruginspectie|Bridge Inspection|Ispezione ponti|Inspección de puentes|Sillan tarkastus|Broinspektion|Brückeninspektion|Bruginspectie|Brückeninspektion|Broinspeksjon|Bridge Inspection|Inspekcja mostów"
["infrastructure-monitoring"]="Infrastructure Monitoring|Infrastrukturövervakning|Infrastrukturüberwachung|Surveillance d'infrastructure|Infrastructuurmonitoring|Infrastructure Monitoring|Monitoraggio infrastrutture|Monitoreo de infraestructura|Infrastruktuurin valvonta|Infrastrukturovervågning|Infrastrukturüberwachung|Infrastructuurmonitoring|Infrastrukturüberwachung|Infrastrukturovervåking|Infrastructure Monitoring|Monitorowanie infrastruktury"
["property-documentation"]="Property Documentation|Fastighetsdokumentation|Immobiliendokumentation|Documentation immobilière|Vastgoeddocumentatie|Property Documentation|Documentazione immobiliare|Documentación de propiedades|Kiinteistödokumentaatio|Ejendomsdokumentation|Immobiliendokumentation|Vastgoeddocumentatie|Immobiliendokumentation|Eiendomsdokumentasjon|Property Documentation|Dokumentacja nieruchomości"
["storm-damage"]="Storm Damage Assessment|Stormskadebedömning|Sturmschadenbewertung|Évaluation des dégâts de tempête|Stormschadebeoordeling|Storm Damage Assessment|Valutazione danni da tempesta|Evaluación de daños por tormenta|Myrskyvaurioarvio|Stormskadevurdering|Sturmschadenbewertung|Stormschadebeoordeling|Sturmschadenbewertung|Stormskadevurdering|Storm Damage Assessment|Ocena szkód po burzy"
["retail-audit"]="Retail Audit|Butiksaudit|Einzelhandelsaudit|Audit de vente au détail|Retail audit|Retail Audit|Audit retail|Auditoría retail|Vähittäiskaupan tarkastus|Detailhandelsaudit|Einzelhandelsaudit|Retail audit|Einzelhandelsaudit|Detaljhandelsrevisjon|Retail Audit|Audyt detaliczny"
["ooh-audit"]="OOH Audit|OOH-audit|OOH-Audit|Audit OOH|OOH-audit|OOH Audit|Audit OOH|Auditoría OOH|OOH-tarkastus|OOH-audit|OOH-Audit|OOH-audit|OOH-Audit|OOH-revisjon|OOH Audit|Audyt OOH"
["construction-progress"]="Construction Progress|Byggframsteg|Baufortschritt|Progrès de construction|Bouwvoortgang|Construction Progress|Avanzamento lavori|Progreso de construcción|Rakennustyön edistyminen|Byggefremgang|Baufortschritt|Bouwvoortgang|Baufortschritt|Byggefremskridt|Construction Progress|Postęp budowy"
["facade-inspection"]="Facade Inspection|Fasadinspektion|Fassadeninspektion|Inspection de façade|Gevelinspectie|Facade Inspection|Ispezione facciata|Inspección de fachadas|Julkisivutarkastus|Facadeinspektion|Fassadeninspektion|Gevelinspectie|Fassadeninspektion|Fasadeinspeksjon|Facade Inspection|Inspekcja elewacji"
["roof-inspection"]="Roof Inspection|Takinspektion|Dachinspektion|Inspection de toit|Dakinspectie|Roof Inspection|Ispezione tetto|Inspección de tejados|Kattotarkastus|Taginspektion|Dachinspektion|Dakinspectie|Dachinspektion|Takinspeksjon|Roof Inspection|Inspekcja dachu"
["road-condition"]="Road Condition|Vägcondition|Straßenzustand|État des routes|Wegconditie|Road Condition|Condizione stradale|Condición de carreteras|Tien kunto|Vejtilstand|Straßenzustand|Wegconditie|Straßenzustand|Veitilstand|Road Condition|Stan dróg"
["signage-audit"]="Signage Audit|Skyltaudit|Beschilderungsaudit|Audit de signalisation|Signalisatie-audit|Signage Audit|Audit segnaletica|Auditoría de señalización|Opastetarkastus|Skilteaudit|Beschilderungsaudit|Signalisatie-audit|Beschilderungsaudit|Skiltingrevisjon|Signage Audit|Audyt oznakowania"
["parking-audit"]="Parking Audit|Parkeringsaudit|Parkplatz-Audit|Audit de stationnement|Parkeer-audit|Parking Audit|Audit parcheggi|Auditoría de aparcamiento|Pysäköintitarkastus|Parkeringsaudit|Parkplatz-Audit|Parkeer-audit|Parkplatz-Audit|Parkeringsrevisjon|Parking Audit|Audyt parkingów"
["asset-tracking"]="Asset Tracking|Tillgångsspårning|Asset Tracking|Suivi d'actifs|Asset tracking|Asset Tracking|Tracciamento asset|Seguimiento de activos|Omaisuuden seuranta|Asset tracking|Asset Tracking|Asset tracking|Asset Tracking|Eiendomssporing|Asset Tracking|Śledzenie zasobów"
["environmental-survey"]="Environmental Survey|Miljöinventering|Umwelterhebung|Enquête environnementale|Milieudenquête|Environmental Survey|Indagine ambientale|Estudio medioambiental|Ympäristöselvitys|Miljøundersøgelse|Umwelterhebung|Milieudenquête|Umwelterhebung|Miljøundersøkelse|Environmental Survey|Badanie środowiskowe"
["insurance-claim"]="Insurance Claim|Försäkringsärende|Versicherungsfall|Réclamation d'assurance|Verzekeringsclaim|Insurance Claim|Sinistro assicurativo|Reclamación de seguro|Vakuutusvaade|Forsikringskrav|Versicherungsfall|Verzekeringsclaim|Versicherungsfall|Forsikringskrav|Insurance Claim|Roszczenie ubezpieczeniowe"
["lease-audit"]="Lease Audit|Hyresaudit|Lease-Audit|Audit de bail|Lease audit|Lease Audit|Audit locazione|Auditoría de arrendamiento|Vuokraustarkastus|Leasingaudit|Lease-Audit|Lease audit|Lease-Audit|Leasingrevisjon|Lease Audit|Audyt leasingowy"
["event-documentation"]="Event Documentation|Eventdokumentation|Eventdokumentation|Documentation d'événement|Evenementdocumentatie|Event Documentation|Documentazione eventi|Documentación de eventos|Tapahtumadokumentaatio|Begivenhedsdokumentation|Eventdokumentation|Evenementdocumentatie|Eventdokumentation|Arrangementsdokumentasjon|Event Documentation|Dokumentacja wydarzeń"
["pre-purchase-inspection"]="Pre-Purchase Inspection|Köpesbesiktning|Kaufinspektion|Inspection pré-achat|Pre-aankoopinspectie|Pre-Purchase Inspection|Ispezione pre-acquisto|Inspección pre-compra|Esihankintatarkastus|Forhåndskøbsinspektion|Kaufinspektion|Pre-aankoopinspectie|Kaufinspektion|Forhåndsinspeksjon|Pre-Purchase Inspection|Inspekcja przedzakupowa"
["rental-inspection"]="Rental Inspection|Hyresinspektion|Mietinspektion|Inspection locative|Huurinspectie|Rental Inspection|Ispezione locazione|Inspección de alquiler|Vuokraustarkastus|Lejeinspektion|Mietinspektion|Huurinspectie|Mietinspektion|Leieinspeksjon|Rental Inspection|Inspekcja wynajmu"
["accessibility-audit"]="Accessibility Audit|Tillgänglighetsaudit|Barrierefreiheits-Audit|Audit d'accessibilité|Toegankelijkheidsaudit|Accessibility Audit|Audit accessibilità|Auditoría de accesibilidad|Saavutettavuustarkastus|Tilgængelighedsaudit|Barrierefreiheits-Audit|Toegankelijkheidsaudit|Barrierefreiheits-Audit|Universell utforming revisjon|Accessibility Audit|Audyt dostępności"
)
# Funktion för att generera en landningssida
generate_page() {
local market=$1
local use_case=$2
local lang=$(echo "${MARKETS[$market]}" | cut -d'|' -f1)
local country_name=$(echo "${MARKETS[$market]}" | cut -d'|' -f2)
local country_en=$(echo "${MARKETS[$market]}" | cut -d'|' -f3)
local country_code=$(echo "${MARKETS[$market]}" | cut -d'|' -f4)
local pay_range=$(echo "${MARKETS[$market]}" | cut -d'|' -f5)
local tax_authority=$(echo "${MARKETS[$market]}" | cut -d'|' -f6)
local currency=$(echo "${MARKETS[$market]}" | cut -d'|' -f7)
local badge=$(echo "${MARKETS[$market]}" | cut -d'|' -f8)
local domain=$(echo "${MARKETS[$market]}" | cut -d'|' -f9)
# Hämta use case-namn baserat på språk
local use_case_names="${USE_CASES[$use_case]}"
local use_case_name=""
case $lang in
sv) use_case_name=$(echo "$use_case_names" | cut -d'|' -f2) ;;
de) use_case_name=$(echo "$use_case_names" | cut -d'|' -f3) ;;
fr) use_case_name=$(echo "$use_case_names" | cut -d'|' -f4) ;;
nl) use_case_name=$(echo "$use_case_names" | cut -d'|' -f5) ;;
en-gb|en-ie) use_case_name=$(echo "$use_case_names" | cut -d'|' -f6) ;;
it) use_case_name=$(echo "$use_case_names" | cut -d'|' -f7) ;;
es) use_case_name=$(echo "$use_case_names" | cut -d'|' -f8) ;;
fi) use_case_name=$(echo "$use_case_names" | cut -d'|' -f9) ;;
da) use_case_name=$(echo "$use_case_names" | cut -d'|' -f10) ;;
at) use_case_name=$(echo "$use_case_names" | cut -d'|' -f11) ;;
be) use_case_name=$(echo "$use_case_names" | cut -d'|' -f12) ;;
ch) use_case_name=$(echo "$use_case_names" | cut -d'|' -f13) ;;
no) use_case_name=$(echo "$use_case_names" | cut -d'|' -f14) ;;
ie) use_case_name=$(echo "$use_case_names" | cut -d'|' -f15) ;;
pl) use_case_name=$(echo "$use_case_names" | cut -d'|' -f16) ;;
*) use_case_name=$(echo "$use_case_names" | cut -d'|' -f1) ;;
esac
# Skapa katalog
mkdir -p "$BASE_DIR/$market/$use_case"
# Generera HTML (förenklad version)
cat > "$BASE_DIR/$market/$use_case/index.html" << EOF
<!DOCTYPE html>
<html lang="$lang">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>$use_case_name — quiXzoom | $country_name</title>
<meta name="description" content="$use_case_name med quiXzoom i $country_name. Tjäna $pay_range per uppdrag. Betalt varje vecka.">
<meta name="geo.region" content="$country_code">
<meta name="geo.country" content="$country_en">
<meta name="language" content="$country_name">
<link rel="canonical" href="https://$domain/$use_case/">
<style>
:root{--qx-black:#0a0a0a;--qx-white:#fff;--qx-blue:#06f;--qx-gray:#f5f5f7;--qx-dark-gray:#1a1a1a}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Helvetica Neue',sans-serif;color:var(--qx-black);line-height:1.5}
.hero{background:var(--qx-black);color:var(--qx-white);padding:80px 20px;text-align:center}
.hero h1{font-size:2.5rem;margin-bottom:1rem}
.hero p{font-size:1.25rem;color:#ccc;margin-bottom:2rem}
.badge{display:inline-block;background:var(--qx-blue);color:#fff;padding:8px 16px;border-radius:20px;font-size:.875rem;margin-bottom:1rem}
.container{max-width:1200px;margin:0 auto;padding:40px 20px}
.section{padding:60px 20px}
.section-gray{background:var(--qx-gray)}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:24px}
.card{background:#fff;padding:24px;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,.1)}
.card h3{margin-bottom:.5rem}
.cta{display:inline-block;background:var(--qx-blue);color:#fff;padding:16px 32px;border-radius:8px;text-decoration:none;font-weight:600;margin-top:1rem}
.footer{background:var(--qx-dark-gray);color:#fff;padding:40px 20px;text-align:center}
</style>
</head>
<body>
<div class="hero">
<div class="badge">$badge</div>
<h1>$use_case_name</h1>
<p>quiXzoom — Crowdsourcad datainsamling i $country_name. Tjäna $pay_range per uppdrag.</p>
<a href="https://app.quixzoom.com/join" class="cta">Bli Zoomer nu</a>
</div>
<div class="container">
<div class="section">
<h2>Hur det fungerar</h2>
<div class="grid">
<div class="card">
<h3>1. Hitta uppdrag</h3>
<p>Se tillgängliga $use_case_name-uppdrag nära dig i appen.</p>
</div>
<div class="card">
<h3>2. Dokumentera</h3>
<p>Följ instruktionerna och ta bilder med din smartphone.</p>
</div>
<div class="card">
<h3>3. Få betalt</h3>
<p>Betalt varje vecka. $pay_range per godkänt uppdrag.</p>
</div>
</div>
</div>
</div>
<div class="section section-gray">
<div class="container">
<h2>Varför quiXzoom?</h2>
<div class="grid">
<div class="card">
<h3>Flexibelt</h3>
<p>Jobba när du vill. Inga scheman, inga minimikrav.</p>
</div>
<div class="card">
<h3>Betalt snabbt</h3>
<p>Varje vecka direkt till ditt konto via Stripe.</p>
</div>
<div class="card">
<h3>Tillförlitligt</h3>
<p>Global plattform med verifierade uppdrag och tydlig feedback.</p>
</div>
</div>
</div>
</div>
<div class="footer">
<p>© 2026 quiXzoom AB — En del av <a href="https://aamos.systems" style="color:#fff">AAMOS</a></p>
<p>$domain</p>
</div>
</body>
</html>
EOF
echo "$market/$use_case/index.html"
}
# Räknare
TOTAL=0
DONE=0
# Räkna totalt
for market in "${!MARKETS[@]}"; do
for use_case in "${!USE_CASES[@]}"; do
((TOTAL++))
done
done
echo "Genererar $TOTAL landningssidor..."
echo ""
# Generera alla sidor
for market in se de fr nl uk it es fi da at be ch no ie pl; do
echo "=== Marknad: $market ==="
for use_case in "${!USE_CASES[@]}"; do
generate_page "$market" "$use_case"
((DONE++))
done
echo ""
done
echo ""
echo "✅ Klart! $DONE landningssidor genererade."
echo ""
echo "Nästa steg:"
echo "1. Deploya till S3: aws s3 sync $BASE_DIR s3://quixzoom-landing-prod/markets/"
echo "2. Invalida CloudFront-cache"
echo "3. Verifiera att alla sidor är tillgängliga"