Coderr is the backend for a freelance service marketplace. Business users publish offers (service packages with basic, standard, and premium tiers), customer users place orders based on those offers and leave reviews, and the platform exposes aggregated statistics for its landing page.
It is a Django REST Framework API with token authentication, built to be consumed by the Coderr frontend.
Create and activate a virtual environment:
python -m venv .venvWindows PowerShell:
.venv\Scripts\Activate.ps1macOS/Linux:
source .venv/bin/activateInstall dependencies:
pip install -r requirements.txtApply database migrations:
.venv\Scripts\python.exe manage.py migrateCreate an admin user (optional, e.g. for the Django admin or order deletion):
.venv\Scripts\python.exe manage.py createsuperuserRun the development server:
.venv\Scripts\python.exe manage.py runserverThe local API is available at http://127.0.0.1:8000/, and the Django admin at
http://127.0.0.1:8000/admin/.
A running instance (frontend + API) is available at
https://coderr.friggemann.eu. The API is served under the /backend/ path
(e.g. https://coderr.friggemann.eu/backend/api/base-info/).
- Authentication — registration and login returning an auth token; users
register as either a
customeror abusinessaccount. - Profiles — retrieve and update user profiles; list business and customer profiles.
- Offers — business users create offers with three detail tiers (basic/standard/premium); public, paginated listing with filtering, search, and ordering.
- Orders — customers create orders from an offer detail; business users update order status; order counters per business user.
- Reviews — customers review business users (one review per business), editable and deletable by their author.
- Base info — aggregated platform statistics (review count, average rating, business profile count, offer count).
The full endpoint reference lives in docs/endpoints.md.
- Python 3.12 or newer
- Django and Django REST Framework
- DRF token authentication
- SQLite for local development
- Ruff (lint and format) and pytest (tests and coverage)
Coderr distinguishes two account types, chosen at registration via the type
field:
- customer — can place orders and write reviews.
- business — can publish offers and update order statuses.
Authenticated requests send the token returned by registration or login in the
Authorization header:
Authorization: Token <your-token>
Deleting an order is restricted to staff users. A token for an existing staff user can be created with:
.venv\Scripts\python.exe manage.py drf_create_token <username>core/— Django project configurationauth_app/— registration and loginprofiles_app/— user profilesoffers_app/— offers and offer detailsorders_app/— orders and order countersreviews_app/— reviews and ratingsbase_info_app/— aggregated platform statistics (base-info endpoint)docs/— endpoint reference and delivery checklist
Run Django's built-in checks:
.venv\Scripts\python.exe manage.py checkRun the linter and formatting check:
.venv\Scripts\python.exe -m ruff check .
.venv\Scripts\python.exe -m ruff format . --checkRun the tests with coverage:
.venv\Scripts\python.exe -m pytestThe coverage threshold is configured at 95% in pyproject.toml.
The project requirements and definition of done are documented in docs/checkliste.md. Key requirements:
- All endpoints match the provided documentation.
- The project reaches at least 95% coverage in the project management tests.
- Code is PEP8-compliant; functions and methods keep a single responsibility.
- The backend stays in its own repository without frontend code.
- The database file is never committed.
The local database file db.sqlite3 is ignored by Git and must not be uploaded.
The following are not committed:
.env.venv/andvenv/db.sqlite3media/andstaticfiles/- IDE and local settings files