{"id":19933871,"url":"https://github.com/henriwahl/doko3000","last_synced_at":"2025-05-03T12:30:24.329Z","repository":{"id":37442420,"uuid":"253341707","full_name":"HenriWahl/doko3000","owner":"HenriWahl","description":"Simple open world Doppelkopf deck simulation for playing online with your friends via browser.","archived":false,"fork":false,"pushed_at":"2023-01-16T08:14:44.000Z","size":22051,"stargazers_count":14,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-07T15:51:46.759Z","etag":null,"topics":["cards","couchdb","doppelkopf","flask","game","german","javascript","jquery","multiplayer","players","python","server","simulator","tabletop","web"],"latest_commit_sha":null,"homepage":"https://github.com/HenriWahl/doko3000","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HenriWahl.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}},"created_at":"2020-04-05T22:08:53.000Z","updated_at":"2024-11-09T14:10:29.000Z","dependencies_parsed_at":"2023-01-19T12:18:34.088Z","dependency_job_id":null,"html_url":"https://github.com/HenriWahl/doko3000","commit_stats":null,"previous_names":[],"tags_count":67,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HenriWahl%2Fdoko3000","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HenriWahl%2Fdoko3000/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HenriWahl%2Fdoko3000/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HenriWahl%2Fdoko3000/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HenriWahl","download_url":"https://codeload.github.com/HenriWahl/doko3000/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252190419,"owners_count":21708878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cards","couchdb","doppelkopf","flask","game","german","javascript","jquery","multiplayer","players","python","server","simulator","tabletop","web"],"created_at":"2024-11-12T23:15:12.467Z","updated_at":"2025-05-03T12:30:22.502Z","avatar_url":"https://github.com/HenriWahl.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# doko3000\n\nSimple open world multiplayer Doppelkopf card deck simulation web service.\n\n## Overview\n\nThe 2020 coronavirus pandemic spring lockdown forced us to move our Doppelkopf gatherings from real world to online.\nDoko3000 helps to keep the ongoing league competition going.\n\nIt just provides a **virtual table** with **virtual cards**. Players play like in the real world, preferably talking to each\nother via video conference in a parallel window.\nTo preserve as much normality during the pandemic as possible, doko3000 is intended to be **as digital as necessary, as analog as possible**.\nThis is why **no rules** are included, because there are so many and players should apply them like sitting at a real table.\nThis means **absolute freedom** to play with **all custom rules** players are used to play.\n\nFor the same reason there are **no global scoreboards** or statistics - it will even feel more familiar if somebody of the group\nnotes the score as before.\n\nDoko3000 runs on a **web server** and is accessed by the players via **web browser**.\n\nIngame language at the moment is only german due to Doppelkopf being a mostly german phenomenon. Might change in the future.\n\n## Demo\n\nHave a look at it at work at https://doko3000-demo.dhcpy6d.de. Four accounts are available with their respective passwords:\n\n- **demo1:** demo1\n- **demo2:** demo2\n- **demo3:** demo3\n- **demo4:** demo4\n\n## Gameplay\n\nMost likely every game starts with **sorting cards**:\n\n![doko3000 sorting cards](doc/doko3000-sorting_cards.gif)\n\nAfter all players had their turns it's time to **claim** the **trick**:\n\n![doko3000 playing cards](doc/doko3000-playing_cards.gif)\n\nThe last trick **finishes** the current round and makes the **score** appear:\n\n![doko3000 finished](doc/doko3000-finished.gif)\n\n\n## Management\n\nThe `admin` user has the right to **create new players**, which themselves can be **administrators too**.\n\nEvery player is able to **create new tables** via the nice **green** `Neu` **button**.\n\nPlayers can enter a table by clicking the **green** `Beitreten` **button** in the table's row:\n\n![doko3000 create table](doc/doko3000-create_table.gif)\n\nIf **at least 4 players** entered a table a round may begin. Configure it via the `Einstellungen` in the **hamburger \nmenu** at the upper left. The **order** of the players may be changed by **drag \u0026 drop**. As always the first\nplayer is dealing and the second will be the first to play. Run it via `Neu starten` **button**:\n\n![doko3000 start](doc/doko3000-start.gif)\n\n\n## Installation\n\nDoko3000 is a [Python](https://python.org) web application mostly based on:\n\n - [Flask](https://flask.palletsprojects.com)\n - [Flask-SocketIO](https://flask-socketio.readthedocs.io)\n - [CouchDB](https://couchdb.apache.org/)\n - [SVG-Cards](http://svg-cards.sourceforge.net/)\n - [Dragula](https://bevacqua.github.io/dragula/)\n - [Bootstrap](https://getbootstrap.com)\n - [jQuery](https://jquery.com)\n - [Open Iconic](https://useiconic.com/open)\n \nAs **server** anything capable of running Python might work, but best experiences were made with **containers** on Linux.\n \nAs **client** any current browser will do, as long as it can make use of **WebSocket**, which is\nnecessary for the game communication.\n \n### Getting doko3000\n \nThe game is available from Github:\n \n    git clone https://github.com/HenriWahl/doko3000.git\n\nAll further steps are based on the `doko3000` directory:\n \n    cd doko3000\n     \n### Environment file .env\n \nInside the environment file some variables could be set:\n \n- **HOST** - name of the server host to be used at least as *cors_allowed_origins* in flask\n- **COUCHDB_URL** - URL of CouchDB server\n- **COUCHDB_DATABASE** - name of database on server\n- **COUCHDB_USER** - CouchDB user used by containers doko3000 and couchdb\n- **COUCHDB_PASSWORD** - CouchDB password used by containers doko3000 and couchdb\n- **SECRET_KEY** - secret key for flask sessions\n- **DEBUG** - enable Flask-Socketio debugging\n\nThe example file [/docker/default.env](./docker/default.env) can be copied to `.env` wherever\n**docker-compose** is intended to be run:\n \n    cp docker/default.env .env\n \nThe default settings should already work - only **COUCHDB_USER** and **COUCHDB_PASSWORD** have to be set at least once\nto initialize the CouchDB database in the `doko3000-couchdb` container.\n\n###  Running the server with docker-compose.yml\n  \nIn `./docker` there are some example **docker-compose** configuration files. Just run one of them from the root \ndirectory you're in.\n\nAs one can see there a **CouchDB server** is required.\n\nThe simplest way is running it only accessible via HTTP on port 80:\n  \n    docker-compose -f docker/docker-compose.yml up -d\n  \nIf you plan to use HTTPS better use the *docker-compose-https.yml* file. Copy the **certificate** and **key** files\nrespectively as *cert.pem* and *key.pem* into [/docker](./docker) and run:\n  \n    docker-compose -f docker/docker-compose-https.yml up -d\n    \nThe file *docker-compose-traefik-letsencrypt.yml* can be used for Let's Encrypt setups.\nThis docker-compose configuration surely has to be customized.\n\nIf you **need help** to get it running do not hesitate to contact me.\n\n### Running prebuilt image from Dockerhub\n\nInstead of build the Docker image locally it is also possible to use it from Dockerhub:\n\n    docker pull henriwahl/doko3000\n\n### Et voilà!\n\nIf you run it on your local machine, point your favorite browser to http://localhost and you will find the login page:\n \n![doko3000 login admin](doc/doko3000-login_admin.gif)\n \nThe **default user** is `admin` with the password `admin` and admin rights. It can create other players and should\nget a new password soon.\n\n### Custom cards\n\nIf you want to use another card design you can just replace the cards in `/doko3000/static/img/cards`. If containers are used \nthis directory might just be mounted as volume.\n\n**Good luck** and don't hesitate to give some feedback at https://github.com/HenriWahl/doko3000/issues.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenriwahl%2Fdoko3000","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhenriwahl%2Fdoko3000","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenriwahl%2Fdoko3000/lists"}