Route three of three

Every model you have, behind one endpoint you own.

Run a gateway and DeckTrail reaches all of it: your keys, your provider order, your free tiers tried first, a fallback when one is down, and a real cost figure for every deck. DeckTrail needs no setting for any of it, because a gateway is something the rest of your tooling can share.

Pick how the writing happens

Three routes. Same deck, same portal.

DeckTrail does not care which model writes your deck, so you are not locked to one. Everything after the writing is identical, and switching later is a flag rather than a migration.

Step one

One command installs it.

One flag adds the gateway. The same command starts it, waits until it answers, and tells OpenCode how to reach it, merging into your OpenCode configuration rather than replacing it and keeping a backup of what was there.

Port 3000 already taken? Pass another and it is used end to end.

# one command, and it does the rest
git clone https://github.com/orbitqube-tech/decktrail
cd decktrail
./scripts/up.sh --gateway
# identical on macOS
git clone https://github.com/orbitqube-tech/decktrail
cd decktrail
./scripts/up.sh --gateway
# PowerShell
git clone https://github.com/orbitqube-tech/decktrail
cd decktrail
.\scripts\up.ps1 -Gateway

# or from cmd.exe, same thing
scripts\up.bat -Gateway
DeckTrail

  Docker is running
  pnpm is available
  Port 3000 is free
  Wrote .env with a generated database password
  Starting the stack, which pulls images the first time
  Waiting for the portal, which sets itself up on a first boot
  Portal is healthy on http://localhost:3000
  Building the command line tool
  Installed the decktrail command on your PATH

Ready.

Open this once to name yourself and set your brand:

    http://localhost:3000/setup?token=zPJ9074oR7G28PP8DSRbsl88Fb25ail-
Step two

Point it at what you already wrote.

01

Any document you already have

Meeting notes, a PDF, a PowerPoint deck, a Word document, or a page you photographed. The text comes out on your machine, and a scan is read as a picture only when it carries no text of its own. Nothing is converted: the substance comes across and the original's layout does not.

# the command is the same one every route uses
decktrail generate notes.md --client acme \
  --prompt "lead with the cost" \
  --provider opencode --model omniroute/bestfast

generating with opencode (omniroute/bestfast)
read notes.md as text
wrote deck.json

# and the gateway reports what it just cost you
x-omniroute-model:          big-pickle
x-omniroute-provider:       oc
x-omniroute-response-cost:  0.0000000000
02

One line changes the whole shape

No template to fill in, no configuration file to write. Say what matters and the deck is rebuilt around it. Same notes, same route, one sentence of difference.

From the notes alone
  1. Quarterly platform review for Acme Logistics
  2. Where we are
  3. What it costs
  4. What we propose
  5. Proposed timeline
  6. What we need from you
  7. Ready to move
Asked to lead with the cost, in five slides
  1. Quarterly platform review for Acme Logistics
  2. Where we are
  3. What it costs
  4. What we propose
  5. Proposed timeline
  6. What we need from you
  7. Ready to move
03

Then it goes to one named person

Each recipient gets their own link behind a passwordless sign in. No public URL, no anonymous forwarding, and every open ties to a person, which is what makes the record afterwards worth having.

decktrail push deck.json --recipient cfo@acme.example

published: acme-logistics-qpr
shared with cfo@acme.example
Why this route

A routing gateway, and what it buys you.

One policy, every tool

Provider order, fallbacks and which models are allowed live in the gateway. DeckTrail inherits all of it and holds no copy that can drift out of step.

Free tiers first, then the good one

Order your providers so nothing billable is tried until the free ones have had a go. You pay for the decks that need the better model and nothing else.

A real cost per proposal

Every response carries what it cost and which provider served it, so what a deck costs becomes a figure you look up instead of a number you guess.

One provider down is not you down

A gateway falls through to the next one. That is worth more than raw speed on the afternoon a deck has to go out.

Still no credential here

The key sits in the gateway or in OpenCode's configuration, both outside DeckTrail. We spawn a command and read its output, exactly as on every other route.

Bring your own

Anything presenting an OpenAI-shaped endpoint works. DeckTrail depends on no particular gateway and bundles none.

What the free lane is for

A keyless gateway answers with no credentials at all, which makes it a good way to watch this work end to end before committing to anything. It is not capacity: shared free pools are busy, the model you get varies from one call to the next, and some of them will not hold a schema. Put your own keys behind the gateway for work that has a date on it. Spending limits belong to the gateway too, so set any ceiling there and confirm it holds, because DeckTrail has no cost model, no budget flag and no spend ledger of its own.

Self-host it

It runs on your box, not ours.

There is no account to make here, because there is nothing here to sign into. You clone it, you run it, and your clients' decks live on your server where they belong. We could not read them if we wanted to.