Skip to main content
← Back to blog

Under the hood: MIK's new member and club management system

Malmin Ilmailukerho
mik-ngtechproject
Under the hood: MIK's new member and club management system

Alongside mik.fi, the club has spent the past year and a half growing a second, much larger software project: mik-ng. It’s not a public website — it’s the club’s own system for managing members, bookings, billing, the flight log, and aircraft, all in one place, built and maintained by the club itself.

Screenshot of the mik-ng aircraft page, showing OH-STL and OH-IHQ with their location, fuel type, hourly rate, and remaining time to maintenance
mik-ng's aircraft page — everything you need to know about a plane at a glance

Ten years of history behind the club’s own system

mik-ng isn’t the club’s first homegrown system — it’s a continuation of an extranet that’s been in use since 2010. Its original purpose was to make invoicing easier: before it, the aircraft’s paper journey logs had to be scanned and sent to a bookkeeping company for invoicing. That first extranet was built on top of WordPress using PHP, and besides the flight log it included a booking calendar and an aircraft status page — which at first was simply a webcam image of the physical status board at the clubhouse. Other features, like flight packages, were added later.

The same original site was mostly just kept up to date with newer PHP versions over the years. A bigger leap came in 2020, when the club moved to electronic bookkeeping: billing switched from the half-manual Helposti Lasku service to Simplbooks. At the same time, the project moved into Git, deployment was automated with Ansible scripts, and a proper test environment was set up — before that, it had been normal to write PHP directly against production.

Why build your own system?

Running a flying club involves a lot of moving parts that easily end up scattered across different services: the member register, aircraft bookings, the flight log, billing, maintenance tracking, meeting minutes. The idea behind mik-ng is to bring all of that into one system the club actually owns and can shape — not locked into a rigid off-the-shelf SaaS product, but built on the club’s own terms, coded by its own members.

The project group also looked into existing off-the-shelf options, but since the club had run its own system for a decade already, it had accumulated plenty of its own processes that didn’t map cleanly onto ready-made products. The decision was also shaped by how many volunteers were actually available: the team judged that building a new, basic intranet in-house was realistic with the resources the club had. AI-assisted coding wasn’t anywhere near where it is today back in early 2025 — its role in the project only grew later, as the timeline below shows.

There’s also a clear goal behind it: reduce the amount of manual work volunteers have to do by automating as much as possible, and give the club’s decision-makers better, clearer data to work from.

Getting started and growing

The club’s board tasked Niko Ikonen with renewing the club’s extranet, since the old system had started showing its age — largely due to problems with its service provider. Niko has been the project’s product owner from the start. He called for volunteers, and the project’s first meeting on 28 February 2025 brought together Mikko Nurmi, Juho Kolehmainen, and Chris Whellams alongside him. Mikko set up the project’s monorepo, and Chris soon followed by building out the local dev environment (Postgres, Docker, startup scripts). Niko also started coding himself in June 2025, alongside his product owner role, and in April 2026 Joseph Russell joined too, since taking a central role in things like push notifications and the frontend’s test coverage.

Over that year and a half, the project has accumulated more than 1,180 commits, close to 400 GitHub issues, and more than 700 pull requests — a sign that this is an actively used, continuously evolving system, not a one-off build.

What mik-ng does today

Diagram of eight mik-ng modules around a React/Express/PostgreSQL core: members, bookings, billing, aircraft, fuel, meetings, stats, reminders
One system, eight interconnected modules
  • Member management and login without passwords — logging in works via a one-time link sent by email
  • Bookings and flight log book for the club’s aircraft
  • Billing, integrated with the Simplbooks accounting software
  • Aircraft and maintenance tracking, including mass-and-balance calculations and upkeep record management
  • Fuel prices, plus a broader liquid-management system currently in the works
  • Meetings and occurrence reports
  • Exams and expense claims — taking theory exams and submitting expense claims through the same system
  • Stats and dashboards for keeping tabs on club activity, plus a small club shop
  • Browser push reminders for upcoming bookings — a member can opt in on their own device, and the system reminds them of an upcoming flight in addition to the existing email reminder

The technical foundation is a TypeScript-heavy pnpm monorepo: React and Vite on the frontend, Node.js and Express on the backend, PostgreSQL as the database with Flyway managing schema changes. The dev environment runs in Docker.

How changes make it to production

The release process is automated, but deliberately cautious. Pull requests go through their own review workflows for both the backend and the frontend, and once a change is merged to main, it’s automatically tagged with the version number from package.json. From there, a release moves through DEV → TEST → PROD environments on DigitalOcean, and reaching production always requires a separate, manually triggered approval step — nothing reaches production by accident from a single merge. The database also gets automatic backups through its own, separately scheduled workflow.

Timeline, and AI adoption in stages

Timeline from February 2025 to August 2026: project founding, Copilot instructions, coding agent adoption, and Claude Code joining
mik-ng's milestones over a year and a half
  • February 2025 — The board tasks Niko with renewing the extranet, the first project meeting brings the team together, and Mikko opens the mik-ng monorepo
  • March 2025 — Chris joins in to code, the dev environment foundation is built
  • June 2025 — Billing and accounting features land, along with flight log sync; feature pace picks up
  • August 2025 — The first GitHub Copilot instructions are written down for the team: a first step toward systematic AI-assisted development
  • March 2026 — Copilot’s autonomous coding agent starts opening its own pull requests, not just suggesting completions
  • April 2026 — Joseph joins; push notifications ship
  • May–June 2026 — Claude Code is adopted for development work, and CLAUDE.md unifies the instructions both Copilot and Claude Code follow into a single source
  • August 2026 — A multi-phase push brings frontend test coverage up to the standard the backend has held for a while

AI’s role has grown in stages: first written instructions for AI assistants, then an agent that suggests changes, and eventually agents that open pull requests on their own for review. By August 2026, more than 250 commits in mik-ng carry Claude Code’s co-authorship alongside human contributors — considerably more than on the public website, which says a lot about how much bigger and more active a project mik-ng is.

What’s coming next

Based on the open GitHub issues, development is currently heading in these directions, among others:

  • A broader liquid-management system, extending beyond fuel to other liquids the club handles
  • Live fuel data from the Nummela (EFNU) airfield, fed directly into the system
  • Finishing the push on frontend test coverage — a large, multi-phase effort, a good chunk of which already shipped in August 2026
  • Refactoring shared code to remove duplicated data-handling logic across different parts of the system

Never quite finished

mik-ng isn’t “done” in any traditional sense — it’s a tool the club’s volunteers keep developing while it’s already in daily use. There are a bit over thirty open GitHub issues as of this writing, ranging from small usability fixes to bigger pieces of work. If this caught your interest and you’d like to help build it, reach out to the club’s tech team!