My projects

Pétanque Meet - 2026

Developer · Ludiven Studio
Unity
Supabase
TypeScript
Astro
React
Python
Android
iOS

Work in progress. The map of pétanque games and club tournaments, on the web and in a mobile app: one server for both, Apple and Google accounts, public content to moderate, and a Unity interface generated by script.

See the app page
Pétanque Meet — find pétanque players near you

This page covers the technical approach behind Pétanque Meet, a project still in progress: the app is on its way to the Play Store and the App Store. To find a game, the map of games (in French) is the place.

The need

You want to play, but nobody is free to make up the doubles? Games between friends are set up over the phone, and club tournaments on posters at the boulodrome. Pétanque Meet puts both on one map: games looking for players, how many are missing, and upcoming tournaments with their poster.

One server for the website and the app

The map started on this website, and the Unity app came next. Both talk to the same server: one Supabase Edge Function, in TypeScript, is the only way in. The tables have no public access rule at all; only that function reads and writes them. A game posted in the app shows up on the website, and the other way round.

The function holds every rule: validation, seats left, abuse limits per player and per hashed IP address. Its refusal messages are written in French, and the app shows them as they are. Copying them into the app would have made a second source of truth, one that would drift the day the server adds a case.

Browse without an account, act with one

The map is open to everyone. Posting a game, joining one, following a tournament or reporting needs an account: Sign in with Apple on iPhone, Google on Android (in the browser, with PKCE). The first games predate accounts and relied on a device id and a per-game secret, so the app still sends both until those games expire. Nobody loses control of their game.

Public content, so moderation

  • First names and tournament texts are checked by the server: no links, no markup.
  • A poster stays private until a moderator approves it.
  • Every game and tournament has "Report or hide", which can also hide all games from one organizer.
  • The account can be deleted from the app: upcoming games are cancelled and the first name is removed.

A Unity interface written in Python

The app's screens are not laid out by hand in the Unity editor. Each screen is described by a Python script, then built into a prefab by PrefabFusion, Ludiven Studio's in-house tool. The scripts enforce a style charter (text sizes, grid, radii, colour roles): no size or colour is hard-coded. Changing a margin or a tint happens once, and every screen follows. That is what makes five palettes, each in light and dark, possible.

Privacy

The GPS position never leaves the phone: centring the map and the distances are computed on the device. Reminders before a game are local notifications, with no token sent to a server. Audience measurement (Umami) is anonymous and cookieless: fixed event codes, with no account or device id.

Five languages, checked

The texts live in a spreadsheet translated into French, English, Spanish, German and Italian. One script exports the file the app reads, and another blocks the release if a key is missing, if a French string is left in the code, or if a character is missing from the embedded font. The empty box in place of a "ß" shows up before release, not after.

Where the project stands

The web map is live. The Play Store and App Store releases are under way.

The app (in French)

The map: games looking for players, and club tournamentsA game: the pitch, the time, the format and who already playsA club tournament, with its poster and the organizer's numberPosting a game: the pitch, the time, the format and the number of playersThe agenda: games organized, games joined and tournaments followedThe same map in the dark theme