DMeechan
dmeechan.bsky.social
DMeechan
@dmeechan.bsky.social
dabbling, building, learning. staff engineer. building https://quicksplit.io in my free time
And finally, it's got to be durable so there's a daily job that checks for due recurring expenses then queues up a task to create each expense

@graphile.org‬ Worker has been great for this!
June 9, 2025 at 10:35 AM
Using rrule.js (github.com/jkbrzt/rrule) to determine the next date for a recurring expense

And passing the date around using PlainDate from JS's new Temporal API tc39.es/proposal-tem...), instead of risking timezone issues with the JS Date object
June 9, 2025 at 10:20 AM
Yeah I was wary about running into datetime and timezone hell

I'm storing them as RRules (from the iCalendar RFC datatracker.ietf.org/doc/html/rfc...)
June 9, 2025 at 10:14 AM
Memory usage dropped (445 -> 306 MB) while database queries became faster ⚡

Latency stats for our slowest endpoint:
- p50: 93 -> 54 ms
- p75: 106 -> 78 ms

I just upgraded Drizzle so we wouldn't fall too far behind latest 🤷 the gains are a free bonus
June 9, 2025 at 8:48 AM
Context: Quicksplit runs on @deno.land and @drizzle.team‬ and @supabase.com

I did a big Drizzle upgrade (0.30 to 0.43) but ran into some errors with Postgres.js imports in Drizzle on Deno

Swapped out Postgres.js for node-postgres... now backend go brrr for less $$
June 9, 2025 at 8:48 AM
But it was worth it! I went in with a clear expectation of who would win but the prototypes convinced me otherwise

This thread's getting a bit lengthy so I'll save "diaries of an Android newbie" for the next thread and end this with a link to download Quicksplit: quicksplit.io 🥰
Quicksplit
Whether you’re going away with friends, managing bills with roommates or shopping with your family, Quicksplit makes payments easy.
quicksplit.io
June 3, 2025 at 8:11 AM
Instead of spending 2 months hoping I was right... I spent 1.5 months building 3 prototypes:

1. Native in Kotlin using Compose
2. React Native in TypeScript
3. Capacitor using React

(cue the meme from the start of this thread)
#Kotlin #ReactNative
June 3, 2025 at 8:11 AM
Soo how did we build Android?

With so many technologies to pick from, I was worried about getting 2 months in before realising that it was the wrong choice:

"What if we need web?"
"Will it be laggy?"
"Will the DX be painful and slow me down?"
"Do LLMs know it well?"
June 3, 2025 at 8:11 AM
If I were to do this again (build a B2C app that lives or dies on the network effect), would I build it cross-platform from the start?

Yes. Yes I would.

#LearningInPublic #MobileDevelopment
June 3, 2025 at 8:11 AM
It was a big misstep. Most of our friends weren't even able to download Quicksplit or meaningfully engage with it... because we were only on iOS. We had the inverse of the network effect and weren't able to meet users where they are
June 3, 2025 at 8:11 AM
The iOS launch was not particularly successful.

We built up a small number of highly engaged DAU who love the app and have an iOS-only group... but we really struggled with uptake. So many social circles (especially in Europe) have at least one Android user (myself included)
June 3, 2025 at 8:11 AM
So why Android? If you need to split bills with friends... it's usually a dealbreaker if someone can't install it.

We built placeholder members as a stopgap (and users love it - placeholder members are probably our #1 most loved feature) but we still struggled with adoption
June 3, 2025 at 8:11 AM
We were never going to compete with Splitwise on features.

Quicksplit has always been about building an outstanding user experience when you just need to split some bills (and yes that means unlimited payments and auto exchange rates are table stakes, even on the free plan)
June 3, 2025 at 8:11 AM
Look at this flow for adding a payment / expense:

It has convenient defaults (fetch latest exchange rate, show the converted amount, calculate everyone's splits equally) but if you need something more custom, you can input what you need and we figure out the rest
June 3, 2025 at 8:11 AM
I'm a big fan of our iOS app (and totally unbiased) - it's beautiful, it's fast, and most importantly: it does one thing and it does it darn well.

We chose to build a native iOS app (Swift + mostly SwiftUI) to help us nail that user experience
June 3, 2025 at 8:11 AM
First off: why an Android app?

My friend and I started working on Quicksplit a couple of years ago during our free time. Development lulled for a bit before we picked up the pace during the summer and released the app on iOS in August 2024
June 3, 2025 at 8:11 AM
Some context about me: I've been building software for a while now - I mostly build on the backend but I have been known to jump into platform or frontend (web) when needed.

The last time I made a mobile app was... (checks notes) in 2017 when I made a riddle app on iOS 😅
June 3, 2025 at 8:11 AM