FetchQuest: Spec-Driven Dog Battling on Solana Devnet 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. This is a submission for Weekend Challenge: Dog Days Edition 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. The 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. https://github.com/user-attachments/assets/21b6a8a7-e470-4e16-8623-4ead4e7a6236 https://github.com/user-attachments/assets/21b6a8a7-e470-4e16-8623-4ead4e7a6236 https://github.com/iyadalkentar/fetch-quest https://github.com/iyadalkentar/fetch-quest I 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. The 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. The 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: /api/generate-dog calling 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 Phantom/Solflare on devnet, /api/mint using 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 , /api/mint , and /api/battle .