A REAL PRODUCTION PROJECT
› projects
May 27, 2026
3 minute read
OpenSet is a full-stack platform I developed with my friend over the course of about three months (June-August 2025). I'm writing this now as the official end of the project.
OpenSet was born out of frustration with the lacrosse management systems used by local teams I played with. Most teams used the same outdated platform. I saw an opportunity to build a better platform when my former coach started his own association. I was to build the platform, and they would be my first customer.
Over the summer of 2025, I grinded out the initial release of OpenSet, just in time for the fall lacrosse season. In total, the website handled a few dozen registration, and processed over $9000 in player fees successfully.
Since OpenSet was to be a real production platform, we needed to make careful architecture decisions. We also decided to support multiple tenants out of the box, even though this never happened--we only had one customer. That meant choosing our architecture before starting to build.
We decided to use Vercel for hosting, mostly because we have no DevOps experience. Vercel is amazing to get things up and running quickly, provides amazing features out of the box, and just works. However, I would end up slightly regretting this decision later on: Vercel was quite expensive for our project, as we had the pro tier for 2 team members; this was also a failed opportunity to learn some DevOps and build on a more complex cloud platform. At the end of the day, we wanted something that worked out of the box, and that's what we got.
For our database, we used Supabase. So easy to set up, great developer experience, and free. We didn't have a large amount of data so this was perfect. We used the Drizzle ORM on the backend, which was an absolute pleasure to use. Modern webdev feels a little too easy. Just make sure not to get supply-chain-attacked by NPM though ;). The Supabase buckets API was also amazing. Having image storage alongside Postgres made development almost trivial.
With Vercel and Supabase, the only remaining tool to complete the larp stack is NextJS. However, we decided to go with SvelteKit, because we have more experience with it and it's also much more enjoyable to use. Svelte has to be the greatest framework: it's incredibly intuitive--most of the time; it's lightweight and not bloated at all; it supports vanilla typescript/javascript--all the svelte files are just HTML + JS + Svelte add-ons.
For payments, we went with Stripe--pretty obviously. I had heard of how well it worked, but never really used it. The DX was amazing.
The biggest challenges we faced building OpenSet were the following:
The first was mostly an issue with subdomains--we wanted each team to be able to pick their subdomain on our platform. That ended up being awkward, especially because we built on Vercel with a single SvelteKit project. We ended up with a pretty hacky solution: a server-side hook that parses URLs and checks for tenants.
The second challenge was more severe: working with webhooks rapidly turned into a headache, and the stakes were much higher--as I mentioned earlier, we automatically transferred more than $9k in player fees to our customer. Webhooks, while they are obviously the right way to approach payments on Stripe, felt hard to work with: it seemed as though pointing them to localhost didn't result in successful delivery of the payloads. That meant I had to set up a test environment on Vercel and made it feel much more like a real project: I actually needed a staging environment alongside production.
Even though the project was kind of a financial flop--I only got one customer and lost money overall--the experience building real software I gained was absolutely worth it. Deploying a quality product that was going to handle thousands of dollars proved to be much harder than simply spinning up localhost. A great experience.
my blog is static so it doesn't host comments :(
email me comments, we can talk and I'll add them!