Web app Getting Started Tech Stack Language: Python 3.14 (Managed via Nix) Framework: Django Package Manager: uv (Fastest Python resolver/installer) Environment: Nix (with the std library) Command Runner: just (alternative to make ) Setting Up the Environment FIXME: this is wrong You do not need to install Python or Django manually. You only need Nix . Step 1: Install Nix If you don't have it, install Nix and enable “experimental features” (Flakes and Nix Command). Consider doing the latter like that: 1) sudo mkdir /root/.config/nix 2) sudoedit /root/.config/nix/nix.conf 3) In there, add this line experimental-features = nix-command flakes Step 2: Enter the Development Shell Navigate to the project root and run: nix develop What happens when you run this? Nix reads shells.nix and packages.nix to: Download and provide Python 3.14 . Install system tools like curl , git , uv , and just . Set up your PATH to include the project’s virtual environment ( .venv/bin ). Activate a custom shell prompt (the “embed console”). Step 3: The “Just” Command Runner Once inside the Nix shell, we use a tool called just to run common tasks. Command Action just Lists all available commands. just init-db Run this first. It migrates the DB and asks you to create a Superuser. just dev Starts the Django development server. just make-migrations Generates new DB migration files after model changes. just fmt Automatically formats all code using treefmt . just test Runs the Django test suite. Step 4: Running the dev server Consider using these commands after all previous steps: nix init-db creates and initializes the DB, prompting for superuser credentials. nix dev starts a local dev server. Congratulations! You are ready to develop. Structure of the project Architecture & Frontend Patterns (Midas) The RFID Tracker (codename Midas ) follows a traditional Django structure but uses a “Single File Component” philosophy for its views. Project Organization The project is split into the core configuration and the functional app logic. Directory / File Role midas/ The active module containing the latest logic, models, and views. webui/ Legacy code kept for bookkeeping; do not use for new features. templates/midas/ The “Face” of the app. Contains HTML layouts, CSS, and JS. models.py Database schema (RFID tags, teams, hours). views.py The “Controller.” Fetches data from DB and performs calculations. urls.py Maps URLs to specific Python functions in views.py . The Frontend Pattern Layout Strategy Every page follows this block-based hierarchy: {% extends 'midas/base.html' %} : Inherits the sidebar, navbar, and global styles. {% block head %} : Contains page-specific CSS and external libraries (like Chart.js). {% block main %} : The actual HTML content (cards, forms, tables).