Lichess Mobile
Open source contributions to the Lichess mobile app — native iOS widgets, puzzle features, openings explorer, and app infrastructure for the world's most popular free chess platform.
I ship features to the Lichess mobile app (Flutter), the official client for the world’s most popular free chess platform with millions of players. Across 30+ merged pull requests I’ve built native iOS widgets from scratch, shipped puzzle and openings features, hardened app infrastructure, and polished UX across the board.
iOS Widgets
I built three native iOS home screen widgets, designing the architecture from the widget extension through to the Flutter-to-native communication layer:
- Daily Puzzle Widget — displays the daily chess puzzle with interactive tap-to-open and support for all Lichess board themes and piece sets, synced live from the app (#2965, #2984, #2983, #2982)
- Blog Feed Widget — surfaces the latest Lichess blog posts in three layout variants, respecting kid mode visibility (#2834, #2936, #2935)
- Broadcasts Widget — live tournament broadcasts at a glance, with deep-link navigation into the app (#3007)


Daily Puzzle widget on the home screen (left) and its configuration with rating toggle (right).


Blog Feed widget on iPhone (left) and the widget gallery showing all three blog feed variants (right).


Broadcasts widget on iPhone (left) and widget catalog preview (right).

The Daily Puzzle widget respects whatever board theme and piece set you’ve chosen in the app.
Puzzle Features
- I built a Puzzle Dashboard showing personal strengths and improvement areas (#2651, #2690)
- Added search within puzzle themes so you can find the exact tactic type you want to practice (#2948)
- Fixed puzzle UI issues: text overflow on long puzzle names, theme sync edge cases, iPad layout regressions (#2759, #2983, #2982)
Game & Analysis
- I shipped custom position loading (FEN) for both computer play and over-the-board mode — set up any position and play from there (#2832, #2947)
- Redesigned the variant picker with icons, descriptions, and a logical ordering so you know what you’re picking (#2760, #2780, #2799)
- Added a low-time warning animation to the clock — the visual pulse when you’re down to seconds (#2788)
Openings Explorer
- Share FEN of the current position straight from the openings explorer (#2632)
- PGN export sharing so you can save or send the game notation (#2664)
App Infrastructure
- I built an in-app log viewer with full-text search, 7-day TTL persistence, pagination, and infinite scroll — useful for debugging on real devices (#2808, #2833, #2852, #2802)
- Improved the User Activity Widget with cleaner data presentation (#2618)
- Fixed a kid mode state issue where restrictions weren’t being applied correctly on cold start (#2930)