diff --git a/docs/design/journal/BRIEF.md b/docs/design/journal/BRIEF.md new file mode 100644 index 00000000..53b54329 --- /dev/null +++ b/docs/design/journal/BRIEF.md @@ -0,0 +1,319 @@ +# OwnGenome live site: design brief + +Every designer works from this file and from `dataset.json` beside it. Four directions will show the same people and the same findings, so they can be compared on design alone. + +The owner's verdict on today's site is that the UI and the UX are both bad. You should be able to see each family run and each person, with a report per person that you read on the page (not a PDF), and every result we found should be easy to see. He wants each page to look inventive and professional. + +## 0. Hard rules + +- **Dark theme only.** Screenshots use `colorScheme: 'dark'`. +- **Synthetic data only.** Use `dataset.json`: the Ruiz family (Elena, Marc, their daughter Lía, and Carmen, who is in the pedigree but not sequenced) plus a benchmark run of the public GIAB sample HG002. Never use or look for a real person's genome. +- **Static, self-contained HTML.** HTML, CSS and a little vanilla JS per screen. No CDN, no web-font downloads, no build step. +- **System fonts only.** + - Display and headings: `ui-serif, "New York", "Iowan Old Style", Palatino, Georgia, serif`. The wordmark stays serif. + - UI text: `system-ui, -apple-system, "Segoe UI", sans-serif`, with `font-variant-numeric: tabular-nums` on table columns and axis ticks. + - Variant ids, HGVS and coordinates: `ui-monospace, "SF Mono", Menlo, monospace`. + - Charts, numbers and figures stay in the sans. (The dataviz guidance says "no serif anywhere". The owner wants a serif for headings, so the serif goes in page headings only, never inside a chart.) +- **Screenshots.** Playwright, headless Chromium. Desktop is 1440x900 with `fullPage: true`. Mobile is 390x844 at `deviceScaleFactor: 2`. Name files `NN-screen.png`. +- **The site's own honesty rules stay** (`docs/live-site.md`; they are tested in `tests/test_live_results.py`): + - **Never an all-clear.** No page says "normal", "fine", "healthy" or "nothing found" about a person's health. An empty section reads *"No finding in what this step assessed"*, followed by its caveat and what it does not see. + - **APOE stays behind a gate** that the person opens on purpose. + - **Polygenic scores show only with an ancestry-matched percentile.** + - **Every card carries its caveat.** Its first sentence is visible, and the rest sits behind a toggle. + - **A newer database release** shows on the cards it would change. + - **A step that failed, was skipped or has not run** says so. It is never left blank. + +## 1. Data inventory + +The site has to show the result families below. The report already groups them into seven chapters, each named by a question (`bin/render_report.py` CHAPTERS). The tables keep that grouping. In each table: + +- **One result** lists the fields a single result carries. +- **Read it as** is the plain-language way to read it. +- **Levels** uses the shared scale defined in section 4.3: *act, medicine, review, carrier, info, trust*. + +### 1.1 Quality: "Can I trust this data?" + +| Result | One result | Read it as | Levels | Caveats | +|---|---|---|---|---| +| Coverage (16b mosdepth) | mean depth, % of genome at 10x or more | about 30x is what was paid for; below 15x, small-variant calls lose accuracy | trust: ok, or warn below 15x | none | +| Sex check (16 indexcov, 33 somalier) | declared sex, sex from reads, chrX/chrY copy numbers | a mismatch means a swapped or mislabelled sample, or a real sex-chromosome difference; read nothing else until it is resolved | trust: ok / **stop** | none | +| Contamination (33 VerifyBamID2) | FREEMIX | above 0.03, someone else's DNA is mixed in | trust: ok / warn | none | +| Variant calling (03) | PASS variants (4.5 to 5.5 M), Ti/Tv (2.0 to 2.1) | a sanity check | trust | none | +| Callability (16b) | genes below 90% at 10x MAPQ 20, each with its %; genes "not on this reference" | **a "no finding" in these genes says nothing** | trust: warn list | SMN1, CYP21A2, PMS2, HBA, GSTT1 and others | +| Run health (live) | RAM, disk, retries, memory kills, database re-check | this describes the machine, not the person | trust | none | +| MultiQC (28) | a link out | expert only | none | none | + +### 1.2 Clinical: "Is there anything to take to a doctor?" + +| Result | One result | Read it as | Levels | Caveats | +|---|---|---|---|---| +| ClinVar screen (06) | gene, chrom:pos ref>alt, genotype (het/hom), CLNSIG (P/LP), review stars 0-4, gnomAD AF, ClinVar id, condition | 0-10 hits is typical. Most are recessive carriers. **Dominant gene, or two hits in a recessive gene = attention.** 2+ stars are more reliable | act / carrier / info | A frequency above 1% in gnomAD is unlikely to be high-penetrance. An unknown frequency has not been checked. Newer ClinVar may change the list | +| Secondary findings (23, ACMG SF v3.3, 84 genes) | gene, variant, the gene's reporting rule (dominant, two-hit recessive, HFE homozygous C282Y only, X-linked), TTN and LMNA notes | an unrequested but possibly serious, actionable finding (heart, cancer, cholesterol, metabolic) | act | one heterozygous MUTYH is listed apart as not reported | +| Cancer predisposition (17 CPSR) | per variant: tier/ACMG class (P, LP, VUS, LB, B), gene, consequence, evidence codes; counts per class | only P/LP need attention; **VUS = treat as not tested** | act (P/LP); VUS shown as counts only | the CPSR bundle's ClinVar release | +| Clinical filter (23) | about 300 rows: gene, impact (HIGH/MOD/LOW), CADD, REVEL, AlphaMissense, SpliceAI, LOEUF | expert worklist; read constrained genes and homozygous rows first | info (expert) | "a list to review with a clinician" | +| Variant prioritisation (31 slivar) | 4 groups; compound-het pairs with phase (trans/cis/unknown) | expert; most pairs are noise | info | phase is mostly unknown | +| Symptom ranking (48 Exomiser, opt-in) | top 10: rank, gene, score, mode of inheritance, variants, ACMG class; the HPO terms used | a ranking to take to a geneticist | review | not a diagnosis; an empty list rules nothing out | +| Structural variants (04/15/18/19/22/05) | type (DEL, DUP, INV, BND, INS), position, length, genotype, supporting callers, duphold DHFFC/DHBFC, AnnotSV class 1-5, genes, CDS overlap %, gnomAD-SV AF; counts per caller | 5-10k SVs is normal. **Only class 4-5 in a disease gene matters.** Single-caller BND calls are mostly artefacts | act (class 4-5) / info | short reads miss insertions and inversions | +| Mobile elements (50, opt-in) | 3 catalogued sites (FKTN, TAF1, BBS1): seen / not seen / not callable; about 1,200 Alu/L1/SVA calls | "not seen" is not proof of absence | carrier / review | none | +| Repeat expansions (09/09b) | locus, gene, two allele counts with 95% CI, Stranger status (normal, pre_mutation, full_mutation), normal max, pathogenic min, sized or flanking-only | HTT, FMR1, C9orf72, DMPK and ATXN1 first. **Intermediate = no disease, may expand in children. Full mutation = see a clinical geneticist.** An unsized locus is never shown as normal | act (full) / review (pre or intermediate) / info | short-read sizing fails on long expansions; C9orf72 thresholds vary between labs | +| MUC1 VNTR (52, opt-in) | positive / possible / negative / not assessed, sensitivity at this depth | ADTKD-MUC1, a kidney disease | act (positive) / review (possible) | needs confirmation (SNaPshot) | +| Mito variants (20) | site, allele fraction (heteroplasmy), ClinVar class, gnomAD AF; poly-C length variants listed apart | above 95% = haplogroup marker; 10-95% = look it up; m.3243A>G or m.8344A>G = specialist | act / review / info | blood under-represents heteroplasmy in other tissues | +| Lp(a) (46, opt-in, plus 42) | KIV-2 copies with 95% CI, rs10455872, rs3798220, flag "genetically high Lp(a)" | fewer copies mean higher Lp(a); **get one blood Lp(a) measurement** | review | a research estimate | +| CHIP (49, opt-in) | gene, protein change, VAF, alt reads/depth, class; per-gene detection-limit VAF | an acquired blood clone; common with age; most people with it never get a blood cancer | review / info | at 30x only VAF ≥ about 10-14% is visible, so a clean result does not rule CHIP out | +| Mosaic loss of Y/X (33) | % of cells with 95% range | becomes common with age | review / info | none | +| Mosaic chromosomal alterations (51 MoChA, opt-in) | chrom, start-end, Mb, arm, type (loss, gain, CN-LOH), cell fraction, reported y/n with reason | large changes carried by a share of the blood cells | review | detection floor in cell fraction | +| Somatic (29, experimental) | tumour-only Mutect2 calls | expert only; mostly germline false positives | info (expert) | highest false-positive rate in the pipeline | +| Viral (47, opt-in) | per virus: reads, % of the genome covered, depth relative to human; **integrated HHV-6** yes/no | iciHHV-6 makes a blood HHV-6 PCR read high. **Not a test for infection** | review (iciHHV-6) / info | reagent contamination | + +### 1.3 Carrier: "What could I pass on to a child?" + +| Result | One result | Read it as | Levels | Caveats | +|---|---|---|---|---| +| Carrier list (06 x 3,292 genes) | gene, variant, het, stars, condition, inheritance (AR/XL); hypomorph and pseudodeficiency alleles set aside | **carrier ≠ disease**; matters when the partner carries the same gene | carrier | "two hits across callers": a deletion plus a variant gives *biallelic* or *possibly biallelic* (then act) | +| Couple screen (39) | per gene: result (shared / x_linked / one_partner), offspring risk (1 in 4, 1 in 2), each partner's finding, condition, lists (ACMG/ACOG/Orphanet), explanation; read-depth alleles (GJB6, CFTRdele2,3, HBB, AZF); SMN1 copies; "does not see" list | **shared = 1 in 4 per pregnancy** | carrier (shared is the headline) | a screen, not a diagnosis; a list of what it misses | +| SMN1/SMN2, paralogs (35, opt-in) | agCN, psCN, quality, PASS; HBA copy count; CYP21A2 deletion/conversion | 1 SMN1 copy = SMA carrier; 2 copies does not rule it out | carrier | trust only quality ≥ 20 + PASS | + +### 1.4 Medicines: "How might I respond to medicines?" + +| Result | One result | Read it as | Levels | Caveats | +|---|---|---|---|---| +| PharmCAT (07) + CPIC (27) | gene, diplotype, phenotype (Normal, Intermediate, Poor, Rapid, Ultrarapid; Decreased function), status (normal, non-normal, ambiguous, not called, unclassified), phenoconversion; per drug: CPIC recommendation, strength, guideline | **one row per drug you might take** is what a person needs; share with the prescriber | medicine | "not called" ≠ normal; confirm before a prescription changes | +| CYP2D6 consensus (21/32/36) | pypgx vs Cyrius diplotypes, depth check, what was passed on (or `indeterminate`) | drug guidance only when two callers agree | medicine | the hard gene | +| HLA (08) | 2 alleles per gene; drug alleles present/absent (B\*57:01 abacavir, B\*58:01 allopurinol, B\*15:02/A\*31:01 carbamazepine); disease alleles (B\*27, C\*06:02); coeliac DQ2.5/2.2/8 with cis/trans | information about alleles; carrying one does not mean the reaction or the disease will happen | medicine (drug allele present) / review / info | approximate typing; not for transplant | +| Locityper (53, opt-in) | second opinion at HLA-DRB1, DQB1, KIR, CYP2D6, FCGR | shown **beside** the owner step's call, never instead of it | expert | none | + +### 1.5 Ancestry: "Where do my ancestors come from?" + +| Result | One result | Read it as | Caveats | +|---|---|---|---| +| Ancestry projection (26) | nearest panel population, PCA position | similarity, not a label | none | +| Fine ancestry (26b, opt-in) | continental (5) and regional (17) fractions with bootstrap low-high; chromosome painting (2 haplotypes x 22 chromosomes) | fractions with error bars | Oceania is not in the panel | +| mt haplogroup (12) | haplogroup, quality, contamination check (haplocheck) | the maternal line | population associations only | +| Y haplogroup (37, 45) | haplogroup, YFull terminal branch, path, private SNPs, Y-STR | the paternal line (males only) | none | +| Archaic (43, opt-in) | Neanderthal % and Denisovan %, segment count, 10 longest with genes | about 2% Neanderthal is typical outside Africa | none | +| Ancient (44, opt-in) | 20 nearest ancient groups with date, place and n; PCA with "you" marked | closeness is not descent | groups with n of 1-2 are noisy | +| ROH (11) | segments ≥ 5 Mb, total Mb, per chromosome; UPD flag | ~45 Mb second cousins, ~180 Mb first cousins | centromere artefacts | + +All ancestry results are level **info**. + +### 1.6 Traits and scores: "What do studies say about my traits and risk scores?" + +| Result | One result | Read it as | Caveats | +|---|---|---|---| +| Traits (42) | trait, gene, rsid, genotype, plain reading, PMIDs; rules (APOE, TAS2R38, APOL1, SERPINA1 Pi, HFE, GC, 9p21, 17q21.31) | fun plus a few health-adjacent rows (APOL1, Pi\*Z, HFE) | APOE behind a gate | +| PRS (25) | condition, PGS id, percentile, ancestry group, matched %, applies-to sex | **a percentile is not a probability**; scores are not comparable with each other | hidden without the ancestry panel ("raw score only") | +| Blood groups (41, opt-in) | per system: phenotype, genotype, confidence, note (rare high-prevalence antigen missing goes first) | a prediction, not a serological typing | none | +| Telomere (10) | tel_content (relative) | compare only within one platform; **not biological age** | no normal range: show no healthy band | + +All of these are level **info**. One exception: an APOL1 high-risk genotype, homozygous Pi\*ZZ or homozygous HFE C282Y is **review**. + +### 1.7 Family (step 38, opt-in), on the family page + +| Result | One result | Read it as | +|---|---|---| +| Relationship check | pair, declared, expected, measured relatedness, opposite homozygotes %, sites, verdict | **trust:** a disagreement stops the family analysis (sample swap) | +| Shared segments (hap-ibd) | pair, stretches, shared cM, IBD2 cM, longest, fraction, degree | confirms degree; finds distant cousins | +| Chromosome map | per child: segments from each parent (and grandparent when sequenced), crossovers, discordant sites | "which half of the genome came from whom" | +| Inheritance of findings | per finding in a parent: did the child inherit it (from `_inheritance.tsv`) | **"what did my child inherit?"** | +| De novo | chrom/pos, child genotype, allele balance, GQ/DP of the three, pass/low, gene | most are genotype errors | +| Compound het | gene, the 2 variants, in trans / in cis / unknown | in trans in a fitting gene = review | +| Couple screen | see 1.3 | none | +| Plan | analysis, members, runs/skipped/waiting, reason | turn it into plain language, never step numbers | + +Other and exports: the raw-data export (40, 23andMe-format file), the HTML report, the CPSR/PharmCAT/MultiQC reports, and the genome viewer (igv.js) at any position ("See the reads"). + +## 2. What people want to know, ranked + +### A person opening their own genome + +1. **"Is there anything serious?"** Count and name the *act* findings first, in words, with the condition and not only the gene. Today the ClinVar card says "hits: 3" and shows gene, position and stars, but **never the condition name**. +2. **"What do I do about it?"** One sentence per finding (see a genetic counsellor; confirm with a clinical test; ask for a blood Lp(a) test; tell your prescriber), plus who else in the family it concerns. +3. **"Which medicines should I watch out for?"** A drug list (drug, what to do, strength), not a gene table. It should be printable and easy to show a pharmacist on a phone. +4. **"What could I pass on, and what did my child inherit?"** The carrier list, the couple's shared risk with the 1-in-4 maths, and per child which findings came from whom. +5. **"Can I trust this?"** One line: data quality ok, identity confirmed, no contamination, plus what this genome could not read. +6. **"What is just interesting?"** Ancestry, haplogroups, Neanderthal %, traits, blood group, scores. +7. **"Is the run done, and is it healthy?"** Progress, an ETA, what failed and whether that matters. +8. **"What did it not look at?"** The "leaves out" list, so silence is never read as an all-clear. + +### An expert (the owner, a clinician, a bioinformatician) + +1. Per finding: the evidence (ClinVar stars and review status, gnomAD AF, ACMG codes, predictors), the reads (depth, allele balance, GQ, a link to the viewer), and the callers that agree. +2. QC detail: coverage distribution, callability per gene, somalier/FREEMIX, Ti/Tv, the depth needed per opt-in step. +3. Provenance: database releases used and newer ones available, tool versions, step state, retries, files. +4. Raw tables: every row sortable and searchable (the clinical filter's ~300 rows, all SVs, all STR loci, the slivar pairs). +5. Family: relatedness numbers, phase basis, de novo metrics, segment tables. + +The layout follows from this: **the layperson's answer is the page, and the expert's evidence opens from it** (a disclosure, a side panel or a detail page). Experts are never sent to another page. + +## 3. Today's site, and its problems + +Screenshots (dark, captured from the demo replay, which holds one person and a two-member family): + +- `current-01-home.png`: the home page +- `current-02-person.png`: a person, "Look first" tab +- `current-03-person-doctor.png`: a person, "Doctor" tab (6,433 px tall) +- `current-04-person-progress.png`: Progress +- `current-05-family.png`: the family page +- `current-06-person-mobile.png`: a person on a phone + +### Hierarchy + +- Every card has the same weight. The Doctor tab stacks 14 identical cards over 6,400 px. A pathogenic ClinVar hit and "Mosaic chromosomal alterations: none" look alike, with only a thin amber left border to tell them apart. +- **"Look first" lists the viral card as "worth a look" because its headline says "no integrated HHV-6".** The flag fires on a negative result, so the one curated list mixes signal with noise. +- The page top spends its space on a 54-cell progress strip and the sample id, even after the run has finished. Nothing there says what was found. +- Headlines are counts, not meanings: "Pathogenic/Likely Pathogenic hits: 3." The conditions (what each gene does to a person) appear nowhere on the person page. + +### Density and jargon + +- Stat grids carry labels like "Low-confidence calls (GQ below 30 or DP below 10), not counted", "By review stars (4/3/2/1/0): 0 / 0 / 2 / 1 / 0", "P/LP", "agCN", "Class 4-5 SVs", "F_ROH: 0.0000". +- Empty values show as `.`, `unknown` or `not checked` in table cells (ClinVar "Call" column, "gnomAD AF unknown" on every row). +- Each card's caveat sits in small grey text with a "Full caveat" toggle. The same "newer ClinVar available" chip repeats on many cards. +- Progress's "Found so far" repeats "finished, see the report" about 40 times. The ROH line is a 60-word paragraph. + +### Navigation + +- The tab names (Trust, Doctor, Child, Medicines, Ancestors, Traits, Other) are terse and only partly match the report's own questions. Tabs without findings look identical to tabs with them; only three carry a badge. +- On mobile the tabs scroll off-screen ("Me…" is cut) and the first screen shows two links and nothing else. +- Home is a near-empty page: one family header, two small cards, about 80% black space. People are shown as sample ids (DEMO-001), not names, and no card summarises what was found. +- To get from the family page to "what did the child inherit", or from a carrier finding to the couple screen, you have to go through tabs by hand. Findings never cross-link. + +### Empty and odd states + +- The search box is disabled: "Search arrives with the report". +- The family page says "2 of 2 sequenced" while showing DEMO-002 as "No run on this server" (dashed), yet it prints DEMO-002's carrier data. +- Empty states are written in pipeline terms: "Analyses: none planned yet (step 38 writes family_plan.tsv).", "Not run yet (step 38).", "The pedigree names no child." +- The couple screen table says "none shared" under "Chance for a child" and `.` for a partner without a finding. Its "Why" column is a 50-word paragraph per row. +- The step map is clipped inside its scroll box. Run health is four similar warning boxes. + +### Visual + +- Generic dashboard cards on one blue-grey (#14181f/#1d232d) with a blue link colour, so there is no brand. The serif appears only in the wordmark and two headings. +- Data is almost never visualised. There is one chromosome dot chart, and STRs, PRS, PGx, ancestry and pedigree are all tables or text. + +## 4. Proposal + +### 4.1 Pages: what each must answer + +1. **Home: people and runs** (`/`). *Who is here, what is going on, and does anyone have something to act on?* + - Families as units: a pedigree thumbnail, then the members as person tiles with name, role, age, run state, and per-level counts (act, medicine, review, carrier). + - Runs in progress show live progress and an ETA. The unsequenced relative (Carmen) is shown, but quietly. + - The benchmark run (HG002) is listed apart. + - A "needs attention" strip across all people: "Elena: 1 finding to take to a doctor." + +2. **Live run** (`/runs/HG002-BENCH/` while running). *Is it moving, when will it end, is anything wrong, and what has it found so far?* + - Steps done out of planned, elapsed time, ETA, what runs now (CPU and memory per task), a step graph or timeline, events, machine health, and "found so far" in plain words. + - A finished run turns this page into the report and keeps Progress as a secondary view. + +3. **Person report** (`/runs/RUIZ-ELENA/`). *The report as a page.* + - Order: a summary (who, the trust line, a count by level), then **To act on**, **Medicines**, **For your family**, then **Explore** (ancestry, traits, scores, all sections). + - Each finding is a readable block: what it is, what it means, what to do, who else it concerns, its caveat, and evidence on demand. + - "No finding in what was assessed" sections collapse into one compact list that still names each section and its caveat. + - Shows the leaves-out list, the database freshness, and the files and report links. + +4. **Finding detail** (`/runs/RUIZ-ELENA/#f/F01`, a page or a side panel). *Everything about one result.* + - The plain explanation, the evidence (classification, stars, review, gnomAD, predictors), reads (depth, allele balance, GQ, viewer link), inheritance in the family, related findings (BRCA2 links to tamoxifen/CYP2D6 and the PRS), the caveat in full, and sources. + +5. **Family** (`/runs/RUIZ-FAMILY/`). *How are we related, what does each child carry from whom, and what does it mean for future children?* + - A large pedigree with per-person finding markers. + - The couple screen headline (shared CFTR, 1 in 4) with the risk drawn as a 2x2 grid of outcomes. + - Lía's inheritance of findings: a table with parent colours. + - The chromosome map (two rows per chromosome, coloured by parent). + - Relationship checks (measured against expected), de novo, compound het, the plan in plain words, and what the screen does not see. + +6. **Mobile person** (390 wide). *The same report, one column.* + - A sticky summary, findings as stacked blocks, and the medicines list easy to show a pharmacist. + - The section nav becomes a bottom sheet or a segmented control, not a sideways-scrolling tab row. + +### 4.2 Shared dataset + +`dataset.json` holds everything: + +| Section | What it holds | +|---|---| +| `people` | 5 entries: Elena (38, F), Marc (41, M), Lía (6, F, a minor), Carmen (not sequenced), HG002 (public reference) | +| `runs` | three finished runs (Marc's has one failed opt-in step, 52 MUC1, at too low a depth), the family run with its plan, and HG002 running (31/54, 4 tasks live, events, found so far, machine health) | +| `families[0]` | relationships, shared segments, the couple screen (CFTR shared; PAH, HFE one partner; the FMR1 context row; read-depth alleles; SMN1; the does-not-see list), and the trio (inheritance of findings, de novo, compound het, chromosome-map counts and a chr7 example) | +| `findings` | 28 findings with `level`, `chapter`, `section`, plain-language `what_it_means`, `what_to_do`, `caveat` and the evidence fields | +| `person_panels` | STR loci, ROH, telomere, archaic, traits, blood, PRS lists, mosaic and viral, for the "Explore" parts | + +The findings by level: + +| Level | Count | Findings | +|---|---|---| +| act | 1 | Elena BRCA2 | +| medicine | 4 | Elena CYP2D6 IM; Marc CYP2C19 PM; Marc SLCO1B1; Lía CYP2C19 IM | +| review | 4 | Elena FMR1 intermediate; Lía FMR1 intermediate; Marc high Lp(a); Marc HLA-B\*27 | +| carrier | 6 | CFTR x3 (Elena, Marc, Lía, whose copy is inherited from Elena); PAH; HFE; the couple CFTR row | +| info | 10 | including APOE, which is gated | +| trust | 3 | none | + +The stories the data is built to tell. Every direction must make each of them readable within a few seconds: + +- **Elena has one finding to act on (BRCA2).** It links to her CYP2D6 result (tamoxifen) and to "Lía did not inherit it". That last line is an adult-onset finding about a minor, so put it behind an explicit reveal. +- **Marc has no act finding but two medicine findings** (clopidogrel: avoid; simvastatin: 20 mg or less) and a heart cluster: high Lp(a), CAD score at the 88th percentile, SLCO1B1. Show them together. +- **The couple shares CFTR (1 in 4).** Lía inherited Elena's copy only, so she is a carrier and not affected. +- **FMR1 48 in Elena became 49 in Lía:** intermediate in both. +- **Lía is O RhD-negative from two RhD-positive parents.** Show the inheritance. +- **HG002 is mid-run:** one memory retry, four tasks running, early findings arriving. + +### 4.3 One severity scale for every result + +| Level | Words on screen | Colour (status palette, dark) | Icon | Rule | +|---|---|---|---|---| +| act | "Take to a doctor" | critical `#d03b3b` | filled diamond or ! | always pair with the condition name and "what to do" | +| medicine | "Tell your prescriber" | serious `#ec835a` | pill or Rx | drug-first wording | +| review | "Worth a look" | warning `#fab219` (dark text on fill) | ▲ | a conversation or a measurement, not a diagnosis | +| carrier | "For family planning" | a neutral accent (e.g. violet `#9085e9` used as an outline, never a fill that reads as alarm) | two-circle glyph | always say "not affected" | +| info | "For information" | no colour: secondary ink | ○ | never "normal" or "fine" | +| trust | "Data quality" | good `#0ca30c` **only for data and run states**, warn/critical for problems | ✓ / ! | green is never used for a health result | + +Status colours always come with an icon and a label, never colour alone. They are never reused as series colours. + +### 4.4 Visual system starting points + +Each direction may diverge from these, but stays dark and keeps these roles. + +- **Surfaces.** Page `#0f1113` to `#121417`; raised `#17191d`; hairline `rgba(255,255,255,.08)`. +- **Ink.** Primary `#f0efec`; secondary `#c3c2b7`; muted `#898781`. +- **Person identity colours.** Validated with the dataviz validator, dark, all pairs, surface `#17191d`: all checks pass. + - Marc: blue `#3987e5` + - Elena: orange `#d95926` + - Lía: aqua `#199e70` + - Use them for the pedigree, the chromosome map, relatedness and family tables. **Colour follows the person** on every page. + - On a person page, ancestry charts may reuse the categorical slots. Never draw person colours and ancestry colours on one screen. +- **Chart forms**, chosen by each result's job (dataviz form heuristic): + - **Findings summary:** stat tiles or a level-count row, not a donut. + - **PRS:** a dot on a 0-100 percentile strip, one row per condition, with the condition's ancestry group named. No red/green zones, because a percentile is not a risk class. + - **STR:** per locus, the two allele dots on a count axis, with labelled bands (normal, intermediate, premutation, full) in muted tones plus text labels. An unsized allele is drawn as an open-ended bar from its lower bound. + - **Lp(a):** the KIV-2 count with its CI on a strip, plus the two variants as chips. **CHIP:** a meter of the detection limit. **Telomere:** a plain number only, because it has no normal range. + - **Ancestry:** a tall segmented bar (≤ 6 parts, with "Other"), plus a 22-chromosome painting with 2 haplotypes each. + - **Variant locations:** a chromosome ideogram with a marker per finding. + - **ROH:** a per-chromosome bar of Mb in runs ≥ 5 Mb. + - **Mito:** heteroplasmy dots on a 0-100% axis. + - **Couple risk:** a 2x2 grid of the four equally likely children (1 affected, 2 carriers, 1 neither), labelled. + - **Relatedness:** a dumbbell of expected against measured per pair. **Chromosome map:** paternal row over maternal row, in person colours. + - **PGx:** a table or cards, drug first, with gene → phenotype as the reason. Not a chart. + - **Live run:** progress as a hero figure (31 of 54), a step timeline or dependency graph coloured by state (waiting, running, done, failed, skipped) with labels, and CPU/memory sparklines per running task. +- **Chart rules.** Thin marks, recessive grid, one axis, direct labels, and a hover tooltip per mark. Every chart has a table view or its numbers in text beside it. Run `scripts/validate_palette.js` on any new categorical set. + +### 4.5 Copy rules + +- Names, not sample ids ("Elena Ruiz"; the run id goes in small print). +- The condition name before the gene: "Hereditary breast and ovarian cancer (BRCA2)". +- No step numbers or file names in body text. They belong in the evidence and provenance layer. +- Define a term the first time it appears (an inline definition or a tooltip): carrier, heterozygous, percentile, VUS, heteroplasmy. +- Keep caveats short, specific and visible. Never put them in a grey footnote as a disclaimer. +- An empty cell reads "none found", "not assessed" or "not applicable". It is never `.`. + +### 4.6 What each direction delivers + +Six screens, using `dataset.json`, saved as `NN-screen.png`: + +1. home (desktop) +2. live run, HG002 (desktop) +3. person report, Elena (desktop) +4. finding detail, Elena BRCA2 (desktop) +5. family, Ruiz (desktop) +6. person report, Marc (mobile) + +Plus one line per screen saying which question in section 2 it answers first. diff --git a/docs/design/journal/README.md b/docs/design/journal/README.md new file mode 100644 index 00000000..16a5bd46 --- /dev/null +++ b/docs/design/journal/README.md @@ -0,0 +1,52 @@ +# Live site design: Journal + +This is the design the live site is built to. Each person's genome reads as a long, typeset report: a serif headline, a plain-words lead that names what matters, numbered sections with figures in the text, and caveats and evidence in the margin. A family is a report in chapters. A run in progress is the same report, filling in section by section. + +The screens use invented people (the Ruiz family: Elena, Marc and their daughter Lía) and the public GIAB sample HG002. No real genome went into them. How the pages connect, what each one answers first and the five design decisions are in [UX.md](UX.md). The data inventory behind the design is in [BRIEF.md](BRIEF.md). + +When the site and these screens disagree, the screens win, unless the data says otherwise. Then fix the screens here in the same PR. + +## The screens + +### 01 People and runs +Does anyone have something to act on, and what is running? + +![Home](screens/01-home.png) + +### 02 A run being written +Is it moving, when will it end, is anything wrong? Sections fill in where they will sit in the finished report. + +![Live run](screens/02-live-run.png) + +### 03 A person's report +Is there anything serious? The lead names it, then ten numbered sections, from "To act on" to "Sources". + +![Person report](screens/03-person.png) + +### 04 One finding +What do I do about it? The plan sits under the explanation, with the evidence below it. + +![Finding](screens/04-finding.png) + +### 05 A family +What does it mean for our children? Five chapters: pedigree, relatedness, couple screen, inheritance, de novo and compound het. + +![Family](screens/05-family.png) + +### 06 A person on a phone +Which medicines should I watch out for? One column, with a tab bar at the bottom. + +Person on a phone + +### 07 A bolder person report +A cover-style variant of 03, kept for comparison. + +![Alt person](screens/07-alt-person.png) + +## The site before this design + +[today/](today/) holds the same pages as the live site drew them before this redesign. + +## Editing the screens + +The HTML sources live in `src/`, with shared styles in `src/_journal.css` and `src/_journal.js`. `node build.js` inlines them into `html/`. Open any file in `html/` in a browser; it needs no network. diff --git a/docs/design/journal/UX.md b/docs/design/journal/UX.md new file mode 100644 index 00000000..ce0386f3 --- /dev/null +++ b/docs/design/journal/UX.md @@ -0,0 +1,58 @@ +# Direction A: Journal + +Each person's genome reads like a long feature in a science journal. A serif headline and a lead paragraph say what matters in plain words. Numbered sections follow, with figures inside the text and caveats and evidence in the margin. A family is a report in chapters. A run in progress is the same report, with each section filling in as its steps finish. + +## Navigation model + +``` +People and runs (home) +├── Being written: HG002 ──► live run = the report, sections filling in place +├── Ruiz family ──► family report, chapters I–V + appendix +│ ├── Elena ──► person report, sections 1–10 ──► finding page (e.g. BRCA2) +│ ├── Marc ──► person report (phone: one column, tab bar) +│ ├── Lía ──► person report (child: adult-onset results closed) +│ └── Carmen (in the tree, no genome: dashed, "add a genome") +└── Every run (log for whoever runs the server) +``` + +- **One spine, three depths.** Family, then person, then finding, and the breadcrumb always shows where you are. You can go sideways at every depth: the person page's table of contents lists the other family members, a finding links to related findings (BRCA2 links to tamoxifen and CYP2D6, to the breast score, and to the family), and carrier results link to the couple screen. +- **Every page uses the same numbers.** The sections are 1 To act on, 2 Medicines, 3 For your family, 4 Worth a look, 5 Can I trust this?, 6 Origins, 7 Traits and scores, 8 Assessed, no finding, 9 What it cannot see, 10 Sources. The live run uses the same numbers, so a section being written sits where it will sit in the finished report. +- **Experts never leave the page.** The evidence sits in the margin of each finding (class, stars, gnomAD, reads, call quality). The finding page opens the full layer: ACMG codes, the frequency strip, a sketch of the reads with a link to the genome viewer, callers, and sources. + +## What each page answers first + +| Screen | First question it answers | +|---|---| +| 01 Home | "Does anyone have something to act on, and what is running?" The headline says it in a sentence, a "needs attention" list covers everyone, and the running run comes first. | +| 02 Live run | "Is it moving, when will it end, is anything wrong?" 31 of 54, about 19 h left, "nothing needs you". Then what has been found so far, written into its section. | +| 03 Person (Elena) | "Is there anything serious?" The lead paragraph names the condition (breast and ovarian cancer, BRCA2), then a row of counts by level and the data-quality line. | +| 04 Finding (BRCA2) | "What do I do about it?" A numbered plan sits just under the explanation, with the evidence below it. | +| 05 Family (Ruiz) | "What does it mean for our children?" The lead and chapter II: 1 in 4 for cystic fibrosis, drawn as four equally likely children, with Lía placed among them. | +| 06 Mobile (Marc) | "Which medicines should I watch out for?" After the lead, the medicine list comes first: drug, a verdict chip (Avoid, 20 mg max) and the gene as the reason. It is ready to show a pharmacist. | + +## Five key design decisions + +1. **The lead paragraph is the summary.** Every report opens with three or four plain sentences that name the conditions and drugs, not gene counts. A reader who stops there still knows what matters. The row of counts by level below it is the index. +2. **The margin holds caveats and evidence.** Each finding's caveat (first sentence visible, "More" for the rest), its evidence numbers and its definitions sit in a 260 px margin column beside it. Caveats stay visible without breaking the reading line, and experts get the numbers without a second page. +3. **Figures sit in the text, and each one does one job.** The figures are a chromosome map of the findings, the FMR1 repeat with its bands, small multiples for every repeat locus, PRS dots on a 0–100 strip with no coloured zones, a tall segmented ancestry bar with a chromosome painting, the BRCA2 protein with the cut marked, the frequency on a log strip, a relatedness dumbbell, the four-children grid, the parent-coloured chromosome map, and a step timeline. Charts use the sans, headings the serif. Status colours always come with a glyph and a label: diamond, pill, triangle, two rings, open circle, check. +4. **Silence is never an all-clear.** Every page has a section 8, "Assessed, no finding", that names each step, what it looked at and what it does not see, plus section 9 "What it cannot see". On Marc's phone, section 1 reads "No finding in what these steps assessed" and lists what those steps miss. Steps that failed or were skipped say so where it matters ("MUC1 kidney gene: not assessed, depth 41×"). APOE and an adult-onset result about a child stay closed behind an explicit "Show". +5. **Colour follows the person, only where people are compared.** Orange is Elena, blue Marc, aqua Lía, on the family page, the home tiles and the run log. Elena's own report draws no person colours, so the ancestry figures can use the categorical slots: no screen shows both sets. Green is used only for data and run states, never for a health result. Brass (the editorial accent) marks section numbers, links and "being written", and never carries a level. + +## States covered + +- **In progress:** sections stamped *Written 10:14*, *Being written* or *Waiting*, with grey proof lines and the step each one waits for. New findings carry a brass "New at 12:58" band. +- **Empty:** "No finding in what these steps assessed" plus what those steps do not see. +- **Failed or skipped:** an amber "Not assessed" card with the reason and a rerun action. Skipped steps are listed with plain reasons ("needs PacBio HiFi", "no symptoms given"). +- **Sensitive:** a veiled card with an explicit button for APOE and for Lía's BRCA2 result. +- **Out of date:** "ClinVar 2026-11-06 is out" shows once in the sources and on the cards it would change (carrier list, couple screen). It is not shown on BRCA2, which it does not change. + +## Files + +- `screens/NN-screen.png`: desktop 1440 wide, full page. The mobile shot is 390 wide at 2x, at its full scroll height so the tab bar sits at the bottom. +- `html/NN-screen.html`: self-contained (CSS and JS inlined, system fonts only, no network). Built from `src/` by `node build.js`. +- `today/`: the live site before this design, for comparison. +- `BRIEF.md`: the data inventory and page list every design direction worked from; `dataset.json`: the invented family and findings the screens show. + +## 07 Alt person (Elena, cover variant) + +A bolder take on the same report, for comparison. The cover is a magazine spread: the name at 132 px, a one-sentence deck that names the condition, and a table of contents where each line already says what that section found. Below it, Elena's genome is drawn end to end as one band, with each finding pinned and labelled by condition. A five-column index lists the findings by name under each level, not as counts. The one finding to act on gets a feature spread with a pull quote, the protein cut and a four-step plan. Everything else becomes a plate of six figures (A to F), and section 8 is a ledger where each "no finding" line names what it cannot see. diff --git a/docs/design/journal/build.js b/docs/design/journal/build.js new file mode 100644 index 00000000..8b14b46e --- /dev/null +++ b/docs/design/journal/build.js @@ -0,0 +1,11 @@ +// Inline the shared CSS/JS into each screen so every HTML file stands alone. +const fs = require('fs'), path = require('path'); +const src = path.join(__dirname, 'src'); +const css = fs.readFileSync(path.join(src, '_journal.css'), 'utf8'); +const js = fs.readFileSync(path.join(src, '_journal.js'), 'utf8'); +for (const f of fs.readdirSync(src).filter(f => /^\d\d-.*\.html$/.test(f))) { + const h = fs.readFileSync(path.join(src, f), 'utf8') + .replace('', `\n`); + fs.writeFileSync(path.join(__dirname, 'html', f), h); + console.log('built', f); +} diff --git a/docs/design/journal/dataset.json b/docs/design/journal/dataset.json new file mode 100644 index 00000000..24975bf3 --- /dev/null +++ b/docs/design/journal/dataset.json @@ -0,0 +1,462 @@ +{ + "meta": { + "synthetic": true, + "notice": "Every person, run, value and finding here is invented for mockups. Genes and drug rules are real so the copy reads plausibly; positions, read counts, scores and dates are made up. Do not look any of it up as if it described someone.", + "pipeline": "OwnGenome 1.0.0", + "reference": "GRCh38 (no-ALT analysis set)", + "today": "2026-11-08", + "databases": { + "clinvar": { "used": "2026-10-02", "newest": "2026-11-06", "newer_available": true, "affects_steps": ["06", "17", "23", "39"] }, + "vep_cache": { "used": "Ensembl 115", "newer_available": false }, + "cpsr_bundle": { "used": "PCGR 2.2 bundle 20260601", "newer_available": false }, + "pharmcat": { "used": "3.4.0", "newer_available": false }, + "pgs_catalog": { "used": "2026-09", "newer_available": false } + }, + "levels": { + "act": "Take to a doctor. A health finding with a clinical action (dominant P/LP in an ACMG SF or cancer gene, two hits in a recessive gene, a full repeat expansion, a positive MUC1 call).", + "medicine": "Tell whoever prescribes. A gene result that changes a drug or dose under CPIC guidance, or an HLA drug allele.", + "review": "Worth a look. A result that deserves a conversation or a measurement but is not a diagnosis (intermediate repeat, genetically high Lp(a), CHIP clone, mosaic alteration, risk-associated HLA allele).", + "carrier": "For family planning. One copy of a change in a recessive or X-linked gene; the person is not affected.", + "info": "For information. Ancestry, haplogroups, traits, blood groups, scores, telomeres. Never phrased as fine or normal.", + "trust": "About the data, not the person: QC, identity, contamination, callability, relationships." + }, + "never": "No result is ever shown as 'all clear', 'normal' or 'fine'. An empty section reads 'No finding in what this step assessed' plus its caveat and what it does not see." + }, + + "people": [ + { "id": "elena", "name": "Elena Ruiz", "short": "Elena", "sex_declared": "female", "sex_measured": "XX", "age": 38, "role": "mother", "run": "RUIZ-ELENA", "identity_color_slot": 2, "identity_color_dark": "#d95926" }, + { "id": "marc", "name": "Marc Ruiz", "short": "Marc", "sex_declared": "male", "sex_measured": "XY", "age": 41, "role": "father", "run": "RUIZ-MARC", "identity_color_slot": 1, "identity_color_dark": "#3987e5" }, + { "id": "lia", "name": "Lía Ruiz", "short": "Lía", "sex_declared": "female", "sex_measured": "XX", "age": 6, "role": "daughter", "run": "RUIZ-LIA", "identity_color_slot": 3, "identity_color_dark": "#199e70", "minor": true }, + { "id": "carmen", "name": "Carmen Vidal", "short": "Carmen", "sex_declared": "female", "age": 67, "role": "Elena's mother", "run": null, "sequenced": false, "note": "In the pedigree, no genome on this server (drawn dashed)." }, + { "id": "hg002", "name": "HG002", "short": "HG002", "sex_declared": "male", "sex_measured": "XY", "role": "public GIAB reference sample (benchmark run)", "run": "HG002-BENCH", "public_reference": true } + ], + + "runs": [ + { + "id": "RUIZ-ELENA", "person": "elena", "state": "finished", "planned": 54, "done": 54, "failed": 0, "skipped": 3, + "started_utc": "2026-11-02T21:14:00Z", "finished_utc": "2026-11-04T03:51:00Z", "wall_hours": 30.6, + "counts": { "act": 1, "medicine": 1, "review": 1, "carrier": 2, "info": 14 }, + "skipped_steps": [ { "step": "35b", "why": "PacBio HiFi only" }, { "step": "48", "why": "no symptoms (HPO terms) given" }, { "step": "45", "why": "female: no Y chromosome" } ] + }, + { + "id": "RUIZ-MARC", "person": "marc", "state": "finished", "planned": 54, "done": 53, "failed": 1, "skipped": 2, + "started_utc": "2026-11-03T08:02:00Z", "finished_utc": "2026-11-04T17:40:00Z", "wall_hours": 33.6, + "counts": { "act": 0, "medicine": 2, "review": 2, "carrier": 2, "info": 15 }, + "failed_steps": [ { "step": "52", "label": "MUC1 VNTR (VNtyper)", "why": "depth over the repeat 41x, below the 100x the step needs; marked not assessed", "retry": "Rerun with a deeper BAM, or ignore" } ], + "skipped_steps": [ { "step": "35b", "why": "PacBio HiFi only" }, { "step": "48", "why": "no symptoms (HPO terms) given" } ] + }, + { + "id": "RUIZ-LIA", "person": "lia", "state": "finished", "planned": 54, "done": 54, "failed": 0, "skipped": 3, + "started_utc": "2026-11-05T07:30:00Z", "finished_utc": "2026-11-06T12:05:00Z", "wall_hours": 28.6, + "counts": { "act": 0, "medicine": 1, "review": 1, "carrier": 1, "info": 12 }, + "skipped_steps": [ { "step": "35b", "why": "PacBio HiFi only" }, { "step": "48", "why": "no symptoms (HPO terms) given" }, { "step": "45", "why": "female: no Y chromosome" } ] + }, + { + "id": "RUIZ-FAMILY", "kind": "family", "family": "ruiz", "state": "finished", "finished_utc": "2026-11-06T14:22:00Z", + "analyses": [ + { "analysis": "joint call (GLnexus)", "members": "Elena, Marc, Lía", "decision": "runs" }, + { "analysis": "relationship check (somalier)", "members": "all pairs", "decision": "runs" }, + { "analysis": "phasing by inheritance (WhatsHap)", "members": "Lía with both parents", "decision": "runs" }, + { "analysis": "de novo and compound het", "members": "Lía", "decision": "runs" }, + { "analysis": "chromosome map", "members": "Lía", "decision": "runs" }, + { "analysis": "shared segments (hap-ibd)", "members": "all pairs", "decision": "runs" }, + { "analysis": "couple carrier screen", "members": "Elena + Marc", "decision": "runs" }, + { "analysis": "grandparent phasing", "members": "Carmen", "decision": "skipped", "reason": "Carmen has no genome on this server" } + ] + }, + { + "id": "HG002-BENCH", "person": "hg002", "state": "running", "planned": 54, "done": 31, "running": 4, "waiting": 18, "failed": 0, "retried": 1, + "started_utc": "2026-11-08T06:40:00Z", "elapsed_hours": 6.4, "eta_hours": "about 19 more (from the usual step hours)", + "running_now": [ + { "step": "17", "label": "CPSR", "since_min": 22, "usual_min": 45, "cpu_pct": 380, "mem_gb": 11.2 }, + { "step": "19", "label": "Delly", "since_min": 71, "usual_min": 160, "cpu_pct": 100, "mem_gb": 3.1 }, + { "step": "25", "label": "PRS", "since_min": 9, "usual_min": 55, "cpu_pct": 640, "mem_gb": 14.8 }, + { "step": "20", "label": "Mito variants (Mutect2)", "since_min": 4, "usual_min": 12, "cpu_pct": 190, "mem_gb": 2.4 } + ], + "events": [ + { "t": "12:58", "text": "Step 06 ClinVar screen finished: 2 pathogenic or likely pathogenic hits" }, + { "t": "12:41", "text": "Step 07 PharmCAT finished: 4 genes with a changed function" }, + { "t": "12:40", "text": "Step 08 HLA typing finished" }, + { "t": "12:07", "text": "Task VEP (chr1) retried with 24 GB after a memory kill" }, + { "t": "11:52", "text": "Step 03 Variant calling finished: 4,672,118 PASS variants, Ti/Tv 2.06" } + ], + "found_so_far": [ + { "step": "33", "text": "Sex from the reads XY, declared male. Contamination 0.2% (below 3%)." }, + { "step": "16b", "text": "Mean depth 34.1x; 97.8% of the genome at 10x or more." }, + { "step": "06", "text": "2 pathogenic or likely pathogenic ClinVar hits, both heterozygous in recessive genes." }, + { "step": "08", "text": "HLA typed: no drug-reaction allele of the list present." } + ], + "health": { "ram_gb": 64, "mem_peak_gb": 41.3, "disk_tb": 2.0, "disk_used_pct": 71, "cpu_cores": 16, "load_1m": 13.7 } + } + ], + + "families": [ + { + "id": "ruiz", "name": "Ruiz family", + "members": [ + { "person": "marc", "father": null, "mother": null, "partner": "elena", "sequenced": true }, + { "person": "elena", "father": null, "mother": "carmen", "partner": "marc", "sequenced": true }, + { "person": "lia", "father": "marc", "mother": "elena", "partner": null, "sequenced": true }, + { "person": "carmen", "father": null, "mother": null, "partner": null, "sequenced": false } + ], + "relationships": [ + { "pair": ["elena", "lia"], "declared": "parent-child", "expected": 0.5, "measured": 0.497, "opposite_homozygotes_pct": 0.04, "sites": 17402, "verdict": "agrees" }, + { "pair": ["marc", "lia"], "declared": "parent-child", "expected": 0.5, "measured": 0.503, "opposite_homozygotes_pct": 0.05, "sites": 17398, "verdict": "agrees" }, + { "pair": ["elena", "marc"], "declared": "unrelated (partners)", "expected": 0.0, "measured": 0.008, "opposite_homozygotes_pct": 6.8, "sites": 17411, "verdict": "agrees" } + ], + "shared_segments": [ + { "pair": ["elena", "lia"], "stretches": 23, "shared_cm": 3389, "ibd2_cm": 0, "longest_cm": 281.4, "shared_fraction": 0.995, "degree": "first (parent-child)" }, + { "pair": ["marc", "lia"], "stretches": 25, "shared_cm": 3381, "ibd2_cm": 0, "longest_cm": 267.9, "shared_fraction": 0.993, "degree": "first (parent-child)" }, + { "pair": ["elena", "marc"], "stretches": 2, "shared_cm": 5.1, "ibd2_cm": 0, "longest_cm": 2.9, "shared_fraction": 0.0015, "degree": "unrelated or beyond 4th degree" } + ], + "couple_screen": { + "partners": ["elena", "marc"], + "summary": { "shared": 1, "x_linked": 0, "one_partner": 3 }, + "rows": [ + { "gene": "CFTR", "inheritance": "AR", "lists": "ACMG, ACOG", "condition": "Cystic fibrosis", "result": "shared", "offspring_risk": "1 in 4 per pregnancy", "elena": "p.Phe508del het, Pathogenic, 3 stars", "marc": "p.Gly542Ter het, Pathogenic, 3 stars", "explanation": "Both carry a change in CFTR. A child who inherits both changes can have cystic fibrosis: 1 in 4 per pregnancy, 1 in 2 a carrier, 1 in 4 neither." }, + { "gene": "PAH", "inheritance": "AR", "lists": "ACMG, ACOG", "condition": "Phenylketonuria", "result": "one_partner", "offspring_risk": "none shared", "elena": null, "marc": "p.Arg408Trp het, Pathogenic, 3 stars", "explanation": "Only Marc carries a change in PAH. A child can be a carrier like Marc, not affected, unless Elena carries a change this screen does not see." }, + { "gene": "HFE", "inheritance": "AR", "lists": "Orphanet", "condition": "Hereditary haemochromatosis type 1", "result": "one_partner", "offspring_risk": "none shared", "elena": "p.Cys282Tyr het, Pathogenic, 2 stars", "marc": null, "explanation": "Only Elena carries a change in HFE. A child can be a carrier like Elena." }, + { "gene": "FMR1", "inheritance": "XL", "lists": "ACMG, ACOG", "condition": "Fragile X syndrome", "result": "not counted", "offspring_risk": "below the premutation line", "elena": "CGG 31 / 48 (intermediate, 45-54)", "marc": "CGG 30", "explanation": "Elena's longer allele is in the intermediate range: below the 55 repeats the screen counts. It does not cause disease but may grow by a few repeats when passed on. Shown for context." } + ], + "read_depth_alleles": [ + { "allele": "del(GJB6-D13S1830)", "elena": "absent", "marc": "absent" }, + { "allele": "CFTRdele2,3", "elena": "absent", "marc": "absent" }, + { "allele": "HBB 619 bp deletion", "elena": "not assessable (too short for depth)", "marc": "not assessable (too short for depth)" }, + { "allele": "AZFa / AZFb / AZFc", "elena": "not applicable", "marc": "absent / absent / absent" } + ], + "smn1": { "elena": "2 copies (quality 41, PASS)", "marc": "2 copies (quality 38, PASS)", "note": "Two copies do not rule out a silent carrier (2+0)." }, + "caveat": "A screen, not a diagnosis. It sees ClinVar pathogenic changes, Delly deletions, SMN1 copies and FMR1/FXN repeats in 3,292 recessive and X-linked genes. A screen with no shared gene lowers the chance of a child with one of these conditions; it does not remove it.", + "does_not_see": [ + "changes ClinVar does not list as pathogenic (new loss-of-function changes, VUS)", + "genes outside the carrier list", + "SMN1 silent carriers (2 copies on one chromosome, 0 on the other)", + "genes with a near-identical copy: HBA1/HBA2, CYP21A2, GBA1", + "repeat expansions other than FMR1 and FXN", + "low-level mosaicism, and whether two changes of one person sit on the same copy" + ] + }, + "trio": { + "child": "lia", + "phased_sites": 2913455, + "inheritance_of_findings": [ + { "finding": "F02", "gene": "CFTR", "change": "p.Phe508del", "from": "elena", "child_has": true, "how": "genotype" }, + { "finding": "F15", "gene": "CFTR", "change": "p.Gly542Ter", "from": "marc", "child_has": false, "how": "genotype" }, + { "finding": "F01", "gene": "BRCA2", "change": "c.5946del", "from": "elena", "child_has": false, "how": "genotype", "sensitive": "adult-onset finding about a minor: keep behind an explicit reveal" }, + { "finding": "F16", "gene": "PAH", "change": "p.Arg408Trp", "from": "marc", "child_has": false, "how": "genotype" }, + { "finding": "F05", "gene": "HFE", "change": "p.Cys282Tyr", "from": "elena", "child_has": false, "how": "genotype" }, + { "finding": "F03", "gene": "FMR1", "change": "CGG 48 allele", "from": "elena", "child_has": true, "how": "repeat length (48 in Elena, 49 in Lía)" }, + { "finding": "F11", "gene": "CYP2C19", "change": "*2 allele", "from": "marc", "child_has": true, "how": "genotype" } + ], + "de_novo": [ + { "chrom": "chr7", "pos": 98114350, "ref": "C", "alt": "T", "child_gt": "0/1", "child_ab": 0.46, "gq": [52, 61, 58], "dp": [33, 30, 35], "status": "pass", "gene": null, "consequence": "intergenic", "note": "Most de novo candidates of a whole genome are genotype errors; this one has good depth in all three. No gene nearby." }, + { "chrom": "chr12", "pos": 33908211, "ref": "A", "alt": "G", "child_gt": "0/1", "child_ab": 0.19, "gq": [14, 49, 50], "dp": [8, 31, 29], "status": "low", "gene": null, "consequence": "intergenic", "note": "Low: child depth 8, allele balance 19%." } + ], + "compound_het": [ + { "gene": "USH2A", "variants": ["p.Thr1257Ile", "c.8559-14A>G"], "phase": "in cis", "from": "marc", "note": "Both came from Marc on one copy; the other copy is intact." }, + { "gene": "TTN", "variants": ["p.Arg3412His", "p.Val16211Met"], "phase": "in trans", "from": "one each", "note": "Both rare missense, both called benign or VUS. TTN is huge and carries many rare missense in everyone; no action." } + ], + "chromosome_map": { + "basis": "parent (no grandparent sequenced: stretches say only 'from Marc' or 'from Elena', no crossovers placed)", + "per_parent": [ + { "parent": "marc", "segments": 41, "mb": 2871, "discordant_sites": 312 }, + { "parent": "elena", "segments": 44, "mb": 3012, "discordant_sites": 287 } + ], + "example_chr7": [ + { "side": "paternal", "start": 52000, "end": 59300000 }, + { "side": "paternal", "start": 62100000, "end": 159100000 }, + { "side": "maternal", "start": 41000, "end": 58900000 }, + { "side": "maternal", "start": 61800000, "end": 159200000 } + ] + } + } + } + ], + + "findings": [ + { + "id": "F01", "person": "elena", "family": "cancer_predisposition", "chapter": "clinical", "section": "cpsr", "level": "act", + "title": "A change in BRCA2 linked to hereditary breast and ovarian cancer", + "gene": "BRCA2", "hgvs_c": "c.5946del", "hgvs_p": "p.Ser1982ArgfsTer22", "variant_id": "chr13:32340301 GT>G", "zygosity": "het", + "classification": "Pathogenic", "source": "ClinVar + CPSR tier 1", "stars": 3, "review": "reviewed by expert panel (ENIGMA)", + "gnomad_af": 0.00009, "consequence": "frameshift", "inheritance": "AD", "acmg_sf": true, "acmg_sf_rule": "dominant gene: one P/LP variant is reported", + "reads": { "depth": 34, "alt_reads": 17, "allele_balance": 0.5, "gq": 63 }, + "what_it_means": "One copy of BRCA2 carries a change that stops the protein early. People with such a change have a higher lifetime risk of breast and ovarian cancer, and to a smaller degree prostate and pancreatic cancer in male relatives. It is not a diagnosis of cancer.", + "what_to_do": "Bring this to a doctor or genetic counsellor. Confirm it with a clinical test. Screening and prevention options exist and start earlier than the general programme. Close relatives (parents, siblings, children) each have a 1 in 2 chance of carrying it.", + "relatives": "Lía did not inherit this change (family analysis). Elena's mother Carmen is not sequenced.", + "caveat": "A research pipeline, not a clinical test. Confirm every pathogenic finding in a certified laboratory before acting.", + "newer_db_may_change": false + }, + { + "id": "F02", "person": "elena", "family": "carrier", "chapter": "carrier", "section": "carrier-list", "level": "carrier", + "title": "Carrier of cystic fibrosis", + "gene": "CFTR", "hgvs_c": "c.1521_1523del", "hgvs_p": "p.Phe508del", "variant_id": "chr7:117559590 ATCT>A", "zygosity": "het", + "classification": "Pathogenic", "stars": 3, "gnomad_af": 0.0069, "inheritance": "AR", + "what_it_means": "One copy of CFTR carries the most common cystic fibrosis change. Carriers are not affected.", + "what_to_do": "Matters for children: Marc also carries a CFTR change (couple screen: shared, 1 in 4).", + "caveat": "Carrier status is not disease." + }, + { + "id": "F03", "person": "elena", "family": "str", "chapter": "clinical", "section": "expansions", "level": "review", + "title": "FMR1 repeat in the intermediate range", + "gene": "FMR1", "locus": "FMR1 CGG", "alleles": [31, 48], "ci95": [[30, 32], [45, 51]], "stranger_status": "normal", "range_label": "intermediate (45-54)", + "thresholds": { "normal_max": 44, "intermediate": [45, 54], "premutation": [55, 200], "full_mutation_min": 201 }, + "spanning_reads": 9, "sized": true, + "what_it_means": "One copy of FMR1 has 48 CGG repeats: more than usual, below a premutation. It does not cause disease but can grow by a few repeats when passed to a child.", + "what_to_do": "Worth a word with a genetic counsellor before a future pregnancy. Lía inherited this allele (49 repeats).", + "caveat": "Repeat sizing from short reads is approximate; a long expansion cannot be sized." + }, + { + "id": "F04", "person": "elena", "family": "pgx", "chapter": "medicines", "section": "cpic", "level": "medicine", + "title": "CYP2D6: intermediate metaboliser", + "gene": "CYP2D6", "diplotype": "*1/*4", "phenotype": "Intermediate Metabolizer", "activity_score": 1.0, "consensus": "pypgx and Cyrius agree, depth check ok", "status": "non-normal", + "drugs": [ + { "drug": "tamoxifen", "cpic": "Consider an aromatase inhibitor for postmenopausal women, or a higher tamoxifen dose (40 mg/day); avoid strong CYP2D6 inhibitors.", "strength": "optional", "guideline": "CPIC CYP2D6-tamoxifen 2018" }, + { "drug": "codeine", "cpic": "Use label-recommended dosing; if no response, consider a non-tramadol opioid.", "strength": "moderate", "guideline": "CPIC CYP2D6-opioids 2021" }, + { "drug": "ondansetron", "cpic": "No action needed for intermediate metabolisers.", "strength": "n/a", "guideline": "CPIC CYP2D6-antiemetics 2017" } + ], + "what_to_do": "Show the medicines list to whoever prescribes. Tamoxifen is relevant to the BRCA2 finding.", + "caveat": "CYP2D6 is hard for short reads; the pipeline passes it to PharmCAT only when two callers agree. Confirm with a certified PGx test before a prescription changes." + }, + { + "id": "F05", "person": "elena", "family": "carrier", "chapter": "carrier", "section": "carrier-list", "level": "carrier", + "title": "Carrier of hereditary haemochromatosis (HFE C282Y, one copy)", + "gene": "HFE", "hgvs_p": "p.Cys282Tyr", "variant_id": "chr6:26092913 G>A", "zygosity": "het", "classification": "Pathogenic", "stars": 2, "gnomad_af": 0.034, "inheritance": "AR", + "acmg_sf_rule": "HFE is reported only when homozygous C282Y: this is not a secondary finding.", + "what_it_means": "One copy. Iron overload is rare with one copy.", "caveat": "Carrier status is not disease." + }, + { + "id": "F06", "person": "elena", "family": "prs", "chapter": "traits", "section": "prs", "level": "info", + "title": "Breast cancer polygenic score: 71st percentile", + "pgs_id": "PGS000004", "condition": "Breast cancer", "percentile": 71, "ancestry_group": "EUR", "matched_pct": 98.7, "variants_matched": 309, "variants_total": 313, "applies_to": "female", + "what_it_means": "Higher than 71 of 100 reference people of similar ancestry. A percentile is not a probability.", + "caveat": "Scores of different conditions are not comparable. With a BRCA2 change, the BRCA2 result guides care, not this score." + }, + { + "id": "F07", "person": "elena", "family": "traits", "chapter": "traits", "section": "traits-panel", "level": "info", "sensitive": true, + "title": "APOE genotype (hidden until you choose to see it)", + "gene": "APOE", "genotype": "ε3/ε4", "rsids": ["rs429358", "rs7412"], + "gate_text": "APOE relates to the risk of late-onset Alzheimer's disease. Many people choose not to know. Show it?", + "what_it_means": "One ε4 allele raises the risk of late-onset Alzheimer's disease; it does not say who will get it.", + "caveat": "No prevention changes on APOE alone." + }, + { + "id": "F08", "person": "elena", "family": "mito", "chapter": "ancestry", "section": "mt-haplogroup", "level": "info", + "title": "Maternal line: haplogroup H1c3", + "haplogroup": "H1c3", "quality": 0.94, "heteroplasmic": [ { "site": "m.16093T>C", "af": 0.18, "clinvar": "benign", "note": "common, D-loop" } ], "pass_variants": 41, + "what_it_means": "The branch of the maternal line's tree; H is the most common in Western Europe. Lía carries the same haplogroup, as expected.", + "caveat": "Haplogroup associations with disease are population statistics, not individual predictions." + }, + { + "id": "F09", "person": "elena", "family": "ancestry", "chapter": "ancestry", "section": "ancestry-fine", "level": "info", + "title": "Genetic ancestry most similar to Southern European reference groups", + "continental": [ { "group": "Europe", "fraction": 0.92, "low": 0.90, "high": 0.94 }, { "group": "Middle East / North Africa", "fraction": 0.06, "low": 0.04, "high": 0.08 }, { "group": "Africa (sub-Saharan)", "fraction": 0.01, "low": 0.0, "high": 0.02 }, { "group": "Other", "fraction": 0.01, "low": 0.0, "high": 0.02 } ], + "regional": [ { "group": "Iberian", "fraction": 0.71 }, { "group": "Tuscan / Italian", "fraction": 0.14 }, { "group": "North African", "fraction": 0.06 }, { "group": "Northwest European", "fraction": 0.07 }, { "group": "Other", "fraction": 0.02 } ], + "pgsc_projection": "closest panel population: IBS (1000 Genomes)", + "caveat": "Similarity to reference groups, not a population label or a nationality." + }, + { + "id": "F10", "person": "elena", "family": "qc", "chapter": "quality", "section": "qc", "level": "trust", + "title": "Data quality: good enough to read", + "mean_depth": 32.4, "pct_10x": 98.1, "pass_variants": 4688210, "titv": 2.07, "freemix": 0.004, "sex_check": "ok (XX, declared female)", + "callability": { "genes_below_90pct": 11, "examples": ["SMN1 41%", "CYP21A2 58%", "PMS2 77%", "HBA1 64%", "NCF1 52%"], "not_on_reference": ["GSTT1", "HLA-DRB3", "HLA-DRB4", "KIR2DL2"] }, + "what_it_means": "Depth and quality are in the usual range; no sign of another person's DNA; the sex from the reads matches. A 'no finding' in the genes listed as hard to read says nothing." + }, + { + "id": "F11", "person": "marc", "family": "pgx", "chapter": "medicines", "section": "cpic", "level": "medicine", + "title": "CYP2C19: poor metaboliser", + "gene": "CYP2C19", "diplotype": "*2/*2", "phenotype": "Poor Metabolizer", "status": "non-normal", + "drugs": [ + { "drug": "clopidogrel", "cpic": "Avoid. Use prasugrel or ticagrelor if there is no contraindication.", "strength": "strong", "guideline": "CPIC CYP2C19-clopidogrel 2022" }, + { "drug": "citalopram / escitalopram", "cpic": "Consider a 50% lower starting dose and slower titration, or another antidepressant.", "strength": "moderate", "guideline": "CPIC CYP2C19-SSRI 2023" }, + { "drug": "omeprazole, pantoprazole", "cpic": "Start at the standard dose; for long-term use consider a 50% lower daily dose.", "strength": "optional", "guideline": "CPIC CYP2C19-PPI 2020" }, + { "drug": "voriconazole", "cpic": "Choose an alternative antifungal not dependent on CYP2C19.", "strength": "moderate", "guideline": "CPIC CYP2C19-voriconazole 2016" } + ], + "what_to_do": "Tell any prescriber and pharmacist. Clopidogrel is the important one: it would not work well.", + "caveat": "PharmCAT is a research tool; confirm before a prescription changes." + }, + { + "id": "F12", "person": "marc", "family": "pgx", "chapter": "medicines", "section": "cpic", "level": "medicine", + "title": "SLCO1B1: decreased function (statin muscle side effects)", + "gene": "SLCO1B1", "diplotype": "*1/*5", "phenotype": "Decreased Function", "rsid": "rs4149056", "status": "non-normal", + "drugs": [ + { "drug": "simvastatin", "cpic": "Prescribe 20 mg/day or less, or choose another statin (rosuvastatin, pravastatin).", "strength": "strong", "guideline": "CPIC SLCO1B1-ABCG2-CYP2C9-statins 2022" }, + { "drug": "atorvastatin", "cpic": "Prescribe 40 mg/day or less; consider a higher dose only with monitoring.", "strength": "moderate", "guideline": "CPIC 2022" } + ], + "what_to_do": "Relevant together with the Lp(a) and heart-score results: if a statin is started, the choice and dose matter.", + "caveat": "Confirm before a prescription changes." + }, + { + "id": "F13", "person": "marc", "family": "lpa", "chapter": "clinical", "section": "lpa", "level": "review", + "title": "Genetically high Lp(a) likely", + "kiv2_copies": 15.2, "ci95": [13.8, 16.4], "population_range_note": "most people carry 30 to 45 KIV-2 copies in total; fewer copies go with higher Lp(a)", + "rs10455872": "risk allele present", "rs3798220": "no risk allele", "flag": "genetically high Lp(a)", + "what_it_means": "Few KIV-2 repeats and one risk variant both point to a high Lp(a), a lipoprotein that raises the risk of heart attack and aortic stenosis.", + "what_to_do": "Ask for one blood Lp(a) measurement. European guidance recommends measuring it once in every adult anyway.", + "caveat": "A research estimate from read depth; the blood test is what counts." + }, + { + "id": "F14", "person": "marc", "family": "prs", "chapter": "traits", "section": "prs", "level": "info", + "title": "Coronary artery disease score: 88th percentile", + "pgs_id": "PGS000018", "condition": "Coronary artery disease", "percentile": 88, "ancestry_group": "EUR", "matched_pct": 96.2, + "others": [ + { "condition": "Type 2 diabetes", "pgs_id": "PGS000713", "percentile": 42 }, + { "condition": "Atrial fibrillation", "pgs_id": "PGS000016", "percentile": 63 }, + { "condition": "Prostate cancer", "pgs_id": "PGS000662", "percentile": 35 }, + { "condition": "LDL cholesterol", "pgs_id": "PGS000115", "percentile": 77 }, + { "condition": "Systolic blood pressure", "pgs_id": "PGS000302", "percentile": 51 } + ], + "what_it_means": "Higher than 88 of 100 reference people of similar ancestry. Most people in the top fifth never have a heart attack; measured LDL, blood pressure and Lp(a) say far more.", + "caveat": "A percentile is not a probability; percentiles of different conditions are not comparable." + }, + { + "id": "F15", "person": "marc", "family": "carrier", "chapter": "carrier", "section": "carrier-list", "level": "carrier", + "title": "Carrier of cystic fibrosis", + "gene": "CFTR", "hgvs_p": "p.Gly542Ter", "variant_id": "chr7:117587778 G>T", "zygosity": "het", "classification": "Pathogenic", "stars": 3, "gnomad_af": 0.0004, "inheritance": "AR", + "what_to_do": "Shared with Elena: 1 in 4 per pregnancy for cystic fibrosis. Lía did not inherit this one." + }, + { + "id": "F16", "person": "marc", "family": "carrier", "chapter": "carrier", "section": "carrier-list", "level": "carrier", + "title": "Carrier of phenylketonuria", + "gene": "PAH", "hgvs_p": "p.Arg408Trp", "variant_id": "chr12:102840507 G>A", "zygosity": "het", "classification": "Pathogenic", "stars": 3, "gnomad_af": 0.0011, "inheritance": "AR" + }, + { + "id": "F17", "person": "marc", "family": "hla", "chapter": "medicines", "section": "hla", "level": "review", + "title": "HLA-B*27 present", + "alleles": { "HLA-A": ["02:01", "24:02"], "HLA-B": ["27:05", "44:02"], "HLA-C": ["02:02", "05:01"], "HLA-DQA1": ["01:02", "05:01"], "HLA-DQB1": ["02:01", "06:02"], "HLA-DRB1": ["03:01", "15:01"] }, + "drug_alleles": [ { "allele": "HLA-B*57:01", "drug": "abacavir", "present": false }, { "allele": "HLA-B*58:01", "drug": "allopurinol", "present": false }, { "allele": "HLA-B*15:02", "drug": "carbamazepine", "present": false }, { "allele": "HLA-A*31:01", "drug": "carbamazepine", "present": false } ], + "disease_alleles": [ { "allele": "HLA-B*27", "association": "ankylosing spondylitis", "present": true }, { "allele": "HLA-C*06:02", "association": "psoriasis", "present": false } ], + "coeliac": { "dq2_5": "likely cis (DQA1*05:01 + DQB1*02:01)", "dq8": "absent", "dqb1_02_copies": 1 }, + "what_it_means": "About 8% of Europeans carry HLA-B*27; most never develop spondylitis. Coeliac DQ2.5 is common too (about 1 in 4) and alone means little.", + "caveat": "Typing from short reads is approximate; ask for a clinical HLA test before a drug that depends on it. Not for transplant matching." + }, + { + "id": "F18", "person": "marc", "family": "sv", "chapter": "clinical", "section": "structural-variants", "level": "info", + "title": "One uncertain deletion; no class 4-5 structural variant", + "sv": { "type": "DEL", "chrom": "chr3", "start": 2291044, "end": 2329380, "length_kb": 38.3, "genotype": "0/1", "callers": ["Manta", "Delly", "CNVpytor"], "duphold_dhffc": 0.52, "annotsv_class": 3, "genes": ["CNTN4 (intron 2 only)"], "gnomad_sv_af": 0.0003 }, + "counts": { "manta_pass": 6611, "delly_pass": 5402, "cnvpytor_significant": 1149, "consensus_2plus": 2934, "class_4_5": 0 }, + "what_it_means": "A 38 kb deletion inside an intron, found by three callers. Uncertain significance: no action.", + "caveat": "Short reads find large deletions and duplications better than insertions and inversions." + }, + { + "id": "F19", "person": "marc", "family": "chip", "chapter": "clinical", "section": "chip", "level": "info", + "title": "No CHIP call above what this depth can see", + "calls": 0, "detection_limit_vaf": 0.14, "genes_assessed": 13, "genes_too_shallow": ["U2AF1"], + "what_it_means": "No clone was found in the 13 CHIP genes, but at 29x only clones with about 14% of reads or more can be seen. Most CHIP is smaller.", + "caveat": "A clean result does not rule CHIP out." + }, + { + "id": "F20", "person": "marc", "family": "y_haplogroup", "chapter": "ancestry", "section": "y-chromosome", "level": "info", + "title": "Paternal line: R-DF27", + "haplogroup": "R1b-DF27", "terminal_branch_yfull": "R-Z195", "valid_markers": 1873, "qc_score": 0.98, "level_below_root": 23, "private_snps": 7, + "mt_haplogroup": "J1c2", + "what_it_means": "DF27 is the commonest Y branch in Iberia.", "caveat": "One line out of thousands of ancestors." + }, + { + "id": "F21", "person": "marc", "family": "qc", "chapter": "quality", "section": "qc", "level": "trust", + "title": "Data quality: good, one step not assessed", + "mean_depth": 29.1, "pct_10x": 97.2, "pass_variants": 4701933, "titv": 2.06, "freemix": 0.006, "sex_check": "ok (XY, declared male)", "mosaic_loss_y": "not detected above 10% of cells", + "callability": { "genes_below_90pct": 14, "examples": ["SMN1 38%", "CYP21A2 55%", "PMS2 74%", "STRC 49%", "NCF1 50%"] }, + "failed": "Step 52 MUC1 VNTR: depth over the repeat 41x, below the 100x it needs: not assessed." + }, + { + "id": "F22", "person": "lia", "family": "carrier", "chapter": "carrier", "section": "carrier-list", "level": "carrier", + "title": "Carrier of cystic fibrosis (from Elena)", + "gene": "CFTR", "hgvs_p": "p.Phe508del", "zygosity": "het", "classification": "Pathogenic", "stars": 3, "inherited_from": "elena", + "what_it_means": "Lía carries one copy, from her mother, and is not affected. She did not inherit Marc's CFTR change, so the 1 in 4 did not happen for her.", + "what_to_do": "Matters for her own children one day." + }, + { + "id": "F23", "person": "lia", "family": "str", "chapter": "clinical", "section": "expansions", "level": "review", + "title": "FMR1 repeat in the intermediate range (from Elena)", + "gene": "FMR1", "alleles": [29, 49], "ci95": [[28, 30], [46, 52]], "range_label": "intermediate (45-54)", "inherited_from": "elena", "parent_allele": 48, + "what_it_means": "Lía's maternal allele grew from 48 to 49 repeats. Still intermediate; it does not cause disease.", + "caveat": "Short-read sizing is approximate: a one-repeat change is within the error." + }, + { + "id": "F24", "person": "lia", "family": "pgx", "chapter": "medicines", "section": "cpic", "level": "medicine", + "title": "CYP2C19: intermediate metaboliser", + "gene": "CYP2C19", "diplotype": "*1/*2", "phenotype": "Intermediate Metabolizer", "inherited_from": "marc (*2)", + "drugs": [ + { "drug": "clopidogrel", "cpic": "Avoid standard dose; use an alternative antiplatelet if possible.", "strength": "strong", "guideline": "CPIC 2022" }, + { "drug": "omeprazole, lansoprazole", "cpic": "Start at the standard dose; consider a lower dose for long-term use.", "strength": "optional", "guideline": "CPIC 2020" } + ], + "other_genes": [ { "gene": "CYP2D6", "diplotype": "*1/*1", "phenotype": "Normal Metabolizer" }, { "gene": "SLCO1B1", "diplotype": "*1/*1", "phenotype": "Normal Function" }, { "gene": "DPYD", "diplotype": "Reference/Reference", "phenotype": "Normal Metabolizer" }, { "gene": "TPMT", "diplotype": "*1/*1", "phenotype": "Normal Metabolizer" }, { "gene": "NUDT15", "diplotype": "*1/*1", "phenotype": "Normal Metabolizer" }, { "gene": "CYP2C9", "diplotype": "*1/*2", "phenotype": "Intermediate Metabolizer (activity 1.5)" } ], + "caveat": "Genes PharmCAT could not call are listed apart; absence from the drug list does not mean normal function." + }, + { + "id": "F25", "person": "lia", "family": "bloodtype", "chapter": "traits", "section": "bloodtype", "level": "info", + "title": "Predicted blood group O, RhD negative", + "systems": [ + { "system": "ABO", "phenotype": "O", "genotype": "O.01/O.01", "confidence": "high" }, + { "system": "RhD", "phenotype": "D-", "genotype": "RHD deleted / RHD deleted (copies by depth 0.04)", "confidence": "high" }, + { "system": "RhCE", "phenotype": "C-c+E-e+ (ce/ce)", "confidence": "high" }, + { "system": "Kell", "phenotype": "K-k+", "confidence": "high" }, + { "system": "Duffy", "phenotype": "Fy(a+b+)", "confidence": "high" }, + { "system": "Secretor", "phenotype": "secretor", "confidence": "high" } + ], + "parents": { "elena": "A1, RhD+ (D/d)", "marc": "O, RhD+ (D/d)" }, + "what_it_means": "Both parents are RhD positive with one RHD-deleted copy each; Lía inherited both deleted copies.", + "caveat": "A prediction from DNA, not a serological typing. For a transfusion the lab types the blood." + }, + { + "id": "F26", "person": "lia", "family": "trio", "chapter": "clinical", "section": "family", "level": "info", + "title": "1 de novo candidate that passes filters, outside any gene", + "ref": "families[0].trio.de_novo", + "what_it_means": "Every child carries a few dozen new changes; most candidates here are genotype errors. This one sits outside genes.", + "caveat": "Confirm a de novo change that matters by another method." + }, + { + "id": "F27", "person": null, "family_id": "ruiz", "family": "couple", "chapter": "carrier", "section": "couple", "level": "carrier", + "title": "Elena and Marc both carry a cystic fibrosis change", + "ref": "families[0].couple_screen", + "what_it_means": "Each pregnancy: 1 in 4 affected, 1 in 2 carrier, 1 in 4 neither. Lía is a carrier, not affected.", + "what_to_do": "Before another pregnancy, a genetic counsellor can explain options (clinical carrier confirmation, prenatal or preimplantation testing)." + }, + { + "id": "F28", "person": null, "family_id": "ruiz", "family": "relatedness", "chapter": "quality", "section": "family", "level": "trust", + "title": "Family relationships match the pedigree", + "ref": "families[0].relationships", + "what_it_means": "Each declared parent-child pair measures about 0.5; the partners measure unrelated. No sample swap." + } + ], + + "person_panels": { + "elena": { + "str_loci": [ { "locus": "HTT", "alleles": [17, 19], "normal_max": 26 }, { "locus": "FMR1", "alleles": [31, 48], "normal_max": 44, "label": "intermediate" }, { "locus": "C9orf72", "alleles": [2, 8], "normal_max": 23 }, { "locus": "DMPK", "alleles": [5, 13], "normal_max": 34 }, { "locus": "ATXN1", "alleles": [29, 31], "normal_max": 32 }, { "locus": "FXN", "alleles": [9, 18], "normal_max": 33 }, { "locus": "RFC1", "alleles": null, "note": "size not determined (flanking reads only)" } ], + "roh": { "segments_5mb_plus": 0, "total_mb_5mb_plus": 0, "segments_1_5mb": 38, "reading": "no sign that the parents are related" }, + "telomere": { "tel_content": 512, "note": "relative content; compare only with samples on the same platform" }, + "archaic": { "neanderthal_pct": 1.9, "segments": 498, "denisovan_pct": 0.1, "longest": "chr1:72.1-73.4 Mb, 1.3 Mb, NEGR1" }, + "traits": [ { "trait": "Lactase persistence", "reading": "likely digests milk as an adult", "gene": "MCM6/LCT", "genotype": "C/T" }, { "trait": "Caffeine metabolism", "reading": "fast", "gene": "CYP1A2", "genotype": "A/A" }, { "trait": "Earwax", "reading": "wet", "gene": "ABCC11", "genotype": "C/C" }, { "trait": "Eye colour", "reading": "likely brown", "gene": "HERC2", "genotype": "A/A" }, { "trait": "Bitter taste (PTC)", "reading": "taster (PAV/AVI)", "gene": "TAS2R38" }, { "trait": "Alcohol flush", "reading": "unlikely", "gene": "ALDH2", "genotype": "G/G" } ], + "blood": { "abo": "A1", "rhd": "D+ (D/d)" }, + "prs": [ { "condition": "Breast cancer", "percentile": 71 }, { "condition": "Coronary artery disease", "percentile": 34 }, { "condition": "Type 2 diabetes", "percentile": 58 }, { "condition": "LDL cholesterol", "percentile": 22 }, { "condition": "Atrial fibrillation", "percentile": 12 } ], + "mosaic": { "mca_calls": 0, "smallest_detectable_cell_fraction": 0.05, "loss_of_x": "not detected above 8% of cells" }, + "viral": { "hhv6_integrated": false, "found": [ { "virus": "EBV (HHV-4)", "reads": 214, "note": "most adults carry it for life; not a test for infection" } ] } + }, + "marc": { + "str_loci": [ { "locus": "HTT", "alleles": [18, 22], "normal_max": 26 }, { "locus": "FMR1", "alleles": [30], "normal_max": 44 }, { "locus": "C9orf72", "alleles": [2, 5], "normal_max": 23 }, { "locus": "DMPK", "alleles": [5, 11], "normal_max": 34 }, { "locus": "AR", "alleles": [22], "normal_max": 34 }, { "locus": "FXN", "alleles": [8, 9], "normal_max": 33 } ], + "roh": { "segments_5mb_plus": 1, "total_mb_5mb_plus": 6.2, "segments_1_5mb": 44, "reading": "one long run, within what unrelated parents give" }, + "telomere": { "tel_content": 438 }, + "archaic": { "neanderthal_pct": 2.1, "segments": 531, "denisovan_pct": 0.1 }, + "blood": { "abo": "O", "rhd": "D+ (D/d)" }, + "mosaic": { "mca_calls": 0, "loss_of_y": "not detected above 10% of cells" }, + "viral": { "hhv6_integrated": false, "found": [] } + }, + "lia": { + "str_loci": [ { "locus": "HTT", "alleles": [17, 22], "normal_max": 26 }, { "locus": "FMR1", "alleles": [29, 49], "normal_max": 44, "label": "intermediate" }, { "locus": "DMPK", "alleles": [5, 13], "normal_max": 34 } ], + "roh": { "segments_5mb_plus": 0, "total_mb_5mb_plus": 0, "reading": "no sign that the parents are related" }, + "mt_haplogroup": "H1c3", + "blood": { "abo": "O", "rhd": "D-" }, + "qc": { "mean_depth": 31.0, "titv": 2.07, "freemix": 0.003, "sex_check": "ok (XX)" }, + "ancestry_note": "Painting: about half Elena-like and half Marc-like reference similarity; continental Europe 94%." + } + }, + + "not_assessed_everyone": [ + "Changes ClinVar does not list, unless another step ranks them", + "Genes short reads cannot place (see the callability list of each person)", + "Long repeat expansions beyond read length (only a lower bound)", + "Methylation and imprinting", + "Somatic changes below about 10% of reads", + "Balanced rearrangements with breakpoints in repeats" + ] +} diff --git a/docs/design/journal/html/01-home.html b/docs/design/journal/html/01-home.html new file mode 100644 index 00000000..0b241184 --- /dev/null +++ b/docs/design/journal/html/01-home.html @@ -0,0 +1,448 @@ + + +People and runs · OwnGenome + + + + +
+ OwnGenome + +
+ New run
+
+ +
+ + +
+
+
On this server
+

