The Churchill Library built with RoR

2024-08-02
tl;dr
Project
The Churchill Library, a Ruby on Rails app to catalogue family's books and provide interaction with via LLM
Tech Stack
Ruby on Rails, Hotwire, TailwindCSS, TBD vector database, and TBD LLM API though interested in AWS Bedrock
Goals
Functional, publicly available app by September; full RAG integration with LLM chat by year-end

I am excited to start a new side project!

settin’ the stage

I started a graduate program in Computer Science from Franklin University at the beginning of the year. While the initial prerequisite class on basic data structures & algorithms in Java was not that inspiring, my recent class on “advanced data structures & algorithms” - recursion, trees, heaps, graphs, sorting - has renewed my excitement in programming for fun again. Furthermore, I’ve been acting as the technical lead for a generative AI chat application at work. Although we mostly inherited the code from a contracting company, it’s been exciting having the opportunity to own the platform.

Instead of just implementing another chat app, I wanted to create an application that interacts with an LLM using RAG with data I actually care about. Given that my whole family are avid readers - even my toddler has amassed quite a large collection of books, often with duplicates - I had the idea to create a web app to help catalogue these books for my data source.

the deets

As for the tech stack, here are my thoughts around why I am going to use Ruby on Rails styled with TailwindCSS and using Hotwire for a dynamic UI:

  • I use Java for my coursework and C#/.Net with React for the app at work — I chose to steer clear of these in my side project to help broaden my experiences.
  • I’ve always wanted to dive deeper into Ruby on Rails, or RoR, as it’s known for its simplicity and convention-over-configuration philosophy. Moreover, Root Insurance built up its product using the framework so I figure if it can handle that kind of load, it’s a shoe-in for my app.
  • Hotwire provides SPA-like functionality, speeding up page changes and providing partial page updates, while actually being reliant on the backend for server-side rendering. Given this was created to work with RoR, this is a nice replacement for React.
  • The only crossover to work is my choice of TailwindCSS - I don’t think I need to explain myself here.
  • Heroku will be how I deploy my app as I remember it being tightly integrated with Rails apps.
  • I’ll be using a GitHub Actions workflow to ensure my app has continuous integration and deployment.
  • Although I started out planning with GitHub Projects, I’ve decided to use a Trello board to track my work as it is actually useful through the iOS app.

Although I have the desire to get it with this app, here are my realistic goals given my limited spare time:

  • I will have a nicely designed, functional website that is publicly available and provides an enjoyable user experience for browsing our collection of books.
  • A stretch goal will be to have a vector database chosen and an Active Job pipeline for embedding books by September as well.
  • By year-end I want to have RAG fully integrated into the app as a “virtual librarian”.
    • Even though OpenAI is the obvious choice, given ChatGPT has been my LLM tool of choice, I want to challenge myself to look at other options. Specifically, I am interested in seeing what it would take to set something up in AWS Bedrock. As for the integration, I will either look into just using a WebSocket via ActionCable or research more about “server-side events”, an alternative one-way HTTP-based mechanism to stream data.