Skip to content
A full rewrite of Prosu in Go
Go HTML Dockerfile
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
assets Add flag and mode assets Aug 13, 2018
static Fix sessions and add favicon Jul 8, 2018
templates Don't post tweets during maintenance and add new msg to maint page Sep 13, 2018
translations Update deps and add home and settings buttons to authed navbar Aug 6, 2018
.gitignore Remove vendor folder, add basic db stuff and rearrange other stuff Jul 12, 2018
CHECKS Add basic checks file Jul 18, 2018
Dockerfile Use new alpine image Aug 30, 2018
Gopkg.lock Apparently nothing is working. Log the error Feb 23, 2019
Gopkg.toml Change from sentry to rollbar Sep 12, 2018
LICENSE Add LICENSE since the repo is public now Jul 25, 2018
Procfile Name change ahead of repository name change Aug 29, 2018 Update README Sep 18, 2018
app.json We don't need predeploy anymore Aug 28, 2018
bongoQueryCount.go Update user counting Sep 10, 2018
dbOsuPlayer.go Change UserID to be a string Jul 31, 2018
dbOsuRequest.go Fix broken struct tag Aug 15, 2018
dbProsuUser.go Change another unix date to be an int64 Aug 7, 2018
filesAndFavicons.go Fix favicon path Jul 14, 2018
generateImages.go Move the error detection to the right section Mar 31, 2019
main.go Don't allow the public to see Oct 11, 2018
newRelic.go Add maintenance page Aug 20, 2018
osuTasks.go Add rate limiter to the object instead of having a global one Aug 6, 2018
route404.go Don't use http.Status*, use actually codes to avoid confusion Jul 25, 2018
routeError.go Change from sentry to rollbar Sep 12, 2018
routeHome.go Update user counting Sep 10, 2018
routePrivacy.go Add privacy page Sep 10, 2018
routeSettings.go Check for error first Sep 11, 2018
routeTwitter.go Don't use http.Status*, use actually codes to avoid confusion Jul 25, 2018
sessionStore.go Remove vendor folder, add basic db stuff and rearrange other stuff Jul 12, 2018
setInterval.go Port setInterval to Go Jul 17, 2018
setTimeout.go Port setTimeout Jul 17, 2018

Prosu for Twitter

The full rewrite of Prosu
This is live at

I learned Go during the summer, and was inspired to rewrite Prosu as my summer project.
The end result is a website that runs faster with only half the RAM usage. (~125MB avg -> ~50MB avg)


To run Prosu, you will need two different types of databases:

  • MongoDB (for persistent user data)
  • Redis (for temporary user sessions)

Additionally, you will need a variety of environment variables:

Environment Variable Description Required
OSU_API_KEY API key from osu! Yes
ENVIRONMENT The environment to run the application in (eg. "production") No (default: development)
DOMAIN The domain the website will be accessed on Yes
CONSUMER_SECRET Twitter Consumer Secret Token Yes
CONSUMER_KEY Twitter Consumer Public Token Yes
REDIS_HOST Host and port for redis server (eg localhost:6379) Yes
REDIS_PASSWORD Password for redis login Yes
SESSION_SECRET Secret key to encrypt cookies Yes
NEWRELIC_KEY NewRelic License key to send info to NewRelic Yes if environment is "production"
ROLLBAR_TOKEN Rollbar API token to send errors to Rollbar Yes if environment is "production"
MONGO_URL MongoDB connection URI Yes
PORT Port to listen on No (default: 5000)


The project's dependencies were vendored with dep. If you have dep installed you can run:

dep ensure

to install the project's dependencies

Running Prosu for Twitter

You can run Prosu for Twitter anywhere, however it was intended to be run on Heroku or Dokku, and includes a Dockerfile that works with both.

You can’t perform that action at this time.