One report is being written.
Three are finished, and one finding should go to a doctor.

+

The Ruiz family's three genomes are read, alone and together. The benchmark run of the public sample HG002 is past halfway.

+
+ +
+ +

Being written

a run in progress comes firstWatch it →
+ +
+
Benchmark · public reference sample
+
HG002
+
GIAB, male · started today 06:40 · HG002-BENCH
+
31 of 54 steps
+
+
31 done4 running19 waiting
+
+
+
Found so far
+
    +
  • Identity and quality: XY as declared; 34.1× depth; contamination 0.2%.
  • +
  • 2 pathogenic ClinVar changes, both one copy in recessive genes: carrier results.
  • +
  • Medicines: 4 genes with a changed function; the drug list follows.
  • +
  • ✎Being written now: cancer predisposition, structural changes, scores, mitochondria.
  • +
+
+
+
Timing
+
+
6.4 h
elapsed
+
~19 h
to go, from usual step times
+
+
Latest
+

12:58  ClinVar screen finished.
12:07  ▲ One task retried with more memory; it recovered.

+
+
+ +

The Ruiz family

3 genomes, 1 relative without oneFamily report →
+ + +

Every run

the log, for whoever runs the server
+ + + + + + + +
RunPersonStateStepsHoursFinishedNotes
HG002-BENCHHG002 (public)  running31 / 546.4about 19 h more1 task retried with more memory
RUIZ-FAMILYElena, Marc, Líafinished7 / 8—6 Nov, 14:22grandparent step skipped: no genome for Carmen
RUIZ-LIALía Ruizfinished54 / 5428.66 Nov, 12:053 skipped, by design
RUIZ-MARCMarc Ruizfinished53 / 5433.64 Nov, 17:40▲ MUC1 kidney step not assessed: depth 41×, needs 100×
RUIZ-ELENAElena Ruizfinished54 / 5430.64 Nov, 03:513 skipped, by design
+

