This is a submission for the GitHub Copilot CLI Challenge
What I Built
ScanVault is a CLI-first document intelligence platform that turns unstructured files — receipts, invoices, PDFs, screenshots, whiteboard photos — into structured, searchable data. The core problem it solves: people accumulate mountains of documents across devices with no fast way to find specific information later ("what was that invoice number?" or "how much did I spend on travel last month?").
ScanVault lets you upload any file from the web or terminal. Using AI, it automatically extracts key fields (amounts, dates, names, entities), categorizes it, and makes everything instantly searchable via vault search with a natural query syntax. It's a full-stack TypeScript monorepo spanning an Azure Functions serverless API (Cosmos DB, Blob Storage, Azure AI Search), a Next.js web dashboard with a category management UI, and a Commander.js CLI as the primary interface. The shared ai-extract package abstracts across OpenAI, Anthropic, and Google as extraction providers, with Tesseract.js OCR as a zero-config fallback.
What makes it personal: I wanted a tool I'd actually use daily — something that lives in the terminal where I already work, not another web app I'd forget to open. The category system, field extraction, and full-text search mean I can vault search "total > 50 category:finance" and instantly find what I need across hundreds of documents.
Demo
Video: https://drive.google.com/file/d/1ro04TzXsuldKzVZmQ-rTKMxpXSbaBiEW/view?usp=sharing
Code: https://github.com/ronak-guliani/scanvault
My Experience with GitHub Copilot CLI
Copilot CLI was instrumental throughout the development process itself. I used it heavily for scaffolding Azure infrastructure — writing Bicep modules for Cosmos DB, Blob Storage, Azure AI Search, and Key Vault involves verbose, detail-heavy syntax where Copilot's suggestions saved significant time. It was equally useful when building the API layer: standing up Azure Functions HTTP handlers with proper auth middleware, Zod validation, and Cosmos DB queries followed repetitive patterns that Copilot picked up on quickly after the first few endpoints, letting me scaffold CRUD operations for assets, categories, and settings in rapid succession. When wiring up the search query parser — which supports filters like category:finance status:ready total>50 — Copilot helped generate the regex-based tokenizer and test cases for edge cases I might have missed.
On the CLI side, Copilot CLI accelerated building the Commander.js command tree and the output formatting layer that handles --json, --quiet, and table modes. It was especially helpful when writing the Copilot extraction integration itself — the child process spawning, JSON response parsing, and fallback heuristics for category inference involved a lot of string manipulation and error handling code that Copilot suggested accurately. For the Next.js web dashboard, Copilot assisted with the Tailwind CSS styling, the category management UI with collapsible sections and context menus, and the API client wiring. Across the entire monorepo — from shared Zod schemas to infrastructure templates — Copilot CLI reduced boilerplate friction and let me focus on the architecture and product decisions rather than syntax.
Copilot is also deeply integrated into ScanVault as a first-class AI extraction provider. When no third-party API key is configured, the vault upload command automatically delegates extraction to Copilot via a custom Copilot extraction skill — so users get structured field extraction, entity recognition, and auto-categorization out of the box without paying for or configuring any AI provider.
The skill defines a strict input/output JSON contract: given a file, Copilot analyzes its contents and returns a summary, extracted fields with confidence scores, named entities, and a category suggestion. The CLI pipes the file context to Copilot, parses the structured response, and feeds it into the same upload-confirm pipeline that the server-side providers use. This means search, export, and the web dashboard all work identically regardless of whether extraction was done by OpenAI, Anthropic, or Copilot.
Beyond extraction, vault summarize and vault ask use Copilot to answer natural-language questions over your documents — e.g., vault ask --category finance --since 1w "how much did I spend last week?". This made Copilot not just a dev tool for building ScanVault, but a core runtime dependency that powers the product's intelligence layer for users who want a zero-configuration experience.



Top comments (1)
Super cool!!