Upload or email your solar, battery, and inverter manuals. Five specialized AI agents find important actions, create calendar-ready dates, answer questions with source citations, and validate the results.
A manual may say “every year,” but an installation or commissioning date lets the application calculate the exact calendar dates. It is helpful, not required: without it, the manual can still be processed and timing stays relative or unresolved instead of being invented.
This portfolio demo runs within free-tier Gemini API constraints. A compact synthetic manual makes the complete workflow practical while controlling quota and token usage.
Five agents, selected by the journey
Watch the system branch.
Switch between Overview, Web Upload, Email, and Ask Manual. Select any node for a short explanation, or open the Technical view for deeper boundaries.
Web and email lead into the same private workspace. The maintenance, calendar, and question branches use only the agents they need.
01
Web upload → results
The workspace publishes source-linked results. Eligible dates continue through the Calendar role and its own release gate.
02
Ask your manual → cited answers
A separate question-and-answer branch searches retained documents when you ask.
03
Email → an ongoing conversation
The workflow can process attachments, ask for missing information, and resume after a reply. Calendar delivery requires explicit approval.
Illustrated workflow, not live processing. Connections show the selected journey; customer replies and quota pauses resume from saved state.
The case study
Built as a product. Engineered as an Agentic AI system.
Approximately 15–20 founder-reported discovery conversations explored the burden of technical documentation. The project translated that practical problem into requirements, journeys, a bounded MVP, five implementation phases, tests, and owner acceptance.
Product & Business
From discovery to an accepted MVP
Approximately 15–20 informal, founder-reported conversations explored technical-documentation and solar-ownership pain points. They highlighted uncertainty around maintenance, replacement timing, and scattered records. This was directional discovery—not formal market validation, measured demand, or a representative research study.
Manuals, warranties, receipts, and installer records describe different equipment and triggers. The product problem was narrowed to finding applicable actions, calculating dates only when the evidence supports them, retaining the source, and making the result easy to revisit. Monitoring, energy dispatch, legal warranty decisions, and purchasing were deliberately excluded.
The PRD defined the homeowner jobs, supported files, private saved workspaces, optional installation date, evidence-linked results, calendar eligibility, email continuation, and document-grounded questions. It also made uncertainty a product state: exact, estimated, relative, unresolved, past, or review-required—not something the model could quietly smooth over.
Journey maps covered first upload, returning through a private link, appending or deleting files, retrying saved work, downloading eligible calendar actions, asking across retained documents, sending an invite, replying with missing information, and approving a version-bound calendar delivery. Those journeys determined the durable states and recovery paths in the implementation.
The accepted MVP supports up to five English PDF or image files per submission, private read-only results, deterministic calendar export, verified email conversations, cited workspace Q&A, and QA release gates. It does not invent missing dates, provide live equipment telemetry, browse the web for RAG, or add account/password screens.
Installation is the one optional scheduling baseline; month/year estimates use the 15th and remain estimated. Explicit manufacturer triggers are preserved. Warranty periods and condition-only actions never become fake dates. Recurring actions are grouped for reading while their individual occurrences remain available for calendar creation.
Automated checks cover file boundaries, date arithmetic, isolation, retries, webhook replay, approval versions, MCP scope, citations, deletion, and QA withholding. Authorized local smoke tests used synthetic or public documents. All five phases were separately accepted; final deployment validation remains distinct.
Next.js provides the public page, private workspace, and server routes. Supabase holds private files and authoritative workflow data. Gemini supplies bounded interpretations. Deterministic TypeScript services validate access, schemas, dates, approvals, and side effects. Workers resume persisted work rather than relying on an open request or model memory.
Document Extraction turns page evidence into typed rules. Calendar selects eligible actions for deterministic ICS output. Email Evaluator interprets one verified email case. RAG Q&A answers from retrieved workspace evidence. QA/QC gates extraction/results, email, and calendar artifacts. Each role has defined inputs, outputs, permissions, and prohibited actions.
The application configures gemini-3.1-flash-lite for document interpretation, typed email planning, installation-date interpretation, grounded answers, and bounded QA review. Embeddings use gemini-embedding-2 at 768 dimensions. Model output is schema-validated, provider retries are bounded, and quota exhaustion pauses saved work rather than selecting a paid fallback.
LangGraph loads a verified email case, runs deterministic preflight, routes either to Gemini evaluation or validated calendar handling, executes the bounded plan, and ends. Supabase—not the graph—is durable state across replies, pauses, retries, and multi-day conversations. LangGraph does not supervise every agent or own document Q&A.
The in-process Email Evaluator MCP client/server exposes only case-scoped domain capabilities to the Phase 3 evaluator. Separately, hosted Resend MCP is a private provider adapter used by trusted server code for allowlisted email retrieval and delivery operations. Gemini receives neither OAuth credentials nor unrestricted MCP access.
The evaluator can inspect its case, read current results, query saved structured evidence, process only current authorized attachments, submit a typed installation-date assessment, request clarification or consolidated results, request validated calendar delivery, and redirect unsupported work. Workflow-state permissions narrow that catalogue further. It cannot pick a workspace or recipient, approve for a customer, serialize ICS, access credentials, or call Resend directly.
Retained documents become page-aware chunks, then 768-dimensional embeddings stored in pgvector. A workspace-filtered query retrieves relevant evidence for Gemini, and deterministic code accepts only citations to those retrieved chunk IDs before resolving the file and page. Unsupported questions return an explicit not-found response.
The first question claims only missing compatible indexes for retained document versions. Transcription runs in bounded page ranges, chunks stay within page boundaries, and index metadata records the source version, embedding model, dimension, and chunk version. Later questions reuse ready indexes; deleting or changing a document invalidates its derived data.
QA/QC combines deterministic validators with a typed Gemini source-fidelity review for extraction, result tables, consolidated email, and calendar payloads. A pass releases the artifact; repeated failure marks results review-required or withholds email/calendar delivery. Ordinary RAG chat answers are not sent through this separate QA agent—their citations are checked by the RAG service itself.
Application code validates files and typed outputs, performs date arithmetic, groups presentation rows, selects calendar eligibility, validates approval codes and event hashes, serializes ICS, enforces idempotency, and queues email. Gemini may interpret or draft, but it never becomes the authority for access, math, approval, or delivery.
High-entropy private links are exchanged for server-managed sessions; privileged Supabase keys stay server-side. Signed webhooks and provider IDs establish email identity. Uploaded text is untrusted evidence and cannot select a tenant, recipient, or tool. MCP scope, RAG retrieval, citations, approvals, storage, and outbox records are bound to verified workspace state.
Cursor supported the local development workspace and Codex helped inspect, implement, test, and document the product. The repository's discovery notes, PRD, journeys, decisions, agent contracts, implementation plan, migrations, tests, and owner acceptance gates drove that work. Neither tool is part of the deployed runtime architecture.