Skip to content

Repository files navigation

DiscGold ⛳️🥏

A polished, local-first disc golf course & round tracker for Android (and desktop), built with Flutter + Dart. Map out your courses on free satellite imagery, score rounds hole‑by‑hole, track players and history — all stored on your device.

No account, no servers, no API keys, no billing. Your data stays on your phone.


Features

  • Courses & holes — drop each hole's tee and basket on a satellite map.
  • Build holes as you go — start a round with no baskets set and place each hole's tee/basket on the spot (tap the map, or drop them via GPS as you walk).
  • Use my location (GPS) — recenter the map on where you're standing.
  • Address / city / ZIP search — jump the map to any area.
  • Live scoring — per‑player stroke steppers, par tracking, and relative score.
  • Players & history — roster management and a log of past rounds.
  • Backup & restore — export/import all data as JSON (compatible with the original .NET MAUI app's format).
  • CSV import — bring in UDisc‑style scorecard exports.
  • Free maps — Esri World Imagery via flutter_map (no Google key/billing).

Screens

Courses → Course detail (map + holes) → Round (scoring), plus Players and History tabs.


Project layout

discgold/
├── app/            # The Flutter app (this is the real app you build & run)
│   ├── lib/        # Dart source: models, services, screens, widgets
│   ├── assets/     # Map markers + logo
│   └── pubspec.yaml
├── src/            # LEGACY .NET MAUI version (kept for reference; not maintained)
├── releases/       # CHANGELOG.md + archived APKs (gitignored binaries)
├── materials/      # Source art / icon references
├── reference/      # Design references
├── INSTRUCTIONS.md # Detailed setup, build & troubleshooting guide
└── .env.example    # Template for local secrets (copy to .env)

Quick start

Full prerequisites, install commands, and troubleshooting live in INSTRUCTIONS.md.

# 1. Install Flutter (see INSTRUCTIONS.md for Java/Android setup)
flutter --version

# 2. Get dependencies
cd app
flutter pub get

# 3. Run on a connected device / emulator
flutter run

# 4. Build a release APK for your phone
flutter build apk --release
# Output: app/build/app/outputs/flutter-apk/app-release.apk

Tech stack

Flutter • sqflite (SQLite) • flutter_map + latlong2 (maps) • geolocator (GPS) • geocoding (search) • share_plus + file_selector (backup/restore) • intl.


Secrets & API keys

The current Flutter app needs no API keys — it uses free satellite tiles.

Secrets are kept out of git via .gitignore. If you build the legacy MAUI version (which used Google Maps), provide a key locally:

cp .env.example .env
# then edit .env and set MAPS_API_KEY=your_key
  • .env is gitignored — never commit it.
  • .env.example is the committed template (no real values).
  • The legacy manifest references ${MAPS_API_KEY} instead of a hardcoded key.

Keystores, key.properties, google-services.json, and built *.apk/*.aab files are also gitignored. Distribute builds via GitHub Releases rather than committing large binaries; releases/CHANGELOG.md documents each version.


Releases & versioning

  • App version lives in app/pubspec.yaml (version: x.y.z+build); the build number bumps each release so Android treats it as an update.
  • See releases/CHANGELOG.md for the version history.

License

No license has been chosen yet. Until one is added, all rights are reserved — add a LICENSE file (e.g. MIT) if you want others to reuse the code.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages