Skip to content

ejv2/gahoot

Repository files navigation

Gahoot! - A Distributed Version of Kahoot!

Gahoot! is a distributed and self-hostable rewrite of Kahoot! in Go. It is designed to be slightly more minimal and to implement the core features that everybody loves without the fluff and bloat. It is also designed to be easy to self-host on your machine, meaning that anybody can set up an instance for their school or class or just friends to play on. Instances are also designed to be very configurable for the host, so that features can be toggled on or off and the complexities of the game tweaked.

Important note: Although this is inspired by Kahoot!, it is not affiliated with them. This project uses absolutely no Kahoot! assets and is a complete rewrite from scratch. This is my own personal project - nothing official.

Design goals

  • To allow anybody to set up a lightweight instance and anybody to play on any instance they choose. You can spin up a server to play with friends on or for a presentation or for a class.
  • To provide a minimal, high-performance version of the game which can function on almost any device. This includes both the client and server. You should be able to spin up an instance on your laptop with your work team or in school; or host one persistently on your Raspberry Pi.
  • To encourage a distributed model of play, in which there are many different game servers on which many different hosts and players reside. There is no need for a central setup of Gahoot, although some servers may become more popular than others.

Design document

There is a design document that I wrote in "DESIGN". It is formatted in GROFF MS format, as I wrote this as part of a school project, but its apparently quite interesting to many. To view it, use the following pipeline:

groff -ms -Tpdf DESIGN | zathura -

Some parts might sound a bit academic (and some never made it into the final project on hand-in date), so if you get confused just skip over the section.

If the above doesn't work for you or if you are really having trouble compiling the design document, just email me (see committer email) and I'll be happy to email you a PDF or PostScript copy.

Building

Simply run make in the root. If you do not have tsc installed on your system, the Makefile will automatically run npm install for you to counteract your forgetfulness/laziness. You're welcome.

If you are actively developing the program, run make watch and the server will be reloaded when there is a change to any source code (that includes restarting the server). This requires the BSD utility entr, as well as a POSIX shell interpreter.

Note: You will need to be on a system which supports a POSIX shell in order to build, as the build process relies on running shell scripts. If on Windows, please consider using WSL (sorry!).

Contributions

Always welcome. Please stick to the style guides outlined in the .editorconfig file. If possible, use a plugin for your editor to respect this configuration. Basically:

  • ALWAYS use LF line endings - I cannot stand CRLF
  • Tabs size eight for Go, HTML, CSS or anything not mentioned
  • Spaces size four for TypeScript
  • Space size 2 for most JSON and all YML files

Credits

A big thanks is owed to the following who have unknowingly contributed royalty free resources to this project:

"Decisions" Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 4.0 License http://creativecommons.org/licenses/by/4.0/

"Nerves" Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 4.0 License http://creativecommons.org/licenses/by/4.0/

"Gong 91013" from Pixabay Licensed under the Pixabay Content License (https://pixabay.com/service/license-summary/) https://pixabay.com/sound-effects/gong-91013/


vim: ft=markdown wrap

About

A distributed, FOSS rewrite of Kahoot! in Go

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published