Inspiration
Finance work often breaks across inboxes, spreadsheets, accounting systems, and phone calls. A person still has to connect the dots: find the right invoice, check whether something is wrong, reach the responsible person, and follow through.
We wanted to build an AI system that can move that work forward while keeping the human in control of consequential actions.
What it does
LedgerLine accepts an invoice PDF, extracts its details, and investigates it against the workspace’s invoices, purchase orders, and recorded payments. It flags issues such as possible duplicates, mismatched amounts, and overdue invoices.
For follow-up, LedgerLine can place an outbound call through ElevenLabs and Twilio. During the call, a live dashboard changes to show the current topic and relevant findings. The user can ask the agent to explain or display information. If vendor email comes up, LedgerLine prepares the message and asks for explicit approval by voice before sending it.
LedgerLine does not transfer money, cancel payments, issue refunds, or change bank details.
How we built it
The dashboard uses Next.js and TypeScript. A Python FastAPI backend coordinates invoice investigations, background jobs, and voice workflows using LangGraph and SQLAlchemy. SQLite supports the local workspace.
Nicrron’s OpenAI-compatible API powers the core financial reasoning. ElevenLabs handles voice conversations and Twilio-backed outbound calls. PRISM traces agent runs so we can inspect tool calls, latency, and failures.
We built the workflow around explicit authorization checks, recipient policies, approvals, and idempotency. Uploaded invoices and vendor messages provide evidence for investigation; they do not authorize actions.
What we learned
A useful finance agent needs more than a good answer. It needs to show what it is doing, connect its conclusions to records, and make the boundary between preparation and authorization clear.
We also learned that observing failures is part of building the product. PRISM gives us a way to inspect real runs and see where the workflow breaks instead of relying on a polished demo alone.
Challenges we faced
The hardest part was coordinating asynchronous invoice investigations, phone calls, and dashboard updates while keeping the displayed information tied to the active call.
External voice providers also have rate limits. During our latest live rehearsal, outbound calls returned HTTP 429, so we are investigating provider limits before claiming a successful end-to-end call demo. The application records failures rather than treating a failed call as completed.
What’s next
We’re continuing to improve call reliability, verify the full voice-approved email flow, and use PRISM to identify and correct recurring agent failures.
Built With
- elevenlabs
- fastapi
- langgraph
- next.js
- nicrron-api
- prism
- python
- react
- sqlalchemy
- sqlite
- twilio
- typescript
Log in or sign up for Devpost to join the conversation.