From One Student Association to Everyone: Open-Sourcing EMSA
TLDR: I built a platform for 400+ medical students, and now it's open source so any organization can use it. Check out the repo.
It started with spreadsheets
My girlfriend is part of EMSA Macedonia (European Medical Students' Association). For months I watched her and her team handle everything by hand: spreadsheets for members, forms for event sign-ups, long chat threads to work out who was actually coming. These are people training to save lives, and they were spending their evenings copying names between tabs.Most of that work is exactly what computers are for, so I started building.
I followed how she worked, asked her a million questions, and put together an MVP with member management, projects, registrations, and an admin panel. Then came the meeting with the EMSA Macedonia team. They had no idea what to expect. I presented what I'd built, and seeing how impressed they were was one of the most heartwarming and rewarding moments I've had as a developer. Once they started exploring and using it, requests for improvements and new features began rolling in, and the platform grew with them. Today emsa.mk is live and used by more than 400 students.
Nothing here is just for medical students
I didn't plan to open-source it. I just wanted to help a community I care about. Somewhere along the way, though, I noticed that none of the core features were specific to EMSA. Any organization with members and events runs into the same problems. Having your own platform also changes how people see you. A clean website on your own domain, with projects, a board, and a list of supporters, makes an organization look serious. That helps a lot when you're asking sponsors to back your next event. So if your organization has members, runs projects or events, and takes registrations, this platform is for you.
That covers student associations, NGOs, clubs, volunteer groups, and meetups. Setup is a one-time job of about a day: a server, a domain, and an S3-compatible storage bucket like Cloudflare R2 or AWS S3. Everything else is configured in the admin panel, including your name, logo, socials, board positions, supporters, custom member fields, and even what you call your groups (committees, departments, chapters, whatever fits). For a full rebrand, the only code you change is the brand color (for now, since I'm thinking of making that configurable too).
The stack, and an experiment
I picked Bun because I was curious about the relatively new JavaScript runtime, and it lets one process serve both the API and the React app. The rest of the stack (React 19, PostgreSQL, Drizzle ORM) is what I know best. Those tools have huge communities, and LLMs know them really well.
That last part mattered, because EMSA was also an experiment. At work we use LLMs every day, but I wanted to start a project from scratch, write solid guidelines for the AI to follow, and see how good the code would turn out. Claude wrote almost all of it, and I reviewed every line. Honestly, that was one of my main reasons for starting, and I'm really happy with the result.The hardest part wasn't technical. Big kudos to the EMSA Macedonia team, who kept sending feedback and ideas. Once I had collected their input and set up the architecture, the features came easily.
What's next (and how you can help)
For me, success means more organizations adopting EMSA, with the people who use it building the features they need. Everyone is welcome to contribute code, docs, design, testing, or just a bug report. The codebase isn't complicated, and the conventions are written down in `CLAUDE.md`, so it's a great place for a first open-source contribution.
Star it, fork it, run it for your community: github.com/42dotmk/emsa. I'd love to see where it goes next.
