Sourcerer
● Runs on your machine

Know what it's worth. Anywhere. Including the basement with no bars.

Photograph something in a thrift shop. A local open-weight model reads it, your own sold history and live listings price it, and you get the one number that actually matters: the most you should pay.

0
Photos uploaded
0 API keys
Needed to work
—
Per identification
—
Items read correctly
Sourcerer verdict card: a Pendleton wool board shirt, verdict MAYBE, max offer $14.12, estimated resale $59.80

An unedited run, no cloud, no GPU server: 8 CPU cores, 15.4 GB of RAM, and a 4 GB card that holds part of the model. Verdict in about nine seconds.

Three steps, one number

The loop a reseller already runs in their head — with the part their memory is bad at, made reliable.

01

Read the item

Gemma 3 runs locally on the photo. Brand, model, era, size, flaws, and the keywords a reseller would actually search.

02

Price the market

Live listings when there's signal. Your own sold history when there isn't. The app always tells you which one it used.

03

Decide the offer

Fees, shipping, packaging and your target margin, solved for the ceiling. BUY, MAYBE or PASS.

See it work

An unedited run: describe the item, type the price on the tag, get a verdict. No network involved.

Why the brain has to be on the device

The decision happens in a basement with no bars, so the model has to be in your hand. That isn't ideology — it's plumbing.

The model reads

fuzzy · tolerant of bad light · right most of the time

Identification is exactly the job a small open-weight vision model is good at. It doesn't need to be perfect; it needs to be fast, private and free at the margin.

Arithmetic decides

deterministic · unit-tested · identical offline

The money is never left to a language model. Fees, shipping and the max offer are plain functions, so the number you get in a basement equals the number you get online.

Honest limits

  • It is slow on CPU. About nine seconds per item from a typed note once the model is warm, and thirty to forty seconds from a photo, with roughly seventy-five seconds on the very first scan of a session while the weights load. A GPU changes this; this laptop's doesn't.
  • eBay's real sold prices are not available. eBay moved completed listings behind a login and the search API's sold filter went with them. The app returns live asking prices, labels them as asking, and applies a visible 14% haircut. It is a range, not a promise.
  • Reading and tool-calling are different models. Gemma 3 4B is a reader — vision and completion — and has no tools capability, so the advisor loop runs on a small tool-capable open model beside it. The app reports which is installed rather than failing quietly.
  • The price model needs your data. With no sold history it falls back to condition-adjusted comps and a deliberately pessimistic guess. It gets personal only after you log sales.

Built with

Open weights at the core, open source around it. Every one of these sits behind a fallback, so removing any of them degrades the app instead of breaking it. Where a key exists, the integration has been verified against the live service — one table records the status of all of them, including the ones that are wired but not demonstrated.

Gemma 3Local multimodal identification and listing copy
OllamaOn-device inference runtime
MastraAgent runtime, tools, memory, workflow
SerpApiLive market listings when there's signal
TabPFNPrice model fitted on your own sold history
SentryOne trace per scan, stage by stage
TemporalDurable nightly reprice that survives a crash
Tiger Datapgvector memory: "have I bought this before?"
ElevenLabsVoice in and out — API verified, UI pending
BackboardHosted open-weight brain for a GPU-less machine
RenderBlueprint for the hosted path
VercelStatic landing page, deployed from this repo