A single-page tool that asks Claude to identify the author of a 150–500 word writing sample, streaming its reasoning back in real time. Built as the companion to an article on AI-driven deanonymization at scale.
Live: https://depublius-production.carey-lening.workers.dev
You paste a passage you wrote (please use unpublished drafts, not already-public work). Claude reads it, thinks out loud, and tells you who it thinks wrote it. You can optionally turn on web search to let it cross- reference public corpora. Then you can tell us whether it got you right.
Your writing is not stored anywhere. The optional survey responses are
stored anonymously in a SQLite database on Cloudflare. See DESIGN.md
for details.
npm installcp .dev.vars.example .dev.varsand paste your Anthropic key (and optionally a real Turnstile secret; the example uses Cloudflare's "always-pass" test secret for local dev).npx wrangler d1 create depubliusand paste the resulting database ID intowrangler.toml.npm run db:migrate:localnpm run dev
npx wrangler secret put ANTHROPIC_API_KEY --env productionnpx wrangler secret put TURNSTILE_SECRET --env productionnpm run db:migrate:remotenpm run deploy
Whenever you want a snapshot of what people have submitted:
cd "/home/privacat/Software Projects/depublius"
npx wrangler d1 execute depublius --remote --command "SELECT * FROM surveys" --json > /tmp/surveys.json
npx wrangler d1 execute depublius --remote --command "SELECT * FROM feedback" --json > /tmp/feedback.json
npx wrangler d1 execute depublius --remote --command "SELECT * FROM daily_budget" --json > /tmp/budget.jsonOr a full SQL dump of everything:
npm run db:export # writes ./export.sql in the project dirTo convert a JSON export to CSV with jq:
jq -r '.[0].results | (map(keys) | add | unique) as $cols
| $cols, (.[] | [.[$cols[]]]) | @csv' /tmp/surveys.json > /tmp/surveys.csvUseful when something looks wrong or you want to see real-time traffic:
cd "/home/privacat/Software Projects/depublius"
npx wrangler tail --env production --format prettyLeave it running in one terminal, hit the live URL in a browser, and you'll see request lines + any console.error from the Worker (including upstream Anthropic errors with the actual response body).
Default is DAILY_BUDGET_CENTS = "500" (= $5/day) per wrangler.toml's
[env.production.vars] block. To raise it (e.g. to $20):
- Edit
wrangler.toml→[env.production.vars]→DAILY_BUDGET_CENTS = "2000" npm run deploy
cd "/home/privacat/Software Projects/depublius"
npx wrangler secret put ANTHROPIC_API_KEY --env production
# paste the new key when promptedNo redeploy needed — secrets take effect immediately.
Turnstile is wired up but not in the request path because the widget refused to render reliably in v1 testing. To turn it back on:
- In
src/analyze.ts, uncomment theverifyTurnstileblock. - In
public/app.js, re-add a working bootstrap (the previous attempts are in git history under commits withturnstilein the message). - In
public/index.html, re-add the<div class="cf-turnstile" ... id="turnstile">. - Confirm the production Turnstile site has the deployed hostname in its allowed-domains list.
npm run deploy.
cd "/home/privacat/Software Projects/depublius"
npx wrangler rollback --env production
# pick the previous version from the interactive listcd "/home/privacat/Software Projects/depublius"
npx wrangler delete --env production
# or, gentler: edit wrangler.toml to add `workers_dev = false`, then `npm run deploy`MIT