{"id":51475371,"url":"https://github.com/asmuelle/vellum","last_synced_at":"2026-07-06T20:30:33.924Z","repository":{"id":365993014,"uuid":"1266479608","full_name":"asmuelle/vellum","owner":"asmuelle","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-19T19:49:23.000Z","size":107,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-19T20:20:47.547Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/asmuelle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-11T16:50:49.000Z","updated_at":"2026-06-19T19:49:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/asmuelle/vellum","commit_stats":null,"previous_names":["asmuelle/vellum"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/asmuelle/vellum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fvellum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fvellum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fvellum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fvellum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asmuelle","download_url":"https://codeload.github.com/asmuelle/vellum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fvellum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35205739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-06T20:30:33.141Z","updated_at":"2026-07-06T20:30:33.917Z","avatar_url":"https://github.com/asmuelle.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vellum\n\n[![CI](https://github.com/asmuelle/vellum/actions/workflows/ci.yml/badge.svg)](https://github.com/asmuelle/vellum/actions/workflows/ci.yml)\n\n\u003e A private family medical-record vault that photographs lab results, prescriptions, and discharge papers, then extracts, trends, and explains them — unlimited capture, and not one page ever uploaded.\n\n**Category:** Edge AI / on-device inference (iOS + Android) \n\n## Concept\n\nA private family medical-record vault that photographs lab results, prescriptions, and discharge papers, then extracts, trends, and explains them — unlimited capture, and not one page ever uploaded.\n\n## Target User\n\nThe sandwich generation (35-60) managing their own records plus aging parents' paperwork across multiple providers; chronic-condition patients tracking labs over years. The caregiver is the payer and the upsell engine.\n\n## Why Edge AI Is Structural (not decoration)\n\nAFM 3 Core Advanced image input plus the free OCRTool parse photographed labs, EOBs, prescriptions, and discharge summaries; @Generable extracts typed records (analyte, value, reference range, date) into longitudinal trend charts; Spotlight local RAG powers 'ask your records' Q\u0026A ('when was Dad's last tetanus shot?'); AFM 3 generates plain-English explanations. Android: ML Kit GenAI Prompt API (text+image) on flagships, multimodal Gemma 3n E4B via LiteRT-LM elsewhere. Structural: medical documents are the canonical never-cloud data — the vault premise collapses if pages transit a server, unlimited scanning is uneconomic for cloud-vision rivals but free here, and 5.1.2(i) forces cloud competitors into ugly consent dialogs this app never shows.\n\n## Why Now (2026 timing)\n\nOn-device vision for third-party apps became possible at WWDC26 (AFM 3 image input + OCRTool); mobile local OCR+LLM extraction has zero polished commercial players today; Health \u0026 Fitness passed $4B IAP and health-data breach headlines have pre-sold the distrust of cloud record apps.\n\n\n\n## Tech Stack\n\niOS (iOS 26 baseline, iOS 27 for AFM 3 image input, Sept 2026): VisionKit document camera (VNDocumentCameraViewController) for capture; Vision RecognizeDocumentsRequest for table-aware OCR; FoundationModels AFM 3 with @Generable typed schemas (analyte/value/unit/refRange/date) fed OCR TEXT, not raw pixels — use the built-in OCRTool and Spotlight search tool for local RAG Q\u0026A; train a task-specific LoRA adapter with Apple's Foundation Models adapter toolkit for lab extraction; deterministic layer FIRST — regex/table parsers for the top US lab formats (Quest, Labcorp, hospital Epic printouts) with the LLM as fallback, plus a mandatory per-value human-confirmation UI; unit normalization (mg/dL vs mmol/L) in code, never in the model; GRDB/SQLite with NSFileProtectionComplete; NLContextualEmbedding (or EmbeddingGemma converted to Core ML) for the local vector index; Swift Charts for trends; CloudKit with Advanced Data Protection for E2E family sync (and honest 'end-to-end encrypted, we can never read it' copy instead of 'never uploaded'). Android: ML Kit Document Scanner + Text Recognition v2 for OCR; ML Kit GenAI Prompt API (Gemini Nano, image+text) on Pixel 8+/Galaxy S24+ AICore devices; Gemma 3n E2B (not E4B — mid-range RAM) via MediaPipe LLM Inference / LiteRT-LM as the fallback tier, text-only extraction path on devices that can't hold the vision encoder; EmbeddingGemma via LiteRT for RAG embeddings; SQLCipher + Android Keystore. Cross-platform family sync: ship iOS-only family plans in v1; if Android profiles are required, an Automerge/CRDT document store over a dumb zero-knowledge blob relay (client-held keys, libsodium), priced into COGS honestly. Explanations layer: template-grounded output (model fills slots against the verified structured record, cites the reference range shown on-screen) to stay inside the FDA CDS exemption.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasmuelle%2Fvellum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasmuelle%2Fvellum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasmuelle%2Fvellum/lists"}