# site-report.json Schema

The master manifest generated after every scrape. Read this first to understand the scraped site.

## Example

```json
{
  "metadata": {
    "scrape_date": "2026-03-26T14:30:00Z",
    "urls_requested": ["https://example.com"],
    "depth": 1,
    "pages_scraped": 12,
    "total_assets": 47,
    "scrape_duration_seconds": 34.2,
    "errors": 0
  },
  "sitemap": [
    {
      "url": "https://example.com/",
      "local_path": "pages/index.html",
      "title": "Example Corp - Home",
      "depth": 0,
      "children": [
        {
          "url": "https://example.com/about",
          "local_path": "pages/about.html",
          "title": "About Us",
          "depth": 1,
          "children": []
        }
      ]
    }
  ],
  "assets": {
    "css": ["assets/css/main.css", "assets/css/vendor.css"],
    "js": ["assets/js/app.js"],
    "images": ["assets/images/logo.png", "assets/images/hero.jpg"],
    "fonts": ["assets/fonts/custom-font.woff2"]
  },
  "seo": {
    "summary": "See seo/seo-summary.json for full analysis",
    "highlights": [
      "Uses semantic HTML5 elements throughout",
      "Open Graph and Twitter Card meta tags present",
      "Structured data (JSON-LD) found on 3 pages"
    ],
    "issues": [
      "2/12 pages missing meta description",
      "1/12 pages have images without alt text"
    ]
  },
  "design_notes": {
    "primary_colors": ["#1a1a2e", "#16213e", "#e94560"],
    "fonts_used": ["Inter", "Playfair Display"],
    "layout_approach": "CSS Grid with Flexbox",
    "responsive": true,
    "framework_detected": "Next.js (React)"
  },
  "errors": []
}
```

## Field Reference

| Section | Field | Description |
|---------|-------|-------------|
| `metadata` | `scrape_date` | ISO 8601 timestamp of scrape start |
| | `urls_requested` | Original URLs passed to the scraper |
| | `depth` | Max crawl depth used |
| | `pages_scraped` | Total HTML pages downloaded |
| | `total_assets` | Total CSS, JS, image, and font files downloaded |
| | `scrape_duration_seconds` | Wall-clock time for the crawl |
| | `errors` | Count of failed requests |
| `sitemap` | (array) | Hierarchical tree of scraped pages with URL, local path, title, depth, and children |
| `assets` | `css` / `js` / `images` / `fonts` | Arrays of local file paths grouped by type |
| `seo` | `highlights` | Positive SEO techniques detected across pages |
| | `issues` | Common SEO problems found across pages |
| `design_notes` | `primary_colors` | Hex colors extracted from external CSS and inline `<style>` blocks (top 10) |
| | `fonts_used` | Font families found (excluding generic fallbacks like serif, sans-serif) |
| | `layout_approach` | Detected layout method: CSS Grid, Flexbox, or Traditional |
| | `responsive` | Whether `@media` queries are present |
| | `framework_detected` | Detected framework: Next.js, React, Angular, Vue, Nuxt, WordPress, or null |
| `errors` | (array) | URLs that failed with status codes and error messages (capped at 50) |
