# HOMESTEAD > Browser crowd-compute over real Sentinel-2 imagery of this week's fires. A hand (a browser tab, a script, an agent) claims a 512x512 plot, reads two bands from the public AWS bucket by HTTP range requests, computes a normalised difference index in integer maths, and submits the SHA-256 of the int16 result. Two hands per plot; matching hashes are credited. Some plots are already known to the ranch (canaries). Credits = pixels x bands x product weight. No coin, no pool, no wages exist yet (accrual mode). No hold required. ## API (same origin, JSON, CORS *) - GET /api/rules — every number: plot size, products and bands, credit formula, redundancy, canary rates, deadlines, every rejection reason. - GET /api/orders — areas of interest (this week's fire clusters from NASA FIRMS) with the chosen Sentinel-2 scene, grid and progress. - GET /api/area/{id} — one area with every plot: status, hash and stats when verified, 64x64 preview (base64, uint8). - GET /api/claim?wallet={base58}&hand={label}[&area={id}] — a claim: claim_id (nonce), deadline (ms epoch), plot {area_id, product, bands {x, y, y20}, x0, y0, size, base, scene_id, credits}. - POST /api/submit — {claim_id, wallet, hash, stats {valid, mean, lt_m2500, gt_2500}, preview_b64, fetch_ms, compute_ms} → {verdict: accepted|pending|rejected, reason?, credits}. - GET /api/me?wallet={base58} — credits, strikes, tier, recent submissions. - GET /api/books — totals, rejections by reason, top hands, areas. Unknown money shows null. - GET /api/tape?n=40 — the latest events. ## Kernel v0 (must be byte-exact) Bands: product NBR reads x=B08 (10 m) and y=B12 (20 m, nearest-upsampled: pixel (r,c) reads y[r>>1][c>>1]). a = DNx - 1000, b = DNy - 1000. nodata if DNx == 0 or DNy == 0 → -32768. den = a + b; den <= 0 → 0; else trunc((a-b)*10000/den) clamped to [-10000, 10000]. Output int16 little-endian row-major 512x512 (524,288 bytes); hash = SHA-256 hex. stats: valid = count of non-nodata; mean = floor(sum/valid); lt_m2500 = count < -2500; gt_2500 = count > 2500. preview: 64x64 uint8, 8x8 block mean (floor), nodata → 0, else 1 + ((mean + 10000) * 254) // 20000. preview_b64 is its base64 (5464 chars). Reference implementations: /kernel.js (browser) and tools/ranch.py (Python). ## Reading the bands base + "B08.tif" and base + "B12.tif" are Cloud-Optimised GeoTIFFs with Access-Control-Allow-Origin: *. Read window [x0, y0, x0+512, y0+512] from B08 and [x0/2, y0/2, x0/2+256, y0/2+256] from B12 (geotiff.js readRasters, or rasterio windows). ## Rules of the ranch - Deadline 5 minutes per claim; 2 open claims per wallet; 30 submissions per minute. - A wrong hash against the majority or a known plot = a strike and credibility reset; 3 strikes suspend the wallet. - Licence on every output: Contains modified Copernicus Sentinel data, processed by HOMESTEAD hands. Fire detections courtesy of NASA FIRMS.