● ClinVar 2026-11-06 is out. The three Ruiz reports used 2026-10-02; re-checking would update their carrier lists and the couple screen. Re-check all three

+
+ + + diff --git a/docs/design/journal/html/02-live-run.html b/docs/design/journal/html/02-live-run.html new file mode 100644 index 00000000..3a727346 --- /dev/null +++ b/docs/design/journal/html/02-live-run.html @@ -0,0 +1,478 @@ + + +HG002 · being written · OwnGenome + + + + +
+ OwnGenome + +
Live · updated 13:04
+
+ +
+
+
+
Being written  ·  benchmark run of a public reference sample
+

HG002

+

This report is being written as the steps finish, each section in its place. 31 of 54 are done, about 19 hours remain. Nothing needs you: one task ran out of memory, was retried with more, and recovered. The first findings are already in.

+
Notify me when it is donePause the run
+
+
+
31of 54 steps
+
+
■ 31 done■ 4 running□ 19 waiting0 failed
+
+
Elapsed6.4 hsince 06:40
+
To go~19 hfrom usual times
+
Retries1recovered
+
+
+
+ +
+
Figure 1  ·  The run so far, one line per step
▬ done▬ running, with its usual remaining time▲ retried
+
+
+ +
+ + +
+
+

1To act onBeing written

