Home
iOS · Mahjong Meet-up

Game Night

A meet-up app for mahjong clubs.
Explore it, one story at a time.

0 of 12 stories opened

Click an object to explore — or take the guided tour.

iOS · Mahjong Meet-up · Table for four

Setting the table

Shuffling the tiles…

Guided tour Start · 12 stops

Drag to orbit · scroll to zoom · esc to step back

Mahjong-Meetup is a feature-rich iOS social platform connecting players with local events and competitive leaderboards. I architected a scalable system integrating Firebase for authentication and real-time data, implemented advanced visualisations using radar and line charts, and engineered a multi-service layer handling location services, geocoding, and media management.

The app demonstrates full-stack iOS development capabilities including complex UICollectionView implementations, RESTful API integration, and thoughtful UX design.
Four walls, thirteen tiles, one table. Riichi mahjong is a game about reading incomplete information — and the community around it is what this app serves.

The den you're standing in is the app's origin story: a weekly game night that outgrew the group chat. Scheduling, scoring, seating and stats all lived in someone's head. Mahjong-Meetup moved them into everyone's pocket.
The home base of the app — a dynamic dashboard built on custom UICollectionView layouts: live event cards, quick stats, and the community feed, all synced in real time.
Dashboard Event card
Every event carries its full story — date, venue with geocoded map pin, RSVPs, and scoring rules — with edge cases like cancellations handled gracefully.
Event details Event details 2
Competition made visible: season leaderboards with rank movement, per-player records, and score history that feeds the charts hanging by the window.
Leaderboard
I architected this iOS application from scratch, implementing a service-oriented design with Firebase integration and singleton pattern services for authentication, database operations, and location services.

I engineered complex UICollectionView interfaces with multiple custom cells and integrated professional charting libraries for data visualisation.

I solved critical edge cases around event filtering and state management while delivering a seamless user experience across six feature modules.
Real-time Firebase synchronisation introduced me to asynchronous programming challenges. I debugged state management issues, implemented proper error handling, and learned to think about edge cases like cancelled events and network failures.

I built real-time Firestore synchronisation with intelligent error handling, so every event, score, and RSVP stays live across the community.
Early on, I recognized that scalability and maintainability were critical, so I invested time in designing a service-oriented architecture. I implemented singleton pattern services for authentication, database operations, and location handling — decisions that paid dividends as the project grew in complexity.

Alongside auth and data, a polymorphic game system keeps scoring rules tidy behind a single interface.
The geocoding feature tested my problem-solving skills. I initially used CoreLocation, then expanded to the Nominatim API for better coverage, implementing intelligent fallback strategies and caching mechanisms to optimise performance.

That's what guides players from a pin on the map to a seat at the table.
Integrating professional charting libraries was a turning point; seeing player statistics transform into interactive radar charts and score trajectories made the data meaningful.
My score
Building Mahjong-Meetup was a transformative experience that took me from concept to a fully-functional iOS application. I started by defining the core problem: creating a community platform for Mahjong players to discover events and track performance. This clarity shaped every architectural decision that followed.

The UI development proved challenging but rewarding. I built dynamic UICollectionView interfaces with multiple custom cell types, learning to balance aesthetics with functionality.

Throughout development, I discovered that great apps aren't just about features — they're about solving real problems elegantly. This project taught me that persistence, thoughtful architecture, and attention to detail transform ambitious ideas into polished, production-ready applications.

Personal project · Mobile Application Developer · August 2025 — December 2025
Want to work together? If you like what you see and want to build something, get in touch over a cup of tea — or a round of Mahjong.
That report binder is running another story: a full-stack environmental reporting system built for Acoem Australasia — Python, Flask and Pandas turning raw monitoring data into automated client reports on Linux infrastructure.
The teal book on the shelf is Atelier — a CEFR-graded French learning platform built with Next.js and React: 240 lessons across 48 modules, a 20-type exercise engine, custom JWT auth and a fully bilingual FR/EN interface. Live at french.chrisverse.uk.