Native, because of the widget
The widget is what a player sees most days, so the app is Swift and SwiftUI with WidgetKit: small and medium widgets configured through an App Intent, and a Live Activity while a sync runs.
HQ Paphos, Cyprus · worldwide
My Chess Rating puts a player’s Chess.com and Lichess ratings in one place and explains why the rating moves: a tilt check, best hours to play, openings that cost points, goals with a forecast and a weekly report every Sunday. We build products for ourselves, so we know what it takes to get one through App Store review and keep it running.

My Chess Rating is a native SwiftUI app with WidgetKit widgets, StoreKit 2 subscriptions and APNs push, backed by a Node and Postgres service on Railway that pulls games from Lichess and Chess.com. It went from first work in February 2026 to the App Store on 9 May 2026, and we have kept shipping since.
Chess.com and Lichess each show a number. A player on both has two places to look, and neither says whether a bad week was tilt, the wrong hours or one opening. We wanted one screen for both sites and plain answers — and a product of our own to run end to end, from App Store review to Sunday pushes.
The widget is what a player sees most days, so the app is Swift and SwiftUI with WidgetKit: small and medium widgets configured through an App Intent, and a Live Activity while a sync runs.
Sync now only queues a job. A separate worker pulls games from the public Lichess and Chess.com APIs, so the app never asks for a chess password and never waits on a slow provider.
One SQL loader feeds small, pure calculators — tilt, best hours, openings to change, goals with a forecast. Each compares a player with their own history, so every number can be explained.
One team did all of it: the design, the iPhone app and widgets, the backend, the App Store listing and the landing site. Nothing was handed over, because there was no one to hand it to.
Work began in February 2026: what the rating screen must answer at a glance, then the app, the widgets and the paywall in one visual language.
SwiftUI app plus a WidgetKit extension. App and widget share the session through an App Group; the widget timeline refreshes every 30 minutes.
Node and TypeScript on Hono, with zod and jose JWTs, in front of Postgres. Moved from Supabase to Railway in April 2026: an API, a sync worker and the database.
Sign in with Apple or Google, or start as a guest and merge into a real account later. Pro runs on StoreKit 2 subscriptions plus a lifetime option.
The listing, screenshots and keywords, then review. Live on the App Store on 9 May 2026, about three months after work began.
Tilt check, best hours, openings that cost points, goals with a forecast, a localised Sunday weekly report and tilt alerts sent through APNs.
The My Rating screen shows bullet, blitz, rapid and classical from either site. Insights splits into Week, Timing and Openings, and Pro unlocks the deeper cuts. Light and dark themes share one layout.






None of these appear in a design file or a first build. They surfaced because we use the app and run its backend every day, and each one is the kind of problem we now plan for in client apps.

App and widget refresh their tokens separately, so a rotated refresh token stays exchangeable for 7 days while its session lives. Before that, the widget showed “failed to load” after a few days without opening the app.
The worker backs off on HTTP 429 and honours Retry-After, retries transient 5xx errors and throttles each provider separately, so one busy API never stalls the other.
At APNs priority 5, delivery was delayed indefinitely. Alerts now go out at priority 10, and the weekly report lands on Sunday evening in the player’s own time zone and language.
A tilt push only fires when the player’s own history shows tilt in that mode, and never more than twice a week per device.
Each Lichess game is stored with the rating the player had going into it — a correctness fix that keeps every chart and per-game stat honest.
Trademarked names are kept out of the App Store keyword field, per Apple guideline 2.3.7 — a review detail that is easy to miss on a first submission.
mychessrating.app is server-rendered HTML from the same Hono service as the app’s API, animated with GSAP and Lenis, with SEO guides at /guides and an llms.txt for AI assistants.

My Chess Rating is a free download on the App Store for iOS 18.6 and later. Pro costs $2.99 a month, $19.99 a year or $39.99 for lifetime access (US prices).
~3
Work began in February 2026; the app went live on the App Store on 9 May 2026. Version 1.0.3 went live on 29 September 2026.
7
English, Spanish, Portuguese, German, Italian, Russian and Ukrainian — with App Store metadata in 8 locales.
146
Design, iOS, backend, App Store submission and the landing site, all built and maintained by 99 Francs.
Bringing your idea to life as a mobile app MVP is no small task. Launching quickly while delivering a seamless user experience is crucial to validating your concept and securing early traction.
Need an iPhone app that gets through review and keeps working?
We design and build the app, the widgets and the backend, take it through App Store review and stay with it after launch — the same way we run our own.
Yes. The same team designs, builds and ships native iPhone apps, widgets, subscriptions and the backend behind them, and takes them through App Store review. See iOS app development and mobile app design and development.