Skip to main content

Bad Decisions

An absurdly overengineered open-source party game engine.

CI Bad Decisions on PyPI Regret on PyPI MIT licensed

Bad Decisions serves fill-in-the-blank party games through a REST API, browser client, and terminal client. Its terminal client is called Regret.

$ regret deal --packs coffee
I started by talking about workplace accommodations. Somehow the channel is now discussing one hell of a robustly deployed pastebin.

Regret terminal demo

brew install bytesandcoffee/tap/regret
regret deal

Prefer pipx? pipx install bad-decisions-client gets you the same dependency-free client on Linux, macOS, or Windows. Regret uses the free BytesAndCoffee-hosted service by default; no account is required.

Play in the browser · Explore the API · Get started in 60 seconds

Why this exists

Bad Decisions is production-grade infrastructure for profoundly unserious purposes. The protocol is open, packs are portable and provenance-aware, the service is self-hostable, multiplayer needs no permanent accounts, and the overengineering is part of the joke.

What has gone wrong so far

  • regret deal — get a terrible idea from any compatible service in one command.
  • Peer Pressure — ephemeral, authenticated multiplayer with a rotating Responsible Adult.
  • Browser client — choose packs, deal rounds, and opt into feedback without installing anything.
  • OpenAPI — a versioned contract for building clients that should never have existed.
  • CardDeck — portable, validated .carddeck archives with licensing and provenance inside.
  • Remote catalog — discover and safely import public packs without making the runtime mutable.
  • Provenance — card content keeps its own attribution, source, and license boundaries.
  • Consequences — opt-in feedback and owner analytics backed by SQLite.
  • Self-hosting — systemd/nginx deployment with immutable releases and health-checked rollback.
  • Rootless updates — deploy and roll back application releases without recurring sudo.
  • AWS-native mode — a complete managed-cloud alternative optimized for low cost.

Sixty-second quick start

brew install bytesandcoffee/tap/regret
regret health
regret deal

Cross-platform alternative:

pipx install bad-decisions-client
regret health
regret deal

Both pipx packages install manual pages; regret doctor diagnoses PATH, manual-page, preference, and service issues without changing anything.

Invite friends into an ephemeral Peer Pressure room:

regret together ohno --name Michael

The default endpoint is https://bytes.coffee/bad-decisions. Override it with --api-url; local preferences live in protected files under your home directory. See Getting Started for the complete short path and privacy controls.

Build something stupid with it

The OpenAPI contract is intended to be enough to build another client. Please make an ESP32 button, e-ink daily draw, IRC bot, Discord bot, smartwatch app, desktop widget, or a frontend with even more regrettable typography.

curl -s https://bytes.coffee/bad-decisions/v2/round \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["result"])'
import json
from urllib.request import urlopen

with urlopen("https://bytes.coffee/bad-decisions/v2/round") as response:
    print(json.load(response)["result"])

Start with the live OpenAPI UI and the version-2 API notes. If you build something, the maintainer would very much like to see what happened.

Make your own pack

The minimal-pack example goes from editable JSON to a validated .carddeck in about five minutes:

cp -R examples/minimal-pack /tmp/my-questionable-pack
cd /tmp/my-questionable-pack
./build.sh
bad-decisions pack validate dist/example-pack.carddeck

CardDeck archives contain exact license and attribution documents alongside the cards. Read the CardDeck specification before sharing a pack, and only distribute content you have the right to distribute.

Run the engine

pipx install bad-decisions
bad-decisions --oneshot
bad-decisions serve --host 127.0.0.1 --port 8000

The API exposes /healthz, /v2/packs, /v2/round, Peer Pressure, and optional Consequences feedback. Packs are loaded at startup; the HTTP API cannot import, upload, or edit them. An omitted pack selector means every loaded pack.

For a production install, start with Easy Deploy. The full deployment reference covers systemd/nginx, rootless activation, AWS-native mode, object storage, configuration, and rollback.

Licensing is deliberately less funny

Bad Decisions software is licensed under the MIT License. Card packs are separate works: each pack's own license, attribution, provenance, and modification metadata governs that content. The software's MIT license grants no additional rights to third-party cards, and BytesAndCoffee cannot grant rights it does not own.

The official BytesAndCoffee distribution and hosted service are currently free of charge, with no paid API access, sale of access, or advertising. That is a description of the official service, not a restriction on downstream use of the MIT-licensed software.

In other words: use the engine however MIT permits, but check the license on the cards you put into it. If your Bad Decisions have Consequences, that is between you and the stew.

Go deeper

If this terrible decision amused you, consider starring the repository.

This is an unofficial, unaffiliated fan project. No endorsement by any third-party game publisher is claimed or implied.

Metadata

Release files for bad-decisions 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bad-decisions 2.1.0
File Size Uploaded
bad_decisions-2.1.0.tar.gz 387.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bad-decisions 2.1.0
File Interpreter ABI Platform
bad_decisions-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 509.7 kB

Release files / bad_decisions-2.1.0.tar.gz

Download URL bad_decisions-2.1.0.tar.gz
Size 387.5 kB
Tags Source
SHA-256 checksum
How to use checksums
79bdd78f3029378bd75182a8ade4ce67a17e92efda0dca2d250751ac20bde968
BLAKE2b-256 checksum
How to use checksums
48383bcf1b4b5b10758a7ad78b5ff8223bccabd69b1077450cbac5bcb15b3f7a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / bad_decisions-2.1.0-py3-none-any.whl

Download URL bad_decisions-2.1.0-py3-none-any.whl
Size 122.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f8e9509b92f41cff4fbef01ac01a6b7663715ed22c3ddadccbaee217d6a37360
BLAKE2b-256 checksum
How to use checksums
162bce1953268f28e91a7fc3ba355f25b95483f08c80d91218146262e4346204
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release history Release notifications | RSS feed

2.3.0

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.6

2 release files

2.1.5

2 release files

2.1.4

2 release files

2.1.3

2 release files

2.1.2

2 release files

2.1.1

2 release files

This release

2.1.0 This release

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.8.5

2 release files

1.8.4

2 release files

1.8.3

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.18

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page