← ALL WORK
WRK//0012025 to now
Kynos.
A detection platform that scores conversations for grooming risk and seals every result into a cryptographically verifiable evidence chain.
ROLE
Sole engineer, all seven codebases
STATUS
v1 live, pre-launch
FOR
Platforms, schools, and youth-serving organizations
YEAR
2025 to now
The problem.
When abuse happens in an online conversation, a screenshot is not evidence. It can be edited, it has no chain of custody, and it falls apart under legal scrutiny. Detection tools exist, but their output usually cannot survive a courtroom.
Kynos is my answer to both halves of that problem: detect grooming patterns in conversations with a purpose-trained language model, and make every scored message independently verifiable years later.
What I built.
- A Rust API that seals every scored message into an append-only SHA-256 hash chain. A database trigger physically blocks updates and deletes on evidence rows. Exports are signed with Ed25519 and carry RFC 3161 trusted timestamps from an independent authority.
- The export is a self-contained bundle a forensic examiner can verify offline with nothing but openssl, jq, and python3. No Kynos account required, no trust in me required. That is the point.
- The detection side is a Longformer transformer fine-tuned in two stages on roughly 580,000 records, chosen for its 4,096-token context so it reads a whole conversation arc instead of a snippet. It runs alongside 14 deterministic behavioral features that can be reproduced by hand in front of a judge.
- A locally-hosted 14B LLM writes structured forensic reports under a constrained grammar, with every quoted message validated verbatim against the transcript so it cannot invent evidence.
- Customer and admin dashboards in React 19, and the evaluation pipeline treats the model like it will be cross-examined: locked test splits, calibration held separate from training, fairness checks per cohort, and regression tests pinning every data-leakage bug I found and fixed.
Engineering notes.
- 694 automated tests across the Rust API and the ML pipeline, with integration tests running against a real migrated Postgres instance
- Versioned hash encoding: when I found a field-boundary weakness in v1, v2 length-prefixed every field while old rows still verify under v1
- Constant-time API key auth, TOTP two-factor, HMAC-signed webhooks with replay protection, and an IP allowlist between services
- 36 database migrations, structured JSON logging, Prometheus metrics
- Every stored score records the exact model, config hash, and git build that produced it, so results stay attributable after the fact




NEXT // WRK//002
Zenith Kids Platform