Human Resources · Prompt Receipt Co.

Token Training Booklet

Welcome to the team. Before you start ringing up prompts at the register yourself, work through this course: 3 aisles, 6 core techniques, one bonus locker. At the end, you'll get your own training receipt.

Trainee · Token Register

Based on the live demo token-economy.pages.dev — walk through the same six tricks here, step by step.

01

Aisle · Data Prep

How your data is formatted often decides the token bill more than the content itself does. Two tricks that pay off immediately.

Learned ✓

CSV not JSON

Tabular data without repeated key names or nested braces.

Before · pricey
[{"name":"Alice Chen","role":"Engineer","team":"Platform","location":"Berlin"},{"name":"Ben Ortiz","role":"Designer","team":"UX Research","location":"Munich"},{"name":"Priya Nair","role":"PM","team":"Platform","location":"Remote"}]
After · cheap
name,role,team,location
Alice Chen,Engineer,Platform,Berlin
Ben Ortiz,Designer,UX Research,Munich
Priya Nair,PM,Platform,Remote

Every key name ("name", "role" …) gets paid for again on every single line in JSON. CSV states it once, in the header row.

+15 points
Learned ✓

Markdown not HTML

Same structure, no styling tags or attributes that nobody needs to pay for.

Before · pricey
<div class="report"><h2 style="color:#222;font-weight:700;">Q3 Summary</h2><table border="1" cellpadding="4"><tr><th>Metric</th><th>Value</th></tr><tr><td>Revenue</td><td>€120,000</td></tr><tr><td>Churn</td><td>2.1%</td></tr></table></div>
After · cheap
## Q3 Summary

| Metric  | Value    |
|---------|----------|
| Revenue | €120,000 |
| Churn   | 2.1%     |

Divs, classes, and inline styles carry no content of their own — they just cost tokens without helping the model understand anything more.

+15 points
Quick check

You need to hand a model a list of 200 products with four fields (name, price, category, stock). Which format is the cheapest?

02

Aisle · Workflow

It's not just the data that costs tokens — how you ask, and what you attach, matters too.

Learned ✓

Direct not conversational

Say the task. The model doesn't need the pleasantries.

Before · pricey
Hi there! I hope you're doing well. Could you possibly help me out with something when you get a chance? I'm having a bit of trouble with a function in my code and I'd really appreciate it if you could take a look and let me know what you think might be causing the issue. Thanks so much in advance, I really appreciate your help!
After · cheap
Fix: getUserTotal() returns NaN when cart is empty. Function and error below.

Pleasantries barely change answer quality, but they add up to real cost across hundreds of requests.

+15 points
Learned ✓

One function not one file

Paste only what's broken, plus the error — not the whole codebase.

Before · pricey
import { db } from './db';
import { logger } from './logger';

export function getUser(id) { return db.users.find(u => u.id === id); }
export function createUser(data) { return db.users.insert(data); }
export function deleteUser(id) { return db.users.remove(id); }
export function updateUser(id, data) { return db.users.update(id, data); }
export function getUserTotal(cart) {
  return cart.items.reduce((sum, item) => sum + item.price, 0) / cart.items.length;
}
export function applyDiscount(total, code) { return total * 0.9; }
export function formatCurrency(n) { return `€${n.toFixed(2)}`; }
After · cheap
function getUserTotal(cart) {
  return cart.items.reduce((sum, item) => sum + item.price, 0) / cart.items.length;
}
// Error: Division by zero when cart.items is empty -> returns NaN

Seven unused functions add no context when the bug lives in exactly one of them.

+15 points
Learned ✓

Reset the thread

Every turn resends the whole conversation so far. A fresh chat per task caps what gets resent, instead of it growing all session long.

One long thread — turn 1turn 10
Reset every 3 turns — turn 1turn 10

Illustrative pattern, not measured data.

Without a reset, the resent history grows linearly with every turn. With a regular reset, it stays capped.

+15 points
Quick check

You ask: "Why does this one line in checkout.js throw an error?" What should you attach?

03

Aisle · Iterative Refinement

When you're iterating repeatedly, a single trick accounts for most of the cost.

Learned ✓

Diff not full rewrite

Ask for the changed lines — don't pay to get the whole file back.

Before · pricey
import { db } from './db';
import { logger } from './logger';

export function getUser(id) { return db.users.find(u => u.id === id); }
export function createUser(data) { return db.users.insert(data); }
export function deleteUser(id) { return db.users.remove(id); }
export function updateUser(id, data) { return db.users.update(id, data); }
export function getUserTotal(cart) {
  if (cart.items.length === 0) return 0;
  return cart.items.reduce((sum, item) => sum + item.price, 0) / cart.items.length;
}
export function applyDiscount(total, code) { return total * 0.9; }
export function formatCurrency(n) { return `€${n.toFixed(2)}`; }
After · cheap
@@ getUserTotal @@
- return cart.items.reduce((sum, item) => sum + item.price, 0) / cart.items.length;
+ if (cart.items.length === 0) return 0;
+ return cart.items.reduce((sum, item) => sum + item.price, 0) / cart.items.length;

For a one-line change, nine out of ten lines of the full file are pure repetition — paid-for repetition.

+15 points
Quick check

You had a 300-line function generated and just want to change one condition. What do you ask for?

Bonus Locker

Five small habits that pay off fast. 2 points each, no before/after needed — just check them off as you apply them.

Training Receipt

Prompt Receipt Co. · Token Register

Total0 / 100 points

Still in training …

Points are symbolic and meant to motivate — not a measured token saving.
Source: token-economy.pages.dev