5 min read

Lijsje v2.0: bigger, better, and coming to town 🎅

Lijsje 2.0 is here. What started as a forgotten side project turned into a full rebuild with Bol.com search, multiplayer features and Secret Santa. A simple Sinterklaas request brought it back to life.
Lijsje v2.0: bigger, better, and coming to town 🎅

tl;dr: Lijsje 2.0 launched. Check it out here.


Last year, shortly after I quit my job at Automattic, one of the first projects I jumped into was Lijsje, a wishlist application. My big idea? There’s a lot of money in affiliate marketing, and if I could create the best wishlist experience out there, I might earn a bit of side income.

But boy was I wrong.

The competition is fierce. I dove in head-first without checking any of this, of course. There are tons of players in this space, and being the newest kid on the block is… not an advantage.

Getting accepted into affiliate programs turned out to be surprisingly hard as well. Bol.com, which, fun fact, ends up being the shop added to wishlists about 50% of the time rejected me repeatedly. So much for easy money.

On top of that, I’d always wanted to build something using Laravel and Livewire. It looked shiny and fun. And it is fun, but it’s no React. Invalidating data and refetching with TanStack Query is ridiculously easy; doing the same in Livewire felt like eating soup with a fork. (I'm still a very happy Livewire user with OpenwebcamDB and BuyRainclouds.com).

When it was time to renew the domain name, I genuinely hesitated. The tiny bit of revenue Lijsje brought in barely covered the server costs, and I didn’t feel much like maintaining it.

At that point I added this ticket to my Linear board:

And like most things I put on a todolist, I forgot about this.

Until one day, my mother asked me for the kids’ wishlists for Sinterklaas. I threw them into Lijsje, and it struck me: this thing is actually… pretty nice. Maybe it deserved another chance, and maybe I wanted to make something better after all.

And that’s how Lijsje 2.0 happened.

What's new?

The initial plan was to just convert the whole frontend to React and call it a day. But then feature creep (my favorite kind of creep) appeared and now it's a whole new version 2.0.

Technical overhaul

I rebuilt the entire frontend from scratch. The app used to run on Laravel + Livewire, which worked, but felt clunky for the kind of real-time, collaborative experience I wanted.

So I ripped it out and replaced it with React.

Data fetching now runs through TanStack Query, which handles caching, background updates, and all the good stuff automatically. It feels so much smoother.

Inertia is also in the mix, mainly to help with server-side rendering.

Multiplayer and activity log

One of my original goals with Lijsje was to prevent people from buying the same gift twice. But somehow, I still kept hearing stories about duplicate gifts… or, even worse, about items being crossed off without anyone actually buying them.

So in version 2.0 I changed how crossing items off works.


Whenever you want to check something off, the app now asks you to enter your name. That way, if there’s ever any confusion later, you can open up the activity log and immediately see who did what.

And because I personally tend to forget what I already promised to buy, the app now also shows you a personalised view of all the items you crossed off. No more second-guessing yourself.

On top of all that, Lijsje now shows a live overview of everyone currently viewing the list. So yes — you can see the exact moment tante Jeannine is buying your pair of Happy Socks.

(This feature is still very much in beta)

Bol.com integration

After getting rejected multiple times last year, I finally got accepted into the Bol.com affiliate program. One of the benefits of the program is that you get access to their Marketing API, which gives access to the whole product catalog.

So now you can search all of Bol.com directly inside Lijsje.

Share images

The thing I really hated about v1 was the awful Midjourney-generated share image. So I decided to change this for a dynamically generated one.

Many small quality of life features

Lots of small things that make the experience smoother have been added as well:

  • Recently visited or administered lists are now saved in your browser, so you can jump back instantly.
  • Lists can optionally have an end date.
  • The non-functioning Amazon integration has been removed (good riddance).
  • All screens have been redesigned.

Secret Santa

And as a one more thing ... This feature has been requested so many times… and I kept postponing it.

You can now create a Secret Santa, invite people or let them sign up themselves, and set a deadline. After that deadline, everyone automatically gets someone else’s wishlist and can start crossing off gifts.

It’s simple, fun, and finally here.

The future

It’s still early days for v2.0, and I’m sure a few bugs will crawl out of their hiding spots once more people start using it. So the first step is simple: fix things, polish things, and respond to whatever the real world throws at me.

After that, I want to keep improving Lijsje based on actual user feedback. A few ideas already floating around:

  • Real user accounts, so lists and preferences sync everywhere instead of living only in your browser.
  • A mobile app, because Lijsje feels like something you should be able to open quickly while out shopping.
  • Maybe translate it in English (because if you don't speak Dutch and made it this far, Lijsje will probably be of little use to you)
  • And probably a dozen other small features that future me comes up with.

Wrapping up

Lijsje 2.0 turned into a much bigger project than I expected when I first opened that “maybe just stop?” ticket. But giving it a second life reminded me why I built it in the first place: it’s a simple tool that actually solves real problems — especially when the gift-giving chaos starts.

If you’re curious, or if you just want to avoid duplicate presents this Sinterklaas or Christmas, feel free to give it a spin. The interface is still Dutch-only, but if that doesn’t scare you off, everything is ready for you to try.

I hope you enjoy using Lijsje as much as I’ve enjoyed rebuilding it.