Skip to content

Concurrent score tracking app for disc golf and golf. Made with Go & Vue. Live demo available. Automatic deployment with Github Actions.

Notifications You must be signed in to change notification settings

tuommii/scoreboard

Repository files navigation

Build Status build



Scoreboard

Simple score tracker for golf and disc golf. Made with Vue & Go ❤️


❓ Motivation

It seems no one wants to be an accountant when we are playing. I wrote this so that the accountant can be switched in the middle of the game.

Created for mobile use. For best usability add app to homescreen.

🎯 Features

✔️ Live. :heavy_check_mark: Create pars automatically if the user is close to a supported course. :heavy_check_mark: Accountant can be switched in the middle of the game. :heavy_check_mark: Easy to use.

📝 Technical features

✔️ Demonstrates Go's concurrency features nicely. ✔️ Server can save and restore it's state. :heavy_check_mark: Each game in memory has it's own mutex instead of one global for all games. :heavy_check_mark: Automatic deployment with Github Actions. :heavy_check_mark: JSON structure is designed to be easily upgradable. :heavy_check_mark: Azure Pipelines & Docker. :heavy_check_mark: Good rendering time. :heavy_check_mark: Hosted on DigitalOcean behind nginx. :heavy_check_mark: nginx gzip & cache (may vary during development).

❓ How To Use It

Local development

Clone repo

git clone https://github.com/tuommii/scoreboard.git

Start server

cd scoreboard
make

Start dev-server in a new terminal window

cd frontend
npm i
npm run serve

Go to: http://localhost:8081

🏆 Deploy

Every time when code is pushed to production branch, new binary will be compiled and sended to server.

Docker

Build

docker build . -t scoreboard

Run

docker run -p 8000:8000 scoreboard -port="8000" -static="public"

Example json

{
  "id": "jt1",
  "basketCount": 1,
  "active": 1,
  "hasBooker": true,
  "baskets": {
    "1": {
      "orderNum": 1,
      "par": 3,
      "scores": {
        "Jian Yang": {
          "score": 3,
          "total": 0,
          "ob": 0
        },
        "Tiger King": {
          "score": 3,
          "total": 0,
          "ob": 0
        }
      }
    }
  },
  "createdAt": "2020-05-01T20:06:42.283050923+03:00",
  "editedAt": "2020-05-01T20:06:42.283052041+03:00",
  "name": "Default"
}

Things to consider

Contributions are more than welcome

  • Create MVP
  • Circular navigation
  • Split frontend to Vue-components
  • Create my most played courses automatically based on location
  • Light theme because of sunshine
  • Let user choose basket count
  • Make UI suitable for desktop also
  • Use forced style guide for .vue-files
  • Create courses automatically in Helsinki/Finland/World
  • Add a lot of tests
  • Frontend router
  • Github actions
  • More server-side validations
  • If project grows much, refactor to vuex
  • PWA (Offline support)
  • User specific friends
  • Fix typos
  • UI improvements
  • Show spinner when waiting response
  • More organized CSS
  • CSS Animations
  • Random or selected avatars
  • Secure cookie
  • Sound effects
  • Copy id to clipboard

Finishing game

  • Create some graph
  • For some users add possibility store game to database (validate time spent)
  • When stats is implemented add support for marking OB (out of bounds)

About

Concurrent score tracking app for disc golf and golf. Made with Go & Vue. Live demo available. Automatic deployment with Github Actions.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •