#!/usr/bin/env python3 """ build_services.py — Service page generator for floorithardwoodfloors.com Reads data/services.json + services/_template.html Outputs flat .html files: services/{slug}.html Usage: python3 build_services.py python3 build_services.py --slug floor-refinishing python3 build_services.py --list """ import json import sys import argparse from pathlib import Path from datetime import datetime SITE_ROOT = Path(__file__).parent DATA_FILE = SITE_ROOT / "data" / "services.json" TEMPLATE_FILE = SITE_ROOT / "services" / "_template.html" OUTPUT_DIR = SITE_ROOT / "services" def render_page(service: dict, template: str) -> str: html = template for key, value in service.items(): if isinstance(value, str): html = html.replace(f"{{{{{key}}}}}", value) return html def build_one(service: dict, template: str, verbose: bool = True) -> Path: slug = service["slug"] output_path = OUTPUT_DIR / f"{slug}.html" html = render_page(service, template) output_path.write_text(html, encoding="utf-8") if verbose: print(f" Built: services/{slug}.html ({service.get('service_name', slug)})") return output_path def main(): parser = argparse.ArgumentParser(description="Build flat service HTML pages from JSON database.") parser.add_argument("--slug", help="Build a single service by slug (e.g. floor-refinishing)") parser.add_argument("--list", action="store_true", help="List all services in database") args = parser.parse_args() if not DATA_FILE.exists(): print(f"ERROR: data file not found: {DATA_FILE}") sys.exit(1) if not TEMPLATE_FILE.exists(): print(f"ERROR: template not found: {TEMPLATE_FILE}") sys.exit(1) services = json.loads(DATA_FILE.read_text(encoding="utf-8")) template = TEMPLATE_FILE.read_text(encoding="utf-8") if args.list: print(f"\nServices in database ({len(services)} total):") for svc in services: print(f" {svc['slug']:30s} {svc.get('service_name','')}") return OUTPUT_DIR.mkdir(parents=True, exist_ok=True) if args.slug: matches = [s for s in services if s["slug"] == args.slug] if not matches: print(f"ERROR: slug '{args.slug}' not found in database.") sys.exit(1) print(f"\nBuilding single service: {args.slug}") build_one(matches[0], template) else: print(f"\nBuilding {len(services)} service pages...") built = [] for svc in services: path = build_one(svc, template) built.append(path) print(f"\nDone. {len(built)} pages written to services/") print(f"Completed at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") if __name__ == "__main__": main()