← Back to portfolio

Volunteer · Chairman & lead developer

Code for Soli

Music Association Soli 200+ members 2014 – present
PHPLaravelWordPressWooCommerceOAuth 2.0Google WorkspaceTeam lead

Marching bands, music competitions and classical music, it all sounds a little old-fashioned. But for a lot of people it's still a vibrant part of their lives, and I'm no exception.

At the time of writing I'm very active in my local music association Soli, which hosts over 200 members. Next to being chairman of the board, conductor and percussion player, I'm the lead programmer of our website, soli.nl. In practice that makes me the main developer, but my code is actively reviewed by other developers, also members of the association, and for new or larger projects I'm joined by them. We meet regularly to discuss current and future digital projects and the requests of the board.

Music Association Soli gathered in front of the estate
Soli, a 200-member association where I play, conduct, and lead the web development.

One website, four business goals

Over the years the site grew a range of functionality. Every feature we build supports one of four goals the board and I keep coming back to:

Treating the site as a product with goals rather than a brochure is what keeps the roadmap honest: every request has to earn its place against those four goals.


How it grew

None of this arrived as a plan. Each project answered whatever the association needed at that moment, and together they add up to a platform:


The web store: winkel.soli.nl

In 2020 the COVID-19 pandemic halted all of Soli's social activities, including the winter door-to-door collection, where members fund the association by selling hyacinths street by street. Local municipality rules meant that kind of collection was no longer allowed, and with it went a significant slice of the association's income.

To keep the collection alive, the board decided to digitise it. By customising a WordPress / WooCommerce setup I built the web store winkel.soli.nl, and the 2020 hyacinth sale ran through it.

Soli Winkel, the web store banner
winkel.soli.nl: the door-to-door collection, moved online into a one-day sales window.

Home delivery and mobile pickup points

When a sale is live, inhabitants of specified neighbouring towns can order flowers to support the association. They pick home delivery or collection from one of the many mobile "stores" we station across the area, and anyone who'd rather just help out can donate money directly through the shop.

A custom export that runs the day itself

To keep the operation professional and low-friction, I programmed a custom export. Split by mobile store and delivery location, it generates a spreadsheet with everything a volunteer needs to make sure each customer gets exactly their order, turning a database of orders into a per-location worksheet for the people on the ground.

An ordering flow built for one-day logistics

Because ordering hyacinths from a neighbourhood association isn't quite what people expect from a normal web shop, every detail had to be communicated clearly. I customised the ordering flow and paired it with several automatically customised emails. And since the whole collection happens in a single-day window, those automated mails also do the reminding, nudging customers about the order they placed so nothing is missed on the day.

Different from a normal shop, so every step had to explain itself, from the checkout copy to the reminder that lands the morning of the collection.

And then it kept being useful

The store was built for one sale, but the pandemic kept taking things away. With the bar closed, the income from it went too, so in January 2021 we used the same shop to sell borrelpakketjes, drinks-and-snacks boxes people could order and enjoy at home. Same platform, different product, no new build. That was the moment winkel.soli.nl stopped being a workaround for one cancelled tradition and started looking like permanent infrastructure.

Together, the site and the store turned two very analogue traditions, a 200-member association and a door-to-door collection, into something that keeps running when the world outside can't.


2026: six projects, one platform

The association outgrew "a website with some features bolted on". So the current work is six projects running alongside each other, each replacing something that used to be a spreadsheet, a shared password or a stack of paper.

WooCommerce

Web store, redesigned

Built for one sale, now aimed at a permanent existence: donations, merch and ticket sales for our events, in a design that fits a shop that's open all year instead of one day.

Custom build

Music library

Digitising thousands of legally owned sheets so the archive is actually maintainable, and eventually shareable digitally with the people who need to play from it. Already tested in production once.

Custom build

Admin system

One system for all relations, members, volunteers, contacts, with self-service so people can maintain their own details instead of mailing someone who edits a spreadsheet.

Infrastructure

SSO provider

Our own identity provider: one account per person, with per-app access driven by relation type. More on this below.

WordPress

New site + event plugin

A Gutenberg rebuild aimed at better information and flow, converting potential members properly, and representing Soli as the organisation it is, plus a custom event plugin.

Operations

Google Workspace

Better mail, real collaboration between volunteers and with members, and an automatic sync of relations and email contacts between GCP and the admin system.

One login, every application

Six applications means six sets of credentials, and for a volunteer organisation that's how you lose people. So the piece holding it together is a single sign-on provider I built with Laravel Passport: Soli runs its own OAuth 2.0 server, and every related application, the music library, the admin system, the site and the store, authenticates against it.

What makes it more than a login screen is that it knows what kind of relation someone has to the association. Access per application follows from that relation type, so a playing member, a volunteer and a board member each land in the right places without anyone maintaining six permission lists. The provider also forwards the details the applications actually need, like the instruments someone plays and the groups they're assigned to, so an app can be useful the moment you log in rather than asking you to fill in what Soli already knows.

One account per person, handled in one place when someone joins or leaves. It also means anything we build next starts with authentication and authorisation already solved.

For a volunteer organisation, the tech is only worth it if it disappears. One login, and the rest is just music.


Get in touch

Let's build something.

Open to projects, collaboration and a good conversation about code, design or music.

LinkedIn ↗ ← More projects