Brandon Soria · Full-stack & AI Engineer
I build AI agents that do real work — and stay under control.
Three live systems. Try them.
More responsibility at every step
Click a step
3
live systems
16,000+
real listings tracked
Open
source code
Answer from company data
Answers customers from the store’s policies and live orders, and cites every source.
Volt Mobile, a demo phone store. Ask anything — try to make it hallucinate:
Tool calls, SQL, sources and cost appear here.
How it’s built
Use this when the answers exist in documents or a database, but finding them takes a person.
- 01
Question
streamed chat
- 02
Agent loop
tool calling, max 5 steps
- 03
search_docs
policies in pgvector
- 04
find_products · get_order
Postgres
- 05
Answer + trace
sources, SQL, cost
Decisions
No agent framework
Why Three tools and one loop fit in a plain route handler.
Trade-off Retries and memory are hand-written.
Vector search + SQL
Why Policies are fuzzy; stock and orders need exact values.
Trade-off The model can pick the wrong tool — the trace shows it.
The model never writes SQL
Why Fixed, parameterized queries; arguments validated with zod.
Trade-off No ad-hoc questions outside the tools.
When it fails
- →Weak matches (<0.3 similarity) → “I don’t know”, not a guess.
- →Bad tool arguments go back to the model, not a crash.
- →5 steps per answer, 25 requests/hour per visitor.
Act on the CRM, with approval
Qualifies a lead and prepares the CRM updates, then waits for a person to approve.
LangGraph · live
- QualifyLLM · structured output
- Look upMCP · find_contact, search_inventory
- Draft replyLLM · streamed
- Propose CRM actionsLLM · MCP tool schemas
- Human approvalLangGraph interrupt · Postgres checkpoint
- ExecuteMCP · write tools
Pick a lead and run it. The agent stops before changing anything, until you approve.
CRM pipeline · Postgres
new · 0
qualified · 0
quoted · 0
won · 0
lost · 0
How it’s built
Use this when the AI should take actions, but a wrong one costs money or customers.
- 01
Qualify
intent, budget, score
- 02
Look up
CRM + inventory via MCP
- 03
Draft + propose
reply and actions
- 04
Approval
paused, state in Postgres
- 05
Execute
approved actions only
Decisions
LangGraph here
Why The run pauses for hours and resumes exactly where it stopped.
Trade-off More moving parts than the first system.
Its own MCP server
Why The only door to the CRM, reusable from any agent.
Trade-off One more process to run.
Writes need a human
Why Nothing changes before approval; only allow-listed tools run.
Trade-off Slower than full autonomy.
When it fails
- →Tools outside the allow-list are rejected.
- →A restart mid-approval resumes from the checkpoint.
- →Cold starts are shown, not hidden.
Resale Intelligence
The system I run my electronics resale business on. Real data, updated daily.
Listings tracked
16,739
since Sep 24
Likely sold
4,865
tracked ≥20 h, then gone
Price changes logged
18,459
every re-capture
New in last 7 days
1,709
iPhone, iPad, Mac, audio
What used Apple devices really sell for in Mexico City
Bar = middle 50% of asking prices (P25–P75) · tick = median · MXN
- iPhone 17 Pro Max$20,000
- iPhone 16 Pro Max$14,000
- iPhone 16 Pro$12,500
- iPhone 15 Pro Max$10,400
- iPhone 16$9,750
- iPhone 15 Pro$8,900
- iPhone 14 Pro Max$7,500
- iPhone 15$7,000
- iPhone 14 Pro$6,800
- iPhone 14$5,500
Today's flagged deals · real listings
Scored by the CRM against the market. Pick one and let the agents decide.
Or paste any listing
Deal desk · multi-agent
Six steps, two kinds of work. Code and SQL produce every number: the parse, the comparable sales, the margin target and the max price. LLM agents only judge what code can't — ambiguous text, scam signals, and how to word the offer — and their output is schema-validated and clamped to the numbers.
How it’s built
- 01
Chrome extension
captures listings
- 02
Ingest API
validated, deduped
- 03
Price model
deterministic code + SQL
- 04
Postgres
listings, price history
- 05
Agents
judgment only
Decisions
Code for numbers, AI for judgment
Why Prices and margins are code; agents judge text and scam signals.
Trade-off More code than “ask the model”.
Capture at the source
Why A Chrome extension sends every listing I browse.
Trade-off Coverage = what I browse.
Cache the market view
Why 30-minute cache lets the database sleep.
Trade-off Numbers can be 30 minutes old.
Next: cross-border sourcing.
