I started off with Python, working with Flask & MongoDB for 2 years. Until, I eventually stumbled across Ruby in 2021 and have been working with it ever since. In Ruby projects I tend to use MongoDB with Sinatra and obviously SQL with Rails.
Along with Ruby, I’ve also used C# for a few side-projects, and I’m always open to learning more languages!
Apptus
Apptus is an online group chat website made with Ruby on Rails, leveraging many of its powerful features such as turbo frames and streams. As well as real time messaging, Apptus has features such as chat member role permissions, message read statuses, user profile pictures, and more. It utilises MailerSend for email verification and notifications, Appsignal for performance monitoring, Cloudflare R2 for image storage, and GitHub actions for automated testing and deployment.
BowLang
After completing some work experience with a company using C#, I decided to continue to develop my C# skills. It's the first time I've tried to create a programming language, and it's still very much a work in progress. Bow is a statically typed interpreted language, and also takes a lot of inspiration from Ruby. In particular, the powerful usage of blocks with loops and other functions. To stress this, Bow doesn't have any for loops, but instead uses enumerable methods on array like objects. The whole project is written entirely from scratch with no external dependencies. It is continuing to be a fun and challenging project.
Pseudonaja
Pseudonaja is an online text editor and evaluation service for CIE spec PseudoCode made by me and some school friends. My main role within the team has been implementing the editor and interfacing it with the interpreter, with hugomarf & Saim-Khan1 working on the design, and dsoon writing the interpreter. The editor is built with CodeMirror 6, which has been good to work with, however it, at the time, slightly lacked documentation and examples (this lead me to make a CodeMirror 6 template which won a competition). The interpreter is now integrated using PyScript, previously there was a websocket server set up to run programs. However, this meant that only one person could run a program at once, and a timeout had to be set for programs too, which was not ideal.
Replit Moderation Contact
This was my first proper Ruby on Rails project. It's a website to contact the Replit moderators to appeal warnings and bans that you may have received. I used Supabase postgresql database for this, as it works well and is free. The contact site makes use of Turbo Frames with the ticket filtering, changing page, changing ticket status etc. to provide a clean experience for users with no extra JS needing to be written. I really enjoyed this as a simple project to get comfortable with the MVC system and the Rails Convention Over Configuration principle. The contact site has recently been deprecated in favour of a centralised email system for all Replit forums.
Flaptus
Flaptus is a Flappy Bird type game where you jump through gaps for as long as you can, but with a twist. Everything is cactus themed! You are a Flappy Cactus (Flaptus) that has to avoid hitting the rocks as it flaps through the desert. Flaptus is complete with a global in-app and online leaderboard where you can see how you rank against the top Flaptus players around the world. Flaptus also has automatic update detection, where, if it detects there has been a newer release of the game than the one you are currently running, it will request you to upgrade to the newer version. For the app I used Ruby's Gosu Gem, and for the leaderboard and downloads webservers I used Sinatra.
Cactus Carer Alexa Skill
Cactus Carer is a Skill for Amazon Alexa which I made for a Replit Summer Hackathon. I ended up coming 2nd and winning $2000! To use Cactus Carer, you need to get it from the Amazon Store and then all you need to do is tell it what cacti you have, and it will tell you when to water and feed them. Cactus Carer is built using Ruby with Sinatra and MongoDB Atlas. This was a very enjoyable project as I got to properly work with OOP in a backend environment, and I was very pleased that I managed to come 2nd even though I was only available for 10 of the days in the 30-day competition.
Classrooms
Replit shut down their classrooms product leaving my school with no efficient way of teaching students how to code. I decided to take it upon myself to create a replacement for us. My product uses replauth and embeds repls for students to work in, to keep it as close to what everyone was used to. Teachers create classrooms and then invite students and more teachers. The teachers can make assignments in which the students submit an embedded repl for the teachers to then return feedback for. Teachers can even add modal solutions to the assignments for students to look over once finished and reflect on whether their solution was the best way of approaching the problem. For this, I used Python's Flask library along with MongoDB Atlas.
ReplTalk Gem
Following my transfer from Python to Ruby, I wanted to be able to do everything that I could do with Python - with Ruby. Most of my projects at the time involved some form of communication with Replit's GraphQL API. However, understandably, there was no wrapper for this API in Ruby! So I decided to create a Ruby Gem for it myself. As Replit's GraphQL API isn't really supposed to be for public use, it frequently undergoes breaking changes which means I need to be very aware if something is changed that breaks my wrapper.
Slidey
Created as a submission for a jam with theme of "puzzle", Slidey is recreation of those games where you have to slide the tiles in a grid to create a picture, or order some numbers. It has 3 modes - 3x3, 4x4, and 5x5 - and 4 images to choose from, but you can also upload any of your own images. The images on the tiles are actually displayed using css only, which ended up being quite a challenge. I don't think I've ever before had to use calc()
so much! Overall, it turned out really well, the layout and extras like animations and sounds are really polished, and the fancy moving background I also really like and very much enjoyed making.
Cactus Bot
I decided to make my own, cactus themed, discord currency bot. It was the first of my many discord bots, but still my favourite and also my most successful. It's in its fourth version now, starting off just using text files, then ReplDB, then EasyPyDB, and now MongoDB Atlas to store its data. Each version brought speed and feature improvements. With Cactus Bot, you grow your cactus and then buy things from the shop to increase by how much you grow each time. There are also other fancy things such as growth per minute and habitats, which act as multipliers. Cactus Bot has been so successful that it has reached the unverified limit of 100 servers.