Inspiration

Kabotan is an AI-powered Halloween knowledge companion that blends deep cultural lore, practical tips, and interactive storytelling into a single web service. Built with Common Lisp and backed by large language models, Kabotan delivers fast, precise, and context-aware answers—from the origins of All Hallows’ Eve and global customs to costume ideas, safety guidelines, and spooky trivia—through a conversational interface that feels like talking to a dedicated seasonal guide. Whether you’re a casual user, an event organizer, or a creator looking for rich, reliable Halloween insights, Kabotan turns scattered information into an intelligent, engaging experience.

What it does

A Halloween-themed web application built with Common Lisp that provides interactive LLM-powered features including character chat, story generation, spell creation, monster diagnostics, and trivia games.

How we built it

First, we needed to prepare the project environment so that Kiro could work with Common Lisp programs. We set up an environment where the project can be built and tested using ASDF, the de facto standard build system for Common Lisp. On top of that, we configured a simple web application using libraries like ningle and Clack so it could run properly.

After that, we provided Kiro with the basic design information and the specifications for the features required in this project, and had it generate spec/design/task documents to drive the development. In some cases we also created specs specifically for refactoring, and developed while carefully keeping the codebase from growing unnecessarily large or complex.

Challenges we ran into

In its default state, it is difficult to let Kiro directly operate Common Lisp. This is because, by default, the built-in debugger of Common Lisp starts up on errors and blocks the flow.

To address this, we needed to configure the environment so that Kiro could complete as much work as possible without directly manipulating the Common Lisp REPL, by wrapping operations via make.

We also relied heavily on Server-Sent Events (SSE) in this project. Because SSE is a real-time communication mechanism, it was hard for Kiro to debug issues, especially those that occurred when interacting through HTMX. We used the Playwright MCP to automate as much as we could, but there were still many situations where I had to step in and manually help with code changes.

Accomplishments that we're proud of

In the Common Lisp ecosystem, the environment for using Server-Sent Events is not very well established. Likewise, there are still only a few applications that communicate directly with the OpenAI API and build functionality on top of it.

With this project, we were able to break through that situation and provide a concrete example showing that you can use Server-Sent Events from Common Lisp, together with direct integration with the OpenAI API.

What we learned

We were able to learn in depth about a spec-driven development style using Kiro. In particular, concepts like steering documents and hooks felt very useful, and we expect them to be helpful in future projects as well.

We also learned that by combining HTMX and ningle in Common Lisp, it is fully possible to implement a modern web application.

What's next for Kabotan

In the current implementation, prompt engineering and related aspects are still not sufficient. To improve the quality and accuracy of the answers, we are considering adding features such as RAG (Retrieval-Augmented Generation).

We are also exploring ways to reuse this project—its components and architecture—in other AI applications.

Built With

  • common-lisp
  • llm
Share this project:

Updates