Skip to content

Technology Stack

Backend

Technology Version Purpose
Python 3.13 Runtime
Django 5.2 Web framework
Django REST Framework 3.x REST API
Celery 5.x Task queue
PostgreSQL 14 Primary database
Redis 4.x Cache & message broker
Elasticsearch 8.14 Search engine

Key Django Packages

  • django-celery-beat - Periodic task scheduling
  • django-elasticsearch-dsl - Elasticsearch integration
  • django-filter - API filtering
  • django-storages - Azure blob storage
  • drf-spectacular - OpenAPI documentation
  • social-auth-app-django - OAuth authentication

Frontend

Technology Version Purpose
React 19 UI framework
TypeScript 5.5 Type safety
Vite 7.x Build tool
MUI (Material-UI) 7.x Component library
React Query 5.x Data fetching
React Router 7.x Routing

Key Frontend Packages

  • @tanstack/react-query - Server state management
  • formik + yup - Form handling and validation
  • i18next - Internationalization
  • chart.js - Data visualization
  • @sentry/react - Error tracking

Build & Development Tools

Tool Purpose
uv Python package management
yarn JavaScript package management
tox Test automation
pre-commit Git hooks
ruff Python linting & formatting
Docker Containerization

Infrastructure

Service Purpose
Azure Blob Storage File storage
Sentry Error monitoring
Gunicorn WSGI server (production)

Project Structure

hope/
├── src/
│   ├── hope/                    # Django project
│   │   ├── config/              # Django settings (settings.py, env.py)
│   │   ├── models/              # All models (yes, ALL of them here)*
│   │   ├── admin/               # All admin classes (here too)*
│   │   ├── api/                 # REST API endpoints
│   │   ├── apps/                # Django apps (without models/admin)
│   │   │   ├── core/            # Core functionality, Celery
│   │   │   ├── web/             # Web app serving frontend
│   │   │   │   └── static/web/  # Frontend build output**
│   │   │   └── ...
│   │   └── ...
│   └── frontend/                # React application (Vite)
│       ├── src/                 # React source code
│       └── build/               # Local build output
├── tests/
│   ├── unit/                    # Unit tests
│   └── e2e/                     # End-to-end tests
├── docker/                      # Docker configuration
├── development_tools/           # Docker Compose for local dev
├── docs/                        # Documentation
├── manage.py                    # Django management script
├── pyproject.toml               # Python project configuration
├── tox.ini                      # Test configuration
└── uv.lock                      # Python dependency lock file

Architectural Curiosities

* Centralized models and admin: Unlike typical Django projects where each app has its own models.py and admin.py, HOPE keeps all models in src/hope/models/ and all admin classes in src/hope/admin/ as separate files per entity.

** Committed build artifacts: The frontend build output (src/hope/apps/web/static/web/) is committed to the repository. This is unconventional - most projects gitignore build artifacts. Here, it ensures Django can serve the frontend without requiring a Node.js build step in production. The manage.py runserver command automatically rebuilds and watches for changes during development.

Dependencies

Full list of Python dependencies is in pyproject.toml ⧉.

Frontend dependencies are in src/frontend/package.json ⧉.

Version Requirements

  • Python: ==3.13.*
  • Node.js: >=20.0.0