#!/bin/bash # Generate standardized city inspection landing pages set -e # Define cities per country with relevant compliance/regulatory info declare -A CITIES declare -A COMPLIANCE # Sweden CITIES[sweden]="stockholm|Stockholm:goteborg|Göteborg:malmo|Malmö:uppsala|Uppsala:linkoping|Linköping:orebro|Örebro" COMPLIANCE[sweden]="Trafikverket" # Germany CITIES[germany]="berlin|Berlin:hamburg|Hamburg:munich|München:cologne|Köln:frankfurt|Frankfurt:stuttgart|Stuttgart" COMPLIANCE[germany]="DIN" # France CITIES[france]="paris|Paris:marseille|Marseille:lyon|Lyon:toulouse|Toulouse:nice|Nice:nantes|Nantes" COMPLIANCE[france]="CEREMA" # UK CITIES[uk]="london|London:manchester|Manchester:birmingham|Birmingham:glasgow|Glasgow:liverpool|Liverpool:leeds|Leeds" COMPLIANCE[uk]="DfT" # Netherlands CITIES[netherlands]="amsterdam|Amsterdam:rotterdam|Rotterdam:the-hague|Den Haag:utrecht|Utrecht:eindhoven|Eindhoven:tilburg|Tilburg" COMPLIANCE[netherlands]="Rijkswaterstaat" # Service types SERVICES="bridge-inspection|Bridge Inspection|Professional bridge inspection services in {city}. {compliance} compliant. Rapid deployment, verified data, digital reporting. facade-inspection|Facade Inspection|Building facade inspection and documentation in {city}. Identify maintenance needs, structural issues, and compliance requirements. road-condition|Road Condition Assessment|AI-assisted road surface analysis and condition mapping across {city}. Potholes, cracks, markings, and accessibility. street-lighting|Street Lighting Inspection|Verify street light functionality and coverage across {city}. Night-time verification missions with geolocated photo evidence. construction-monitoring|Construction Monitoring|Document construction progress and verify compliance in {city}. Timestamped, geolocated evidence for project managers. property-verification|Property Verification|Verify property condition, occupancy, and maintenance status in {city}. For insurers, landlords, and real estate companies. retail-audit|Retail Audit|Document storefront conditions, signage compliance, and competitor presence in {city}. Mystery shopping with photo evidence. accessibility-audit|Accessibility Audit|Verify accessibility compliance for public spaces and businesses in {city}. Ramps, signage, pathways, and facilities. environmental-monitoring|Environmental Monitoring|Track environmental conditions, pollution, and green space status in {city}. For municipalities and environmental agencies. storm-damage|Storm Damage Documentation|Rapid post-storm documentation of damage across {city}. Insurance claims, emergency response, and repair prioritization." # Template for city page generate_city_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 compliance="$7" local country_flag="$8" # Generate related services local related="" local other_services="facade-inspection|Facade Inspection:road-condition|Road Condition:street-lighting|Street Lighting:construction-monitoring|Construction Monitoring:property-verification|Property Verification:retail-audit|Retail Audit:accessibility-audit|Accessibility Audit:environmental-monitoring|Environmental Monitoring:storm-damage|Storm Damage" IFS=':' read -ra OTHER <<< "$other_services" for svc in "${OTHER[@]}"; do local s_slug=$(echo "$svc" | cut -d'|' -f1) local s_name=$(echo "$svc" | cut -d'|' -f2) if [[ "$s_slug" != "$service_slug" ]]; then related+=" \n" related+="
🏙️
\n" related+="

$s_name — $city_name

\n" related+="

Available in $city_name, $country.

\n" related+="
Explore →
\n" related+="
\n" fi done # Add country-level service related+=" \n" related+="
$country_flag
\n" related+="

$service_name — $(echo "$country" | sed 's/.*/\u&/')

\n" related+="

Nationwide $service_name services across $(echo "$country" | sed 's/.*/\u&/').

\n" related+="
Explore →
\n" related+="
\n" # Add enterprise related+=" \n" related+="
🏢
\n" related+="

Enterprise Solutions

\n" related+="

Custom inspection programs with API integration and SLA guarantees.

\n" related+="
Learn more →
\n" related+="
\n" cat << EOF $service_name in $city_name — quiXzoom
$country_flag $city_name · $compliance Compliant

$service_name in $city_name

$(echo "$service_desc" | sed "s/{city}/$city_name/g; s/{compliance}/$compliance/g")

Why choose quiXzoom in $city_name

Local expertise, global standards

Local Coverage

Zoomers available throughout $city_name and surrounding areas. Fast response times, local knowledge.

$compliance Compliant

All inspections follow $compliance regulations and documentation standards. Digital reports ready for submission.

Rapid Deployment

Missions can be deployed within hours. Same-day verification available for urgent requests.

Verified Data

AI-powered quality control with geolocation, timestamps, and metadata. Court-admissible evidence.

Cost Effective

Up to 70% cheaper than traditional inspection services. Pay per mission, no retainers.

Scalable

From single inspections to city-wide campaigns. Handle any volume with our distributed network.

Related services in $city_name

Complete inspection solutions

Start inspecting in $city_name today

Get a custom quote for your inspection programme. No minimum commitment.

View pricing Contact sales
EOF } # Generate pages for each country, city, and service count=0 for country in sweden germany france uk netherlands; do country_flag="" case $country in sweden) country_flag="🇸🇪" ;; germany) country_flag="🇩🇪" ;; france) country_flag="🇫🇷" ;; uk) country_flag="🇬🇧" ;; netherlands) country_flag="🇳🇱" ;; esac IFS=':' read -ra CITY_LIST <<< "${CITIES[$country]}" for city_info in "${CITY_LIST[@]}"; do city_slug=$(echo "$city_info" | cut -d'|' -f1) city_name=$(echo "$city_info" | cut -d'|' -f2) IFS=$'\n' read -d '' -ra SERVICE_LIST <<< "$SERVICES" for service_info in "${SERVICE_LIST[@]}"; do [[ -z "$service_info" ]] && continue service_slug=$(echo "$service_info" | cut -d'|' -f1) service_name=$(echo "$service_info" | cut -d'|' -f2) service_desc=$(echo "$service_info" | cut -d'|' -f3) echo "Generating: $service_slug/$city_slug..." # Generate page page_content=$(generate_city_page "$service_slug" "$service_name" "$service_desc" "$city_slug" "$city_name" "$country" "${COMPLIANCE[$country]}" "$country_flag") # Upload to S3 echo "$page_content" | aws s3 cp - "s3://quixzoom-landing-prod/$service_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 cache..." aws cloudfront create-invalidation --distribution-id EE30B9WM5ZYM7 --paths "/*" --query 'Invalidation.Id' --output text