Dennis Sarsozo

Developer & photographer on Oʻahu, Hawaiʻi.
Let's build 🤙🏽

Warrior Knowledge Quiz Chatbot

Project status: The public demo at wkchatbot.xyz is offline. I intentionally shut down its DigitalOcean service to eliminate ongoing hosting and API costs and reduce abuse risk. This write-up and the source repository preserve how it worked.

Warrior Knowledge Quiz Chatbot asking an AFROTC study question
The Detachment 175 Warrior Knowledge Quiz Chatbot when it was online.

The Detachment 175 Warrior Knowledge Quiz Chatbot was an interactive web app I built to help my fellow Air Force ROTC cadets study the Detachment 175 Cadet Handbook. Memorizing ranks, mission statements, historical facts, and key doctrines is a constant part of cadet life, so I used OpenAI’s GPT-4o-mini model to dynamically generate varied, randomized quiz questions from the handbook content. The result was a self-assessment tool that felt different every session instead of a static flashcard list.

I designed and implemented the entire stack myself. The front end used HTML, CSS, and JavaScript with a dark/light toggle and responsive layout; the back end used Node.js and Express to call the OpenAI API, with per-session chat history so each cadet received a personalized interaction. Because the app was publicly reachable and backed by a paid API, I added express-rate-limit to cap requests per IP and used dotenv to keep API keys out of the codebase.

I later deprecated and took the app offline on purpose. The original DigitalOcean deployment is shut down, and wkchatbot.xyz should be treated as an archived domain rather than a working demo. Leaving a public LLM endpoint unattended would create unnecessary prompt-injection, abuse, and runaway-cost risks.

This project taught me as much about operating software responsibly as about building it. Wiring up an LLM is the easy part; the harder questions are how you protect a public endpoint, control cost, manage secrets, and decide when to sunset something rather than leave it exposed. Making the deliberate call to shut it down—balancing security and cost against keeping a demo live—was a useful engineering judgment lesson.

Source and implementation: sozodennis01/Det175WarriorKnowledgeChatBot