DEV Community

Cover image for Tortoise
Nancy
Nancy

Posted on AI-assisted

Tortoise

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission 🦥

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

What I Built

Tortoise is a multi-agent marketing team that is slow on purpose.

You describe a campaign in plain English. Tortoise builds a Company Brain from the company’s own pages, then drafts a full campaign package: a summary, hook, short and explainer video scripts, social posts, and an optional article.

Nothing is ever published. Every result is a draft that a human approves.

The effort it saves is the “can we actually say that about our product?” loop. Product claims are checked against a fixed claim bank, and deterministic rules (approved placeholders, aspect ratios, banned terms, cross-product leakage, language) cannot be overridden by the LLM. A nightly tidier then sweeps saved drafts and flags what a human needs to look at. Small teams and solo founders get to be lazier about marketing without being careless.

Demo

Live: https://tortoise-5o4k.onrender.com

The demo runs on a fictional company (Brightleaf Coffee). It is on a free instance, so the first load can take about a minute to wake up.

Code

https://github.com/ncyj823/tortoise

How I Built It
Open-weight models: [openai/gpt-oss-120b], served through a hosted OpenAI-compatible endpoint. The model names are set by environment variables, so the whole system can run against any open-weight model, including local ones.
Agent harness: I wrote the code with OpenCode, an open-source terminal coding agent.
Framework: FastAPI, SQLite, APScheduler.
Two layers of defence: an LLM “checker” labels each line PRODUCT or PROBLEM, but checks.py runs deterministic rules the checker cannot override: claim bank word for word, approved placeholders, aspect ratios, cross-offering leakage, and language.
The tidier: a deterministic sweep of saved drafts, with no LLM call anywhere, so a run is reproducible and cannot invent a fact. It only applies two safe fixes (dashes become commas, and sentences containing a banned claim term are deleted), and everything else is flagged for a human. It never edits a draft by default.
Honest limits: my first real run flagged every draft and fixed none. That showed me the generator, not the tidier, was the weak point. It also surfaced a text-encoding bug in stored drafts.
Why Does Open Innovation Matter?

A tool that writes claims about your product has to be auditable. With open-weight models and an open-source agent harness I could:

read and test every rule, with no black box in the safety path
swap models by changing an environment variable, including a model that runs locally so a company’s brand data never leaves its machine
see exactly what the model was asked and what it returned

A closed API would have given me less control over that behaviour, and less ability to prove to a user why a draft was approved.

Prize Categories

Best Use of Render: Tortoise's FastAPI backend and its web UI (agent front end) are deployed as a single Render web service, which is the live demo above. Config is set through environment variables, so the same app runs against any open-weight model endpoint.

Top comments (0)