Premise
Direct-to-consumer genomics products are shallow on purpose. Clinical interpretation tools (OpenCRAVAT, VarSome, Geneoscopy) are deep but designed for researchers, not the person whose genome it actually is. The gap is a tool that an intelligent non-clinician can run on their own whole-genome VCF, get clinical-grade output, and make decisions about their own healthcare. Critically, it has to stay local. The whole point is that your genome never leaves your machine.
How it evolved
Built in two days from a Nebula Genomics 100x WGS VCF (5.1M variants). Started as a single-purpose ClinVar matcher and grew to integrate six data sources: ClinVar (2.8M variants in SQLite), PharmGKB (13.8K clinical annotations across 4,589 rsIDs), gnomAD (live API for population frequencies), MyVariant.info (live API for functional scores: AlphaMissense, REVEL, CADD, SpliceAI, MetaLR, BayesDel, PrimateAI, MetaSVM), LitVar2 plus PubMed (literature linking), and PGS Catalog (10 polygenic scores spanning CAD, T2D, BMI, breast and prostate cancer, Alzheimer disease). Added a CYP2C19 diplotype caller (validated against PharmCAT, identical *1/*2 result), then a full PharmCAT subprocess integration (22 pharmacogenes, requires local Java). The offspring simulator came last: exact Mendelian math for single-variant inheritance plus Monte Carlo for polygenic and trait distributions.
Technical crux
Five decisions shaped the architecture. First: SQLite for ClinVar plus PharmGKB plus PGS weights, holding ~3.4M rows across four tables in a 580MB on-disk database with proper indices. Position-based variant lookup is roughly 360,000 queries per second on M-series Apple Silicon. Second: the API endpoint coalesces concurrent scan requests for the same VCF, so two open browser tabs cannot trigger parallel 90-second scans. Third: hand-rolled CYP2C19 diplotype caller as a check on PharmCAT (they agree exactly for the standard alleles), then PharmCAT itself for the 22-gene panel where PharmCAT clearly wins. Fourth: the offspring simulator does exact Punnett-square math for single-variant probabilities (no sampling needed) and Monte Carlo only where it adds value (PRS distributions, multi-locus trait predictions). Wilson score confidence intervals on every output. Fifth: live ClinVar reclassification check via MyVariant.info on every scan, because cached ClinVar data goes stale within months and the headline finding for one of my own variants flipped from Pathogenic to Benign between download and re-check.
Findings
1,073 ClinVar matches across 773 genes from my Nebula VCF. 7 PharmCAT diplotype calls including CYP2C19 *1/*2 (Intermediate Metabolizer, affecting clopidogrel and SSRIs) and CYP3A5 *3/*3 (Poor Metabolizer for tacrolimus). 12 PharmGKB Level 1A or 1B annotations matching my actual genotype, including warfarin dosing variants in VKORC1 and CYP4F2. Eye color predicted brown with 85% confidence from HERC2; lifestyle panel surfaced ADORA2A homozygous TT (elevated caffeine-induced anxiety risk) and ADH1B heterozygous CT (faster alcohol metabolism, ADH1B*2 carrier). 218 unit tests passing across 13 suites. Validation against the GIAB Ashkenazi trio (HG002, HG003, HG004) shows 61.0% mean predicted probability for the actually-observed child genotype, with the conditional 33.3% Mendelian expectation matching empirically within 0.61 percentage points. Han Chinese trio (HG005, HG006, HG007) replicates the result. Monte Carlo sampler converges at the 1 over square root N rate predicted by the central limit theorem, with KL divergence to the analytical distribution falling from 4.3e-4 at N=1K to 4.3e-6 at N=100K.
Open questions
Whether to publish as open source given the regulatory landscape for software that gives clinical recommendations. The current tool gives direct CPIC dosing guidance and identifies pathogenic variants; published as a service this becomes FDA Software-as-a-Medical-Device territory. Published as code that runs locally on your own VCF it is the same posture as PharmCAT and OpenCRAVAT, both of which exist openly. CYP2D6 diplotype calling currently requires PharmCAT because the gene has copy-number variation that the simple SNP-based caller cannot resolve. The trio validation shows roughly 4 percent inconsistency between predicted distribution and observed child genotype, of which about 2 percent is detectable de novo mutation or parent miscall and the rest is within the heterozygote calling bias band of high-confidence consensus VCFs. The interesting unresolved direction is integration with personal lab values: APOE4 status alone is curiosity, APOE4 plus your actual LDL is decision-relevant.
Related writing / 1 part / 14 min
I sent a tube of saliva to Nebula Genomics and got back a 255 megabyte file. The information is in there. The gap was the tool to read it. So I built one.
Detailed case study in progress.