{"id":22041775,"url":"https://github.com/vdsbenoit/baden-v3-frontend","last_synced_at":"2026-05-04T02:40:59.718Z","repository":{"id":258206413,"uuid":"865901735","full_name":"vdsbenoit/baden-v3-frontend","owner":"vdsbenoit","description":"Progressive Web App powering a 1000+ player tournament. Handles match scheduling, real-time scoring, and volunteer management.","archived":false,"fork":false,"pushed_at":"2026-04-12T01:49:53.000Z","size":5178,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-12T03:25:35.792Z","etag":null,"topics":["firebase","full-stack","ionic","pwa","vue"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vdsbenoit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-01T10:19:39.000Z","updated_at":"2026-04-12T01:49:57.000Z","dependencies_parsed_at":"2025-04-16T04:46:53.614Z","dependency_job_id":null,"html_url":"https://github.com/vdsbenoit/baden-v3-frontend","commit_stats":null,"previous_names":["vdsbenoit/baden-v3-frontend"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/vdsbenoit/baden-v3-frontend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdsbenoit%2Fbaden-v3-frontend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdsbenoit%2Fbaden-v3-frontend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdsbenoit%2Fbaden-v3-frontend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdsbenoit%2Fbaden-v3-frontend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vdsbenoit","download_url":"https://codeload.github.com/vdsbenoit/baden-v3-frontend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdsbenoit%2Fbaden-v3-frontend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32592720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["firebase","full-stack","ionic","pwa","vue"],"created_at":"2024-11-30T12:09:11.824Z","updated_at":"2026-05-04T02:40:59.704Z","avatar_url":"https://github.com/vdsbenoit.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Baden score app\n\n## v3\n\nNew UI from scratch, made with Vue \u0026 Ionic.\nMicro services backend replaced with Firebase (serverless hosting + cloud functions)\n\n## Why this app\n\nThe goal of this app is to manage a kind of tournament played by a large number of players IRL.\nIt was initially designed for a boyscout game I used to coordinate, called [Baden Battle](https://badenbattle.be/). At the first editions, there were only a few hundreds of people playing. Everything was done on paper (distributing the players across the games, recording the scores, etc). However, the game gained a lot of success and hosts now more than 1000 players.\n\nWe faced two major scaling issues :\n\n### 1. Score registration\n\nIt became quickly impossible to record the scores on paper and compute them fast enough to share the name of the winner at the closing ceremony. We tried to use shared Excel sheets and online forms to record the scores but we faced the limit of this system too.\n\n### 2. Team distribution\n\nDistributing the players into teams, and defining what team plays at what game at what time may seem simple. This is actually a complex combinatorics problem. See the 'Constraints' section below for more details about it.\n\nLater on, I added a third use to this app :\n\n### 3. Attendant registration\n\nThe game success grew to a point we had to hire some attendants from other boyscout units.\nIn order to manage who is taking care of what game, I implemented a feature to facilitate attendant registration to games.\n\n## Constrains\n\nI searched the internet for any existing similar software first, unsuccessfully.\nWhat I found was mostly apps to manage tournaments. Our distribution differs from a tournament distribution. This is the main reason that motivated me to create this app.\n\nHere are our constraints:\n\n- Players register to the game in groups (called sections).\n- Sections must be split in smaller groups (called teams) if needed. Teams count around 10 players (this is configurable).\n- Teams must contain at least a leader (the players are children and cannot be left alone).\n- Games are distributed in circuits. In one circuit, there are as many games as time slots during the day. The amount of circuit must be defined based on the amount of players and time slots.\n- A team only plays in one circuit.\n- Teams must play all the games of their circuit.\n- A team cannot play against itself.\n- A team cannot play a game twice.\n- A team must play a few as possible against other teams from its section.\n- There must be two teams at a game at a time.\n\nI created a backend that uses a combinatorics solver ([PuLP](https://coin-or.github.io/pulp/)) to solve this problem.\n\n## Main features\n\n- Teams \u0026 games distribution (powered with [PuLP](https://coin-or.github.io/pulp/))\n- Creation of paper roadmaps for team leaders (with docxcompose \u0026 docxtpl)\n- Creation of paper roadmaps for game attendants\n- Creation of badges for players\n- Attendant registration (2 games / attendants, switch at noon)\n- Score registration\n- Live leaderboards\n- Admin panels\n  - User registration (admin \u0026 leaders have special rights)\n  - Live score check (e.g. if some attendants forgot to register a score)\n\n## Tech stack\n\n- Vue 3 (Composition API)\n- Ionic 6\n- PWA\n- Firebase (hosting \u0026 cloud functions)\n- Python (backend, in a separate project)\n\n## Note\n\nThis project is a side hustle. I had to write it fast, aside of my full-time job and the coordination of the Battle Battle itself (the event this project is made for). Therefore, there are a lot of imperfect / unfinished things.\n\nEven though most of the code is in English, the app itself is in French, because it is targeting a French-speaking audience. I'd like to make it customizable (design and language) in the future.\n\n## Use\n\nI initially created this project for the Baden Battle only. Due to time constraints, there is a lot of hardcoded stuff. However, I would like to make it available to anyone who would need such a tool. Making it open source is the first step, but I believe there is still a lot to do to deploy it for another event. My next step is to adapt the project and make the deploy instructions as simplistic as possible. If you are interested in using this project, feel free to mention it to me at benoit@frite.dev.\n\n## Contributing\n\nDue to the huge refactoring that is taking place in the `feature/refactore_and_use_vuefire` branch, I wouldn't recommend anyone to onboard right now. Once this operation is done, I would be please to receive any contributions. In the meantime, the last stable version of the project is 0.3.10 (see git tags)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvdsbenoit%2Fbaden-v3-frontend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvdsbenoit%2Fbaden-v3-frontend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvdsbenoit%2Fbaden-v3-frontend/lists"}