DEV Community

Haskell Thurber
Haskell Thurber

Posted on

I Built an Anonymous Feedback App for Telegram — Here's What I Learned

I Built an Anonymous Feedback App for Telegram — Here's What I Learned

Remember Sarahah? The app that went viral in 2017, hitting #1 in 30+ countries with zero marketing budget? The concept was dead simple: share a link, get anonymous messages from friends.

I built something similar — but inside Telegram as a Mini App, with native monetization through Telegram Stars. Here's the full story.

🎯 The Idea

WhisprMe (@WhisprMe_bot) is an anonymous feedback service built as a Telegram Mini App. You get a unique link, share it with friends, and they write anonymous messages to you.

The hook? You can see a 3-word preview of each message, but the full text is blurred. Want to read it? Pay 15 Stars (~$0.26) or invite a friend.

The tagline: "Find out what people really think about you"

🏗️ Tech Stack

Layer Technology
Backend Node.js + Express
Database PostgreSQL (raw SQL, no ORM)
Frontend React (Create React App)
Bot Telegraf.js
Process Manager PM2 (cluster mode)
Web Server nginx
Payments Telegram Stars API

🔥 The Viral Mechanics

The killer feature is that sharing is mandatory, not optional. Want feedback? You HAVE to share your link. This is the same mechanic that made Sarahah explode.

Card Templates

Users can choose from 10 different sharing card styles:

  • 🤔 "What do you think about me?"
  • 💬 "Tell me anonymously what you're afraid to say in person"
  • 👀 "Would you date me? Be honest"
  • 🔥 "Rate me 1-10 and tell me why"
  • ❤️ "Give me an anonymous compliment"

Each card generates a unique deep link (t.me/WhisprMe_bot?start=msg_username_hash).

The Blurred Message Hook

When you receive a message, you see the first 3 words + blurred text. It's psychologically impossible to ignore — you NEED to know what someone thinks about you.

Friend Portrait

After 5+ messages, you get an AI-generated "Anonymous Portrait" — a beautiful infographic showing how people see you: top words used, emotional profile, sentiment analysis. This is screenshot-worthy content that users share organically.

💰 Monetization with Telegram Stars

This is where it gets interesting. Telegram Stars are the native payment system for Mini Apps. No Stripe, no App Store commission, direct micropayments.

Action Price
Read a hidden message 15 Stars
Reveal sender's city 25 Stars
Reveal sender's contact 49 Stars
Plus subscription (monthly) 99 Stars
Pro subscription (monthly) 299 Stars
Virtual gifts (Heart, Fire, Crown) 30-200 Stars

The Referral System

  • Invite 1 friend → +5 free messages
  • Invite 3 friends → unlimited for 7 days
  • Friend signs up → +50 Stars bonus

Plus, Telegram's native Affiliate Program gives referrers 15% of all payments from referred users. Bloggers get 25%.

🛠️ Technical Deep Dive

Authentication

Telegram Mini Apps pass initData with a cryptographic signature. I validate it server-side:

function validateTelegramWebAppData(initData) {
  const secret = crypto.createHmac('sha256', 'WebAppData')
    .update(BOT_TOKEN).digest();
  const checkString = Object.entries(parsed)
    .sort(([a], [b]) => a.localeCompare(b))
    .map(([k, v]) => `${k}=${v}`).join('\n');
  const hash = crypto.createHmac('sha256', secret)
    .update(checkString).digest('hex');
  return hash === parsed.hash;
}
Enter fullscreen mode Exit fullscreen mode

Stars Payment Flow

  1. Frontend calls POST /api/payments/create-invoice
  2. Backend creates invoice via Telegram Bot API
  3. Telegram shows native payment dialog
  4. pre_checkout_query → validate → successful_payment
  5. Backend unlocks content

Anti-Abuse

  • Rate limit: max 3 messages/day from one sender to one recipient
  • Global IP-based hourly rate limit
  • basicToxicityCheck() filters toxic content before saving
  • Blurred preview shows only first 3 words

Database Design

Pure PostgreSQL with raw SQL queries. No ORM overhead. The schema is straightforward:

  • users — profiles with unique_slug for URLs
  • messages — with preview (first 3 words), is_unlocked
  • transactions — Stars payment history
  • referrals, achievements, mood_words

Cluster Mode

PM2 cluster mode with multiple workers. Since PostgreSQL handles concurrency natively, no shared state issues.

📊 Features

  • 📨 Inbox — Receive anonymous messages with blur effect
  • 📤 Share — 10 card template styles for sharing
  • 🎭 Portrait — AI sentiment analysis from messages
  • 🏆 Leaderboard — Weekly/monthly popularity ranking
  • 👤 Profile — Subscription management, referral stats
  • 🎁 Gifts — Send anonymous virtual gifts with messages
  • 😀 Reactions — Anonymous emoji reactions

🚀 Key Learnings

1. The viral loop IS the product

Don't add a "Share" button as an afterthought. Make sharing the core mechanic. If users can't use your product without sharing, congratulations — you've built a viral loop.

2. Telegram Stars remove friction

Traditional payments require credit cards, KYC, App Store approval. Stars are one tap. Users already have them. Conversion is dramatically higher.

3. Blurred content = irresistible curiosity

The preview-then-paywall approach works incredibly well for anonymous messages. People can't resist knowing what someone thinks about them.

4. Mini Apps are an untapped market

Telegram has 900M+ MAU. The Mini App ecosystem is still early. There's much less competition than the App Store or Play Store.

5. Referral programs that pay Stars actually work

When users earn actual currency (Stars → TON → real money), they're genuinely motivated to invite friends.

🔗 Try It

Share your link, get anonymous messages, discover what people really think about you.


Built by a solo developer in ~3 weeks. Happy to answer questions in the comments!

Top comments (0)