This project is a website for the Humanitarian OpenStreetMap Team. It's built using the Wagtail CMS, a powerful and flexible Django content management system.
The codebase is structured as a standard Django project with a settings
directory containing different settings files for different environments: base.py
for common settings, dev.py
for development settings, and production.py
for production settings. Several Django apps are included for different parts of the website, with the main app being the home
app, which contains the models, views, and templates for the homepage and other top-level pages.
The project uses Docker for development and production environments, with separate Docker Compose files for each.
This project's frontend leverages TailwindCSS and Alpine.js. The design of the components is inspired by TailwindUI.
TailwindCSS is a utility-first CSS framework that we've used for styling our application. It allows for rapid UI development with its low-level utility classes.
Alpine.js, on the other hand, is a minimal JavaScript framework used for managing component behavior. It operates entirely on the client-side, in the browser. This means that Alpine.js interacts with the HTML after Django has completed its server-side rendering.
Together, TailwindCSS and Alpine.js provide a powerful and efficient combination for building interactive user interfaces.
To set up environment variables for your local development environment, you'll need to create a `.env' file in the root directory of the project. This file will store your environment variables.
You can refer to the .env.example
file in the root directory of the project as an example of what your .env
file should look like. Simply copy the contents of .env.example
into your .env.dev
file and replace the placeholder values with your actual values.
Remember to keep your .env
file secure and do not commit it to your version control system. It's already included in the .gitignore
file to prevent accidental commits.
This project uses Poetry for dependency management. Poetry is a Python tool that helps to handle dependency installation, building packages, and versioning. It simplifies package management and deployment by adding a layer of abstraction over the standard setup tools.
Dependencies are specified in the pyproject.toml
, and the exact versions of the dependencies are locked in the poetry.lock
. To install the dependencies, run poetry install
. To add a new dependency, run poetry add {dependency}
.
Note that you don't need to run poetry install
, as Docker handles this when building.
Ensure you have the superuser credentials you want in your .env.dev file prior to running make build
.
The Makefile provides several commands for building and running the project:
make build
: Builds and starts the Docker images for the development environment.make up
: Starts the Docker containers for the development environment.make down
: Stops the Docker containers for the development environment.make build-prod
: Builds the Docker images for the production environment.make up-prod
: Starts the Docker containers for the production environment.make down-prod
: Stops the Docker containers for the production environment.make test
: Runs the tests.make refresh-db
: Deletes all Docker volumes (use with caution).
When you attempt to use a class that isn't currently used anywhere in the project, the live reload will not rebuild the CSS, and thus, these classes won't work until you rebuild the CSS:
- Open Docker Desktop
- In the Containers tab, click on the
web-1
container (within thewebsite
container) - Move to the
Exec
tab within this container - Move into the
frontend
folder withcd frontend
- Run
npm run build
to rebuild the CSS
You'll need to do this every time you use a currently unused class.
Wagtail migrations should be handled within the Docker container. The process for doing this is largely the same as building Tailwind:
- Open Docker Desktop
- In the Containers tab, click on the
web-1
container (within thewebsite
container) - Move to the
Exec
tab within this container - Run
python manage.py makemigrations
and thenpython manage.py migrate
(if successful)