|
| 1 | +# Zaid-gated actions — the path to first revenue |
| 2 | + |
| 3 | +Everything a model **cannot** do for you, consolidated from the ACLED-packaging |
| 4 | +run (2026-07-20). Ordered by leverage. Companion to [`P5-PLAN.md`](./P5-PLAN.md), |
| 5 | +[`MONETIZATION.md`](./MONETIZATION.md), [`PACKAGES.md`](./PACKAGES.md). The |
| 6 | +engineering (tiers, funnel, packages, audit) is done and committed on `main`, |
| 7 | +unpushed — see "Deploy" below. |
| 8 | + |
| 9 | +--- |
| 10 | + |
| 11 | +## 0. Deploy Phase 1 (make the tiers real) — NOW, ~10 min |
| 12 | + |
| 13 | +Local `main` has 6 commits ready (rate limiting, access-request funnel, packages, |
| 14 | +grant refresh, Tier 2 encoding fix, Gaza spec). Run these (verify between each): |
| 15 | + |
| 16 | +``` |
| 17 | +! cd ~/Zlab/palestine-data-backend && git push origin main |
| 18 | +! ssh zaid@100.99.243.75 "bash /opt/stacks/palestine/deploy.sh" |
| 19 | +! curl -sS https://wb-alerts.zaidlab.xyz/health && echo |
| 20 | +! curl -sS -D- -o/dev/null https://wb-alerts.zaidlab.xyz/alerts/latest | grep -i x-ratelimit |
| 21 | +``` |
| 22 | + |
| 23 | +**Set the ntfy topic** so access requests hit your phone (the endpoint stores the |
| 24 | +request either way, but skips the push until this is set). On the databank |
| 25 | +container's env (`/opt/stacks/palestine/docker-compose.override.yml`, the |
| 26 | +`api`/`palestine-data-api` service), add: |
| 27 | + |
| 28 | +``` |
| 29 | +- NTFY_TOPIC=<your-ntfy-topic> |
| 30 | +# optional if self-hosted: - NTFY_URL=https://ntfy.yourhost |
| 31 | +``` |
| 32 | +then `docker compose up -d --force-recreate api`. |
| 33 | + |
| 34 | +**Verify the funnel end-to-end:** |
| 35 | +``` |
| 36 | +! curl -sS -X POST https://api.zaidlab.xyz/api/v1/access-request -H 'Content-Type: application/json' -d '{"email":"you@example.com","org":"self-test","tier":"organization","use_case":"deploy smoke test"}' |
| 37 | +``` |
| 38 | +Expect `{"ok":true,...,"notified":true}` and an ntfy push. Then open |
| 39 | +`https://api.zaidlab.xyz/pricing.html` and submit the form once. |
| 40 | + |
| 41 | +**Watch after deploy:** confirm the public live map (live.zaidlab.xyz) still loads |
| 42 | +— rate limiting is per-visitor (X-Forwarded-For), so it should; if the map 429s, |
| 43 | +cloudflared isn't passing XFF and the anonymous ceiling needs raising in |
| 44 | +`services/westbank-alerts/app/tiers.py`. |
| 45 | + |
| 46 | +--- |
| 47 | + |
| 48 | +## 1. Legal + billing rails — HARD GATES before the first invoice |
| 49 | + |
| 50 | +1. **Licensed-operator registration (مشتغل مرخص)** — REQUIRED before invoicing |
| 51 | + (Decision Log 2026-07-06). Status unconfirmed; this is the true blocker on |
| 52 | + revenue, not engineering. Confirm/complete. |
| 53 | +2. **Paddle KYC test** — open a Paddle account with West Bank details; PASS/FAIL |
| 54 | + is the data point (self-serve card payments depend on it). |
| 55 | +3. **Request Finance** — open an account (crypto-invoicing hedge). |
| 56 | +4. **Bank of Palestine / Arab Bank** — confirm inbound-USD-SWIFT cost + compliance |
| 57 | + questions for service income. |
| 58 | +5. **Revoke the test key** before the first real customer: |
| 59 | + `docker exec palestine-data-api node scripts/manage-keys.js` — revoke |
| 60 | + `pdb_live_5044…d846` (ngo tier, in prod keys.db). |
| 61 | + |
| 62 | +## 2. Grants — highest EV, parallel to sales |
| 63 | + |
| 64 | +1. **Submit the OTF concept note** — `docs/grants/OTF-concept-note.md` is refreshed |
| 65 | + with the current numbers (295k records, published accuracy, enforced tiers). |
| 66 | + Fill the one ⟨FILL⟩ (OSC status), then submit at apply.opentech.fund. |
| 67 | +2. **Register as a Digital Public Good** (digitalpublicgoods.net). |
| 68 | +3. **Open Source Collective fiscal hosting** — apply; ask support explicitly about |
| 69 | + payout to a Palestinian bank before relying on it. |
| 70 | +4. **Meedan IMRF** — send the paste-ready email in `docs/grants/GRANTS-PACK.md`. |
| 71 | + |
| 72 | +## 3. Data pipeline refreshes (Tier 2 audit remediation) |
| 73 | + |
| 74 | +From `analysis/databank-audit-2026-07-20/FINDINGS.md`: |
| 75 | + |
| 76 | +1. **Flush the westbank mojibake** (fix is committed): re-run the West Bank |
| 77 | + shapefile fetch → re-populate → deploy, so served Arabic is clean. |
| 78 | + `npm run fetch:westbank` (or the pipeline equivalent) then the unified rebuild. |
| 79 | +2. **Refresh stale categories:** `settlements` (931d), `aid_access` (549d), |
| 80 | + `pcbs` (564d) most; `health`/`food` moderate. |
| 81 | +3. Optional: decide the annual-bucket date convention (D3) so future-dated |
| 82 | + annual rows stop inflating `date_range.latest`. |
| 83 | + |
| 84 | +## 4. Gaza live — approve the spec + provide inputs |
| 85 | + |
| 86 | +`docs/superpowers/specs/2026-07-20-gaza-live-design.md` is ready for review. To |
| 87 | +unblock the build round, provide (§9): |
| 88 | + |
| 89 | +1. **Gaza Telegram channel list** to whitelist (needs your Telegram account). |
| 90 | +2. Confirm **OCHA / WHO / UNRWA** facility/shelter/zone datasets are fetchable + |
| 91 | + their licenses. |
| 92 | +3. Pick the **evacuation-order source(s)** to trust. |
| 93 | +4. Confirm the v1 scope (casualties + facility-status + evacuation; defer |
| 94 | + aid-convoy/displacement to v2). |
| 95 | + |
| 96 | +## 5. Checkpoint accuracy (in progress) — resident confirmation |
| 97 | + |
| 98 | +Task #33. Batch 1 (top 15 checkpoints by report frequency) was presented and |
| 99 | +awaits your coordinate corrections. Then: apply as `geo_precision: checkpoint`, |
| 100 | +re-seed, continue batches; merge the 4 duplicate pairs; fix the |
| 101 | +`كراميلو الطيبه` coord (~70km off — should be Jericho المعرجات, not Jenin lat). |
| 102 | + |
| 103 | +## 6. Outreach — the funnel bottleneck ("Zaid sending, not systems") |
| 104 | + |
| 105 | +Once §0–1 are done, send **10 targeted emails** (not mass) using the sell sheets |
| 106 | +in `docs/sell-sheets/`: |
| 107 | + |
| 108 | +- **Newsroom** (`newsroom.md`) → a data-journalism desk covering Palestine. |
| 109 | +- **University lab** (`university-lab.md`) → a conflict-quantification / MENA lab. |
| 110 | +- **Risk-intel** (`risk-intel.md`) → a regional risk shop (lead with the live |
| 111 | + webhook demo — 245 checkpoints is the thing they can't buy elsewhere). |
| 112 | + |
| 113 | +First 3 customers: founding-org $99/mo locked 12 months for a named testimonial. |
| 114 | +Log each: `pitch | pdb <org>`. |
0 commit comments