This project is a continuation of the original version of DistrictBuilder, now called DistrictBuilder Classic, which is no longer being maintained. This repository is where active development of DistrictBuilder will continue to occur.
Note: This repository is in the early stages, and is not yet ready for public use. Please don't attempt to set it up yet, since there are several things that need to be ironed out before it can be used by a wider audience. Please contact email@example.com to sign up for early access and to learn more.
DistrictBuilder is web-based, open source software for collaborative redistricting.
- Command Line Interface
Ensure that you have an AWS credential profile for
district-builder configured on your host system.
The server backend will need this in order to access S3 assets.
scripts/setup to prepare the development environment:
scripts/server to start the application:
Note: It is recommended to configure your editor to auto-format your code via Prettier on save.
Remote Server Proxy
If you want to develop the
client locally against a
server running in the AWS staging environment, you can configure a local proxy using the
BASE_URL environment variable:
BASE_URL=https://staging.districtbuilder.azavea.com docker-compose up client
This will proxy local all requests directed at
In order to allow for code-sharing across the frontend and backend in conjunction with an unejected Create React App (CRA), it was decided that the simplest and least error-prone way forward was to structure the code as such:
. ├── package.json (Applies to the CRA frontend) ├── src │ ├── client (Location for all CRA frontend code) │ ├── index.tsx (This and another file need to be here for CRA-purposes) │ ├── manage (Command-line interface) │ │ ├── package.json (Applies to the command-line interface) │ ├── server (NestJS backend code) │ │ ├── package.json (Applies to the NestJS backend) │ └── shared (Code that is used by both the frontend and backend)
- TypeScript for type safety
- React as a declarative view layer
- Redux for state management
- redux-loop for effect management (eg. API calls)
- ts.data.json for JSON decoding
- PostgreSQL for a relational database
- NestJS for the backend web server
- TypeORM for database queries and migrations
- TopoJSON for fast, topologically-aware geospatial operations
|3003||Create React App|
||Build application for staging or a release.|
||Publish container images to Elastic Container Registry.|
||Enter a database shell.|
||Execute Terraform subcommands with remote state management.|
||Execute commands with the
||Execute TypeORM migration CLI commands.|
||Bring up all of the services required for the project to function.|
||Setup the project's development environment.|
||Run linters and tests.|
||Build container images, update dependencies, and run database migrations.|
||Execute Yarn CLI commands.|
Command Line Interface
A command line interface is available for performing data processing operations.
src/manage/README.md for more info.