This document outlines how to set up your local development environment and our process for submitting changes.
- Install Docker: Download and install Docker Desktop. Run
docker versionin your terminal to verify it is running. - Clone the Repository:
git clone https://github.com/jonfroehlich/makeabilitylabwebsite.git cd makeabilitylabwebsite - Build the Image:
Note: This may take 2-3 minutes.
docker build . -t makelab_image - Run the Container:
To run in detached mode (background), add the
docker-compose -f docker-compose-local-dev.yml up
-dflag:docker-compose -f docker-compose-local-dev.yml up -d. - Don't forget to create a local superuser to create content (see below).
If you dev on Windows, you should use WSL2 for better performance and Linux kernel compatibility.
-
Install WSL2
- Follow the WSL2 installation guide
-
Install Docker:
- Install Docker Desktop for Windows.
- Enable "Use the WSL 2 based engine" in Docker Settings > General.
- Under Resources > WSL Integration, enable integration for your Linux distro (e.g., Ubuntu).
-
Clone the Repository (Inside WSL): Open your Linux shell and run:
git clone https://github.com/makeabilitylab/makeabilitylabwebsite.git cd makeabilitylabwebsite -
Set Permissions: Run the following to ensure Docker can execute scripts and write to folders:
chmod 755 docker-entrypoint.sh chmod 777 media mkdir -p static && chmod -R 777 static/ mkdir -p website/migrations && chmod -R 777 website/
-
Build and Run:
docker build . -t makelab_image docker-compose -f docker-compose-local-dev.yml up -
(Optional) Map WSL filesystem to Windows
Press
Win + R, type\\wsl$, find your Linux distro folder, right-click → Map Network Drive. This lets you browse Linux files from Windows Explorer. -
Don't forget to create a local superuser to create content (see below).
After initial setup, start the development server with:
docker-compose -f docker-compose-local-dev.yml upOr use the convenience script:
./run-docker-local-dev.shThe site will be available at http://localhost:8571.
Note: You don't need to rebuild the image unless you modify
Dockerfileordocker-compose.yml. Code changes are reflected automatically.
To stop the containers:
docker-compose downImportant: Without this command, containers persist in the background even after closing your terminal, keeping port 8571 occupied.
A superuser account is required to access the Django admin interface and add content.
-
With containers running, open a new terminal
-
Access the website container:
docker exec -it makeabilitylabwebsite_website_1 bashNote: Depending on your Docker/Compose version, the container name may use a hyphen instead of underscore:
makeabilitylabwebsite-website-1 -
Create the superuser:
python manage.py createsuperuser
-
Follow the prompts to set username, email, and password
-
Exit the container:
exit
-
Navigate to the Django admin interface: http://localhost:8571/admin
-
Log in with your superuser credentials
-
Under the WEBSITE header, select the content type you want to add (Publications, People, Projects, etc.)
-
Click ADD in the upper right corner
-
Fill in the required fields and save
Tip: Only add content needed for the issue you're working on—this saves time during development.
-
Find or create an issue
Browse existing issues or create a new one. Assign yourself to the issue you'll work on.
-
Create a feature branch
Branch names should be descriptive and reference the issue:
git checkout -b 335-adding-hover-to-landing-page # for issue #335Each branch should address a single issue.
-
Make your changes
Write code, test locally, and commit with clear messages.
-
Submit a pull request
Push your branch and open a PR against
master. PRs undergo code review and local testing before merging.
-
UI changes require mockups: Include before/after screenshots or design mockups so we can collectively agree on the visual direction. See issue #287 for a good example.
-
One issue per branch: Keep PRs focused on a single issue for easier review.
-
Test locally: Verify your changes work before submitting.
-
Clear descriptions: Explain what changed and why in your PR description.
See our Troubleshooting Wiki for common issues and solutions.