+
Is there anything to take to a doctor?
+
+
This section stays open until three steps finish. Cancer predisposition is running (22 of about 45 min); the secondary findings and the clinical filter wait on it. Until then this page says nothing either way.
+
+
+

2MedicinesHalf written

+
Which medicines should a prescriber know about?
+
New at 12:414 genes with a changed function. HLA typed: none of the listed drug-reaction alleles is present.
+
The drug list (one row per medicine) is typeset when the guideline lookup runs; it is next in the queue.
+
+
+

3For your familyWritten 12:58

+
What could be passed on to a child?
+
New at 12:582 pathogenic changes, one copy each, in recessive genes. A carrier is not affected; it matters if a partner carries the same gene.
+
+
+

4Worth a lookWaiting

+
Repeats, Lp(a), blood clones, mosaic changes.
+
+
Waits on Lp(a), blood clones (CHIP), mosaic changes and mitochondria (running, 4 of about 12 min). Repeats are sized already and join this section when it opens.
+
+
+

5Can I trust this?Written 10:14

+
About the data, not the person.
+

Data qualitySex from the reads is XY, as declared. Mean depth 34.1×, 97.8% of the genome at 10× or more. Another person's DNA: 0.2%, below the 3% line. 4,672,118 variants pass, Ti/Tv 2.06.

