RedditPulse AI
Turning Reddit's Noise Into Research Signal
Inspiration
We are a team of two and the one who worked on the tech stack realized this problem. It started with a familiar, mildly infuriating ritual: typing "[product name] reddit" into a search bar, opening a thread with 800+ comments, and reading the first 15 replies sorted by "Top" - hoping they represented what the community actually thought.
They usually didn't.
And we started working on a case study on this topic.
We kept noticing the same pattern across completely different contexts: researching a keyboard, deciding whether to quit a job, checking if a medication had bad side effects. Reddit almost always had the answer buried somewhere inside it. But the platform's format - chronological, popularity-ranked, endlessly threaded was built for conversation, not synthesis. The upvote arrow, in particular, kept bothering us: it quietly conflates "popular" with "true," and lets early comments snowball into a false consensus regardless of whether they're actually representative.
That distinction between what a community says the loudest and what it actually believes became the seed of RedditPulse AI. We didn't want to replace Reddit's raw, authentic voice. We wanted to structure it.
What it does
RedditPulse AI is an AI-powered discussion intelligence platform that turns a long, unstructured Reddit thread into a navigable, de-biased research report. Paste a discussion in, and it returns:
- AI Discussion Summary: a structured overview instead of a single-comment excerpt
- Community Consensus Meter: agreement quantified independently of raw vote count
- Sentiment & Emotional Tone Panel: polarity, confidence, sentiment timeline, and dominant emotions (frustration, relief, anxiety, enthusiasm), not just a flat positive/negative score
- Semantic Theme Clustering: comments grouped by topic (price, durability, usability, etc.)
- Recurring Advice & Risk Extraction: de-duplicated, frequency-weighted advice and warnings
- Contradiction View: opposing viewpoints shown side by side with relative support
The information architecture is deliberately ordered: Summary → Consensus → Sentiment → Themes → Advice → Risks → Questions → Full Discussion moving from the broadest orientation to the most granular detail, the way a careful human researcher would naturally read a thread. The full original discussion is always kept one click away, so nothing the AI concludes is unverifiable.
In short: it doesn't tell you what to think. It tells you what the room actually thinks, and lets you check its work.
How we built it
Frontend: React + TypeScript + Vite, styled with Tailwind CSS and animated with Framer Motion, deployed on Vercel.
Backend: FastAPI (Python) with Pydantic schema validation, containerized with Docker, deployed on Hugging Face Spaces.
Analysis pipeline:
$$ \text{Raw Discussion} \xrightarrow{\text{NLTK}} \text{Cleaned & Tokenized Text} \xrightarrow{\text{VADER}} \text{Sentiment Baseline} \xrightarrow{\text{Gemini 2.5 Flash}} \text{Structured JSON} $$
We deliberately split the sentiment layer in two: VADER runs locally and for free, giving us a fast, deterministic positive/neutral/negative baseline. That baseline is then handed to Gemini along with the raw discussion, which reasons contextually to produce consensus, theme clusters, emotional nuance, recurring advice, and risk flags as structured JSON - matching our Pydantic response models exactly, so the frontend never has to guess at shape.
This hybrid approach also drives our unit economics. With Gemini 2.5 Flash priced at roughly \$0.30 per million input tokens and \$2.50 per million output tokens, a single analysis costs approximately:
$$ \text{Cost}_{\text{analysis}} \approx \$0.007 \text{ to } \$0.008 $$
Assuming an average user runs about 3 analyses per month:
$$ \text{Infra Cost}_{\text{MAU}} \approx 3 \times \$0.008 \approx \$0.03 \text{ /month} $$
At our target SOM of 150,000 MAU, with a freemium model (5 free analyses/month, \$4.99/month unlimited) converting at 3%:
$$ 150{,}000 \times 0.03 = 4{,}500 \text{ paying subscribers} $$
$$ \text{ARR} \approx 4{,}500 \times \$4.99 \times 12 \approx \$270{,}000 $$
$$ \text{Gross Margin} = \frac{\text{ARR} - \text{Annual Opex}}{\text{ARR}} = \frac{\$270{,}000 - \$47{,}000}{\$270{,}000} \approx 82\% $$
Keeping VADER local and using a cheap, fast Gemini tier for reasoning is what makes that margin work - the architecture had to be economically sound, not just technically interesting.
Challenges we ran into
- Sentiment ≠ consensus, and we almost conflated them. Early on, our "consensus" number was just an average sentiment score. We had to explicitly separate how positive/negative a thread feels from how much people actually agree — they're correlated but not the same thing, and treating them as one collapsed exactly the popularity-vs-accuracy distinction we were trying to fix.
- Forcing structured output from an LLM, reliably. Free-text summarization is easy; getting Gemini to consistently return well-formed JSON matching our Pydantic models — across wildly different thread lengths, tones, and topics — took real prompt engineering and several rounds of schema tightening.
- Correcting for Reddit's own bias without introducing new bias. The research (notably Muchnik, Aral & Taylor's 2013 Science study, which found a single artificial upvote makes the next viewer 32% more likely to also upvote, with scores ending up 25% higher on average) confirmed our instinct that vote count is an unreliable proxy for consensus — but designing a system that treats upvotes as a confound to control for, rather than either trusting them blindly or ignoring them entirely, required care.
- Keeping the raw discussion from feeling hidden. It would have been easy to build a slick dashboard that replaced the need to ever read the original thread. We deliberately fought that instinct — transparency and verifiability were non-negotiable design goals, not an afterthought.
- TypeScript +
verbatimModuleSyntax. A small thing, but it cost real time: type-only imports had to explicitly useimport type { ReactNode } from "react"or the build silently broke. - CORS and secrets across two separate hosting providers. With the frontend on Vercel and backend on Hugging Face Spaces, we hit early local-dev CORS friction and had to properly separate the two repositories after accidentally nesting one inside the other as a submodule.
Accomplishments that we're proud of
- We built a genuinely reverse-engineered case study: instead of inventing a problem to fit a product idea, we ran real user interviews, secondary research, and a full psychological literature review (echo chambers, herding, deindividuation) first, and only then confirmed that every feature we'd already built mapped cleanly onto a validated pain point.
- We shipped a working, end-to-end product — not a mockup — with a live frontend and backend, not just slides.
- Our sentiment layer goes meaningfully beyond a single score: emotional polarity, confidence, sentiment timeline, and mixed-sentiment detection, which is a real complement to summarization rather than a redundant feature.
- We kept our unit economics honest: no invented growth numbers, explicit flags on what we haven't modeled yet (CAC, churn, API pricing risk at scale), and a cost structure that holds up at three different volume tiers without redesigning the architecture.
- We designed an information architecture where the AI's output and the source material coexist — verifiability was a first-class design constraint, not a compliance checkbox.
What we learned
- The upvote is not neutral. It feels like a simple popularity signal, but the research made it clear it's closer to a slot machine — a variable reward mechanism that shapes what gets said as much as what gets seen.
- Users don't want less Reddit. They want more structure. Every single interview participant, without prompting, said they wanted the raw content preserved — nobody wanted a sanitized or editorialized version.
- Repetition is a signal, not noise — if you can detect it. The same advice appearing across independent commenters is validation; the challenge is building a system that recognizes that pattern instead of just seeing duplicate text.
- Cheap models, used well, beat expensive models used carelessly. Splitting the pipeline (free local VADER scoring + a fast, inexpensive LLM tier for reasoning) turned out to be both the right technical decision and the right business decision — they weren't in tension.
- Good research discipline transfers directly into good product discipline. Refusing to fabricate a statistic in our case study made us equally disciplined about not overstating what our sentiment model can confidently claim in production.
What's next for RedditPulse AI
- Reddit API integration — automatic thread import instead of manual copy-paste
/chatwith a discussion — ask follow-up questions directly against an analyzed thread (already scaffolded on the backend)- Multi-thread & cross-subreddit comparison — see how sentiment and consensus on the same topic differ across communities
- Trend analysis over time — track how a topic's sentiment evolves rather than viewing a single snapshot
- Emotion radar charts — a richer, multi-dimensional view of emotional tone beyond positive/neutral/negative
- Source credibility & community trust scoring — weighting insight by account history and subreddit reliability where available
- User accounts, analysis history, and PDF export — so research doesn't have to live in a browser tab
- Real usage data — validating our planned success metrics (time-to-insight, decision confidence, summary and consensus accuracy) against actual users instead of projections
We built RedditPulse AI to make Reddit's collective intelligence legible without making it less honest. Everything on this roadmap is in service of that same idea: more signal, without losing the noise that makes Reddit worth reading in the first place.



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