Inspiration

I study international relations, and we practise debating and negotiation all the time. But in a seminar nobody tells you precisely which technique was just used against you, or which one you used yourself. I wanted a sparring partner that makes rhetoric and manipulation visible.

What it does

Orator lets you argue a motion against an AI opponent at one of three levels: Friendly (polite, argues on the merits), Strict (picks at your wording) or Hostile (strawmen, demagoguery, nitpicking – but no personal insults). After every exchange a neutral AI judge writes a note: which techniques each side used, with exact quotes, whether they were legitimate or manipulative, and what worked. Notes are sealed until you open them, so you can try to spot the techniques yourself first. After up to ten exchanges, or whenever you press Stop, the judge gives a final verdict: who was stronger and why, who manipulated, and every technique the opponent used.

It is built for international relations students and early-career negotiators who want to practise recognising and using rhetorical techniques.

How I built it

I planned before building with the Devpost Learn Skill Pack: a scope, a product requirements document and a technical spec (all in devpost/). The key design decision: one model plays two roles. As the opponent, it logs its own techniques while it argues, so everything the judge says about the opponent can be checked against that log instead of guessed. The user's side is analysed independently.

Stack: Node.js + Express, plain HTML/CSS/JS with no framework, and GLM-5.3-Flash through OpenRouter. The server validates every model answer – quotes must match the text, technique names must come from a fixed list – and retries once if they don't. I split the work between agents: Claude for planning and design, GLM in Z Code for the implementation.

Challenges

  • The opponent mixed up techniques it used with techniques it exposed in my message, so the verdict accused it of manipulation it never committed. I separated "used" from "exposed".
  • The judge copied the opponent's labels and missed my own strawman. Now it analyses my message independently, before reading the opponent's log.
  • I had to switch model providers mid-build, because my coding-plan subscription can't be used inside an app.

What I learned

Planning first saved me: every time the model misbehaved, the spec told me what "correct" meant, and each fix became a checkable rule. I also learned that LLMs are much more reliable at reporting what they did themselves than at judging someone else.

What's next

More languages (starting with Portuguese and Spanish), user-defined motions, and saved progress over time.

Built With

Share this project:

Updates

Submission history