+
+
+

6OriginsWritten 11:20

+

Paternal line, maternal line, Neanderthal share and the ancestry projection are in. The finer regional split waits on its own step.

+
+
+

7Traits and scoresBeing written

+
Traits, blood groups, and risk scores with an ancestry-matched percentile.
+

Traits and blood groups are in. Scores are computing now (9 of about 55 min); a score appears only with its matched percentile.

+
+
+

8Assessed, no findingAt the end

+
Each step with nothing to report still says what it looked at.
+
+
+
+ + +
+
+ + + + diff --git a/docs/design/journal/html/03-person.html b/docs/design/journal/html/03-person.html new file mode 100644 index 00000000..040f5688 --- /dev/null +++ b/docs/design/journal/html/03-person.html @@ -0,0 +1,797 @@ + + +Elena Ruiz · OwnGenome + + + + +
+ OwnGenome + +
+
+ +
+
+
+
+
+
Personal genome report  ·  Ruiz family, chapter II
+

Elena Ruiz

+ +
+ +
+
+ +
+ + +
+ +
+
+

Of everything this genome was screened for, one finding should go to a doctor: a change in BRCA2 that raises the lifetime risk of breast and ovarian cancer. One medicine result bears on it, because Elena breaks down tamoxifen more slowly than most. She carries cystic fibrosis, and so does Marc, which makes it 1 in 4 for each pregnancy; Lía is a carrier and not affected. Her FMR1 repeat sits just above the usual range. The data is good enough to read.

+ +
Data quality32.4× depth·identity confirmed·no contamination·11 genes hard to read
+
+ +
+ +
+
+
Figure 1  ·  Where the findings sit
+
+
Each mark is one finding, on its chromosome. Shape and colour give the level, as in the row above. APOE is not drawn until you choose to see it (section 7).
+
+ +
+ + +
+
+
+
1

To act on

+
Is there anything to take to a doctor?
+ Take to a doctor +

Hereditary breast and ovarian cancer

+
BRCA2 · c.5946del · p.Ser1982ArgfsTer22 · one copy
+

One copy of BRCA2 carries a change that stops the protein early. People with such a change have a higher lifetime risk of breast and ovarian cancer, and to a smaller degree prostate and pancreatic cancer in male relatives. It is not a diagnosis of cancer.

+
What to do
+
    +
  1. Bring this to a doctor or a genetic counsellor.
  2. +
  3. Confirm it with a clinical test in a certified laboratory.
  4. +
  5. Ask about screening and prevention; these start earlier than the general programme.
  6. +
  7. Parents, brothers, sisters and children each have a 1 in 2 chance of carrying it. Elena's mother Carmen has no genome here.
  8. +
+
+
Did Lía inherit it? The family analysis answers this. It is an adult-onset finding about a child, so it stays closed until you open it.
+ +
+ + Read the full evidence: classification, reads, family → +
+ +
+
+ + +
+
+
+
2

Medicines

+
Which medicines should a prescriber know about?
+ Tell your prescriber +

Elena breaks down some medicines more slowly than most people: she is an intermediate metaboliser for CYP2D6, a liver enzyme that activates tamoxifen and codeine.

+ + + + +
TamoxifenConsider an aromatase inhibitor after menopause, or a higher tamoxifen dose (40 mg a day). Avoid strong CYP2D6 inhibitors. Relevant to the BRCA2 finding.Optional
CodeineUse the label dose. If it does not help, consider an opioid other than tramadol.Moderate
OndansetronNo change for an intermediate metaboliser.No action
+

