Education

Fall 2026 Student Project Reflections

Last semester at UCCS, I taught CS 4300/CS 5300, an advanced software engineering course, to 56 undergraduates and 5 graduate students. Each semester, students are put into groups of 4 to 5 and asked to build an application for another group. Each student group acts as a developer group for one group and as a customer group for another. This allows students to get a feel for what it's like to run software projects for a company while also understanding what it’s like to be a customer and to generate requirements for a software project. The projects last semester were fun to watch come together. Each group needed to use an external API and implement ChatGPT into the application itself to add AI features

Published on 18 Jan 2026 at 10:05PM under . Tags , ,

Typo of Theseus: Reviving the oldest Ruby on Rails Open Source Project

Reviving might be a bit of an over statement. The project I “revived” is still actively supported just under a different name.

Last week, I pulled down an old Ruby on Rails project, Typo[1] (now known as Publify[2]), widely regarded as the first Ruby on Rails blogging platform and one of the oldest open-source projects built on Rails. I forked it from Emmanuel Auffray[3], who had version 6.1.0 on GitHub, and quickly realized just how old the codebase was—the project originally shipped in January 2005, right at the dawn of Rails itself. Its last meaningful development activity was over a decade ago.

I had a simple task in mind: see if I could use Claude Opus 4.5 to get it running on Rails 7 and Ruby 3.4.7, even though it originally shipped with Rails 3.0.10 and Ruby 1.9.3. I told Claude not to ask me for permission and to just go to work upgrading what it needed using the Claude CLI. Over the holidays, Anthropic doubled Claude’s usage window, which meant I could let Claude run uninterrupted for hours at a time.

Claude ran for nearly 18 hours straight, debugging, attempting fixes, failing, retrying, and debugging again. By the end of the hackathon, I had a running Typo instance with many failing tests and a truly Frankenstein backend. Once I had time to review the code, I realized what had happened: Claude had stitched together a hybrid of Rails 3 and Rails 7, with a compatibility layer to keep old components alive under a modern framework—no wonder the tests were failing. Anyone who has lived through a major Rails upgrade[4]) will recognize this pattern.

I had to give Claude additional instructions to remove deprecated code, rewrite things the right (Rails) way, and—while we were at it—upgrade everything again to Rails 8. I wasn’t able to oneshot the application to Rails 8, but by iterating together—error by error—we eventually got there. Once Typo was functional again and core features worked—creating articles, posting comments, managing categories and tags, and loading sidebar plugins—I decided it was time to modernize the user experience. I removed the legacy visual and HTML editors and replaced them with CodeMirror, a proper Markdown editor (CodeMirror[5]). I added Active Storage[6] so I could use S3 for uploads, replaced legacy JavaScript with Turbo and Stimulus via (Hotwire[7]), and experimented with new sidebar plugins for Flickr, Spotify, and X—with mixed results. I also removed a bunch of themes that I was not going to use. When I used Typo for the first time 12 years ago, I was a big fan of.the Scribbish theme by packagethief. I used that as my base template and then leveraged styles I like from different places, mostly based on LaTex[8] templates I have used in the past. Oh, and on posts where I write a lot I can indent paragraphs! I know that seems trivial[9].

On the content side, I built new Typo textfilters for generating PDF slideshows from Markdown, added beautiful code syntax highlighting using Prism.js[10], and implemented automatic link referencing for articles. After all of that, Claude summarized the work we did:

In just 7 days and 16 commits, this modernization effort transformed a decade-old Rails 3 application into a modern Rails 8 application with:

  • 5 major Rails version upgrades
  • 2 major Ruby version upgrades
  • 54% more test coverage
  • 29% fewer files, resulting in a leaner codebase
  • A modern CI/CD pipeline using GitHub Actions
  • Docker deployment support
  • A fully modern JavaScript architecture

The repository—now totaling 3,740 commits since January 2005—has been successfully brought up to modern standards while preserving its original purpose as a blogging platform.

