# Clyne Media

Mobile-first PWA for tracking recent press-release-based clippings across audio, music, pro AV, and related trade coverage.

The app now supports a larger shared client roster and can read both:
- seeded coverage in `app.js`
- stored coverage in `data/stored-coverage.json`

## What it includes

- iPhone-friendly home page with all clients
- Client detail pages showing recent coverage first
- Coverage cards with headline, thumbnail-style preview, source, date, and direct link
- Offline-ready PWA shell with service worker and manifest
- Stored coverage layer in `data/stored-coverage.json`
- Ingestion manifest in `data/ingestion-manifest.json`
- Python ingestion script in `scripts/build_coverage.py`

## Run locally

Serve the folder with any static server, for example:

```bash
python3 -m http.server 4173
```

Then open `http://localhost:4173`.

## Build Stored Coverage

To generate a saved coverage file from the Clyne release indexes plus source-specific searches:

```bash
python3 scripts/build_coverage.py
```

For better coverage and easier verification, ingest one client at a time:

```bash
python3 scripts/build_coverage.py --client audio-technica
python3 scripts/build_coverage.py --client genelec
python3 scripts/build_coverage.py --client waves
```

That writes results into:

```text
data/stored-coverage.json
```

## Search Strategy

The ingestion flow is designed to:

- use the Clyne press release index pages as source-of-truth
- search the last 6 months
- search exact release titles and compact title variants
- search source-by-source across priority PR outlets
- search review-oriented outlets for mainstream/product reviews of products named in those releases
- ranks newest coverage first
- filters for stories that appear to be based on the actual press release
- stores the result set so the app does not rely only on live browser fetches
