Inspiration

My mom is a content writer and runs her own writing business. She posts on LinkedIn and Substack almost everyday, and recently she started trying Twitter and Reddit as well. I noticed something very interesting. The exact same idea that did wonders on one platform barely got any attention on another.

People always tell newbie writers to "post everywhere" but the truth is, every platform speaks a different language! The audience, culture, way of communicating, it all varies vastly. A post that gets endless love on LinkedIn could completely flop on Reddit, because the audience expects something different. That is why I built Cast Wide. You write the idea once, and it rewrites it the way each platform would actually want to read it.

What it does

Cast Wide takes a raw idea (a rough draft, a hot take, a personal story, literally anything), and generates three platform-native versions of the post simultaneously. One for Twitter, one for LinkedIn, one for Reddit. Each version is written differently on purpose. Twitter gets a short punchy hook. Linkedin gets a story arc and a bit of a discussion prompt. Reddit sounds conversational, like a real person talking.

Every result comes with a virality score and a short explanation of why it will or won't perform. That part was super important to me because it gives the user an idea of what kind of writing each platform expects.

You can also set a tone before generating: bold, casual, witty (my fav!), professional, or inspirational. And cap the word count if need be. The output changes structurally based on what you pick, not just in phrasing. Also, pretty cool fact: The settings page lets you pre-select your default platforms and default tone so the app remembers how you like to work. Small detail, but it's the difference between a tool and a product you would actually want to open everyday.

Everything you generate gets saved to your history, so you can come back, review old runs, filter by platform or date, and delete anything you don't want.

How I built it

Frontend and deployment

Next.js on Vercel, styled with Tailwind CSS v4 and shadcn/ui. I used v0 to scaffold the initial layout, then rebuilt most of it by hand. The landing page went through three (yes, three) complete redesigns. The final version uses a dark base with violet ambient glow, frosted glass panels, and a two column hero with animated platform card previews.

Generation pipeline

The Groq API running LLama 3.3 70b. Each platform gets its own prompt written specifically for how that platform works. When a user hits Generate, three parallel API calls fire at the same time using Promise.all, so all three results come back together instead of sequentially.

Database

AWS DynamoDB is the primary database. Every generation is written to a single table (viralloop-generations) immediately after it's produced. The table uses userId as the partition key and created At as the sort key, so history always comes back in chronological order with a single efficient query. The history page reads directly from DynamoDB on every load with no caching. So the data is always live.

Infrastructure

The entire backend runs as serverless API routes inside Next.js, so there is no separate server to manage or deploy. One Vercel project handles everything: authentication, generation, and database reads and writes.

Challenges I ran into

  • Early versions would return Linkedin posts that sounded like tweets or dump raw JSON into the content field. Getting each platform to sound genuinely native took a lot of iteration and completely different prompt structures for each one.
  • Had to carefully handle the The DynamoDB connection through Next.js serverless functions. For longer than I'd like to admit, the history page was reading from an in-memory store instead of the actual database, and EVERYTHING disappeared on every refresh. This one took a good while to track down.
  • The UI took more out of me than any technical problem did honestly. I rebuilt the landing page three times and the dashboard twice. I just could not ship something that looked basic, even if it functioned well. Every layout decision, animation, and interaction was deliberate.

Accomplishments that I'm proud of

  • The parallel generation architecture works cleanly. Three platform-specific posts in the time it would take to generate one.
  • The DynamoDB schema is simple but genuinely production-ready
  • I'm also very proud of the UI! I built it solo. I'm not a designer, but it looks like a product I would actually pay for :)

What I learned

Prompt engineering a real skill and I say that having underestimated it completely. The gap between a prompt that works most of the time and one that works every time is not a small gap. It is literally the difference between a product and a demo. I rewrote the platform prompts more times than I can count, and every iteration taught me something hyper specific about how the model thinks and where it cuts corners when you're not watching.

DynamoDB's single table design took me some time to get used to. Coming from an SQL mindset you want to model your entities first and figure out queries later. DynamoDB forces you to think about access patterns before you even get started, which feels backwards until suddenly it's the sensible way to build something meant to scare.

And of course, I learned that building something for someone you love is a very good motivation. Hi Mum!!!

What's next for Cast Wide

The next thing I want to add is real user authentication so multiple people can use Cast Wide with their own history. Then a scheduling layer so instead of just generating and copying, you can queue posts directly to go out at the right time for each platform. And expanding beyond three platforms (Threads, Bluesky, newsletters) are the natural next steps.

Share this project:

Updates