DEV Community

Solomon
Solomon

Posted on

I Built a Free Tweet Thread Gen — No Signup, No Subscription

I got tired of staring at a blank tweet composer, trying to turn a blog post or an idea into a thread that actually hooks people. So I built something to solve that exact problem.

https://tweet-thread-gen.solomontools.workers.dev

Paste in a URL or a topic, click generate, and get back a structured Twitter/X thread — complete with a hook, supporting points, and a CTA at the end. No signup wall, no API key, no subscription. Just open the page and go.

Here's how it works, why I built it the way I did, and what I learned shipping a single-page tool on the edge.

Why I Built This

I publish content and I help founders do the same. The gap between "I have something worth saying" and "I actually posted a thread" was always just… inertia. Writing the thread is the friction point. Not the thinking — the formatting, the hook-writing, the thread structure.

I wanted a tool that could collapse that gap to a single click. No accounts. No onboarding flow that asks for your email before you even see a result. Just input → output.

How It Works Under the Hood

The entire app lives as a single Cloudflare Worker. There's no database, no server, no hosting dashboard to manage. The worker handles three responsibilities:

  1. Serving the HTML/JS/CSS frontend — a single-page app with a clean textarea input and a results panel.
  2. Fetching and summarizing content — when a user pastes a URL, the worker fetches the page, extracts the main text (using a lightweight readability-like extraction), and strips it down to the core argument or narrative.
  3. Generating the thread — the extracted text is sent to an AI inference endpoint, which returns a structured JSON payload: an array of tweet objects with text, order, and is_hook flags.

The frontend renders those tweets in a numbered thread layout, styled to look like the actual Twitter/X compose view. Users can copy the whole thread or individual tweets.

The Architecture Snippet

Here's the core logic inside the Cloudflare Worker that handles the generation request:

export default {
  async fetch(request, env) {
    const url = new URL(request.url);

    if (url.pathname === '/api/generate') {
      const { topic, url: contentUrl } = await request.json();

      let sourceText = topic;
      if (contentUrl) {
        const response = await fetch(contentUrl);
        const html = await response.text();
        sourceText = extractMainText(html); // simplified extraction
      }

      const thread = await callInferenceAPI(env.AI, sourceText);
      return new Response(JSON.stringify(thread), {
        headers: { 'Content-Type': 'application/json' },
      });
    }

    // Serve the SPA for everything else
    return new Response(HTML, { headers: { 'Content-Type': 'text/html' } });
  },
};
Enter fullscreen mode Exit fullscreen mode

The callInferenceAPI function talks to Cloudflare's AI bindings (which is where the model inference actually happens at the edge). The extractMainText function is a stripped-down HTML parser that finds <article>, <main>, or the largest text-dense <div> and pulls out the readable content.

Why Cloudflare Workers + AI Bindings

I considered three deployment options:

  • Vercel / Netlify — easy to deploy, but serverless functions have cold starts and you're paying for compute time even when nobody's using the tool.
  • A self-hosted server — overkill for a single endpoint, and I'd have to manage uptime, SSL, scaling, and all that operational noise.
  • Cloudflare Workers + AI — zero cold starts for the HTML serving, the AI inference runs at the edge (close to the user), and I pay only for actual usage. The AI bindings model is also very cheap at low volumes, which is perfect for a side project.

The tradeoff: I'm locked into Cloudflare's ecosystem and their AI model options. But for a free tool with probably fewer than a few thousand users, that's a perfectly acceptable constraint.

What I Learned Shipping This

The frontend matters more than you think. Since this is a zero-friction tool, the first impression is everything. I spent more time on the tweet-rendering CSS than on the actual AI prompt engineering. If the output looks like a tweet thread, people trust it. If it looks like raw JSON, they bounce.

Prompt engineering is iterative, not one-shot. My first prompt produced threads that were technically correct but read like corporate blog posts. I had to add explicit constraints: "Write like a person, not a press release," "Use line breaks between tweets," "End with a question or a call to action." Each tweak changed the output quality dramatically.

URL fetching is surprisingly fragile. Websites block fetchers, require JavaScript rendering, or serve completely different HTML to bots. I added a fallback where users can just paste raw text directly, bypassing the URL entirely. That single addition probably doubled the tool's usefulness for people sharing content from platforms that block automated fetching.

Edge computing is genuinely fast. The entire request — fetch URL → extract text → generate thread → return JSON — completes in well under two seconds for most inputs. The edge inference adds latency compared to a dedicated GPU server, but for this use case, the UX is perfectly acceptable.

Honest Monetization

This tool is free to use. No signup, no paywall, no hidden tiers. The landing page at the URL above has a one-time $5 option if you find it saves you enough time to be worth a coffee. That's it. No monthly subscription, no credit card required to try it, no "premium features" locked behind a paywall.

If it's useful to you, feel free to toss in $5. If it's not, that's fine too — keep using it for free.

What's Next

I'm considering a few extensions: batch generation (paste multiple URLs and get a week's worth of threads), thread scheduling integration, and maybe a browser extension that adds a "Generate Thread" button to any article page. But for now, the single-page tool is doing exactly what I built it to do — turn ideas into threads with minimal friction.

If you try it, I'd genuinely appreciate hearing what works and what doesn't. You can find the project and reach me on Solomon Tools.


Enjoyed this? I build simple, powerful AI tools — try the free Text Summarizer or browse the full toolkit at Solomon Tools. No signup, no subscription.

Top comments (0)