{"slug": "ai-for-fun-electric-chats-at-hack-the-kitty-built-with-kiro", "title": "AI For Fun! Electric Chats at Hack the Kitty, Built with Kiro.", "summary": "A developer built Madame Minou, a French cat astrologer app, using Kiro and Amazon Bedrock during a Paris hackathon. The app computes a cat's sun sign deterministically in code, then uses AI to generate a reading based on those facts. The project was built with vibe-coding on rails, using Kiro's spec-first approach and steering files to maintain consistency across sessions.", "body_md": "*A companion to A Builder in Paris: Do Devs Dream of Électrique Chats?*\n\nLast month I wrote about the idea. Six rainy days in Paris, a closed laptop, and a hackathon I did not mean to enter, and somewhere between the Musée de l'Orangerie and a lot of walking, an idea arrived. Cats are inscrutable. The people who love them are obsessed with understanding them anyway. Astrology is an old framework for making the unknowable feel readable, and maybe, just maybe, it helps us understand them a little. Her name is [Madame Minou](https://dghcwayx8gb6b.cloudfront.net), a French cat astrologer who reads your cat's stars from a café terrace.\n\nThat first article was the idea. This one is the build.\n\nWas it vibe-coded? You know it! AI wrote most of the lines, and I said \"no, not like that\" more times than I can count. But it was vibe-coding on rails, and the rails were Kiro. Before a single line of app code, I wrote the requirements in EARS notation, a design doc, and a build-ordered task list, all living in `.kiro/specs`\n\n. Decide what \"done\" means before letting anyone, human or model, start building. The specs are what kept the vibes honest.\n\nThen the steering files. `.kiro/steering`\n\nheld the enduring rules of the project: product principles, security guardrails, technical direction, and UI law. These were the thing that kept a long, multi-session build from drifting. When a new session opened, the steering files were already the shared context. \"The café blue\" was one token, not five guesses. Security was not optional. The garbled café sign was a deliberate easter egg, not a bug to fix.\n\nFrom there, the loop: Kiro implemented one approved block at a time, ran each task's PASS/FAIL QA gate on itself before moving to the next, and only stopped for my review on the two things that actually mattered. I directed and approved. Kiro proposed and built. Spec first, block by block, human in the loop.\n\nHere is the part that looks like a party trick and isn't. Madame never guesses the chart. The sun sign is computed in code, deterministically. The model only writes the voice over the facts it is handed. It cannot invent a sign, because the facts come first. Deterministic structure, AI flavor. The astrology is the vocabulary; the structure underneath is the catnip.\n\nClaude runs through Amazon Bedrock on IAM, which means there is not a single API key anywhere in the stack. Lambda, API Gateway, and DynamoDB run the readings and a real per-IP freemium gate. S3 and CloudFront serve the café.\n\nI promised myself limitations language would be a feature, so here is the struggle bus story, not the tidy one.\n\nI started on the Claude Platform on AWS path and hit a wall: my hackathon account could not complete the Marketplace subscription. So I pivoted to Amazon Bedrock, where my Claude access actually lived, and the whole thing got simpler.\n\nI wanted real ephemeris math for moon and rising signs, but `pyswisseph`\n\nis a native C extension with no Python 3.13 wheel, and it would not compile in the build environment I had. Rather than fight a compiler at nine at night, I shipped a pure-Python sun sign (it is just a date-range lookup, no ephemeris required) and moved moon and rising to v2. Sun sign is most of the value, and now it is rock solid instead of theoretical.\n\nAnd the deploy. A reserved `AWS_REGION`\n\nenv var that failed the whole stack. A Lambda that returned \"internal server error\" because the build packaged the handler but not the server module it imported. CORS. A missing paragraph renderer. Every one of them a real bug, every one of them a one-line fix once I stopped guessing and read the actual error. Powered by NLP but humbled by CORS!\n\nMadame Minou is for Penelope. Tuxedo, my wife's BFF and my fourteen-year frenemy, who I was allergic to the whole time and could barely pet. She passed in February. This is the first thing I have built for a cat I never quite got to hold. There is a quiet link in the app, in her memory, to the Lap of Love Angel Fund. Because the stars are just a beautiful vocabulary for love.\n\nTry Madame Minou: [https://dghcwayx8gb6b.cloudfront.net](https://dghcwayx8gb6b.cloudfront.net)\n\nCode: [https://github.com/earlgreyhot1701D/madame-minou](https://github.com/earlgreyhot1701D/madame-minou)\n\nBuilt for [Hack the Kitty](https://hackthekitty.com/)\n\n*AI Assisted. Human Reviewed. Powered by NLP.*", "url": "https://wpnews.pro/news/ai-for-fun-electric-chats-at-hack-the-kitty-built-with-kiro", "canonical_source": "https://dev.to/earlgreyhot1701d/ai-for-fun-electric-chats-at-hack-the-kitty-built-with-kiro-849", "published_at": "2026-07-04 03:14:14+00:00", "updated_at": "2026-07-04 03:19:04.630033+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-products", "developer-tools"], "entities": ["Kiro", "Amazon Bedrock", "Claude", "AWS", "Lambda", "API Gateway", "DynamoDB", "S3"], "alternates": {"html": "https://wpnews.pro/news/ai-for-fun-electric-chats-at-hack-the-kitty-built-with-kiro", "markdown": "https://wpnews.pro/news/ai-for-fun-electric-chats-at-hack-the-kitty-built-with-kiro.md", "text": "https://wpnews.pro/news/ai-for-fun-electric-chats-at-hack-the-kitty-built-with-kiro.txt", "jsonld": "https://wpnews.pro/news/ai-for-fun-electric-chats-at-hack-the-kitty-built-with-kiro.jsonld"}}