Inspiration
Every day we encounter text designed to move us — political speeches, ads, viral posts, news. Most AI tools will tell you "this seems manipulative" in a vague paragraph. We wanted something more rigorous: a system that could tell you
exactly which technique is being used, by which rhetorical mechanism, and on which specific phrase.
Aristotle identified three modes of persuasion. Foucault mapped power through language. Orwell catalogued the lies politics hides behind passive voice. We built ARGOS to run all eleven of those frameworks simultaneously — and let a
Gemini semantic layer catch what the rules miss.
What it does
ARGOS is a manipulation detection engine. You paste in any text — a political speech, a sales email, a social media post — and get back:
- A structured verdict: MANIPULATIVE / PERSUASIVE / MIXED / CLEAN
- A confidence level and overall score
- A per-detector breakdown across 11 philosophical frameworks (Aristotle, Foucault, Bakhtin, Goffman, Searle, Toulmin, Lakoff, Carnegie, Kant, Habermas, Orwell) plus a Gemini 2.5 Flash semantic layer
- Exact flagged phrases from the input — no black boxes
- A radar chart visualizing each framework's contribution
- Full English and Spanish support — detection and UI
The scoring is deterministic: Python's Fraction arithmetic ensures the same input always produces the same result. A convergence bonus activates when 3+ independent detectors agree, amplifying the signal.
How we built it
Backend: FastAPI on Python. Each of the 11 detectors is an independent module with its own lexicon files (JSON signal dictionaries) and scoring logic. Scores are computed as exact fractions, clamped to [0, 1], and aggregated with a weighted average. Gemini 2.5 Flash handles the semantic layer — paraphrase, implicit signals, morphological variants — and degrades gracefully if the API is unavailable.
Frontend: React 19 + TypeScript, built with Vite, styled with Tailwind CSS. Framer Motion handles animations; Recharts renders the radar visualization; Lucide provides icons. Language detection is automatic based on text content.
Deployment: Vercel — a single vercel.json routes /analyze, /health, and /example to the Python serverless function and serves the static React build from /dist.
Challenges we ran into
The hardest part was scoring philosophy, not just matching keywords. Aristotle's ethos/pathos/logos imbalance isn't a word in a list — it's a ratio between signal types across the whole text. Habermas's distinction between strategic and communicative action requires understanding intent, not just vocabulary. We had to translate abstract philosophical criteria into concrete, defensible scoring functions without losing the nuance.
Im also had to make the hybrid rule-based + ML approach genuinely complementary. The risk was that Gemini would simply re-score everything and flatten the philosophical signal. We solved it by making Gemini a separate detector with its own weight, so it adds signal rather than overwriting it.
Accomplishments we're proud of
- 11 fully independent detectors, each grounded in primary philosophical literature
- Deterministic scoring with Fraction arithmetic — reproducible, auditable, no floating-point drift
- Bilingual from the ground up: detection lexicons, API responses, and UI in both English and Spanish
- Production deployment live at https://argos-gray.vercel.app
- The convergence logic: when Aristotle, Foucault, and Orwell all fire on the same text, the system knows something real is happening
What I learned
That philosophy is engineering-compatible. Every framework we implemented forced us to define precisely what "manipulation" means in that tradition — which is a better spec than "the AI thinks it sounds bad." Orwell's six rules for clear writing became a set of regex patterns. Kant's categorical imperative became a check for whether the text treats the reader as a means or an end.
What's next
- Chrome extension for real-time analysis while browsing
- API rate limiting and auth for developer access
- Extended lexicons for Portuguese and French
- Fine-tuned small model to replace Gemini dependency for offline use
For Judges — Novus/Pendo Installation
The Novus analytics snippet is installed in frontend/index.html, lines 16–18:
<br> (function(k){(function(p,e,n,d,o){...})(window,document,'script','pendo');<br> pendo.initialize({visitor:{id:'anon-'+...}});})('80ff2177-3d23-4111-885c-6f4f35bef1b4');<br>
Novus confirmed data collection via automated email notification on June 17, 2026. The snippet is also active on the production deployment at https://argos-gray.vercel.app (verifiable via browser DevTools → Sources → search pendo).
Subscription key: 80ff21 (KEY) ef1b4. Novus sent an automated data-available notification on June 17, 2026, confirming the integration is active.
Built With
- fastapi
- framer-motion
- gemini
- google-gemini
- novus
- pendo
- python
- react
- recharts
- tailwind-css
- typescript
- vercel
- vite

Log in or sign up for Devpost to join the conversation.