{"id":48590010,"url":"https://github.com/dominiklindorfer/point-counter","last_synced_at":"2026-04-08T19:01:51.037Z","repository":{"id":349418373,"uuid":"1182490795","full_name":"DominikLindorfer/Point-Counter","owner":"DominikLindorfer","description":"Padel \u0026 Tennis Point Counter","archived":false,"fork":false,"pushed_at":"2026-04-05T22:07:49.000Z","size":166,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-05T22:09:17.399Z","etag":null,"topics":["android","app","counter","padel","point","sport","tennis"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DominikLindorfer.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":"2026-03-15T15:40:29.000Z","updated_at":"2026-04-05T22:07:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/DominikLindorfer/Point-Counter","commit_stats":null,"previous_names":["dominiklindorfer/point-counter"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/DominikLindorfer/Point-Counter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DominikLindorfer%2FPoint-Counter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DominikLindorfer%2FPoint-Counter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DominikLindorfer%2FPoint-Counter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DominikLindorfer%2FPoint-Counter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DominikLindorfer","download_url":"https://codeload.github.com/DominikLindorfer/Point-Counter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DominikLindorfer%2FPoint-Counter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31569400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["android","app","counter","padel","point","sport","tennis"],"created_at":"2026-04-08T19:01:42.429Z","updated_at":"2026-04-08T19:01:51.030Z","avatar_url":"https://github.com/DominikLindorfer.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/5d866f24-f629-4d10-b6ff-5cc8576e2cc9\" alt=\"Point Counter — courtside scoreboard\" width=\"720\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003ePadel \u0026 Tennis Point Counter\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eA courtside scoreboard for padel \u0026 tennis — big scores, Bluetooth remote control, zero setup.\u003c/b\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003cb\u003eNo ads. No logins. Free and open source!\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/DominikLindorfer/Padelcounter/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Platform-Android-green.svg\" alt=\"Platform: Android\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Min%20SDK-26%20(Android%208.0)-brightgreen.svg\" alt=\"Min SDK 26\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Kotlin-Jetpack%20Compose-7F52FF.svg\" alt=\"Kotlin + Jetpack Compose\"\u003e\n\u003c/p\u003e\n\n---\n\nPlace your tablet courtside and everyone can read the score. Pair a cheap Bluetooth remote and score points without leaving the court.\n\n\u003cp align=\"center\"\u003e\n\nhttps://github.com/user-attachments/assets/ad0aed53-c02c-48b0-93c0-9c121f993f9b\n\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://play.google.com/store/apps/details?id=io.github.dominiklindorfer.padelcounter\"\u003e\n    \u003cimg src=\"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png\" alt=\"Get it on Google Play\" height=\"80\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Setup that I personally use\n\nAll you need is an Android tablet, a stand, and a Bluetooth remote. This is what I use but modify as suits you best:\n\n|  | Link |\n|------|------|\n| **Android Tablet** — Xiaomi Redmi Pad Pro | [Amazon.de](https://www.amazon.de/dp/B0FJ9234ZX) |\n| **Tablet Stand** | [Amazon.de](https://www.amazon.de/dp/B0DRXP3V6W) |\n| **Bluetooth Remote** | [Amazon.de](https://www.amazon.de/dp/B08MKJX4MH) |\n\n## Features\n\n| | |\n|---|---|\n| **Full padel/tennis scoring** | 0 / 15 / 30 / 40 / Deuce / AD — games, sets, and tiebreaks |\n| **Golden Point mode** | No advantage at 40-40 — toggle on or off |\n| **Automatic tiebreaks** | Kicks in at 6-6 with proper tiebreak scoring |\n| **Configurable sets** | Play to 1, 2, or 3 sets (or infinite) |\n| **Bluetooth remote** | Score with a wrist-mounted media controller — no screen touch needed |\n| **Serve indicator** | Shows serving team and serve side (L/R), auto-rotates each game |\n| **Match timer** | Elapsed time starts on the first point |\n| **Team customization** | Custom names and 8 color presets per team |\n| **Swap sides** | One tap to mirror teams when you switch court ends |\n| **Match history** | Auto-saves completed matches with scores, duration, and stats |\n| **Share results** | Export match results via WhatsApp, email, or any app |\n| **Undo** | Made a mistake? One button to go back |\n| **Immersive display** | Full-screen, landscape-locked, screen stays on |\n| **Animated transitions** | Score changes with smooth bounce effects and a trophy on match point |\n\n## Bluetooth Setup\n\nThe app works with cheap Bluetooth media controllers (like wrist-mounted remotes). They pair as standard HID devices — no special permissions needed.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/a66de593-18af-417a-b510-c643b2aa0ab2\" alt=\"Bluetooth remote control\" width=\"600\" /\u003e\n\u003c/p\u003e\n\n### Button Mapping\n\n| Button | Action |\n|--------|--------|\n| Volume Up | Team 1 scores |\n| Volume Down | Team 2 scores |\n| Next Track `\u003e\u003e` | Team 1 scores |\n| Previous Track `\u003c\u003c` | Team 2 scores |\n| Play / Pause | Undo |\n\n### Pairing\n\n1. Put your Bluetooth controller in pairing mode\n2. Open Android **Settings \u003e Bluetooth** and pair the device\n3. Open Point Counter — button presses are captured automatically\n\n\u003e **Tip:** If your controller sends different key codes, you can customize the mapping in `MainActivity.kt` — see the [KeyEvent docs](https://developer.android.com/reference/android/view/KeyEvent).\n\n## Building from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/DominikLindorfer/Point-Counter.git\n\n# Open in Android Studio, sync Gradle, and run\n# Min SDK 26 (Android 8.0) · Target SDK 36 (Android 15)\n```\n\n## Project Structure\n\n```\napp/src/main/java/io/github/dominiklindorfer/padelcounter/\n├── MainActivity.kt            UI — ScoreBoard, TeamPanel, SettingsSidebar, MatchTimer\n├── MatchState.kt              Scoring logic — MatchState, PadelScoring, MatchViewModel\n├── MatchStorage.kt            Match history persistence (SharedPreferences + JSON)\n├── MatchHistoryScreen.kt      Match history UI with share/export\n├── CameraOverlay.kt           Camera preview \u0026 video recording overlay\n└── MatchViewModelFactory.kt   ViewModel factory\n```\n\n## Tech Stack\n\n- **Kotlin** + **Jetpack Compose** (Material 3)\n- **CameraX** for optional video capture\n- **AndroidX Lifecycle** + ViewModel\n- No network calls, no third-party analytics, no ads\n\n## Privacy\n\nThis app collects **zero data**. No accounts, no analytics, no internet access. See [PRIVACY_POLICY.md](PRIVACY_POLICY.md).\n\n## License\n\nMIT — see [LICENSE](LICENSE) for details.\n\n---\n\n\u003cp align=\"center\"\u003e\n  Built for the court, not the cloud.\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdominiklindorfer%2Fpoint-counter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdominiklindorfer%2Fpoint-counter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdominiklindorfer%2Fpoint-counter/lists"}