Skip to content

Explain what Strata does, in plain words and under the hood - #10

Merged
gothicscientist merged 1 commit into
mainfrom
claude/project-thread-60ubx3
Nov 3, 2026
Merged

gothicscientist merged 1 commit into
mainfrom
claude/project-thread-60ubx3

Conversation

@gothicscientist

Copy link
Copy Markdown
Owner

🤖 Generated with Claude Code

https://claude.ai/code/session_01HEuHS4owTqCYiz6PtRUaCN


Follows #8, which is merged. Bharat asked for the landing page to make the project's purpose easy for anyone to follow, and to show its technical depth without leaning on buzzwords.

What changed

How it works: an interactive walkthrough replaces the static four-step list (Upload, Place, Fit, Test).

  • Each step is a small animated scene:
    • Upload: raw genotype rows lined up with the panel, with outcomes "kept", "strand flipped" and "ambiguous, dropped".
    • Place: a sample drops into PCA clusters.
    • Fit: mixture bars fill to 100%.
    • Test: a p-value marker slides onto rejected, marginal or plausible, and a "Not rejected" stamp lands.
  • Steps advance on their own while the section is on screen and stop once someone picks one. Arrow keys move between steps, and "Play again" replays the current scene.
  • A Plain words / Under the hood switch swaps each one-line explanation for what the code actually does. It cites real figures: the 417,935-SNP panel, 2,729 present-day people in the PCA fit, out-of-fold reference scores, the simplex active-set solver, 5 cM block jackknife, and the p = 0.01 and 0.05 thresholds from qpadm/interpret.py.
  • The scenes carry an "Illustration, not real data" label.

Plain meanings for terms: a new Term component, with definitions in lib/glossary.ts, puts a dotted underline under SNP, PCA, admixture, f4, qpAdm, p-value, block jackknife, BP and AADR. Hovering, focusing or tapping one opens a one-sentence plain meaning, kept on screen at phone width. It is used on the landing page and inside both explainers.

How it is built: a wiring diagram of the system.

  • The parts shown are the parser, the encrypted store (AES-256-GCM, a key per dataset, crypto-shredding), the NumPy analysis engine, ADMIXTOOLS 2, the reference library, the report with provenance, and the assistant. The assistant's 14 tools connect through a "summaries only" wire.
  • Moving dashes show which way data flows. Selecting a box lights up its wires and shows one line on what that part does. On phones the diagram switches to a two-column layout.
  • Count-up figures for SNPs compared, ancient people placed and reference populations come from the reference space the API serves. The test count (490+) is static.

Copy: the hero lede now reads "Compare your DNA with thousands of ancient people, then test which ancestry stories the data really supports."

All motion is CSS, apart from the JavaScript count-up, which also respects prefers-reduced-motion.

Screenshots

How it works Under the hood

How it is built

Testing

  • tsc --noEmit and lint are clean, and pnpm test passes 53 of 53.
  • The pnpm test:e2e smoke test passed against a local API on the committed reference build.
  • I clicked through every step on desktop (1440 px) and phone (390 px) with Playwright, with no page or console errors. docs/screenshots/* is regenerated.

Generated by Claude Code

The landing page now walks through the four steps (upload, place, fit,
test) as small animated scenes. A switch swaps each plain sentence for
what the code actually does, with real figures from the pipeline.
Technical terms carry a one-sentence plain meaning on hover or tap.

A new "How it is built" section draws the system as a wiring diagram:
parser, encrypted store, analysis engine, ADMIXTOOLS 2, reference
library, report and the assistant, which only sees summaries. Its
headline numbers (SNPs, projected individuals, populations) come from
the reference space the API serves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HEuHS4owTqCYiz6PtRUaCN
@gothicscientist
gothicscientist merged commit 4363e4d into main Nov 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants