Inspiration

The Cat Adoption Agency was heavily inspired by the mobile cat-collecting game Neko Atsume, where you put out food and wait for cats to come to your yard. It's incredibly fun for a game that requires close to no effort, and I wanted to replicate that by creating a low-stakes game that lets users get to know these cats a little better. I have used characters from the game in this app as inspiration, and all credit goes to Hit-Point for their characters.

The second inspiration for this web app was the virtual pet site Neopets. Another game where you could create, adopt, raise your pets and interact with them across a variety of activities. Looking back, the UI was very much built on basic HTML and CSS in its younger days, and yet it possessed a charm that compelled millions of people to play it, myself being one of them. I tried to emulate that simple charm when thinking about what would make this app fun.

What it does

The Cat Adoption Agency utilizes Google Gemini for storytelling purposes, meaning that all the cat stories that you read, the interactions that you have with your cats, and their descriptions are AI generated. This means that each cat has descriptions tailored to their personality traits and appearances. No two paragraphs should ever be the same, whether you are reading about a cat's life goals or planning to adopt.

At its core, the Cat Adoption Agency is a game and does exactly what it sounds like. You can check out a number of rare cats, each with their own special personality and traits, and learn more about each of them by clicking on them. If you like them enough, you can feel free to virtually adopt them and have them always available to you. If you are feeling devious, you may even consider taking someone else's cat, but expect the same to happen to you.

How we built it

The Cat Adoption Agency was built in Python with Flask as the main framework, and SQLite as the database engine of choice. Python was selected for its ease of use and development speed, and Flask was selected for its extension support around authentication and databases.

Design started with the database models because they would be the foundation that the rest of the program would be built around. After those were in place at a basic level, then I started thinking about the Flask app structure and getting some basic queries with Flask-SQLAlchemy working. After creating a basic authentication system, I started building out both the Flask methods to pull data from the database, and the accompanying pages to display that data to the users. After each iteration of this last step, testing and debugging was required to ensure that the new feature worked, and that changes had not broken other features in the process.

After I had the web app in a working state, I started to work on what could arguably be considered the heart of the project, which was the module that interacts with Gemini to generate descriptions for user interactions with the cats. Thankfully, Google made the setup process very easy in Python when working with text generation, and I was able to focus on the desired responses.

Challenges we ran into

While the ORM provided some clear advantages and abstractions from the raw underlying SQL, it also came with its own set of issues. There were some initial problems with setting up the Flask-SQLAchemy models and queries that took quite a large amount of time to troubleshoot, and sometimes I felt like I was fighting the library rather than being assisted by it. While writing queries became simpler with the models in place, debugging them when they didn't work was more difficult because of that level of abstraction, and I felt at times that working with raw SQL would have been an easier task.

Another hurdle when creating this app was not being able to fully complete the design process before starting to build because of time constraints. While building early allowed me to handle issues and bugs quicker, it also meant that sometimes I ended up needing certain data that I had not considered storing, and as a result, I needed to go back to modify the database schema and ensure that the changes had not broken anything in existing features afterwards, which sometimes they did. This part of the process ended up being costly in terms of time.

Accomplishments that we're proud of

This app managed to see itself grow from the planning phase all the way through the development phase and make it onto the web. As one person, I am proud to have been able to handle all aspects of the project. Designing and building each component was a difficult task, and I like to think that the way I structured the program allows for extensibility and future improvements and additions that I have planned for the future.

What we learned

I had known it before, but after working on this project, I am reminded that that initial analysis and design stages are some of the most important parts of the software building process, and that having a clearer idea of what a program should look like before coding can save some major headaches down the line. In addition to that, writing some initial automated tests would undoubtedly have saved some time as well, even for such a small codebase.

The last thing I would like to mention here is how much convenience working with SQLite brought to the development process. Its serverless nature made setting up and integrating my database with my project very simple and completely eliminated the hassle of setting up a database server on the web app's host machine. It also works seamlessly with Beekeeper Studio, my database manager of choice, and I would be inclined to consider its viability as first pick for any small projects that I have moving forward.

What's next for Cat Adoption Agency

I would like for the Cat Adoption Agency to go beyond simple adoption. I want users to be able to interact more with their cats, and I would also like for these cats to be able to grow alongside their owners. In the future, I envision brand new cats that the world hasn't seen being able to join the agency on their own with the help of AI.

Built With

Share this project:

Updates