GORGES
Live demos

Try one of our agents yourself

These are not videos or screenshots. Each one is a deployed agent running behind a rate-limited API, doing the work in front of you. Type something of your own and watch what comes back.

Christopher Grant The AI systems shown here were designed and built by Christopher Grant, GORGES Chief AI Officer.
Newest demo

A sales coach that shows its work

Call coaching does not scale. A manager with eight reps cannot listen to eight hours of calls a week, so coaching becomes whatever call the manager happened to sit in on. This agent reads the transcript instead, scores it against 36 observable criteria, and hands the manager the one thing worth coaching. It is substantial enough to have its own page.

Live demo, try it   Deployed agent

Sales Coaching Tool

Built by Christopher Grant

Paste a call transcript, or load one of six samples written to fail in different ways. The agent splits it into six coaching categories, checks each against the rubric with the quote that proves every yes or no, and ranks where this rep is furthest from the standard. Then the rep answers the same real objection again, out loud, and watches the score move.

36observable criteria, weighted, drawn from SPIN, MEDDPICC and standard call QA
6categories: opening, discovery, qualification, objections, value, closing
4measures that never touch a model at all, because they are arithmetic
41n8n nodes behind it, every one with a sticky note explaining itself

The model reads the language. Code decides the score. Every criterion is a yes or no with a line quoted from the transcript behind it, and the four mechanical measures, talk-to-listen ratio, question count, longest monologue and speaker switches, are counted rather than judged. A rep can argue with an opinion. It is harder to argue with their own words.

The gap analysis goes to the manager, never to the rep. The system arms a coach rather than grading a person and mailing them the result.

Open the Sales Coaching Tool See how it works

Live demos

A billing-intelligence platform: two agents on one pricing engine

The first is live and running now, and you can type your own pricing model into it. The second reads the same engine in reverse to audit what was actually charged. Both are live, and you can type your own into either. Underneath both: the model reads the language, and code computes every dollar.

Live demo, try it   Deployed agent

Plain-English Pricing Builder

Built by Christopher Grant

Describe a pricing model in a sentence. Get a structured model and a correct sample invoice.

Flat fees, per-unit usage, volume tiers, tier discounts, free allowances and monthly minimums, in any combination. Count anything you like: calls, seats, GB, minutes.

0 / 2000
How this works
1 · Read the sentence
An open-weights model turns your everyday language into a structured pricing model.
Why: language is what people are good at describing, and what models are good at reading.
2 · Check the model
The structure is validated against a fixed schema before anything is calculated.
Why: a wrong structure should be caught before it ever reaches the math.
3 · Do the math in code, not in the model
A deterministic calculator computes every figure and ignores anything the model says the total is.
Why: the numbers have to be provably correct, so they are never generated text.
4 · Return a clean, audited result
One structured answer the page can render and the run log can record.
Why: an answer you can trace back is worth more than an answer you can only read.
Your browserSends the sentence to this site, nowhere else.
Cloudflare WorkerChecks limits, hides the agent, and holds the fallback.
n8n agentThe model parses the sentence, code computes the invoice.
The answerA structured model and a sample invoice, rendered above.
What you can describe
FactorSay it like thisWhat the calculator does with it
Flat recurring fee‘charge $500 a month’Adds it to the invoice before any usage is counted.
Per-unit usage‘$0.002 per API call’Multiplies the billable units by that rate.
Volume tiers‘$0.002 up to 1,000,000, then $0.0015’Prices each band on its own and adds them up, rather than repricing everything at the cheaper rate.
Tier discounts‘10% off calls above 1,000,000’Takes the percentage off that band alone, and shows it as its own line.
Free allowance‘the first 5 seats are free’Subtracts them before charging begins.
Monthly minimum‘with a $500 monthly minimum’Trues the invoice up if everything else falls short of it.

Combine as many as you like in one sentence. The unit you name sets the example usage the invoice is priced against, so seats are billed against 25 seats and API calls against 1,500,000, rather than one figure being forced onto both.

The agent, node by node
The nine-node n8n workflow behind this demo: a webhook receives the request, a guard checks the shared token in constant time and caps the input, a branch sends valid input to a prompt builder and then to llama-3.3-70b on Cloudflare Workers AI, a calculator validates the parsed model and computes the invoice in code, and separate rejection and error paths join the same single response node.
The workflow that answered the request above. Every branch ends at one response node, including the two that never reach the model. Open it in a new tab to read the notes on each step.

The API key sits in the agent, never in this page. Input is capped and rate limited, and the text you type is treated as data to read, never as instructions to follow.

For production we would add real per-user authentication, a secret rotation cadence, full request logging, and a data-handling policy if real customer data ever flowed. This demo runs on fabricated data only.

Live demo, try it   Deployed agent

The Revenue-Leakage Auditor

Built by Christopher Grant

The same pricing engine, run in reverse. Give it the rule these accounts were billed under and what each one was actually charged, and it recomputes every row and flags the money slipping through.

