{"slug": "fetchquest-spec-driven-dog-battling-on-solana-devnet", "title": "FetchQuest: Spec-Driven Dog Battling on Solana Devnet", "summary": "Developer Iyad AlKentar built FetchQuest, a dog-vs-raccoon battler on the Solana devnet, using spec-driven development. The app generates a dog with random stats and personality, creates an AI-drawn portrait and bio via Google AI (Gemini), mints it as an NFT using Metaplex, and narrates the battle outcome via ElevenLabs. AlKentar prioritized polish over breadth, keeping third-party API keys server-side in Next.js API routes.", "body_md": "*This is a submission for Weekend Challenge: Dog Days Edition*\n\n**FetchQuest** — a tiny dog-vs-raccoon battler. You generate a dog with random stats (Speed, Bark, Chomp) and a personality tag, watch it come to life with an AI-drawn portrait and a bio/taunt line, mint it as a real NFT on Solana devnet, send it into a single fight against a fixed raccoon opponent, and hear the outcome narrated out loud.\n\nThe scope was intentionally narrow: one dog, one fight, one result — no roster, no PvP, no multi-round battles. The goal wasn't to cram in as many integrations as possible, it was to make each step of that short loop feel *good*: satisfying reveals, real animation, sound that lands at the right moment. Polish over breadth.\n\n[https://github.com/user-attachments/assets/21b6a8a7-e470-4e16-8623-4ead4e7a6236](https://github.com/user-attachments/assets/21b6a8a7-e470-4e16-8623-4ead4e7a6236)\n\n[https://github.com/iyadalkentar/fetch-quest](https://github.com/iyadalkentar/fetch-quest)\n\nI used **spec-driven development** for this one instead of just diving into code — before writing anything I wrote out a mission spec, a tech-stack spec, and a phased roadmap, and worked from those throughout the weekend rather than improvising as I went.\n\nThe mission spec set one non-negotiable rule: if a trade-off ever came up between \"add another feature\" and \"make the existing steps feel better,\" the existing steps won. That shaped almost every decision below.\n\nThe roadmap was sequenced as vertical slices — each phase took one step of the core loop fully end-to-end (UI + API route + its own polish pass) before moving to the next, rather than building all the plumbing first and polishing at the end:\n\n`/api/generate-dog`\n\ncalling Google AI (Gemini) for a portrait and a bio/taunt line based on the rolled stats and personality, with an animated reveal on the frontend.`@solana/wallet-adapter-react`\n\n(Phantom/Solflare) on devnet, `/api/mint`\n\nusing Metaplex to mint the generated portrait plus stats/personality as on-chain metadata attributes, with pending/confirming/minted states and a link out to Solana Explorer.All third-party API keys (Google AI, ElevenLabs, the Solana minting authority) stay server-side in Next.js API routes — the client never sees them and only ever calls `/api/generate-dog`\n\n, `/api/mint`\n\n, and `/api/battle`\n\n.", "url": "https://wpnews.pro/news/fetchquest-spec-driven-dog-battling-on-solana-devnet", "canonical_source": "https://dev.to/ikdev103/fetchquest-spec-driven-dog-battling-on-solana-devnet-4b4f", "published_at": "2026-08-16 18:51:51+00:00", "updated_at": "2026-08-16 19:12:07.873863+00:00", "lang": "en", "topics": ["artificial-intelligence", "generative-ai", "ai-products", "developer-tools"], "entities": ["Iyad AlKentar", "FetchQuest", "Solana", "Google AI", "Gemini", "Metaplex", "ElevenLabs", "Next.js"], "alternates": {"html": "https://wpnews.pro/news/fetchquest-spec-driven-dog-battling-on-solana-devnet", "markdown": "https://wpnews.pro/news/fetchquest-spec-driven-dog-battling-on-solana-devnet.md", "text": "https://wpnews.pro/news/fetchquest-spec-driven-dog-battling-on-solana-devnet.txt", "jsonld": "https://wpnews.pro/news/fetchquest-spec-driven-dog-battling-on-solana-devnet.jsonld"}}