Published on 04 Jan 2026 at 08:06PM under , . Tags ,

ARobot.Wiki - Claude and FIRST® Robotics Competition

Over the last week or so, I’ve had some time for Learn and Be Curious[1]. I wanted to get better acquainted with Amazon Bedrock[2] and its vast offerings. I also have a kick-off on January 10th for FRC[3], when FIRST will release a new robotics challenge for High School Robotics teams. Each year, these challenges kick off with a new game and rules. The rules are released at the same time the game is announced, so it’s imperative that teams understand the rules as quickly as possible. A team will frequently reference the rules throughout the build season as they design, prototype, and build their robot for competition.

Many of the mentors on my team are not district employees and can’t access school computers for research, so they rely heavily on their phones (we also don’t have many computers in our build space). I wanted to help solve the mentors’ problem with checking the rules for specifics, and also introduce my students to AI. My team is required to read the game manual from cover to cover so they have a good understanding of the game. Sometimes, though, they’ll be working on a particular problem with the robot, recall a rule they read, but not remember where they read it, so they can reference it. This sounded like a perfect problem for a Retrieval-Augmented Generation (RAG) AI. So I set out, with the help of Claude, to develop a mobile-friendly web application that FRC teams can use to quickly reference the rules by asking questions.

We developed ARobot.wiki[4] over several days. The app uses AWS Bedrock with Titan (for vectors) and Claude Sonnet 4.5 (for information retrieval) that allows users to ask it questions about last years game. The system provides answers and citations for each, which users can click to open the PDF game manual and see where the citation came from. This worked pretty well out of the box, but we ran into issues where Claude was missing some FRC context. To overcome this challenge, in addition to the vectors, we implemented agentic lookups that allowed Claude to follow additional context vectors to provide users with better answers. Additionally, we also implemented an FRC glossary of terms to give Claude additional context as it worked to understand our users’ questions. To date, we have over 50 users and 35 unique teams registered and gearing up for the REBUILT[5] kick-off next weekend. When the new game manual is released, we will clear out the old rules and replace them with the new rule book. The best part of the application is the wiki that allows users to share helpful conversations with the rest of the FRC community.

The application has been a lot of fun to build, and we’ve encountered some interesting challenges. One of the biggest challenges to overcome with an application like this is trust, not just is the AI being truthful, but more specifically, with data security and privacy, because minors are using it (13+). We wanted to build a platform that parents, coaches, mentors, and students could use together. Some parents (me included) are cautious about the AI tools we let our kids use, so we built a platform that gives parents complete oversight of their students’ conversations to ensure appropriate engagement. We also built in fairly heavy guardrails with the agent to keep it within its intended purpose as it answers questions.

Overall, I am very pleased with the application. Existing software engineering practices and rituals are very helpful when working with coding agents. I learned a lot about building specs and pairing with Claude. The biggest lesson I learned was that Test-Driven-Development[6] and Gherkin scenarios[7] will take a lot of the re-work out when working with agents. Lastly, a well-formatted and thoughtful Claude.md[8] file will help keep the agent on track and remind it to follow the TDD / BDD coding instructions.

I have shared slides that Claude wrote as we completed the journey together and our specs[9]. The slides are more technical and discuss some of the design decisions we made and our tech stack.

Loading…
1/?
Use arrow keys or space to navigate. Press F for fullscreen.

Published on 04 Jan 2026 at 01:42AM under , . Tags ,

Spring 2025 Student Project Reflections

We just finished the Spring 25 semester at UCCS, and I am proud of my students who built some excellent applications in our Advanced Software Engineering course. Students shipped production-ready, AI-enhanced web apps—from a smart to-do list to a plant-ID game—using Django, external APIs, and CI/CD pipelines to identify code coverage metrics, code smells, and security vulnerabilities. Each team acted as a customer group for one group and a development group for another. They learned about full-stack development, cloud deployment solutions, agile methodologies, and teamwork, turning real-world problems into user-focused solutions.

Published on 10 May 2025 at 12:00AM under . Tags