Reason for every row: CYP2D6 *1/*4, activity score 1.0, two callers agree. Eleven other genes were called with no drug change; two could not be called. All 19 genes

+
+ +
+
+ + +
+
+
+
3

For your family

+
What could I pass on to a child?
+

A carrier has one changed copy of a gene where it takes two to cause the condition. Carriers are not affected; it matters when a partner carries the same gene.

+
+
+ Family planning ● newer ClinVar +

Cystic fibrosis carrier

+

CFTR p.Phe508del, the commonest cystic fibrosis change. Marc carries one too.

+
+
+
1 in 4 per pregnancy affected
Lía: carrier, not affected
+
+ The couple screen → +
+
+ Family planning +

Haemochromatosis carrier

+

HFE p.Cys282Tyr, one copy. Iron overload is rare with one copy. Marc carries no HFE change the screen sees.

+

Not a secondary finding: HFE is reported only with two C282Y copies.

+
+
+
+ +
+
+ + +
+
+
+
4

Worth a look

+
What deserves a conversation, but is not a diagnosis?
+ Worth a look +

Fragile X repeat in the intermediate range

+

One copy of FMR1 has 48 CGG repeats: more than usual, below a premutation. It does not cause disease, but it can grow by a few repeats when passed on. Lía's copy has 49. Worth a word with a genetic counsellor before a future pregnancy.

+
+
Figure 2  ·  FMR1 CGG repeats, both copies
+
+
+
+
Figure 3  ·  Every repeat locus checked
+
+
Dots are the two copies; the shaded part is the range most people carry; the tick is where expansion begins for that gene. Scales differ per row.
+
+
+ +
+
+ + +
+
+
+
5

Can I trust this?

+
This is about the data, not about Elena.
+
+
Depth32.4×about 30× was paid for
+
At 10× or more98.1%of the genome
+
Other DNA0.4%below the 3% line
+
Sex checkXXmatches declared
+
+

Genes this genome reads poorly

+

In these genes a "no finding" says nothing. 11 genes fall below 90% readable; 4 are not on the reference at all.

+
+

Not on this reference: GSTT1, HLA-DRB3, HLA-DRB4, KIR2DL2. All 11 genes

+
+ +
+
+ + +
+
+
+
6

Origins

+
Where do my ancestors come from?
+

Elena's genome is most similar to Southern European reference groups, closest to Iberian samples. This measures similarity to reference people; it is not a nationality.

+
+
+
+
Figure 4  ·  Regional similarity
+
+

Continental: Europe 92% (90–94), Middle East and North Africa 6% (4–8), sub-Saharan Africa 1%, other 1%.

+
+
+
+
Figure 5  ·  Chromosome painting, both copies of each chromosome
+
+
Each stretch is coloured by the reference group it resembles most. Colours as in figure 4.
+
+
+
Maternal lineH1c3commonest branch in Western Europe; Lía shares it
+
Neanderthal1.9%498 stretches; about 2% is typical outside Africa
+
Long runs of sameness0 Mbno sign the parents are related
+
+
+ +
+
+ + +
+
+
+
7

Traits and scores

+
What do studies say about my traits and risk scores?
+

A percentile places Elena among 100 reference people of similar (European) ancestry. It is not a probability, and scores of different conditions are not comparable.

+
+
Figure 6  ·  Polygenic scores, ancestry-matched (EUR, 98.7% of variants found)
+
+
050100
+
+

Traits

+ + + + + + + + +
TraitReadingGeneGenotype
Lactase persistencelikely digests milk as an adultMCM6/LCTC/T
Caffeine metabolismfastCYP1A2A/A
Eye colourlikely brownHERC2A/A
Bitter taste (PTC)tasterTAS2R38PAV/AVI
EarwaxwetABCC11C/C
Alcohol flushunlikelyALDH2G/G
+
+
Blood groupA1, RhD+one RhD-deleted copy, passed to Lía
+
Telomere content512relative; no normal range exists
+
Alzheimer's (APOE)Closedopens only on purpose
+
+
+
APOE relates to the risk of late-onset Alzheimer's disease. Many people choose not to know. Nothing about prevention changes on APOE alone.
+ +
+
+ +
+
+ + +
+
+
+
8

Assessed, no finding

+
No finding in what these steps assessed. Each line says what it does not see.
+
    +
  • Structural changesNo class 4 or 5 deletion or duplication in a disease gene, of 6,204 called.Short reads miss many insertions and inversions.
  • +
  • MitochondriaNo disease-listed change. One common D-loop variant at 18%.Blood under-represents other tissues.
  • +
  • Large mosaic changesNone found; loss of X not seen above 8% of cells.Below about 5% of cells, invisible.
  • +
  • Viral DNANo integrated HHV-6. EBV reads present, as in most adults.Not a test for infection.
  • +
  • Secondary findingsBRCA2 only, shown in section 1. No other of the 84 genes.One hit in a two-hit gene is not reported here.
  • +
  • Symptom rankingNot run: no symptoms were given.
  • +
+ +
+ +
+
+ + +
+
+
+
9

What this report cannot see

+
For every person on this server.
+
    +
  • Changes ClinVar does not list, unless another step ranks them
  • +
  • Genes short reads cannot place (section 5)
  • +
  • Long repeat expansions beyond read length: only a lower bound
  • +
  • Methylation and imprinting
  • +
  • Changes in under about 10% of blood cells
  • +
  • Balanced rearrangements with breakpoints in repeats
  • +
+
+ +
+
+ + +
+
+
+
10

Sources and files

+ + + + + + + +
SourceUsedNewestWould change
ClinVar2026-10-022026-11-06carrier list, couple screen, clinical screen; not BRCA2
Ensembl VEP115samenothing
PharmCAT3.4.0samenothing
Cancer bundle2026-06-01samenothing
PGS Catalog2026-09samenothing
+ +
+ +
+
+
+
+
+ + + + diff --git a/docs/design/journal/html/04-finding.html b/docs/design/journal/html/04-finding.html new file mode 100644 index 00000000..7452b255 --- /dev/null +++ b/docs/design/journal/html/04-finding.html @@ -0,0 +1,563 @@ + + +Hereditary breast and ovarian cancer · Elena Ruiz · OwnGenome + + + + +
+ OwnGenome + +
+
+ +
+ + +
+
+
+
Take to a doctorThe only finding at this level in Elena's genome
+

Hereditary breast and ovarian cancer

+
BRCA2c.5946delp.Ser1982ArgfsTer22chr13:32340301 GT>Gone copy (heterozygous)
+

One copy of BRCA2, a gene that repairs broken DNA, has lost a single letter. From that point the gene is read out of step, and the protein stops about 1,400 building blocks short. People with such a change have a higher lifetime risk of breast and ovarian cancer. It is not a diagnosis of cancer.

+
+ +
+ +
+
+
Figure 1  ·  The BRCA2 protein, and where this change cuts it
+
+
Everything to the right of the cut is not made, including the part that binds DNA. Changes like this are why the gene is classed as a cause of hereditary cancer.
+
+ +
+ +
+
+

What to do

+
In this order. None of it is urgent this week; all of it is worth doing.
+
    +
  1. Bring this page to a doctor or a genetic counsellor.A counsellor explains what it means for Elena and her relatives.
  2. +
  3. Confirm it with a clinical test in a certified laboratory.This pipeline is research; a clinic will not act on it alone.
  4. +
  5. Ask about screening and prevention.Breast screening with MRI, and options for the ovaries, start earlier than the general programme.
  6. +
  7. Tell close relatives they can be tested.Parents, brothers, sisters and children each have a 1 in 2 chance of carrying it.
  8. +
+ +
+ +
+ +
+
+
+
iii

The evidence

+
Why the pipeline calls this pathogenic, and how sure each source is.
+
+
ClassificationPathogenicClinVar and the cancer report agree
+
ClinVar review★★★★reviewed by an expert panel (ENIGMA); 4 stars is a practice guideline
+
Cancer reportTier 1the highest of five; also on the 84-gene secondary-findings list
+
+
+
PVS1Loss of function in a gene where loss of function causes the disease. Very strong.
+
PM2_SupportingRare in the population (below).
+
Reporting ruleBRCA2 is a dominant gene: one pathogenic copy is reported.
+
+
+
Figure 2  ·  How common the change is (gnomAD, log scale)
+
+
About 1 person in 5,600 carries it. Above 1% a change is unlikely to cause a strong effect; this one is far below.
+
+

Missense predictors (REVEL, AlphaMissense) do not score frameshifts: not applicable. CADD 35. Splicing (SpliceAI): no effect predicted.

+
+ +
+
+ +
+
+
+
iv

The reads

+
Is the change really there, in the raw data?
+
+
Figure 3  ·  Reads over chr13:32,340,301 (sketch of the 34 reads)
+
+
Each line is one read. 17 reads lack the T (red); 17 carry it. Half and half is what one changed copy looks like.
+
+
+
Depth34reads at this spot
+
With the change17reads
+
Allele balance0.50one copy ≈ 0.5
+
Call quality63above 30 is confident
+
+ +
+ +
+
+ +
+
+
+
v

In the family

+
Who else this concerns.
+
+
+
+

Each of Elena's parents, siblings and children had a 1 in 2 chance of carrying it. Marc does not carry it. Carmen, Elena's mother, has no genome here: sequencing her would show which side it came from.

+
+
Lía's result. An adult-onset finding about a child. Many families wait until the child can choose.
+ +
+ +
+
+
+ +
+
+ +
+ +
+ +
+
+
+
vii

Caveat and sources

+

A research pipeline, not a clinical test. Confirm every pathogenic finding in a certified laboratory before acting. The classification is ClinVar's and the cancer report's, not the pipeline's own judgement. A short deletion inside a run of the same letter can be placed one position off; the change and its effect are the same.

+ + + + + + +
SourceReleaseWhat it gave
ClinVar2026-10-02 (2026-11-06 out)Pathogenic, 3 stars, expert panel
Cancer report (CPSR)PCGR 2.2, 2026-06-01Tier 1, ACMG codes
Secondary findingsACMG SF v3.3Reported: dominant gene
gnomADv4.10.009% (allele frequency)
+
+ +
+
+
+
+ + + + diff --git a/docs/design/journal/html/05-family.html b/docs/design/journal/html/05-family.html new file mode 100644 index 00000000..9316654c --- /dev/null +++ b/docs/design/journal/html/05-family.html @@ -0,0 +1,616 @@ + + +The Ruiz family · OwnGenome + + + + +
+ OwnGenome + +
ElenaMarcLía
+
+ +
+
+
+
+
Family report  ·  three genomes read together
+

The Ruiz family

+

The relationships match what was declared. Elena and Marc both carry cystic fibrosis, so each pregnancy has a 1 in 4 chance of an affected child. Lía inherited Elena's copy only: she is a carrier, not affected. Her FMR1 repeat grew from 48 to 49, still intermediate, and her RhD-negative blood came from both parents. One new change in Lía passed the filters, outside any gene.

+
+ + +
+
Figure 1  ·  The pedigree, with each person's findings
+
+
+ + +
+ + +
+
IChapter one
+
+

Who is related how

+
Do the genomes agree with the family tree? If not, nothing else here can be trusted.
+

Every declared parent and child shares about half their DNA, and Elena and Marc are unrelated. No sample was swapped.

+
+
Figure 2  ·  Relatedness, expected against measured
+
+
Ring: what the family tree predicts. Dot: what the DNA measures. 0.5 is parent and child; 0 is unrelated.
+
+ + + + + +
PairSharedStretchesLongestReads asCheck
Elena · Lía3,389 cM23281.4 cMparent and childagrees
Marc · Lía3,381 cM25267.9 cMparent and childagrees
Elena · Marc5.1 cM22.9 cMunrelated, or beyond 4th degreeagrees
+
+ +
+ + +
+
IIChapter two
+
+ For family planning ● newer ClinVar may change this screen +

For future children

+
Do Elena and Marc carry anything a child could inherit from both?
+

They share one gene: CFTR, cystic fibrosis. Elena carries p.Phe508del and Marc p.Gly542Ter, both pathogenic with three review stars. Neither is affected. Each pregnancy is a fresh draw of four equally likely children:

+
+
Affected1 in 4 · both changes
+
Carrier, like Elena1 in 4 · not affected
Lía
+
Carrier, like Marc1 in 4 · not affected
+
Neither change1 in 4
+
+

What to do: before another pregnancy, a genetic counsellor can explain the options: clinical carrier confirmation, and prenatal or preimplantation testing.

+ +

Everything else the screen found

+ + + + + + +
ConditionMarcElenaFor a child
Cystic fibrosis CFTRcarriercarrier1 in 4 affected
Phenylketonuria PAHcarriernone foundmay be a carrier; not affected unless Elena carries a change the screen misses
Haemochromatosis HFEnone foundcarriermay be a carrier
Fragile X FMR130 repeats31 / 48not counted: below the 55 the screen counts; see chapter IV
+
+
SMN1 (spinal muscular atrophy)Both 2 copies. Two copies do not rule out a silent carrier.
+
Deletions read from depthGJB6, CFTR exons 2–3, AZF: absent. HBB 619 bp: too short to assess.
+
X-linkedNo shared or X-linked finding besides the FMR1 context row.
+
+
+ +
+ + +
+
IIIChapter three
+
+

What Lía inherited

+
For each finding in a parent: did it reach Lía?
+ + + + + + + + + +
Finding in a parentFromLíaHow we know
Cystic fibrosis carrier CFTR p.Phe508delElena● inheritedgenotype
Cystic fibrosis carrier CFTR p.Gly542TerMarc○ not inheritedgenotype
Fragile X intermediate repeat FMR1Elena● inherited, 48 → 49repeat length
Clopidogrel response CYP2C19 *2Marc● inherited, one copygenotype
Phenylketonuria carrier PAHMarc○ not inheritedgenotype
Haemochromatosis carrier HFEElena○ not inheritedgenotype
Hereditary breast and ovarian cancer BRCA2Elena
+
+
Figure 3  ·  Lía's chromosomes: which copy came from whom
+
+
Top line of each pair: the copy from Marc; bottom line: from Elena. Gaps could not be assigned. Pins mark the inherited findings above. With no grandparent sequenced, the map cannot show where each parent's own two copies crossed over.
+
+
+ +
+ + +
+
IVChapter four
+
+

Two small stories

+
Inheritance you can see in a single number.
+
+
+ Worth a look +

A repeat that grew by one

+

Elena's longer FMR1 copy has 48 CGG repeats; the copy Lía received has 49. Both are intermediate: no disease, but it can grow a little each generation.

+
+

A one-repeat change is within the sizing error.

+
+
+ Information +

RhD negative from two RhD-positive parents

+

Both parents are RhD positive with one deleted RHD copy each. Lía received both deleted copies, a 1 in 4 outcome.

+
+
Elena D
Elena d
+
D
D/Dpositive
D/dpositive
+
d
D/dpositive
d/dnegative · Lía
+
+

ABO: Elena A1, Marc O, Lía O. A prediction from DNA, not a lab typing.

+
+
+
+ +
+ + +
+
VChapter five
+
+

New and paired changes

+
Changes in Lía that neither parent has, and genes where she carries two.
+

New in Lía (de novo)

+

Every child carries a few dozen new changes; most candidates found this way are reading errors. One passes the filters, and it sits outside any gene.

+ + + + +
PositionChangeLía's readsDepth L · M · EGeneFilter
chr7:98,114,350C>T46% alt33 · 30 · 35none nearbypasses
chr12:33,908,211A>G19% alt8 · 31 · 29none nearbylow: likely an error
+

Two changes in one gene

+

Two changes matter only when they sit on different copies (in trans) of a gene that fits. Neither pair here needs action.

+ + + + +
GeneChangesCopiesReading
USH2Ap.Thr1257Ile · c.8559-14A>Gsame copy, both from Marcthe other copy is intact
TTNp.Arg3412His · p.Val16211Metone from each parentboth benign or uncertain; TTN carries rare changes in everyone
+
+ +
+ +
+
Appendix
+
+

What we ran for this family

+
    +
  • ✓Called all three genomes together, so a change is judged the same way in everyoneElena, Marc, Lía
  • +
  • ✓Checked every relationship against the family treeall pairs
  • +
  • ✓Placed Lía's DNA on each parent's copy, and searched it for new and paired changesLía
  • +
  • ✓Measured shared stretches between every pairall pairs
  • +
  • ✓Screened the couple for genes both carryElena + Marc
  • +
  • —Grandparent phasing did not run: Carmen has no genome on this serverskipped
  • +
+
+ +
+
+ + + + diff --git a/docs/design/journal/html/06-person-mobile.html b/docs/design/journal/html/06-person-mobile.html new file mode 100644 index 00000000..2b0a45b6 --- /dev/null +++ b/docs/design/journal/html/06-person-mobile.html @@ -0,0 +1,480 @@ + + +Marc Ruiz · OwnGenome + + + + +
OwnGenome‹ Ruiz family⌕
+ +
+ +
Personal genome report
+
Marc Ruiz
+
41 · male (XY, as declared) · father of Lía · finished 4 Nov
+

Nothing in what was assessed reaches take to a doctor. Two results are for whoever prescribes: clopidogrel would not work well, and simvastatin should stay at 20 mg or less. Three point at the heart together, and a blood Lp(a) test is the one thing worth doing.

+
+ + +
✓Data: 29.1× · identity confirmed · 1 step not assessed
+ +
+
1

To act on

+
Is there anything to take to a doctor?
+
No finding in what these steps assessed.They look at known disease changes, cancer genes, the 84 secondary-finding genes, repeats and large deletions. They do not see changes ClinVar does not list, 14 hard-to-read genes, or the MUC1 kidney gene, which was not assessed (section 6).
+
+ +
+
2

Medicines

+
Show this list to a doctor or pharmacist.
+
+
Marc's medicines list6 drugs
+
ClopidogrelAvoid
Use prasugrel or ticagrelor if suitable.
CYP2C19 poor metaboliser (*2/*2) · strong evidence
+
Simvastatin20 mg max
Or another statin: rosuvastatin, pravastatin.
SLCO1B1 decreased function · strong
+
Atorvastatin40 mg max
Higher only with monitoring.
SLCO1B1 · moderate
+
Citalopram, escitalopramHalf dose
Start at 50%, raise slowly, or choose another.
CYP2C19 · moderate
+
VoriconazoleAvoid
Choose an antifungal not using CYP2C19.
CYP2C19 · moderate
+
Omeprazole, pantoprazoleConsider
Standard dose; lower it for long-term use.
CYP2C19 · optional
+
+

CaveatA research tool; confirm with a certified test before a prescription changes.

+ Open full screen for the pharmacist +
+ +
+
3

The heart, together

+
Three results that point the same way.
+
+
+ Worth a look +

Genetically high Lp(a) likely

+

Few copies of a repeat in the LPA gene go with a high Lp(a), a blood fat that raises the risk of heart attack.

+
+
rs10455872 · risk allelers3798220 · none
+

Do: ask for one blood Lp(a) test. It is what counts.

+
+
+ Information +

Coronary artery disease score: 88th percentile

+

Higher than 88 of 100 people of similar (European) ancestry. Not a probability: measured LDL, blood pressure and Lp(a) say far more.

+
+
+
+ Prescriber +

If a statin starts, choose it with SLCO1B1 in mind

+

Simvastatin 20 mg or less, or rosuvastatin or pravastatin. See the list

+
+
+
+ +
+
4

Worth a look

+

What deserves a conversation, but is not a diagnosis?

+
+ Worth a look +

HLA-B*27 present

+

About 8% of Europeans carry it; most never develop spondylitis. None of the four listed drug-reaction alleles is present.

+

CaveatTyping from short reads is approximate.

+
+
+ +
+
5

For your family

+

What could Marc pass on to a child?

+
+ Family planning +

Cystic fibrosis carrier, shared with Elena

+

CFTR p.Gly542Ter. Both partners carry one: 1 in 4 per pregnancy. Lía did not inherit Marc's copy.

+ The couple screen → +
+
+ Family planning +

Phenylketonuria carrier

+

PAH p.Arg408Trp. Elena carries no PAH change the screen sees. Lía did not inherit it.

+
+
+ +
+
6

Can I trust this?

+
About the data, not about Marc.
+
+
Depth29.1×
+
At 10×97.2%
+
Other DNA0.6%
+
Sex checkXY ✓
+
+
▲ Not assessed
MUC1 kidney gene. The repeat had 41× depth; this step needs 100×. Read it as not checked, not as clear. Rerun with deeper data
+
+ +
+
7

Explore

+
Everything else we uncovered.
+
OriginsPaternal line R-DF27 · maternal J1c2 · Neanderthal 2.1%+
+
Scores and traits6 scores · blood group O, RhD+ · telomeres+
+
Repeats6 loci sized, all below their expansion line+
+
Assessed, no findingBlood clones, mosaic changes, viral DNA, structural+
+
What it cannot see6 limits for everyone, 14 hard genes+
+
Sources and filesClinVar 2026-11-06 is out; this used 2026-10-02+
+
+ +
OwnGenome 1.0.0 · a research pipeline, not a clinical test · RUIZ-MARC · synthetic data
+ + + + + diff --git a/docs/design/journal/html/07-alt-person.html b/docs/design/journal/html/07-alt-person.html new file mode 100644 index 00000000..2adf60e0 --- /dev/null +++ b/docs/design/journal/html/07-alt-person.html @@ -0,0 +1,548 @@ + + +Elena Ruiz · OwnGenome (cover variant) + + + + +
+ OwnGenome + +
Long-form view
+
+ +
+ +
+
+
Personal genome reportRuiz family · chapter IIfinished 4 Nov 2026
+

Elena Ruiz

+

One finding for a doctor: a BRCA2 change that raises the risk of breast and ovarian cancer. One medicine result bears on it. Everything else is for planning, or for interest.

+
38, female, XX as declaredmother of Lía, partner of MarcData good to readRUIZ-ELENA · GRCh38
+
+ +
+ + +
+
Figure 1 · Elena's genome end to end, every finding pinned where it sitsAPOE is not drawn until opened
+
+
+ + +
+
Take to a doctor
1
  • Hereditary breast and ovarian cancerBRCA2 · pathogenic, 3 stars
+
Tell your prescriber
1
  • Tamoxifen, codeineCYP2D6 intermediate metaboliser
+
Worth a look
1
  • Fragile X repeat, intermediateFMR1 48 · may grow when passed on
+
Family planning
2
  • Cystic fibrosis carrierMarc carries it too: 1 in 4
  • Haemochromatosis carrierone copy; Marc none
+
For information
14
  • Origins, traits, scoresIberian 71% · H1c3 · 1.9% Neanderthal
  • Alzheimer's (APOE)closed; opens on purpose
+
+ + +
+
+ Section 1 · Take to a doctor +

One copy of BRCA2 stops short, and that raises the lifetime risk of breast and ovarian cancer.

+
+

One letter is missing from Elena's BRCA2, a gene that repairs broken DNA. From there the gene is read out of step, and the protein ends about 1,400 building blocks early, before the part that binds DNA.

+

It is not a diagnosis of cancer. It means screening and prevention start earlier than the general programme, and that her relatives each had a 1 in 2 chance of carrying it. Whether Lía did is closed on this page: it is an adult-onset result about a child.

+
+
+
+
1

See a genetic counsellor

Bring the doctor's page.
+
2

Confirm in a certified lab

A clinic will not act on research data alone.
+
3

Ask about screening

MRI and ovarian options start earlier.
+
4

Tell close relatives

Each can be tested.
+
+
The full evidence →Prepare a page for a doctor
+
+ +
+ + +

Everything else, in six figures

Each panel answers one question; open it for the section.
+
+
+
A

Medicines

+

She breaks down tamoxifen and codeine more slowly than most (CYP2D6 *1/*4).

+
TamoxifenConsider an aromatase inhibitor, or 40 mg a day
CodeineLabel dose; if it fails, not tramadol
OndansetronNo change
+ All 19 genes → +
+
+
B

Children with Marc

+

Both carry cystic fibrosis: 1 in 4 per pregnancy. Lía is a carrier, not affected.

+
Affected1 in 4
Carrier, like Elena1 in 4 · Lía
Carrier, like Marc1 in 4
Neither1 in 4
+ The couple screen → +
+
+
C

Repeats

+

Seven loci checked. FMR1 at 48 is intermediate; RFC1 could not be sized.

+
+
+
+
D

Can I trust this?

+

Yes, with 11 genes read poorly; a silence there says nothing.

+
Depth32.4×
At 10× or more98.1%
Other DNA0.4%
Sex checkXX
+
+
+
E

Origins

+

Most similar to Iberian reference groups. Maternal line H1c3.

+
+
+
+
F

Scores

+

Percentiles among people of similar ancestry. Not probabilities, not comparable.

+
+
+
+ + +
+
8

Checked, no finding

+

Nothing here is an all-clear: each line names what the analysis does not see.

+
+
Structural changesNo class 4–5 change in a disease gene, of 6,204.
Short reads miss insertions and inversions.
+
MitochondriaNo disease-listed change.
Blood under-represents other tissues.
+
Large mosaic changesNone above 8% of cells.
Below about 5% is invisible.
+
Viral DNANo integrated HHV-6.
Not a test for infection.
+
Secondary findingsBRCA2 only, of 84 genes.
One hit in a two-hit gene is not reported.
+
Blood clonesNone at 30×.
Only clones above about 12% are visible.
+
Symptom rankingNo symptoms were given.
+
Long-read paralogsNeeds PacBio HiFi data.
+
What no step seesChanges ClinVar does not list, methylation, under 10% of cells. All limits
+
+
+
+ + + + diff --git a/docs/design/journal/screens/01-home.png b/docs/design/journal/screens/01-home.png new file mode 100644 index 00000000..53634167 Binary files /dev/null and b/docs/design/journal/screens/01-home.png differ diff --git a/docs/design/journal/screens/02-live-run.png b/docs/design/journal/screens/02-live-run.png new file mode 100644 index 00000000..994f892a Binary files /dev/null and b/docs/design/journal/screens/02-live-run.png differ diff --git a/docs/design/journal/screens/03-person.png b/docs/design/journal/screens/03-person.png new file mode 100644 index 00000000..6035b7e9 Binary files /dev/null and b/docs/design/journal/screens/03-person.png differ diff --git a/docs/design/journal/screens/04-finding.png b/docs/design/journal/screens/04-finding.png new file mode 100644 index 00000000..ebe78e42 Binary files /dev/null and b/docs/design/journal/screens/04-finding.png differ diff --git a/docs/design/journal/screens/05-family.png b/docs/design/journal/screens/05-family.png new file mode 100644 index 00000000..a45dded4 Binary files /dev/null and b/docs/design/journal/screens/05-family.png differ diff --git a/docs/design/journal/screens/06-person-mobile.png b/docs/design/journal/screens/06-person-mobile.png new file mode 100644 index 00000000..e3759f11 Binary files /dev/null and b/docs/design/journal/screens/06-person-mobile.png differ diff --git a/docs/design/journal/screens/07-alt-person.png b/docs/design/journal/screens/07-alt-person.png new file mode 100644 index 00000000..8cd3df52 Binary files /dev/null and b/docs/design/journal/screens/07-alt-person.png differ diff --git a/docs/design/journal/src/01-home.html b/docs/design/journal/src/01-home.html new file mode 100644 index 00000000..f7770d85 --- /dev/null +++ b/docs/design/journal/src/01-home.html @@ -0,0 +1,185 @@ + + +People and runs · OwnGenome + + + +
+ OwnGenome + +
+ New run
+
+ +
+ + +
+
+
On this server
+

One report is being written.
Three are finished, and one finding should go to a doctor.

+

The Ruiz family's three genomes are read, alone and together. The benchmark run of the public sample HG002 is past halfway.

+
+ +
+ +

Being written

a run in progress comes firstWatch it →
+ +
+
Benchmark · public reference sample
+
HG002
+
GIAB, male · started today 06:40 · HG002-BENCH
+
31 of 54 steps
+
+
31 done4 running19 waiting
+
+
+
Found so far
+
    +
  • Identity and quality: XY as declared; 34.1× depth; contamination 0.2%.
  • +
  • 2 pathogenic ClinVar changes, both one copy in recessive genes: carrier results.
  • +
  • Medicines: 4 genes with a changed function; the drug list follows.
  • +
  • ✎Being written now: cancer predisposition, structural changes, scores, mitochondria.
  • +
+
+
+
Timing
+
+
6.4 h
elapsed
+
~19 h
to go, from usual step times
+
+
Latest
+

12:58  ClinVar screen finished.
12:07  ▲ One task retried with more memory; it recovered.

+
+
+ +

The Ruiz family

3 genomes, 1 relative without oneFamily report →
+ + +

Every run

the log, for whoever runs the server
+ + + + + + + +
RunPersonStateStepsHoursFinishedNotes
HG002-BENCHHG002 (public)  running31 / 546.4about 19 h more1 task retried with more memory
RUIZ-FAMILYElena, Marc, Líafinished7 / 8—6 Nov, 14:22grandparent step skipped: no genome for Carmen
RUIZ-LIALía Ruizfinished54 / 5428.66 Nov, 12:053 skipped, by design
RUIZ-MARCMarc Ruizfinished53 / 5433.64 Nov, 17:40▲ MUC1 kidney step not assessed: depth 41×, needs 100×
RUIZ-ELENAElena Ruizfinished54 / 5430.64 Nov, 03:513 skipped, by design
+

● ClinVar 2026-11-06 is out. The three Ruiz reports used 2026-10-02; re-checking would update their carrier lists and the couple screen. Re-check all three

+
+ + + diff --git a/docs/design/journal/src/02-live-run.html b/docs/design/journal/src/02-live-run.html new file mode 100644 index 00000000..2e2a4f4e --- /dev/null +++ b/docs/design/journal/src/02-live-run.html @@ -0,0 +1,215 @@ + + +HG002 · being written · OwnGenome + + + +
+ OwnGenome + +
Live · updated 13:04
+
+ +
+
+
+
Being written  ·  benchmark run of a public reference sample
+

HG002

+

This report is being written as the steps finish, each section in its place. 31 of 54 are done, about 19 hours remain. Nothing needs you: one task ran out of memory, was retried with more, and recovered. The first findings are already in.

+
Notify me when it is donePause the run
+
+
+
31of 54 steps
+
+
■ 31 done■ 4 running□ 19 waiting0 failed
+
+
Elapsed6.4 hsince 06:40
+
To go~19 hfrom usual times
+
Retries1recovered
+
+
+
+ +
+
Figure 1  ·  The run so far, one line per step
▬ done▬ running, with its usual remaining time▲ retried
+
+
+ +
+ + +
+
+

1To act onBeing written

+
Is there anything to take to a doctor?
+
+
This section stays open until three steps finish. Cancer predisposition is running (22 of about 45 min); the secondary findings and the clinical filter wait on it. Until then this page says nothing either way.
+
+
+

2MedicinesHalf written

+
Which medicines should a prescriber know about?
+
New at 12:414 genes with a changed function. HLA typed: none of the listed drug-reaction alleles is present.
+
The drug list (one row per medicine) is typeset when the guideline lookup runs; it is next in the queue.
+
+
+

3For your familyWritten 12:58

+
What could be passed on to a child?
+
New at 12:582 pathogenic changes, one copy each, in recessive genes. A carrier is not affected; it matters if a partner carries the same gene.
+
+
+

4Worth a lookWaiting

+
Repeats, Lp(a), blood clones, mosaic changes.
+
+
Waits on Lp(a), blood clones (CHIP), mosaic changes and mitochondria (running, 4 of about 12 min). Repeats are sized already and join this section when it opens.
+
+
+

5Can I trust this?Written 10:14

+
About the data, not the person.
+

Data qualitySex from the reads is XY, as declared. Mean depth 34.1×, 97.8% of the genome at 10× or more. Another person's DNA: 0.2%, below the 3% line. 4,672,118 variants pass, Ti/Tv 2.06.

+
+
+

6OriginsWritten 11:20

+

Paternal line, maternal line, Neanderthal share and the ancestry projection are in. The finer regional split waits on its own step.

+
+
+

7Traits and scoresBeing written

+
Traits, blood groups, and risk scores with an ancestry-matched percentile.
+

Traits and blood groups are in. Scores are computing now (9 of about 55 min); a score appears only with its matched percentile.

+
+
+

8Assessed, no findingAt the end

+
Each step with nothing to report still says what it looked at.
+
+
+
+ + +
+
+ + + + diff --git a/docs/design/journal/src/03-person.html b/docs/design/journal/src/03-person.html new file mode 100644 index 00000000..5e9e6332 --- /dev/null +++ b/docs/design/journal/src/03-person.html @@ -0,0 +1,534 @@ + + +Elena Ruiz · OwnGenome + + + +
+ OwnGenome + +
+
+ +
+
+
+
+
+
Personal genome report  ·  Ruiz family, chapter II
+

Elena Ruiz

+ +
+ +
+
+ +
+ + +
+ +
+
+

Of everything this genome was screened for, one finding should go to a doctor: a change in BRCA2 that raises the lifetime risk of breast and ovarian cancer. One medicine result bears on it, because Elena breaks down tamoxifen more slowly than most. She carries cystic fibrosis, and so does Marc, which makes it 1 in 4 for each pregnancy; Lía is a carrier and not affected. Her FMR1 repeat sits just above the usual range. The data is good enough to read.

+ +
Data quality32.4× depth·identity confirmed·no contamination·11 genes hard to read
+
+ +
+ +
+
+
Figure 1  ·  Where the findings sit
+
+
Each mark is one finding, on its chromosome. Shape and colour give the level, as in the row above. APOE is not drawn until you choose to see it (section 7).
+
+ +
+ + +
+
+
+
1

To act on

+
Is there anything to take to a doctor?
+ Take to a doctor +

Hereditary breast and ovarian cancer

+
BRCA2 · c.5946del · p.Ser1982ArgfsTer22 · one copy
+

One copy of BRCA2 carries a change that stops the protein early. People with such a change have a higher lifetime risk of breast and ovarian cancer, and to a smaller degree prostate and pancreatic cancer in male relatives. It is not a diagnosis of cancer.

+
What to do
+
    +
  1. Bring this to a doctor or a genetic counsellor.
  2. +
  3. Confirm it with a clinical test in a certified laboratory.
  4. +
  5. Ask about screening and prevention; these start earlier than the general programme.
  6. +
  7. Parents, brothers, sisters and children each have a 1 in 2 chance of carrying it. Elena's mother Carmen has no genome here.
  8. +
+
+
Did Lía inherit it? The family analysis answers this. It is an adult-onset finding about a child, so it stays closed until you open it.
+ +
+ + Read the full evidence: classification, reads, family → +
+ +
+
+ + +
+
+
+
2

Medicines

+
Which medicines should a prescriber know about?
+ Tell your prescriber +

Elena breaks down some medicines more slowly than most people: she is an intermediate metaboliser for CYP2D6, a liver enzyme that activates tamoxifen and codeine.

+ + + + +
TamoxifenConsider an aromatase inhibitor after menopause, or a higher tamoxifen dose (40 mg a day). Avoid strong CYP2D6 inhibitors. Relevant to the BRCA2 finding.Optional
CodeineUse the label dose. If it does not help, consider an opioid other than tramadol.Moderate
OndansetronNo change for an intermediate metaboliser.No action
+

Reason for every row: CYP2D6 *1/*4, activity score 1.0, two callers agree. Eleven other genes were called with no drug change; two could not be called. All 19 genes

+
+ +
+
+ + +
+
+
+
3

For your family

+
What could I pass on to a child?
+

A carrier has one changed copy of a gene where it takes two to cause the condition. Carriers are not affected; it matters when a partner carries the same gene.

+
+
+ Family planning ● newer ClinVar +

Cystic fibrosis carrier

+

CFTR p.Phe508del, the commonest cystic fibrosis change. Marc carries one too.

+
+
+
1 in 4 per pregnancy affected
Lía: carrier, not affected
+
+ The couple screen → +
+
+ Family planning +

Haemochromatosis carrier

+

HFE p.Cys282Tyr, one copy. Iron overload is rare with one copy. Marc carries no HFE change the screen sees.

+

Not a secondary finding: HFE is reported only with two C282Y copies.

+
+
+
+ +
+
+ + +
+
+
+
4

Worth a look

+
What deserves a conversation, but is not a diagnosis?
+ Worth a look +

Fragile X repeat in the intermediate range

+

One copy of FMR1 has 48 CGG repeats: more than usual, below a premutation. It does not cause disease, but it can grow by a few repeats when passed on. Lía's copy has 49. Worth a word with a genetic counsellor before a future pregnancy.

+
+
Figure 2  ·  FMR1 CGG repeats, both copies
+
+
+
+
Figure 3  ·  Every repeat locus checked
+
+
Dots are the two copies; the shaded part is the range most people carry; the tick is where expansion begins for that gene. Scales differ per row.
+
+
+ +
+
+ + +
+
+
+
5

Can I trust this?

+
This is about the data, not about Elena.
+
+
Depth32.4×about 30× was paid for
+
At 10× or more98.1%of the genome
+
Other DNA0.4%below the 3% line
+
Sex checkXXmatches declared
+
+

Genes this genome reads poorly

+

In these genes a "no finding" says nothing. 11 genes fall below 90% readable; 4 are not on the reference at all.

+
+

Not on this reference: GSTT1, HLA-DRB3, HLA-DRB4, KIR2DL2. All 11 genes

+
+ +
+
+ + +
+
+
+
6

Origins

+
Where do my ancestors come from?
+

Elena's genome is most similar to Southern European reference groups, closest to Iberian samples. This measures similarity to reference people; it is not a nationality.

+
+
+
+
Figure 4  ·  Regional similarity
+
+

Continental: Europe 92% (90–94), Middle East and North Africa 6% (4–8), sub-Saharan Africa 1%, other 1%.

+
+
+
+
Figure 5  ·  Chromosome painting, both copies of each chromosome
+
+
Each stretch is coloured by the reference group it resembles most. Colours as in figure 4.
+
+
+
Maternal lineH1c3commonest branch in Western Europe; Lía shares it
+
Neanderthal1.9%498 stretches; about 2% is typical outside Africa
+
Long runs of sameness0 Mbno sign the parents are related
+
+
+ +
+
+ + +
+
+
+
7

Traits and scores

+
What do studies say about my traits and risk scores?
+

A percentile places Elena among 100 reference people of similar (European) ancestry. It is not a probability, and scores of different conditions are not comparable.

+
+
Figure 6  ·  Polygenic scores, ancestry-matched (EUR, 98.7% of variants found)
+
+
050100
+
+

Traits

+ + + + + + + + +
TraitReadingGeneGenotype
Lactase persistencelikely digests milk as an adultMCM6/LCTC/T
Caffeine metabolismfastCYP1A2A/A
Eye colourlikely brownHERC2A/A
Bitter taste (PTC)tasterTAS2R38PAV/AVI
EarwaxwetABCC11C/C
Alcohol flushunlikelyALDH2G/G
+
+
Blood groupA1, RhD+one RhD-deleted copy, passed to Lía
+
Telomere content512relative; no normal range exists
+
Alzheimer's (APOE)Closedopens only on purpose
+
+
+
APOE relates to the risk of late-onset Alzheimer's disease. Many people choose not to know. Nothing about prevention changes on APOE alone.
+ +
+
+ +
+
+ + +
+
+
+
8

Assessed, no finding

+
No finding in what these steps assessed. Each line says what it does not see.
+
    +
  • Structural changesNo class 4 or 5 deletion or duplication in a disease gene, of 6,204 called.Short reads miss many insertions and inversions.
  • +
  • MitochondriaNo disease-listed change. One common D-loop variant at 18%.Blood under-represents other tissues.
  • +
  • Large mosaic changesNone found; loss of X not seen above 8% of cells.Below about 5% of cells, invisible.
  • +
  • Viral DNANo integrated HHV-6. EBV reads present, as in most adults.Not a test for infection.
  • +
  • Secondary findingsBRCA2 only, shown in section 1. No other of the 84 genes.One hit in a two-hit gene is not reported here.
  • +
  • Symptom rankingNot run: no symptoms were given.
  • +
+ +
+ +
+
+ + +
+
+
+
9

What this report cannot see

+
For every person on this server.
+
    +
  • Changes ClinVar does not list, unless another step ranks them
  • +
  • Genes short reads cannot place (section 5)
  • +
  • Long repeat expansions beyond read length: only a lower bound
  • +
  • Methylation and imprinting
  • +
  • Changes in under about 10% of blood cells
  • +
  • Balanced rearrangements with breakpoints in repeats
  • +
+
+ +
+
+ + +
+
+
+
10

Sources and files

+ + + + + + + +
SourceUsedNewestWould change
ClinVar2026-10-022026-11-06carrier list, couple screen, clinical screen; not BRCA2
Ensembl VEP115samenothing
PharmCAT3.4.0samenothing
Cancer bundle2026-06-01samenothing
PGS Catalog2026-09samenothing
+ +
+ +
+
+
+
+
+ + + + diff --git a/docs/design/journal/src/04-finding.html b/docs/design/journal/src/04-finding.html new file mode 100644 index 00000000..25d90467 --- /dev/null +++ b/docs/design/journal/src/04-finding.html @@ -0,0 +1,300 @@ + + +Hereditary breast and ovarian cancer · Elena Ruiz · OwnGenome + + + +
+ OwnGenome + +
+
+ +
+ + +
+
+
+
Take to a doctorThe only finding at this level in Elena's genome
+

Hereditary breast and ovarian cancer

+
BRCA2c.5946delp.Ser1982ArgfsTer22chr13:32340301 GT>Gone copy (heterozygous)
+

One copy of BRCA2, a gene that repairs broken DNA, has lost a single letter. From that point the gene is read out of step, and the protein stops about 1,400 building blocks short. People with such a change have a higher lifetime risk of breast and ovarian cancer. It is not a diagnosis of cancer.

+
+ +
+ +
+
+
Figure 1  ·  The BRCA2 protein, and where this change cuts it
+
+
Everything to the right of the cut is not made, including the part that binds DNA. Changes like this are why the gene is classed as a cause of hereditary cancer.
+
+ +
+ +
+
+

What to do

+
In this order. None of it is urgent this week; all of it is worth doing.
+
    +
  1. Bring this page to a doctor or a genetic counsellor.A counsellor explains what it means for Elena and her relatives.
  2. +
  3. Confirm it with a clinical test in a certified laboratory.This pipeline is research; a clinic will not act on it alone.
  4. +
  5. Ask about screening and prevention.Breast screening with MRI, and options for the ovaries, start earlier than the general programme.
  6. +
  7. Tell close relatives they can be tested.Parents, brothers, sisters and children each have a 1 in 2 chance of carrying it.
  8. +
+ +
+ +
+ +
+
+
+
iii

The evidence

+
Why the pipeline calls this pathogenic, and how sure each source is.
+
+
ClassificationPathogenicClinVar and the cancer report agree
+
ClinVar review★★★★reviewed by an expert panel (ENIGMA); 4 stars is a practice guideline
+
Cancer reportTier 1the highest of five; also on the 84-gene secondary-findings list
+
+
+
PVS1Loss of function in a gene where loss of function causes the disease. Very strong.
+
PM2_SupportingRare in the population (below).
+
Reporting ruleBRCA2 is a dominant gene: one pathogenic copy is reported.
+
+
+
Figure 2  ·  How common the change is (gnomAD, log scale)
+
+
About 1 person in 5,600 carries it. Above 1% a change is unlikely to cause a strong effect; this one is far below.
+
+

Missense predictors (REVEL, AlphaMissense) do not score frameshifts: not applicable. CADD 35. Splicing (SpliceAI): no effect predicted.

+
+ +
+
+ +
+
+
+
iv

The reads

+
Is the change really there, in the raw data?
+
+
Figure 3  ·  Reads over chr13:32,340,301 (sketch of the 34 reads)
+
+
Each line is one read. 17 reads lack the T (red); 17 carry it. Half and half is what one changed copy looks like.
+
+
+
Depth34reads at this spot
+
With the change17reads
+
Allele balance0.50one copy ≈ 0.5
+
Call quality63above 30 is confident
+
+ +
+ +
+
+ +
+
+
+
v

In the family

+
Who else this concerns.
+
+
+
+

Each of Elena's parents, siblings and children had a 1 in 2 chance of carrying it. Marc does not carry it. Carmen, Elena's mother, has no genome here: sequencing her would show which side it came from.

+
+
Lía's result. An adult-onset finding about a child. Many families wait until the child can choose.
+ +
+ +
+
+
+ +
+
+ +
+ +
+ +
+
+
+
vii

Caveat and sources

+

A research pipeline, not a clinical test. Confirm every pathogenic finding in a certified laboratory before acting. The classification is ClinVar's and the cancer report's, not the pipeline's own judgement. A short deletion inside a run of the same letter can be placed one position off; the change and its effect are the same.

+ + + + + + +
SourceReleaseWhat it gave
ClinVar2026-10-02 (2026-11-06 out)Pathogenic, 3 stars, expert panel
Cancer report (CPSR)PCGR 2.2, 2026-06-01Tier 1, ACMG codes
Secondary findingsACMG SF v3.3Reported: dominant gene
gnomADv4.10.009% (allele frequency)
+
+ +
+
+
+
+ + + + diff --git a/docs/design/journal/src/05-family.html b/docs/design/journal/src/05-family.html new file mode 100644 index 00000000..9f14e358 --- /dev/null +++ b/docs/design/journal/src/05-family.html @@ -0,0 +1,353 @@ + + +The Ruiz family · OwnGenome + + + +
+ OwnGenome + +
ElenaMarcLía
+
+ +
+
+
+
+
Family report  ·  three genomes read together
+

The Ruiz family

+

The relationships match what was declared. Elena and Marc both carry cystic fibrosis, so each pregnancy has a 1 in 4 chance of an affected child. Lía inherited Elena's copy only: she is a carrier, not affected. Her FMR1 repeat grew from 48 to 49, still intermediate, and her RhD-negative blood came from both parents. One new change in Lía passed the filters, outside any gene.

+
+ + +
+
Figure 1  ·  The pedigree, with each person's findings
+
+
+ + +
+ + +
+
IChapter one
+
+

Who is related how

+
Do the genomes agree with the family tree? If not, nothing else here can be trusted.
+

Every declared parent and child shares about half their DNA, and Elena and Marc are unrelated. No sample was swapped.

+
+
Figure 2  ·  Relatedness, expected against measured
+
+
Ring: what the family tree predicts. Dot: what the DNA measures. 0.5 is parent and child; 0 is unrelated.
+
+ + + + + +
PairSharedStretchesLongestReads asCheck
Elena · Lía3,389 cM23281.4 cMparent and childagrees
Marc · Lía3,381 cM25267.9 cMparent and childagrees
Elena · Marc5.1 cM22.9 cMunrelated, or beyond 4th degreeagrees
+
+ +
+ + +
+
IIChapter two
+
+ For family planning ● newer ClinVar may change this screen +

For future children

+
Do Elena and Marc carry anything a child could inherit from both?
+

They share one gene: CFTR, cystic fibrosis. Elena carries p.Phe508del and Marc p.Gly542Ter, both pathogenic with three review stars. Neither is affected. Each pregnancy is a fresh draw of four equally likely children:

+
+
Affected1 in 4 · both changes
+
Carrier, like Elena1 in 4 · not affected
Lía
+
Carrier, like Marc1 in 4 · not affected
+
Neither change1 in 4
+
+

What to do: before another pregnancy, a genetic counsellor can explain the options: clinical carrier confirmation, and prenatal or preimplantation testing.

+ +

Everything else the screen found

+ + + + + + +
ConditionMarcElenaFor a child
Cystic fibrosis CFTRcarriercarrier1 in 4 affected
Phenylketonuria PAHcarriernone foundmay be a carrier; not affected unless Elena carries a change the screen misses
Haemochromatosis HFEnone foundcarriermay be a carrier
Fragile X FMR130 repeats31 / 48not counted: below the 55 the screen counts; see chapter IV
+
+
SMN1 (spinal muscular atrophy)Both 2 copies. Two copies do not rule out a silent carrier.
+
Deletions read from depthGJB6, CFTR exons 2–3, AZF: absent. HBB 619 bp: too short to assess.
+
X-linkedNo shared or X-linked finding besides the FMR1 context row.
+
+
+ +
+ + +
+
IIIChapter three
+
+

What Lía inherited

+
For each finding in a parent: did it reach Lía?
+ + + + + + + + + +
Finding in a parentFromLíaHow we know
Cystic fibrosis carrier CFTR p.Phe508delElena● inheritedgenotype
Cystic fibrosis carrier CFTR p.Gly542TerMarc○ not inheritedgenotype
Fragile X intermediate repeat FMR1Elena● inherited, 48 → 49repeat length
Clopidogrel response CYP2C19 *2Marc● inherited, one copygenotype
Phenylketonuria carrier PAHMarc○ not inheritedgenotype
Haemochromatosis carrier HFEElena○ not inheritedgenotype
Hereditary breast and ovarian cancer BRCA2Elena
+
+
Figure 3  ·  Lía's chromosomes: which copy came from whom
+
+
Top line of each pair: the copy from Marc; bottom line: from Elena. Gaps could not be assigned. Pins mark the inherited findings above. With no grandparent sequenced, the map cannot show where each parent's own two copies crossed over.
+
+
+ +
+ + +
+
IVChapter four
+
+

Two small stories

+
Inheritance you can see in a single number.
+
+
+ Worth a look +

A repeat that grew by one

+

Elena's longer FMR1 copy has 48 CGG repeats; the copy Lía received has 49. Both are intermediate: no disease, but it can grow a little each generation.

+
+

A one-repeat change is within the sizing error.

+
+
+ Information +

RhD negative from two RhD-positive parents

+

Both parents are RhD positive with one deleted RHD copy each. Lía received both deleted copies, a 1 in 4 outcome.

+
+
Elena D
Elena d
+
D
D/Dpositive
D/dpositive
+
d
D/dpositive
d/dnegative · Lía
+
+

ABO: Elena A1, Marc O, Lía O. A prediction from DNA, not a lab typing.

+
+
+
+ +
+ + +
+
VChapter five
+
+

New and paired changes

+
Changes in Lía that neither parent has, and genes where she carries two.
+

New in Lía (de novo)

+

Every child carries a few dozen new changes; most candidates found this way are reading errors. One passes the filters, and it sits outside any gene.

+ + + + +
PositionChangeLía's readsDepth L · M · EGeneFilter
chr7:98,114,350C>T46% alt33 · 30 · 35none nearbypasses
chr12:33,908,211A>G19% alt8 · 31 · 29none nearbylow: likely an error
+

Two changes in one gene

+

Two changes matter only when they sit on different copies (in trans) of a gene that fits. Neither pair here needs action.

+ + + + +
GeneChangesCopiesReading
USH2Ap.Thr1257Ile · c.8559-14A>Gsame copy, both from Marcthe other copy is intact
TTNp.Arg3412His · p.Val16211Metone from each parentboth benign or uncertain; TTN carries rare changes in everyone
+
+ +
+ +
+
Appendix
+
+

What we ran for this family

+
    +
  • ✓Called all three genomes together, so a change is judged the same way in everyoneElena, Marc, Lía
  • +
  • ✓Checked every relationship against the family treeall pairs
  • +
  • ✓Placed Lía's DNA on each parent's copy, and searched it for new and paired changesLía
  • +
  • ✓Measured shared stretches between every pairall pairs
  • +
  • ✓Screened the couple for genes both carryElena + Marc
  • +
  • —Grandparent phasing did not run: Carmen has no genome on this serverskipped
  • +
+
+ +
+
+ + + + diff --git a/docs/design/journal/src/06-person-mobile.html b/docs/design/journal/src/06-person-mobile.html new file mode 100644 index 00000000..f1fb4475 --- /dev/null +++ b/docs/design/journal/src/06-person-mobile.html @@ -0,0 +1,217 @@ + + +Marc Ruiz · OwnGenome + + + +
OwnGenome‹ Ruiz family⌕
+ +
+ +
Personal genome report
+
Marc Ruiz
+
41 · male (XY, as declared) · father of Lía · finished 4 Nov
+

Nothing in what was assessed reaches take to a doctor. Two results are for whoever prescribes: clopidogrel would not work well, and simvastatin should stay at 20 mg or less. Three point at the heart together, and a blood Lp(a) test is the one thing worth doing.

+
+ + +
✓Data: 29.1× · identity confirmed · 1 step not assessed
+ +
+
1

To act on

+
Is there anything to take to a doctor?
+
No finding in what these steps assessed.They look at known disease changes, cancer genes, the 84 secondary-finding genes, repeats and large deletions. They do not see changes ClinVar does not list, 14 hard-to-read genes, or the MUC1 kidney gene, which was not assessed (section 6).
+
+ +
+
2

Medicines

+
Show this list to a doctor or pharmacist.
+
+
Marc's medicines list6 drugs
+
ClopidogrelAvoid
Use prasugrel or ticagrelor if suitable.
CYP2C19 poor metaboliser (*2/*2) · strong evidence
+
Simvastatin20 mg max
Or another statin: rosuvastatin, pravastatin.
SLCO1B1 decreased function · strong
+
Atorvastatin40 mg max
Higher only with monitoring.
SLCO1B1 · moderate
+
Citalopram, escitalopramHalf dose
Start at 50%, raise slowly, or choose another.
CYP2C19 · moderate
+
VoriconazoleAvoid
Choose an antifungal not using CYP2C19.
CYP2C19 · moderate
+
Omeprazole, pantoprazoleConsider
Standard dose; lower it for long-term use.
CYP2C19 · optional
+
+

CaveatA research tool; confirm with a certified test before a prescription changes.

+ Open full screen for the pharmacist +
+ +
+
3

The heart, together

+
Three results that point the same way.
+
+
+ Worth a look +

Genetically high Lp(a) likely

+

Few copies of a repeat in the LPA gene go with a high Lp(a), a blood fat that raises the risk of heart attack.

+
+
rs10455872 · risk allelers3798220 · none
+

Do: ask for one blood Lp(a) test. It is what counts.

+
+
+ Information +

Coronary artery disease score: 88th percentile

+

Higher than 88 of 100 people of similar (European) ancestry. Not a probability: measured LDL, blood pressure and Lp(a) say far more.

+
+
+
+ Prescriber +

If a statin starts, choose it with SLCO1B1 in mind

+

Simvastatin 20 mg or less, or rosuvastatin or pravastatin. See the list

+
+
+
+ +
+
4

Worth a look

+

What deserves a conversation, but is not a diagnosis?

+
+ Worth a look +

HLA-B*27 present

+

About 8% of Europeans carry it; most never develop spondylitis. None of the four listed drug-reaction alleles is present.

+

CaveatTyping from short reads is approximate.

+
+
+ +
+
5

For your family

+

What could Marc pass on to a child?

+
+ Family planning +

Cystic fibrosis carrier, shared with Elena

+

CFTR p.Gly542Ter. Both partners carry one: 1 in 4 per pregnancy. Lía did not inherit Marc's copy.

+ The couple screen → +
+
+ Family planning +

Phenylketonuria carrier

+

PAH p.Arg408Trp. Elena carries no PAH change the screen sees. Lía did not inherit it.

+
+
+ +
+
6

Can I trust this?

+
About the data, not about Marc.
+
+
Depth29.1×
+
At 10×97.2%
+
Other DNA0.6%
+
Sex checkXY ✓
+
+
▲ Not assessed
MUC1 kidney gene. The repeat had 41× depth; this step needs 100×. Read it as not checked, not as clear. Rerun with deeper data
+
+ +
+
7

Explore

+
Everything else we uncovered.
+
OriginsPaternal line R-DF27 · maternal J1c2 · Neanderthal 2.1%+
+
Scores and traits6 scores · blood group O, RhD+ · telomeres+
+
Repeats6 loci sized, all below their expansion line+
+
Assessed, no findingBlood clones, mosaic changes, viral DNA, structural+
+
What it cannot see6 limits for everyone, 14 hard genes+
+
Sources and filesClinVar 2026-11-06 is out; this used 2026-10-02+
+
+ +
OwnGenome 1.0.0 · a research pipeline, not a clinical test · RUIZ-MARC · synthetic data
+ + + + + diff --git a/docs/design/journal/src/07-alt-person.html b/docs/design/journal/src/07-alt-person.html new file mode 100644 index 00000000..2ab6e822 --- /dev/null +++ b/docs/design/journal/src/07-alt-person.html @@ -0,0 +1,285 @@ + + +Elena Ruiz · OwnGenome (cover variant) + + + +
+ OwnGenome + +
Long-form view
+
+ +
+ +
+
+
Personal genome reportRuiz family · chapter IIfinished 4 Nov 2026
+

Elena Ruiz

+

One finding for a doctor: a BRCA2 change that raises the risk of breast and ovarian cancer. One medicine result bears on it. Everything else is for planning, or for interest.

+
38, female, XX as declaredmother of Lía, partner of MarcData good to readRUIZ-ELENA · GRCh38
+
+ +
+ + +
+
Figure 1 · Elena's genome end to end, every finding pinned where it sitsAPOE is not drawn until opened
+
+
+ + +
+
Take to a doctor
1
  • Hereditary breast and ovarian cancerBRCA2 · pathogenic, 3 stars
+
Tell your prescriber
1
  • Tamoxifen, codeineCYP2D6 intermediate metaboliser
+
Worth a look
1
  • Fragile X repeat, intermediateFMR1 48 · may grow when passed on
+
Family planning
2
  • Cystic fibrosis carrierMarc carries it too: 1 in 4
  • Haemochromatosis carrierone copy; Marc none
+
For information
14
  • Origins, traits, scoresIberian 71% · H1c3 · 1.9% Neanderthal
  • Alzheimer's (APOE)closed; opens on purpose
+
+ + +
+
+ Section 1 · Take to a doctor +

One copy of BRCA2 stops short, and that raises the lifetime risk of breast and ovarian cancer.

+
+

One letter is missing from Elena's BRCA2, a gene that repairs broken DNA. From there the gene is read out of step, and the protein ends about 1,400 building blocks early, before the part that binds DNA.

+

It is not a diagnosis of cancer. It means screening and prevention start earlier than the general programme, and that her relatives each had a 1 in 2 chance of carrying it. Whether Lía did is closed on this page: it is an adult-onset result about a child.

+
+
+
+
1

See a genetic counsellor

Bring the doctor's page.
+
2

Confirm in a certified lab

A clinic will not act on research data alone.
+
3

Ask about screening

MRI and ovarian options start earlier.
+
4

Tell close relatives

Each can be tested.
+
+
The full evidence →Prepare a page for a doctor
+
+ +
+ + +

Everything else, in six figures

Each panel answers one question; open it for the section.
+
+
+
A

Medicines

+

She breaks down tamoxifen and codeine more slowly than most (CYP2D6 *1/*4).

+
TamoxifenConsider an aromatase inhibitor, or 40 mg a day
CodeineLabel dose; if it fails, not tramadol
OndansetronNo change
+ All 19 genes → +
+
+
B

Children with Marc

+

Both carry cystic fibrosis: 1 in 4 per pregnancy. Lía is a carrier, not affected.

+
Affected1 in 4
Carrier, like Elena1 in 4 · Lía
Carrier, like Marc1 in 4
Neither1 in 4
+ The couple screen → +
+
+
C

Repeats

+

Seven loci checked. FMR1 at 48 is intermediate; RFC1 could not be sized.

+
+
+
+
D

Can I trust this?

+

Yes, with 11 genes read poorly; a silence there says nothing.

+
Depth32.4×
At 10× or more98.1%
Other DNA0.4%
Sex checkXX
+
+
+
E

Origins

+

Most similar to Iberian reference groups. Maternal line H1c3.

+
+
+
+
F

Scores

+

Percentiles among people of similar ancestry. Not probabilities, not comparable.

+
+
+
+ + +
+
8

Checked, no finding

+

Nothing here is an all-clear: each line names what the analysis does not see.

+
+
Structural changesNo class 4–5 change in a disease gene, of 6,204.
Short reads miss insertions and inversions.
+
MitochondriaNo disease-listed change.
Blood under-represents other tissues.
+
Large mosaic changesNone above 8% of cells.
Below about 5% is invisible.
+
Viral DNANo integrated HHV-6.
Not a test for infection.
+
Secondary findingsBRCA2 only, of 84 genes.
One hit in a two-hit gene is not reported.
+
Blood clonesNone at 30×.
Only clones above about 12% are visible.
+
Symptom rankingNo symptoms were given.
+
Long-read paralogsNeeds PacBio HiFi data.
+
What no step seesChanges ClinVar does not list, methylation, under 10% of cells. All limits
+
+
+
+ + + + diff --git a/docs/design/journal/src/_journal.css b/docs/design/journal/src/_journal.css new file mode 100644 index 00000000..c9572d71 --- /dev/null +++ b/docs/design/journal/src/_journal.css @@ -0,0 +1,142 @@ +/* OwnGenome "Journal" direction: shared styles (inlined into each screen by build.js) */ +:root { + color-scheme: dark; + --page: #0e0f10; + --paper: #15161a; + --paper-2: #1b1c21; + --hair: rgba(255,255,255,.085); + --hair-2: rgba(255,255,255,.14); + --ink: #f0efec; + --ink-2: #c3c2b7; + --ink-3: #8f8d86; + --brass: #c8ab78; + --brass-dim: rgba(200,171,120,.35); + /* severity scale (status palette, fixed) */ + --act: #d03b3b; + --med: #ec835a; + --rev: #fab219; + --car: #9085e9; + --good: #0ca30c; + /* person identity */ + --marc: #3987e5; + --elena: #d95926; + --lia: #199e70; + /* categorical slots (ancestry etc.) */ + --c1: #3987e5; --c2: #d95926; --c3: #199e70; --c4: #c98500; + --serif: ui-serif, "New York", "Iowan Old Style", Palatino, Georgia, serif; + --sans: system-ui, -apple-system, "Segoe UI", sans-serif; + --mono: ui-monospace, "SF Mono", Menlo, monospace; +} +* { box-sizing: border-box; } +html, body { margin: 0; background: var(--page); color: var(--ink); } +body { font: 15px/1.55 var(--sans); -webkit-font-smoothing: antialiased; } +a { color: inherit; text-decoration: underline; text-decoration-color: var(--brass-dim); text-underline-offset: 3px; text-decoration-thickness: 1px; } +a:hover { text-decoration-color: var(--brass); } +.mono { font-family: var(--mono); font-size: .88em; letter-spacing: -.01em; } +.num { font-variant-numeric: tabular-nums; } +.serif { font-family: var(--serif); } +.muted { color: var(--ink-3); } +.soft { color: var(--ink-2); } +.smallcaps { font-variant: all-small-caps; letter-spacing: .08em; } + +/* ---------- masthead ---------- */ +.mast { border-bottom: 1px solid var(--hair); background: var(--page); position: sticky; top: 0; z-index: 20; } +.mast-in { max-width: 1320px; margin: 0 auto; padding: 0 40px; height: 58px; display: flex; align-items: center; gap: 28px; } +.wordmark { font-family: var(--serif); font-size: 23px; letter-spacing: .005em; color: var(--ink); text-decoration: none; } +.wordmark i { font-style: italic; color: var(--brass); } +.crumbs { display: flex; gap: 10px; align-items: center; color: var(--ink-3); font-size: 13.5px; } +.crumbs a { color: var(--ink-2); text-decoration: none; } +.crumbs a:hover { color: var(--ink); } +.crumbs .sep { color: var(--ink-3); opacity: .6; } +.crumbs .here { color: var(--ink); } +.mast-right { margin-left: auto; display: flex; gap: 18px; align-items: center; font-size: 13px; color: var(--ink-3); } +.search { display: flex; align-items: center; gap: 8px; border: 1px solid var(--hair-2); border-radius: 999px; padding: 6px 14px; width: 270px; color: var(--ink-3); font-size: 13px; background: var(--paper); } +.search kbd { margin-left: auto; font: 11px var(--sans); border: 1px solid var(--hair-2); border-radius: 4px; padding: 0 5px; color: var(--ink-3); } +.dot-live { width: 7px; height: 7px; border-radius: 50%; background: var(--good); display: inline-block; box-shadow: 0 0 0 3px rgba(12,163,12,.18); } + +/* ---------- severity marks ---------- */ +.lv { display: inline-flex; align-items: center; gap: 7px; font: 600 11.5px/1 var(--sans); letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; } +.lv .g { width: 10px; height: 10px; flex: none; display: inline-block; } +.lv.act { color: #ef6a6a; } .lv.act .g { background: var(--act); transform: rotate(45deg) scale(.82); } +.lv.med { color: var(--med); } .lv.med .g { background: var(--med); border-radius: 5px; width: 13px; height: 7px; } +.lv.rev { color: var(--rev); } .lv.rev .g { width: 0; height: 0; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 10px solid var(--rev); } +.lv.car { color: #aaa1f2; } .lv.car .g { width: 15px; height: 9px; background: radial-gradient(circle at 4.5px 4.5px, transparent 2.6px, var(--car) 3px, var(--car) 4.4px, transparent 4.6px), radial-gradient(circle at 10.5px 4.5px, transparent 2.6px, var(--car) 3px, var(--car) 4.4px, transparent 4.6px); } +.lv.info { color: var(--ink-2); } .lv.info .g { border: 1.5px solid var(--ink-2); border-radius: 50%; width: 9px; height: 9px; } +.lv.trust { color: #3fc43f; } .lv.trust .g { background: none; width: 11px; height: 11px; position: relative; } +.lv.trust .g::after { content: "✓"; position: absolute; top: -3px; left: 0; font-size: 12px; color: var(--good); } +.lv.warn { color: var(--rev); } +.lv.fail { color: #ef6a6a; } + +/* person chips */ +.pc { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; } +.pc::before { content: ""; width: 9px; height: 9px; border-radius: 50%; background: var(--pcol, var(--ink-3)); flex: none; } +.pc.elena { --pcol: var(--elena); } .pc.marc { --pcol: var(--marc); } .pc.lia { --pcol: var(--lia); } +.pc.carmen::before { background: none; border: 1.5px dashed var(--ink-3); width: 8px; height: 8px; } + +/* ---------- editorial type ---------- */ +.kicker { font: 600 11.5px/1.2 var(--sans); letter-spacing: .14em; text-transform: uppercase; color: var(--brass); } +.h-display { font-family: var(--serif); font-weight: 400; font-size: 64px; line-height: 1.02; letter-spacing: -.012em; margin: 0; } +.h1 { font-family: var(--serif); font-weight: 400; font-size: 44px; line-height: 1.08; letter-spacing: -.01em; margin: 0; } +.h2 { font-family: var(--serif); font-weight: 400; font-size: 30px; line-height: 1.15; margin: 0; letter-spacing: -.005em; } +.h3 { font-family: var(--serif); font-weight: 400; font-size: 22px; line-height: 1.25; margin: 0; } +.lede { font-family: var(--serif); font-size: 21px; line-height: 1.5; color: var(--ink); } +.lede b { font-weight: 600; } +.dropcap::first-letter { font-family: var(--serif); float: left; font-size: 74px; line-height: .86; padding: 6px 10px 0 0; color: var(--brass); } +.body-serif { font-family: var(--serif); font-size: 18px; line-height: 1.6; color: var(--ink-2); } +.body-serif b, .body-serif strong { color: var(--ink); font-weight: 600; } +p { margin: 0 0 14px; } +.rule { height: 1px; background: var(--hair); border: 0; margin: 0; } +.rule-brass { height: 1px; background: linear-gradient(90deg, var(--brass) 0 64px, var(--hair) 64px); border: 0; margin: 0; } + +.secnum { font-family: var(--serif); font-style: italic; color: var(--brass); font-size: 18px; margin-right: 12px; } +.sechead { display: flex; align-items: baseline; gap: 0; margin: 0 0 6px; } +.secq { font: 13px var(--sans); color: var(--ink-3); margin: 0 0 22px; } + +/* ---------- buttons ---------- */ +.btn { display: inline-flex; align-items: center; gap: 8px; font: 500 13px/1 var(--sans); color: var(--ink); background: var(--paper-2); border: 1px solid var(--hair-2); border-radius: 7px; padding: 9px 13px; text-decoration: none; cursor: pointer; } +.btn:hover { border-color: var(--brass-dim); } +.btn.ghost { background: transparent; } +.btn.primary { background: var(--ink); color: #111; border-color: var(--ink); } +.toggle { font: 500 12.5px var(--sans); color: var(--ink-2); cursor: pointer; background: none; border: 0; padding: 0; text-decoration: underline; text-decoration-color: var(--brass-dim); text-underline-offset: 3px; } + +/* ---------- margin notes ---------- */ +.note { font: 13px/1.5 var(--sans); color: var(--ink-2); border-top: 1px solid var(--hair-2); padding-top: 9px; } +.note .nh { font: 600 10.5px/1 var(--sans); letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3); display: block; margin-bottom: 7px; } +.note.caveat .nh { color: var(--brass); } +.note + .note { margin-top: 22px; } +.note dl { display: grid; grid-template-columns: auto 1fr; gap: 3px 12px; margin: 0; } +.note dt { color: var(--ink-3); } +.note dd { margin: 0; color: var(--ink); text-align: right; font-variant-numeric: tabular-nums; } + +/* ---------- figures ---------- */ +figure { margin: 0; } +figcaption { font: 12.5px/1.5 var(--sans); color: var(--ink-3); margin-top: 10px; } +figcaption b { color: var(--ink-2); font-weight: 600; } +.fig-label { font: 600 10.5px/1 var(--sans); letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3); } +svg text { font-family: var(--sans); font-variant-numeric: tabular-nums; } + +/* tooltip */ +#tip { position: fixed; pointer-events: none; z-index: 99; background: #26272d; color: var(--ink); border: 1px solid var(--hair-2); border-radius: 6px; padding: 7px 10px; font: 12.5px/1.4 var(--sans); max-width: 260px; opacity: 0; transition: opacity .1s; box-shadow: 0 6px 20px rgba(0,0,0,.4); } +[data-tip] { cursor: default; } + +/* tables */ +table.t { width: 100%; border-collapse: collapse; font-size: 13.5px; } +table.t th { text-align: left; font: 600 10.5px/1 var(--sans); letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3); padding: 0 12px 10px 0; border-bottom: 1px solid var(--hair-2); } +table.t td { padding: 11px 12px 11px 0; border-bottom: 1px solid var(--hair); vertical-align: top; color: var(--ink-2); } +table.t td.r, table.t th.r { text-align: right; font-variant-numeric: tabular-nums; } +table.t tr:last-child td { border-bottom: 0; } +table.t td b { color: var(--ink); font-weight: 600; } + +/* chip */ +.chip { display: inline-flex; align-items: center; gap: 6px; font: 12px/1 var(--sans); color: var(--ink-2); border: 1px solid var(--hair-2); border-radius: 999px; padding: 5px 10px; white-space: nowrap; } +.chip.brass { color: var(--brass); border-color: var(--brass-dim); } + +/* reveal (sensitive) */ +.veil { border: 1px dashed var(--hair-2); border-radius: 8px; padding: 14px 16px; display: flex; gap: 14px; align-items: center; background: repeating-linear-gradient(135deg, rgba(255,255,255,.015) 0 6px, transparent 6px 12px); } +.veil .vt { font-size: 13.5px; color: var(--ink-2); flex: 1; } +.veil .vt b { color: var(--ink); font-weight: 600; } + +/* footer */ +.colophon { border-top: 1px solid var(--hair); margin-top: 80px; } +.colophon-in { max-width: 1320px; margin: 0 auto; padding: 26px 40px 40px; display: flex; gap: 40px; font-size: 12.5px; color: var(--ink-3); } +.colophon-in .wordmark { font-size: 17px; color: var(--ink-2); } diff --git a/docs/design/journal/src/_journal.js b/docs/design/journal/src/_journal.js new file mode 100644 index 00000000..25a451fc --- /dev/null +++ b/docs/design/journal/src/_journal.js @@ -0,0 +1,116 @@ +/* OwnGenome "Journal": tiny shared helpers (tooltip, reveals, inline figures). Synthetic data only. */ +(function () { + const NS = 'http://www.w3.org/2000/svg'; + const CHR = [['1',248.96,123.4],['2',242.19,93.9],['3',198.3,90.9],['4',190.21,50],['5',181.54,48.8],['6',170.81,59.8],['7',159.35,60.1],['8',145.14,45.2],['9',138.39,43],['10',133.8,39.8],['11',135.09,53.4],['12',133.28,35.5],['13',114.36,17.7],['14',107.04,17.2],['15',101.99,19],['16',90.34,36.8],['17',83.26,25.1],['18',80.37,18.5],['19',58.62,26.2],['20',64.44,28.1],['21',46.71,12],['22',50.82,15],['X',156.04,60.6],['Y',57.23,10.4]]; + const LV = { act: '#d03b3b', med: '#ec835a', rev: '#fab219', car: '#9085e9', info: '#c3c2b7' }; + window.OG = { CHR, LV }; + + function el(tag, attrs, parent) { + const e = document.createElementNS(NS, tag); + for (const k in attrs) e.setAttribute(k, attrs[k]); + if (parent) parent.appendChild(e); + return e; + } + OG.el = el; + + // deterministic PRNG for synthetic paintings + OG.rng = function (seed) { let s = seed >>> 0; return () => ((s = (s * 1664525 + 1013904223) >>> 0) / 4294967296); }; + + /* Karyogram: vertical chromosomes in one row, findings as level glyphs beside them. + marks: [{chr:'13', mb:32.3, lv:'act', label:'BRCA2', tip:'...'}] */ + OG.karyogram = function (host, marks, o = {}) { + const chrs = CHR.filter(c => !(o.noY && c[0] === 'Y')); + const W = o.width || 640, H = o.height || 170, top = 22, bottom = 22; + const slot = (W - (o.padRight ?? 56)) / chrs.length, maxL = 249, scale = (H - top - bottom) / maxL; + const s = el('svg', { viewBox: `0 0 ${W} ${H}`, width: '100%', role: 'img', 'aria-label': o.aria || 'Chromosome map of findings' }, host); + chrs.forEach((c, i) => { + const x = i * slot + slot / 2 - 3.5, h = c[1] * scale, cy = top + c[2] * scale; + el('rect', { x, y: top, width: 7, height: c[2] * scale - 1.2, rx: 3.5, fill: '#2c2d33' }, s); + el('rect', { x, y: cy + 1.2, width: 7, height: h - c[2] * scale - 1.2, rx: 3.5, fill: '#2c2d33' }, s); + const t = el('text', { x: x + 3.5, y: H - 6, 'text-anchor': 'middle', 'font-size': 10, fill: '#8f8d86' }, s); t.textContent = c[0]; + }); + marks.forEach(m => { + const i = chrs.findIndex(c => c[0] === m.chr); if (i < 0) return; + const x = i * slot + slot / 2 + 7, y = top + m.mb * scale; + const g = el('g', { 'data-tip': m.tip || m.label }, s); + el('line', { x1: x - 10.5, x2: x - 1, y1: y, y2: y, stroke: LV[m.lv], 'stroke-width': 2 }, g); + glyph(g, m.lv, x + 4, y); + if (m.label && !o.noLabels) { const t = el('text', { x: x + 11, y: y + 3.5, 'font-size': 11, 'font-weight': 600, fill: '#f0efec', stroke: o.bg || '#0e0f10', 'stroke-width': 4, 'paint-order': 'stroke', 'stroke-linejoin': 'round' }, g); t.textContent = m.label; } + el('rect', { x: x - 12, y: y - 9, width: 60, height: 18, fill: 'transparent' }, g); + }); + return s; + }; + function glyph(g, lv, x, y) { + const c = LV[lv]; + if (lv === 'act') el('rect', { x: x - 4, y: y - 4, width: 8, height: 8, fill: c, transform: `rotate(45 ${x} ${y})` }, g); + else if (lv === 'med') el('rect', { x: x - 5.5, y: y - 3, width: 11, height: 6, rx: 3, fill: c }, g); + else if (lv === 'rev') el('path', { d: `M${x} ${y - 5}L${x + 5} ${y + 4}L${x - 5} ${y + 4}Z`, fill: c }, g); + else if (lv === 'car') { el('circle', { cx: x - 2.6, cy: y, r: 3.4, fill: 'none', stroke: c, 'stroke-width': 1.6 }, g); el('circle', { cx: x + 2.6, cy: y, r: 3.4, fill: 'none', stroke: c, 'stroke-width': 1.6 }, g); } + else el('circle', { cx: x, cy: y, r: 4, fill: 'none', stroke: c, 'stroke-width': 1.5 }, g); + } + OG.glyph = glyph; + + /* Percentile strip: 0-100, dot at value. No zones (a percentile is not a risk class). */ + OG.pstrip = function (host, value, o = {}) { + const W = o.width || 260, H = 22; + const s = el('svg', { viewBox: `0 0 ${W} ${H}`, width: W, height: H }, host); + el('line', { x1: 0, x2: W, y1: 11, y2: 11, stroke: 'rgba(255,255,255,.16)', 'stroke-width': 1 }, s); + [0, 25, 50, 75, 100].forEach(t => el('line', { x1: t / 100 * (W - 2) + 1, x2: t / 100 * (W - 2) + 1, y1: 7, y2: 15, stroke: 'rgba(255,255,255,.16)' }, s)); + const x = value / 100 * (W - 12) + 6; + el('circle', { cx: x, cy: 11, r: 5.5, fill: o.color || '#f0efec', stroke: '#15161a', 'stroke-width': 2, 'data-tip': o.tip || `${value}th percentile` }, s); + return s; + }; + + /* Sparkline */ + OG.spark = function (host, data, o = {}) { + const W = o.width || 120, H = o.height || 28, max = o.max || Math.max(...data), min = o.min ?? 0; + const s = el('svg', { viewBox: `0 0 ${W} ${H}`, width: W, height: H }, host); + const pts = data.map((v, i) => [i / (data.length - 1) * (W - 4) + 2, H - 3 - (v - min) / (max - min) * (H - 6)]); + el('path', { d: 'M' + pts.map(p => p.join(' ')).join('L') + `L${W - 2} ${H}L2 ${H}Z`, fill: o.fill || 'rgba(240,239,236,.06)' }, s); + el('path', { d: 'M' + pts.map(p => p.join(' ')).join('L'), fill: 'none', stroke: o.color || '#c3c2b7', 'stroke-width': 1.5, 'stroke-linejoin': 'round' }, s); + const l = pts[pts.length - 1]; el('circle', { cx: l[0], cy: l[1], r: 2.6, fill: o.color || '#c3c2b7' }, s); + return s; + }; + + /* Chromosome painting: 22 autosomes x 2 haplotypes, segments coloured by reference group. */ + OG.painting = function (host, groups, seed, o = {}) { + const r = OG.rng(seed), W = o.width || 640, cols = o.cols || 1, rowH = 5, gap = 2, chrGap = 9, left = 22, colGap = 28; + const auto = CHR.slice(0, 22), perCol = Math.ceil(auto.length / cols), colW = (W - colGap * (cols - 1)) / cols; + const maxL = 249, sc = (colW - left - 4) / maxL; + const H = perCol * (rowH * 2 + gap + chrGap); + const s = el('svg', { viewBox: `0 0 ${W} ${H}`, width: '100%', role: 'img', 'aria-label': 'Chromosome painting' }, host); + const cum = []; let acc = 0; groups.forEach(g => { acc += g.f; cum.push(acc); }); + const pick = () => { const v = r() * acc; return groups[cum.findIndex(c => v <= c)]; }; + auto.forEach((c, i) => { + const col = Math.floor(i / perCol), ox = col * (colW + colGap); + const y0 = (i % perCol) * (rowH * 2 + gap + chrGap) + 2; + const t = el('text', { x: ox, y: y0 + rowH + 4, 'font-size': 10, fill: '#8f8d86' }, s); t.textContent = c[0]; + for (let hap = 0; hap < 2; hap++) { + let pos = 0; const y = y0 + hap * (rowH + gap); const segs = []; + while (pos < c[1]) { + const g = pick(); const len = Math.min(c[1] - pos, 3 + r() * 22); + const last = segs[segs.length - 1]; + if (last && last.g === g) last.len += len; else segs.push({ g, start: pos, len }); + pos += len; + } + segs.forEach((sg, k) => el('rect', { x: ox + left + sg.start * sc, y, width: Math.max(sg.len * sc - (k < segs.length - 1 ? 1.5 : 0), .8), height: rowH, rx: 1, fill: sg.g.c, 'data-tip': `chr${c[0]} copy ${hap + 1}: ${sg.g.n}` }, s)); + } + }); + return s; + }; + + // tooltip + reveals + document.addEventListener('DOMContentLoaded', () => { + const tip = document.createElement('div'); tip.id = 'tip'; document.body.appendChild(tip); + document.addEventListener('mousemove', e => { + const t = e.target.closest && e.target.closest('[data-tip]'); + if (!t) { tip.style.opacity = 0; return; } + tip.textContent = t.getAttribute('data-tip'); tip.style.opacity = 1; + tip.style.left = Math.min(e.clientX + 14, innerWidth - 280) + 'px'; tip.style.top = (e.clientY + 16) + 'px'; + }); + document.querySelectorAll('[data-reveal]').forEach(b => b.addEventListener('click', () => { + const tgt = document.getElementById(b.getAttribute('data-reveal')); + if (tgt) { tgt.hidden = !tgt.hidden; if (b.dataset.once) b.closest('.veil')?.remove(); } + })); + }); +})(); diff --git a/docs/design/journal/today/current-01-home.png b/docs/design/journal/today/current-01-home.png new file mode 100644 index 00000000..62080700 Binary files /dev/null and b/docs/design/journal/today/current-01-home.png differ diff --git a/docs/design/journal/today/current-02-person.png b/docs/design/journal/today/current-02-person.png new file mode 100644 index 00000000..bf9ad904 Binary files /dev/null and b/docs/design/journal/today/current-02-person.png differ diff --git a/docs/design/journal/today/current-03-person-doctor.png b/docs/design/journal/today/current-03-person-doctor.png new file mode 100644 index 00000000..25211448 Binary files /dev/null and b/docs/design/journal/today/current-03-person-doctor.png differ diff --git a/docs/design/journal/today/current-04-person-progress.png b/docs/design/journal/today/current-04-person-progress.png new file mode 100644 index 00000000..85c9dd04 Binary files /dev/null and b/docs/design/journal/today/current-04-person-progress.png differ diff --git a/docs/design/journal/today/current-05-family.png b/docs/design/journal/today/current-05-family.png new file mode 100644 index 00000000..b9e3fcfc Binary files /dev/null and b/docs/design/journal/today/current-05-family.png differ diff --git a/docs/design/journal/today/current-06-person-mobile.png b/docs/design/journal/today/current-06-person-mobile.png new file mode 100644 index 00000000..c9bf705a Binary files /dev/null and b/docs/design/journal/today/current-06-person-mobile.png differ