AccountUsageCharged
How this works
1 · Read the rule
The same model parses your sentence into the same structured pricing model the Pricing Builder above produces.
Why: it is one engine. If the two agents parsed differently they would disagree about what a rule means.
2 · Price every row again
The same code that builds an invoice computes what each account should have been charged, from its usage.
Why: an audit is only worth having if its arithmetic is the same arithmetic that bills the customer.
3 · Compare, and classify
Charged against expected, to the cent. Each gap is named: undercharge, overcharge, or a missing charge.
Why: a number on its own is not a finding. A finding says what kind of problem it is.
4 · It flags, a person decides
The summary is written from figures the code already computed. Nothing here changes anyone's billing.
Why: this surfaces and explains. Acting on it is a human decision, and it should stay one.
The agent, node by node
The thirteen-node n8n workflow behind this demo: a webhook receives the rule and the billing rows, a guard checks the shared token in constant time and caps the input, then a branch sends valid input to the same rule parser the Pricing Builder uses, running on Cloudflare Workers AI. The audit engine reprices every row in code, and a second guard sends a failed audit past the narrator rather than spending a model call on it. Separate rejection and error paths join the same single response node.
Two model calls, and neither of them produces a number. The first reads the rule; the second writes the closing sentence from figures the engine has already computed. Everything between them is code. Open it in a new tab to read the notes on each step.

Every figure on this card is computed in code and reconciled: charged plus difference equals expected, on every row. The model writes one sentence at the end, from numbers it was handed, and it is told never to calculate one of its own.

For production we would add real per-user authentication, a full audit trail of every run, and a data-handling policy before any real billing data went near it. This demo runs on fabricated accounts.

Why both of these work this way

The model reads the language. Code computes every dollar.

A language model is very good at reading a sentence and very bad at being a calculator, so we let it do only the first job. It turns your words into a structured model, that structure is validated against a fixed schema, and then ordinary deterministic code computes every figure. Any total the model volunteers is thrown away. That is why the two demos above always agree with each other, and why you can audit every number they show.

Live demo, try it   Deployed agent

Content Creator Marketing and GLIV (drawn from 'For those who live to give')

Built by Christopher Grant

This is the content desk from GLIV, the platform we run a side project on. Pick a post type and a voice, choose what it may draw on, and it drafts a post in that voice, ready for review. It delivers nowhere.

Generate a new post
How this works
1 · Words
The post is written from real passages in our own published library, in the voice you picked.
Why: a post grounded in something real beats a post invented from nothing.
2 · Image
Pick a photo, and one line from the post becomes a house-style quote graphic, drawn in your browser.
Why: the same look every time, without anyone opening a design tool.
3 · Destinations
The real desk posts to pages, groups and profiles. Here they are shown and inert.
Why: you can see the whole shape of it without anything being able to go out.
4 · Review and send
Nothing moves until a person approves. Here, Approve marks it in your browser and stops.
Why: the machine drafts and a person decides. That is the rule the real one runs on.

Typography is enforced in code rather than asked for in the prompt. Em dashes and curly quotes are stripped after the model writes, because a model emits them whatever the instructions say, and an em dash is this brand's number one auto-fail.

What we left out on purpose: scheduling, posting, the customer database, the funnel, and the morning brief. Those touch real accounts and real data, so they stay a case study rather than a public toy.

Under the hood, for anyone who wants it
Your browserThe generate pane. Two network calls, both to this site.
Cloudflare WorkerSame-origin API. Validation, per-IP and daily limits in KV, and the fallback.
Workers AIbge-large-en-v1.5 turns your topic into a 1024-dimension vector.
Vectorize1,218 chunks of our own published work. Nearest neighbours, filtered to the sources you ticked.
Europe PMCOptional. Real studies with a journal and a year, free and keyless.
Llama 3.3 70BOpen weights on Workers AI. Writes the draft from the retrieved passages and the voice rules.
Validation in codeTypography, invented names, links, hashtags, paragraphs, and the review gate.
Back to your browserThe draft, its sources, and a canvas that draws the quote graphic at 1080 square.

The whole thing is one Cloudflare Worker in front of a static site, so the page and the API share an origin and there is no CORS dance and no separate backend to keep alive. The Worker holds every secret; the browser holds none.

The library. Our published articles, video transcripts and story bank were chunked at about 1,100 characters with overlap, embedded with bge-large-en-v1.5, and written to a Vectorize index with the text carried in the metadata so the writing model can actually read what was retrieved. Each chunk is tagged with a content type, which is what the 'Pull from' checkboxes filter on. No single page may contribute more than 12 chunks, because one page rendering a whole food database would otherwise be most of the index.

The retrieval. Your topic is embedded and matched by cosine similarity. Ask Daniela, the demo above, uses a grounding floor of 0.62: measured on this index, real questions score 0.68 to 0.92 and an off-topic question scores about 0.45, so below the floor it declines to answer rather than inventing something.

The rule that matters. A prompt asks, code guarantees. Anything that must be true is enforced after the model, not requested before it: em dashes and curly quotes stripped, links removed, hashtags removed, paragraph breaks inserted, invented people scrubbed, and the review status overwritten with a constant. That last one is the point of the demo. When a model returned a review block claiming it had published to Instagram, the code threw the claim away.

The stack, in full. Cloudflare Workers, Workers Static Assets, Workers KV, Vectorize, Workers AI (bge-large-en-v1.5 for embeddings, Llama 3.3 70B for the content desk, gpt-oss-120b for Ask Daniela), Europe PMC and Wikipedia for research, the Pexels API for photos, and the HTML canvas for the graphic. n8n runs the same agents as deployed workflows, and the Worker prefers them when their webhooks are configured.