{"products":[{"slug":"cogsend","name":"CogSend","url":"https://cogsend.khursani.dev","description":"Self-hosted social scheduler (MIT, deepakness/cogsend) on the twin Cloudflare free tier: the campaign posting rail - semak incidents and campaign news become drafts with the semak link, published to connected Mastodon/Bluesky/LinkedIn/Threads/X; D1 storage with a monthly rolling archive to a private GitHub repo.","status":"live","deployed_at":"2026-09-23"},{"slug":"semak","name":"Semak","url":"https://semak.khursani.dev","description":"Malaysian social incident tracker: reddit (operator cookies) + trends24 ingest, claude -p subagent review pass that filters/clusters/dedupes into schema-validated incidents, D1 state with per-incident source provenance; board, social-login vouch voting, OG share cards and source provenance live; sitemap.xml + robots.txt served and og meta audited on board and share pages, listed in the directory portfolio (s19). s51: edgeKey store bridge link on board and share-page footers (buyer-journey friction fix). s69: voter-contributed evidence on incident pages — signed-in visitors attach source URLs (OG link cards, server-fetched, KV-cached 7d, plain-link fallback) and photos (R2, 5MB cap, EXIF/app-metadata stripped byte-level at upload), public on every incident, auth + 10/hour rate limit, SSRF-guarded. s70: Google News MY cross-reference - matched articles persist as platform='news' provenance rows, corroborated merges keep the confidence bump, and board cards + share pages render a distinct news coverage group. s71: news cross-reference scoped to Malaysia — an article qualifies only with a Malaysian outlet or a distinctive shared word, and the J&K off-region row was removed from prod provenance. s72: durable evidence copies for news provenance, Wayback Machine archive links render beside live news links on incident pages, private R2 proof snapshots keep provenance recoverable when links rot. s96: /leaderboard + public /u/<id> profiles with view-time scoring (+5+2-2+1+3 rules card), formula card on both surfaces. s97: renderProfile D1 binding fix deployed ab054188, real-user profiles 200, sampled score recomputes from D1 rows, zero emails on profile and leaderboard HTML. s98: scoring guards live (cap 20 nominal positive points per UTC day before weight, penalties uncapped; half weight 0.5 for sub-7-day or unvouched accounts floored after multiply; delayed vote reward materializes at settlement) rendered next to the five rules, GET /api/score-health with distribution + top-1 concentration + abuse flags. s99: first race season — judge (routes.judge) adopted w1's build (race/s99-w1@47812d8, tests-only diff, suite 19/19), close-out deployed 1690dacc: /leaderboard + /u/<id> + /i/<slug> + /api/score-health + / + /api/aqi + /status all 200, settlement badges on profiles, zero email. s112: /banjir flood tracker live — haze-pattern clone, per-state filter (?state=), sitemap entry, monsoon probe tools/monsoon_probe.py (first reading 2/104 keyword matches, honest pre-season count), official links publicinfobanjir.water.gov.my + met.gov.my checked 200 (s112 a2). s125: site-wide Board·Trackers shared nav from the astra max review, /trackers index, /pps to /banjir#pps and /faq to /haze/faq 308 redirects.","status":"live","deployed_at":"2026-09-23"},{"slug":"minvoice","name":"Minvoice","url":"https://minvoice.khursani.dev","description":"Single-business invoicing on Workers + D1: PDF invoices, pay links, optional Stripe/PayPal; fully functional with payments off. Automatic late fees live (s30): per-invoice rate + grace terms, fee computed at view time on PDF/print/detail/reminder so the demand escalates until paid. Dunning schedule live (s43): reminder touchpoints day -3/0/+7/+14 with escalation levels 1-4 rendered on pay page, print, and PDF, computed at view time from the due date; 182/182 tests, live-PDF verified. Dunning admin live (s44): per-client dunning toggle (clients.dunning_enabled, default on) shown as a clients-list badge and client-form checkbox, plus a computed-at-view-time dunning schedule preview card on the admin invoice detail; the daily reminder cron skips opted-out clients; 187/187 tests, typecheck clean, deployed ebaac073. Hosted tier sold on the edgeKey store. Invoice-reliability case study (n8n silent breakage + the 134-up empty-threat thread) at sites.khursani.dev/portfolio/minvoice/reliability/, late-fee section added s31. Public MyInvois readiness checker live (s101): no-account /myinvois checker (phase, gap report, official LHDN links, client-side logic) + landing launch section; 209/209 tests; deploy 054797b6. Overdue dunning queue live (s113): /admin/dunning overdue queue with per-invoice editable reminder text, copy/download user-controlled output (no email, nothing sent automatically), and overdue-only CSV export; 212/212 tests, deploy 0e714f96.","status":"live","deployed_at":"2026-09-22"},{"slug":"vault","name":"Vault","url":"https://vault.sani.workers.dev","description":"MyInvois relief vault: consumer-side tracker where an individual collects supplier e-invoices ahead of tax relief claims — anonymous cookie-scoped vault (no accounts, no OCR), manual per-supplier/per-document entry with pending -> asked -> received status flow, CSV export for filing season, Turnstile widget on the public forms, official LHDN/MyInvois rule text (timeline phases, RM3,000,000 exemption, General FAQs Q31/Q32/Q111) rendered only from pages fetched this run with source URLs cited in the UI and pinned by tests. Workers + free-tier D1 (vault-db), workers.dev only. Self-host kit listed on the edgeKey store. s85.","status":"live","deployed_at":"2026-09-20"},{"slug":"dispatch","name":"Dispatch","url":"https://dispatch.khursani.dev","description":"The twin newsletter: subscribe flow persisting to D1 behind a Turnstile gate, web archive and RSS feed; fork of LetterDrop (MIT). Issue one written from the campaign ledger (s20/a2). Subscribers also arrive from the edgeKey order page one-click offer (s37). Issue five, scan and pay, published (s48): duitnow qr payments live on the store with zero fees; live on archive and rss. s56: sitemap.xml (root, archive, all five issues) served and linked from robots.txt, submitted through IndexNow. s58: subscribe confirmation page /subscribed serves confirmation state, archive link and share buttons; the form redirects there on success, flow verified end to end (deploy b91e6ba7). s61: visitor memory on the archive - the seen-marker drives a divider between seen and new issues (deploy 6e386c12).","status":"live","deployed_at":"2026-09-19"},{"slug":"synch","name":"Synch","url":"https://synch.khursani.dev","description":"E2EE notes sync for Obsidian (Synch Cloud alternative): encrypted blobs on R2, accounts and sync metadata on D1, realtime via Durable Object. Season s14 deploy of hjinco/synch (MIT); signup locked to operator email. s44: generic OIDC SSO with admin API (/admin/v1/auth/sso, ADMIN_TOKEN bearer) saving provider config to app_config, conditional sign-in button, env fallback (SSO_* vars), verified against public test IdP demo.duendesoftware.com. s56: root serves a documented 302 redirect to /signin (www app stays undeployed), closing the s32-era root-404 gap.","status":"live","deployed_at":"2026-09-19"},{"slug":"edgekey","name":"edgeKey","url":"https://edgekey.khursani.dev","description":"Digital-goods license-key storefront: sell keys and digital products with D1 + 5-min cron order processing. Post-purchase dispatch newsletter offer on the order page (s37): one-click subscribe with the buyer email prefilled persists straight to the dispatch D1. s46: buyer-facing checkout errors localized to English (order/payment/discount services + provider names) and the full buyer funnel audited end to end with curl evidence. s48: store footer links the trust page (semak trust.html) next to powered-by; deploy 528e8ae9. s52: order-first DuitNow checkout (TnG receipt id optional at order time, attachable on the order page) and the payUrl !undefined wire leak fixed.","status":"live","deployed_at":"2026-09-19"},{"slug":"counterscale","name":"Counterscale","url":"https://counterscale.khursani.dev","description":"Privacy-first web analytics, self-hosted on Cloudflare Analytics Engine. Tracks the twin's own properties first.","status":"live","deployed_at":"2026-09-18"},{"slug":"formzero","name":"FormZero","url":"https://formzero.khursani.dev","description":"Hosted form backend: point any HTML form at it, submissions land in D1 with a dashboard to read them.","status":"live","deployed_at":"2026-09-18"},{"slug":"punctual","name":"Punctual","url":"https://punctual.khursani.dev","description":"Hosted booking pages: share one link, take bookings. Edge-rendered scheduling on Workers + D1 + KV + R2 with buffers, teams, reminders and a built-in MCP server. Season s13 deploy of CCCrafts/punctual (MIT), headline polished s103.","status":"live","deployed_at":"2026-09-18"},{"slug":"twin-console","name":"Twin Console","url":"https://twin.khursani.dev","description":"Operator console: live campaign kanban, seasons, and chat with the digital twin.","status":"internal","deployed_at":"2026-09-18"},{"slug":"sites","name":"Twin Directory","url":"https://sites.khursani.dev","description":"This directory: every product the twin ships, updated automatically from the campaign registry. s52: portfolio case-study cards link each product's live URL directly (buyer-journey hop fix).","status":"live","deployed_at":"2026-09-18"},{"slug":"temp-email","name":"Twin Temp Mail","url":"https://tempmail.khursani.dev","description":"Own-domain temp inbox (cloudflare_temp_email, MIT) on Workers + D1: receive-only @khursani.dev via Email Routing catch-all, signup behind a captcha gate with a hard two-account cap, outbound sending disabled. Captcha enforcement live on interim CF test keys pending operator Turnstile token (s17/a2).","status":"live","deployed_at":"2026-09-18"},{"slug":"uptimeflare","name":"UptimeFlare","url":"https://uptimeflare-1a5.pages.dev","description":"Uptime monitor + public status page watching every twin product (11 monitors: edgeKey, Counterscale, FormZero, minvoice, directory, console, semak, temp mail, synch, punctual, dispatch); 1-min cron checks via uf-relay, D1 history, ntfy downtime alerts. Public status URL pending operator DNS: status.khursani.dev has no record yet; live at uptimeflare-1a5.pages.dev (s26).","status":"live","deployed_at":"2026-09-18"}]}