#!/bin/bash # Generate expanded standardized inspection categories set -e # Extended cities per country (more cities) SWEDEN_CITIES="stockholm|Stockholm goteborg|Göteborg malmo|Malmö uppsala|Uppsala linkoping|Linköping orebro|Örebro vasteras|Västerås helsingborg|Helsingborg jonkoping|Jönköping" GERMANY_CITIES="berlin|Berlin hamburg|Hamburg munich|München cologne|Köln frankfurt|Frankfurt stuttgart|Stuttgart dusseldorf|Düsseldorf dortmund|Dortmund essen|Essen" FRANCE_CITIES="paris|Paris marseille|Marseille lyon|Lyon toulouse|Toulouse nice|Nice nantes|Nantes strasbourg|Strasbourg montpellier|Montpellier bordeaux|Bordeaux" UK_CITIES="london|London manchester|Manchester birmingham|Birmingham glasgow|Glasgow liverpool|Liverpool leeds|Leeds sheffield|Sheffield edinburgh|Edinburgh bristol|Bristol" NETHERLANDS_CITIES="amsterdam|Amsterdam rotterdam|Rotterdam the-hague|Den_Haag utrecht|Utrecht eindhoven|Eindhoven tilburg|Tilburg groningen|Groningen almere|Almere breda|Breda" DENMARK_CITIES="copenhagen|Copenhagen aarhus|Aarhus odense|Odense aalborg|Aalborg esbjerg|Esbjerg" NORWAY_CITIES="oslo|Oslo bergen|Bergen trondheim|Trondheim stavanger|Stavanger bodo|Bodø" FINLAND_CITIES="helsinki|Helsinki espoo|Espoo tampere|Tampere vantaa|Vantaa oulu|Oulu" # Extended services (20 categories) SERVICES=( "bridge-inspection|Bridge Inspection|Professional bridge inspection services in {city}. {compliance} compliant." "facade-inspection|Facade Inspection|Building facade inspection and documentation in {city}. Identify maintenance needs." "road-condition|Road Condition Assessment|AI-assisted road surface analysis and condition mapping across {city}. Potholes, cracks, markings." "street-lighting|Street Lighting Inspection|Verify street light functionality and coverage across {city}. Night-time verification missions." "construction-monitoring|Construction Monitoring|Document construction progress and verify compliance in {city}. Timestamped evidence." "property-verification|Property Verification|Verify property condition, occupancy, and maintenance status in {city}. For insurers and landlords." "retail-audit|Retail Audit|Document storefront conditions, signage compliance, and competitor presence in {city}." "accessibility-audit|Accessibility Audit|Verify accessibility compliance for public spaces and businesses in {city}." "environmental-monitoring|Environmental Monitoring|Track environmental conditions, pollution, and green space status in {city}." "storm-damage|Storm Damage Documentation|Rapid post-storm documentation of damage across {city}. Insurance claims and emergency response." "parking-inspection|Parking Inspection|Inspect parking facilities, signage, and accessibility compliance in {city}." "traffic-sign|Traffic Sign Inspection|Verify traffic sign condition, placement, and visibility across {city}." "solar-panel|Solar Panel Inspection|Document solar panel installations and assess condition in {city}. For energy companies." "roof-inspection|Roof Inspection|Aerial and ground-based roof condition assessment in {city}. Identify damage and maintenance needs." "graffiti-monitoring|Graffiti Monitoring|Track graffiti incidents and removal status across {city}. For municipalities and property managers." "waste-management|Waste Management Audit|Verify waste container placement, overflow, and collection status in {city}." "sidewalk-condition|Sidewalk Condition|Document sidewalk defects, obstacles, and accessibility issues in {city}." "tree-inventory|Tree Inventory|Document tree locations, species, and health status in {city}. For urban forestry." "flood-damage|Flood Damage Assessment|Rapid documentation of flood damage and water levels in {city}. Insurance and emergency response." "wildlife-monitoring|Wildlife Monitoring|Track wildlife presence, habitats, and human-wildlife conflicts in and around {city}." ) # Flags get_flag() { case "$1" in sweden) echo "🇸🇪" ;; germany) echo "🇩🇪" ;; france) echo "🇫🇷" ;; uk) echo "🇬🇧" ;; netherlands) echo "🇳🇱" ;; denmark) echo "🇩🇰" ;; norway) echo "🇳🇴" ;; finland) echo "🇫🇮" ;; esac } # Compliance get_compliance() { case "$1" in sweden) echo "Trafikverket" ;; germany) echo "DIN" ;; france) echo "CEREMA" ;; uk) echo "DfT" ;; netherlands) echo "Rijkswaterstaat" ;; denmark) echo "Vejdirektoratet" ;; norway) echo "Statens vegvesen" ;; finland) echo "Väylävirasto" ;; esac } # Generate page generate_page() { local service_slug="$1" local service_name="$2" local service_desc="$3" local city_slug="$4" local city_name="$5" local country="$6" local flag="$7" local compliance="$8" local desc=$(echo "$service_desc" | sed "s/{city}/$city_name/g; s/{compliance}/$compliance/g") # Build related services (first 5 other services) local related="" local count=0 for svc in "${SERVICES[@]}"; do local s_slug=$(echo "$svc" | cut -d'|' -f1) local s_name=$(echo "$svc" | cut -d'|' -f2) if [[ "$s_slug" != "$service_slug" && $count -lt 5 ]]; then related+="

$s_name

Available in $city_name →

" ((count++)) fi done cat << EOF $service_name in $city_name — quiXzoom
$flag $city_name · $compliance Compliant

$service_name in $city_name

$desc

Why choose quiXzoom in $city_name

Local Coverage

Zoomers available throughout $city_name. Fast response times.

$compliance Compliant

All inspections follow regulations. Digital reports ready.

Rapid Deployment

Missions deployed within hours. Same-day available.

Verified Data

AI quality control with geolocation. Court-admissible.

Cost Effective

Up to 70% cheaper. Pay per mission.

Scalable

From single to city-wide campaigns.

Related services in $city_name

Start inspecting in $city_name today

Get a custom quote. No minimum commitment.

View pricingContact sales
EOF } # Generate all pages count=0 for country in sweden germany france uk netherlands denmark norway finland; do flag=$(get_flag "$country") compliance=$(get_compliance "$country") cities_var="${country^^}_CITIES" cities="${!cities_var}" [[ -z "$cities" ]] && continue for city_info in $cities; do city_slug=$(echo "$city_info" | cut -d'|' -f1) city_name=$(echo "$city_info" | cut -d'|' -f2 | tr '_' ' ') for service in "${SERVICES[@]}"; do svc_slug=$(echo "$service" | cut -d'|' -f1) svc_name=$(echo "$service" | cut -d'|' -f2) svc_desc=$(echo "$service" | cut -d'|' -f3) echo "Generating: $svc_slug/$city_slug" page=$(generate_page "$svc_slug" "$svc_name" "$svc_desc" "$city_slug" "$city_name" "$country" "$flag" "$compliance") echo "$page" | aws s3 cp - "s3://quixzoom-landing-prod/$svc_slug/$city_slug.html" --content-type "text/html" --cache-control "max-age=3600" ((count++)) done done done echo "" echo "✅ Generated $count city-specific landing pages" echo "Invalidating CloudFront..." aws cloudfront create-invalidation --distribution-id EE30B9WM5ZYM7 --paths "/*" --query 'Invalidation.Id' --output text