I'm a child of the web - consuming and building static & flash(lol) websites since high school. I now specialize in building rich web applications. Below are a few of the solo projects I've built.
Stop Over is an easy way for retail businesses to schedule appointments.
During COVID shutdowns & reopenings, I saw businesses struggling to schedule appointments to their locations, while maintaining a safe limit to the number of folks that could be in their shops.
Stop Over is a vanilla rails app made entirely on a 3 day weekend and was given away to some local businsess in upstate NY.
Talent Fairy is a modern team feedback platform.
I've seen first (and second) hand how hard it is to keep communication flowing as teams grow. Without processes in place for folks to give anonymous feedback, things simply won't get addressed. I built Talent Fairy to try and solve this problem.
Talent Fairy is vanilla rails app, using stimulus for the JS bits and server-rendering good ol' HTML and CSS. This stack allowed me to build and deploy this apps in weeks, not months.
Ooze Saga was a multiplayer web game where you collect and farm cute oozes.
Ooze Saga started as a concept for a physical card game which was tranditioned into a web app/game. Players collect and plant oozes to grow their wealth, using many real-time mechanics. There were a few hundred players interacting with the game every day before the project was killed to focus on other stuff.
Treebie was a database for thoughtful cannabis product reviews.
As an occasional cannabis consumer myself, I found product reviews largely useless and not very informative. This project was an attempt to create a review platform that inspired more thoughtful (and funny) product reviews.
Treebie was made over a few weekends using Rails, Postgres, etc. I leveraged a simple CSS framework which I cooked up a while back to make styling fast and lightweight. I was able to pre-populate the manufacturers database with spreadsheets from the Coloardo licensing board's website and the product and review pages are server-rendered optimized for maximum SEO value (search for specific product keywords is now where most of the traffic comes from).
Magehand was a mobile-focused web app designed to share Dungeons and Dragons game data in real-time with folks sitting around the gaming table.
As an avid DND fan I know first-hand that the tech for tabletop RPG games is abysmal. Despite the demand for such tooling, the market is just too small and fragmented for larger orgs to execute in this space (although you can see that trend starting now). Magehand was an excuse to build an app I wanted to use while playing with some new tech along the way.
The app allows DMs (dungeon masters) to create a 'campaign' and assigns a code where players sitting around the table can join, giving the DM access to all the player data in real-time. As a players change stats or edit their inventory, everybody sees the changes live. For players, it keeps a consistent source of truth without using paper (if you're into that kind of thing).
The app had a few hundred users at the peak, and the usage isn't large enough to warrant monetizing at the moment.
Magehand was my first experience at using firebase and vue together (and my first experience building a production-level app with either). Although my app architecture was somewhat clunky, the fundamental principle of having a unidirectional source of truth through firebase, and then using vue's diffing power to rerender on updates worked really well. It meant I could send frequent real-time payloads and not have to worry too much about reflow inefficiencies. This project inspired me to continue using both Vue and Firebase on future projects.
Lil' Trump is a tiny weekend project, simulating the tamagotchi experience with some presidential flair.
After reading some of Trump's tweets, I thought it might be possible to create a script that would generate believable tweets. The result is this silly 'game' where you're rewarded for generating tweets and giving them media attention. The game mechanics were poorly thought out and not very engaging. Despite that, it was featured on Product Hunt and I continue to get kind messages about the project.
Lil' Trump is just a simple HTML file with about 100 lines of jquery. I made a few sprites and used CSS animations to give them life.
Pokedate was an absurd weekend project to capitalize on the popularity of Pokemon Go (ah, simpler times), where you are can chat with Pokemon trainers near you.
Some coworkers and I were talking about the absurd specificity in new dating app startups and started joking about a pokemon-based dating app. I took that inspiration and hacked together pokedate.me (a $5 domain), largely as a practical joke, in about a weekend.
Once you sign up, you are presented with a tinder-style interface where you see a photo, and you can 'Catch' or 'Run' (terminology used in Pokemon). If both users 'catch' each other, they can chat.
The Monday I got back to work, it got featured on Product Hunt and hundreds of people started streaming in (despite a horrific onboarding/product experience) and I got invited to have lunch with the Firebase team @ Google. I probably could have spent time promoting the app and/or throwing ads up, but I didn't anticipate it having lasting traction. It was a fun 15 minutes of fame, regardless.
The entirety of this web app sits on a single HTML page (on some static hosting service) where it utilizes Firebase for auth/storage and jquery for everything else. The entirety of the app logic (including chat) is done client-side with no server involvement (do not recommend).
Gruup was a simplistic group chat platform.
Gruup is essentially a slack clone I built to play with some new tech. It has things like public/private channels, inline image detection and slash commands, but wasn't meant for mass consumption and isn't in active development.
I love working with both ruby and firebase, and this was some early exposure to both, as well as flexbox (which I hadn't really dug into previously). It lives as a simple sinatra app using firebase as the data store and user auth.