DEV Community

Cover image for I Built an AI That Writes Victorian Funeral Rites for Dead Websites β€” Using 5 Specialised Agents πŸ•―οΈ
Tombri Bowei
Tombri Bowei Subscriber

Posted on

I Built an AI That Writes Victorian Funeral Rites for Dead Websites β€” Using 5 Specialised Agents πŸ•―οΈ

Education Track: Build Multi-Agent Systems with ADK

This post is my submission for the DEV Education Track: Build Multi-Agent Systems with ADK.

"Here lies Flash Player. It asked you to update it one final time, and you said no."

That's a real output from my project. And honestly? I felt something.

What I Built

We've all seen "one giant prompt" AI apps. You throw everything at a single model and hope it figures it out. But what if the task is genuinely complex β€” requiring research, historical analysis, literary writing, sharp comedy, AND poetic compression all at once?
That's exactly the problem I set out to solve. And the solution? Give each job to a specialist.

Eulogy for the Internet is a multi-agent AI system that takes any website, app, or digital phenomenon and generates a full Victorian-style funeral obituary β€” as if historians from the year 2124 are looking back on it.

You type in "Vine". Five AI agents spring into action. Thirty seconds later, you have a beautifully typeset parchment eulogy complete with a tombstone inscription that will make you simultaneously laugh and feel genuinely sad about a 6-second video app.

Try it yourself: https://eulogy-frontend-rqlox4dhaq-uc.a.run.app

⚠️ Disclaimer: This project is satire and creative commentary. All eulogies are fictional AI-generated writing for entertainment purposes only. No companies were harmed in the making of this application.

Cloud Run Embed

Your Agents

This is where it gets interesting. Instead of one monolithic prompt trying to do everything, I built 5 specialised agents, each an expert at exactly one thing. They're orchestrated via a coordinator that passes outputs between them like a relay race.
Here's the full pipeline:

πŸ” Agent 1: The Researcher
What it does: Given any URL or topic, it searches for real facts β€” when it was founded, what it was famous for, who used it, and how it declined.
Why a dedicated agent: Research requires breadth. You need facts first before any creative writing begins. Mixing research and writing in one prompt produces vague, hallucinated nonsense.

Sample output for "Vine":

"Vine was a short-form video hosting service founded in June 2012... acquired by Twitter in October 2012 before launch... at its peak, hosted content from creators like King Bach and Lele Pons with hundreds of millions of followers... shut down in January 2017 after Twitter announced discontinuation..."

πŸ“œ Agent 2: The Historian
What it does: Takes the raw research and rewrites it through the lens of a historian writing in 2124, with 100 years of hindsight.
Why a dedicated agent: This requires a complete shift in voice and temporal perspective. Asking a single prompt to be both factual AND a future historian simultaneously produces an identity crisis. Giving it its context produces something genuinely literary.

Sample output:

"Vine occupies a peculiar chapter in the annals of early digital culture β€” a platform whose entire creative vocabulary was six seconds long, and yet somehow those six seconds were enough to birth an entirely new form of celebrity, comedy, and human expression..."

βœ’οΈ Agent 3: The Eulogy Writer
What it does: takes the research and historical framing and composes a proper three-act eulogy β€” What It Was, What It Wrought Upon the World, and On Its Undignified End.

Why a dedicated agent: Literary writing requires full focus. This agent's only job is to be eloquent. It writes with drop caps, rolling sentences, and devastating final lines. No distraction.

πŸ•―οΈ Agent 4: The Roast Agent
What it does: Writes the dissenting mourner's speech β€” the person at the funeral who loved the deceased but refuses to pretend they were perfect.
Why a dedicated agent (and my personal favourite): Runs in parallel with the Eulogy Writer. While the writer crafts gravitas, the Roast Agent sharpens its skills. Every eulogy needs an uncomfortable truth-teller. This agent delivers.

Sample output for Vine:

"Let us not romanticise the deceased overmuch. Vine was a website where fame was measured in loops, where a teenager doing a funny voice could accumulate more cultural influence than a documentary filmmaker with thirty years of experience... I shall miss the creativity it accidentally unlocked. I shall not miss what we became while watching it."

πŸͺ¦ Agent 5: The Epitaph Agent
What it does: Reads everything β€” all four previous outputs β€” and distils the entire eulogy into a single tombstone inscription. Maximum 15 words. Must be something you'd screenshot.
Why a dedicated agent: Compression is its own art form. You cannot ask the same model that just wrote 800 words of flowing prose to suddenly become a master of the pithy one-liner. The Epitaph Agent thinks in epitaphs and nothing else.

Sample outputs:

  • Vine: "It gave the world six seconds of genius, then ran out of time."
  • Flash Player: "It asked you to update one final time. You said no."
  • Google+: "Built by engineers who understood computers but not loneliness."

🎭 The Orchestrator
What it does: Coordinates the entire pipeline. Calls Researcher β†’ Historian β†’ (Writer + Roast in parallel) β†’ Epitaph. Passes outputs between agents. The system then returns the final assembled JSON to the frontend.

Why parallel execution: The Writer and Roast agents don't need each other's output β€” they both just need the research and history. Running them in parallel cuts response time nearly in half.

Key Learnings

  1. Specialisation genuinely produces better output
    I was sceptical at first. Surely one good prompt could do all this? I was wrong. When I tested a single-prompt version against the multi-agent version, the difference was stark. The single prompt hedged everything, wrote blandly, and produced generic output. Each specialised agent went deep because it had one job and full context for that one job.

  2. Deployment is where ideas meet reality β€” hard
    I hit every possible deployment error: billing not enabled, wrong IAM permissions, container startup timeouts, model names that weren't available on my account, and environment variables with literal newline characters baked into them from shell output. Every single one was solvable, but each one required understanding why it broke. The debugging process taught me more about Cloud Run than any tutorial would have.

  3. The A2 A pattern is powerful but the contract matters
    Agent-to-agent communication lives and dies by the contract between agents. I had to be very deliberate about what each agent returns β€” structured JSON vs plain text, how errors bubble up, and what happens when one agent in the chain produces unexpected output. Getting the Epitaph Agent to reliably return JSON (and not wrap it in markdown code fences half the time) was its own mini-battle.

  4. Parallelism is free speed
    Running the Eulogy Writer and Roast Agent in parallel using asyncio.gather() was one of the most satisfying moments of the build. Two agents, running simultaneously, each producing their best work, then both landing at the Epitaph Agent at roughly the same time. It felt like watching a well-drilled team.

  5. The creative constraint made it better
    Forcing the Epitaph Agent to produce a maximum 15-word tombstone inscription sounds limiting. It's actually what makes the whole project shareable. People don't screenshot 800-word eulogies. They screenshot one devastating sentence. The constraint is the feature.

What's Next

  • Add tone selection β€” Tragic / Comic / Academic / Shakespearean
  • Generate a shareable image card of the epitaph for social media
  • Add real web search to the Researcher agent for even more accurate facts
  • A "Roast My Startup" mode where you paste your own product URL

Built with Google ADK, Gemini 1.5 Flash, Cloud Run, FastAPI, and A2A Protocol
Five agents. One funeral. Zero survivors.
πŸ•―οΈ

Top comments (0)