# vaktin.is — Verðvaktin (price watch)

Iceland's price watch for computer parts. Every category is a table of
products with the price at each of the five stores — Tölvutækni.is,
Kísildalur.is, Tölvulistinn.is (tl.is), Tölvutek.is, Computer.is — with the
cheapest price flagged. Public page, no auth, one GET per op:

```bash
ab-plus run vaktin.is/prices --input '{"category":"skjakort"}'
ab-plus run vaktin.is/prices                     # curated front page
ab-plus run vaktin.is/categories                 # id + name per category
```

## Ops

| Op | Risk | Notes |
|---|---|---|
| `prices` | read-only | Full price table for one category; `category` takes an id (`12`) or name (`skjakort`, `orgjorvar`, `minni`, `gagnageymslur`, `modurbord`, `jadartaeki`, `mys`). Omit for the front page. |
| `categories` | read-only | Category ids + names (ids are the `cid` query params). |

## Categories

| cid | Name |
|---|---|
| 11 | Örgjörvar |
| 14 | Minni |
| 12 | Skjákort & skjáir |
| 10 | Gagnageymslur |
| 16 | Móðurborð |
| 21 | Jaðartæki |
| 22 | Mýs |

## Gotchas

- The tables are server-rendered HTML — parse the `<table class='prices'>`
  blocks, don't scrape display text. Prices are ISK with `.` as the
  thousands separator (`144.900` → `144900`).
- Each row carries the cheapest quote flagged (`class='cheapest'`); a `&nbsp;`
  cell means that shop doesn't list the product.
- Shop columns are aligned per table: header `alt` gives the shop name, the
  `shopUpdated` row gives the shop's last-updated date (DD.MM).
- Respect the site: it's a small Icelandic site, don't hammer it. The
  reference recipe does one GET per op (two when resolving a category name).
- Prices are updated manually by the shops themselves; `updated` per quote
  tells you how stale each column is.
