Development¶
This page covers working on Yamtrack from source.
Prerequisites¶
- uv
- tailwindcss CLI (install with
npm install -g tailwindcss @tailwindcss/cli) - Docker
- Redis
- GNU gettext (
sudo apt install gettexton Debian/Ubuntu,brew install gettexton macOS,winget install mlocati.GetTexton Windows, which installs the gettext-iconv-windows binaries recommended by Django)
General setup¶
Clone the repository¶
Start Redis¶
If you do not already have Redis running locally, start it with Docker:
Install dependencies¶
uv manages the Python environment and dependencies:
Installing the development dependencies includes pre-commit. After uv run pre-commit install, the hooks run automatically before each commit. You can also run the full hook set manually:
Configure environment values¶
Create a .env file in the repository root:
TMDB_API=API_KEY
MAL_API=API_KEY
IGDB_ID=IGDB_ID
IGDB_SECRET=IGDB_SECRET
STEAM_API_KEY=STEAM_API_SECRET
BGG_API_TOKEN=BGG_API_TOKEN
SECRET=SECRET
DEBUG=True
See Environment Variables for the full list of supported settings.
Prepare the database¶
Compile translations¶
The compiled translation catalogs (.mo files) are not committed, so build them from the .po files:
Run it again after pulling changes to the translations or editing them yourself. See Localization for the translation workflow.
Run the app¶
The repository ships a Procfile that defines the web server, the Celery
worker, and the Tailwind watcher. Run all three at once with
honcho:
The -e /dev/null flag stops honcho from loading the .env file into the
process environment; Yamtrack reads .env itself, so honcho should leave it
alone.
Alternatively, run each process in its own terminal.
Run the Django development server:
Run the Celery worker with the scheduler in another terminal:
Run Tailwind in another terminal:
Open the development server at:
Localization (i18n)¶
See Localization.
Documentation¶
Install the docs dependency group, then serve the docs from the current checkout:
Testing¶
Install Playwright browsers before running integration tests:
Some tests check the translated text, so compile the translations first (see Compile translations). Without them, those tests fail because the "translated" text is still English, with messages such as 'No media was imported.' == 'No media was imported.'.
Run the Django test suite from the src directory:
To run tests for a specific app or test module, pass the test label after test: