Jev Wrapped
Telegram channel X-ray: for each public post of the last twelve months Jev answers a Choice over ten kinds of post and three yes/no questions (paid ad, clickbait, emotional…
# Jev Wrapped Live at [wrapped.ivanhabor.com](https://wrapped.ivanhabor.com), no sign-in. Paste the name of a public Telegram channel and get a card: what the channel posts, how much of it is ads, clickbait and emotional pressure, and how the mix changed over the last twelve months. Every post is judged separately by [Jev](https://typesafe.ai), a model that answers typed questions with probabilities and generates no text. A channel with about 1,500 posts takes 35 to 85 seconds, depending on the way to Jev, and costs about $0.10 at list price. The whole thing is one Cloudflare Worker and fits the free plan. ## Run it Requirements: Node 22 or newer and a key for Jev: from [TypeSafe](https://typesafe.ai) itself or from [OpenRouter](https://openrouter.ai/settings/keys). ```bash git clone https://github.com/gaborishka/jev-wrapped.git cd jev-wrapped npm install # wrangler, the only dev dependency; the Worker itself has none cp .env.example .env # paste one of the two keys into it npm run dev ``` Open http://localhost:5190, type a channel name, `@name` or a `t.me/...` link. The finished card lives at `/c/<channel>`; that address can be shared, and the card can be downloaded as a PNG. The page is in Ukrainian or English (button in the top right corner). For a cheap trial add `?limit=60` to the page address: only 60 posts are read. ## How it works 1. **Reading.** Posts come from Telegram's own web preview, `https://t.me/s/<channel>`: no login, no bot, no API key. A page holds about 20 posts and `?before=<id>` gives the 20 before that id. Post ids are consecutive integers, which allows two shortcuts: the id from a year ago is found by bisection (about a dozen requests), and the pages in between are requested in parallel. 2. **Sampling.** Up to 1,500 posts f