This is an online tool to manage the printing, mailing, and tracking of ballots to and from voters.
This tool does not provide any features handled by other offline apps such as:
- manage election ballot data
- create ballots
- track ballots received by jurisdiction
- provide signature verification
- scan/tally ballots
-
Admin authenticates into online app.
-
Admin is on the Elections screen where there is a button to Create Election.
-
Admin types name into text field and clicks button to Create Election.
-
Admin is back on the Elections screen which lists the election they just created and has a button to create a new election. Admin selects the election which they just created.
-
Admin is on the Election Screen which has three tabs:
- Election (default selected)
- Inserts
- Voters
-
Admin uploads Election Ballot Package.
-
Admin edits and proofs the Election Inserts.
-
Admin uploads a Voter Mailing List.
-
Election has now has everything necessary to send ballots to the voters. Admin clicks button to Send Batch Ballots.
-
Admin is prompted to name the batch. Name defaults to current date and time.
-
Admin clicks send. Upon sending first batch of ballots, they may no longer replace the Election Ballot Package, edit election name, or edit the Insert Templates.
-
Admin uploads additional Voter Mailing Lists.
-
Admin sends another batch.
- This upload and send batch process repeats until there are no more to send.
-
Admin has an interface to track progress of each ballot.
-
Tracking Data can be exported.
- Auth Screen
- Elections Screen
- Rows:
- name
- title
- date
- county
- state
- status
- Create New Election
- Rows:
- Create Election Screen
- Copy Election Data from select existing election (optional)
- Name
- Create Election button
- Election Screen
- Edit election name
- Upload/Replace Election Ballot Package
- Election Mail Ballot Stats
- List batches sent
- Send new batch
- Election Inserts Screen
- Features to edit and proof the Insert Templates. UI TBD.
- Election Voters Screen
- Upload Voter Mailing List
- Rows:
- voter id
- voter name
- voter address
- voter ballot style
- voter precinct
- upload file name
- ballot printed (timestamp)
- ballot sent to voter (timestamp)
- ballot delivered to voter (timestamp)
- ballot sent to jurisdiction (timestamp)
- ballot delivered to jurisdiction (timestamp)
- view ballot link (opens PDF)
- Filters: (list automatically updated to match filter)
- ballot style
- precinct
- upload file name
- ballot printed
- ballot not printed
- ballot sent to voter
- ballot not sent to voter
- ballot delivered to voter
- ballot not delivered to voter
- ballot sent to jurisdiction
- ballot not sent to jurisdiction
- ballot delivered to jurisdiction
- ballot not delivered to jurisdiction
- Text Search: (list automatically updated to match text query)
- name
- address
- Screen Summary:
- number of voters (matching [insert filter and/or search])
- Does this app offer a click to view the ballot for a specific voter?
- Yes, on demand.
- Authenticate with Auth0 (and/or do we send laptop with auth/keys)?
- TBD
- Is app single or multi-tenant?
- Default single jurisdiction to id=1 until multi-jurisdiction support.
- After first batch is sent what Election data can no longer be changed?
- Election Ballot Package.
- Election Name.
- Inserts Content.
- Voters who have been sent ballots.
- Should the upload of a Voter Mailing List do any de-duplicating of voters already uploaded?
- Should the admin be able to remove voters after then have uploaded a mailing list?
- When do all Voter Mail Ballot PDFs get created?
- How does a voter confirm that their ballot hasn't been modified from the approved template?
- Can election official view Voter Mail Ballot PDF after print and mail has been approved?
- Are Voter Mail Ballots created automatically after data is uploaded or on demand (for preview and pre-sending to mail house)?
Requires Linux or Docker.
-
Get your dev environment ready:
cp server/config/database.cfg.dev server/config/database.cfg make dev-environment
-
Run the Python backend and React front-end with auto-reload:
./run-dev.sh
or to show QA Codes
REACT_APP_SHOW_SAMPLE_QA_CONTENT=TRUE ./run-dev.sh
Whenever you want to reset the database:
make resetdb
On the host machine, setup a VM using Parallels:
- Download Ubuntu Desktop
.iso
image file: ubuntu-18.04.4-desktop-amd64.iso - Install Parallels.
brew cask install parallels
- Create Parallels VM using the Ubuntu iso image file.
On the VM:
- Install NVM (curl is an install dependency):
Close terminal and reopen.
sudo apt install curl curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
nvm install 12
- Install
git
. git clone
this project on the VM.- Follow steps above for "Running in Development".
- Setup Github access to allow pushing to repos.
- Install gpg to sign commits.
-
- Setup VS Code to use "Remote - SSH" extension to be able to edit files and access the terminal from within VS Code… and forward ports such that you can use a browser on the host as well.
- Setup dotfiles to your preference.
Set up ssh host shortcut such that you can type ssh vx
to connect to VM:
- Open Settings in the VM (click the caret in the top right to reveal menu to click button to open "Settings").
- Open Network in sidebar.
- Click the gear next to the "Connected" in the "Wired" section.
- Copy the IP address. Eg.
10.211.55.3
. - On the host machine, create/open the file
~/.ssh/config
and add:Host vx HostName 10.211.55.3
- Confirm this works by typing
ssh vx
to ssh into the VM. If your username is different on the VM than the host, addUser USER
to the ssh config forvx
in~/.ssh/config
. - Copy ssh public key fron the host machine
~/.ssh/id_rsa.pub
to the VM~/.ssh/authorized_keys
for connecting without entering a password.cat ~/.ssh/id_rsa.pub | ssh vx 'cat >> ~/.ssh/authorized_keys'
Increase the amount of watchers:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
You may need to update your PATH
to include ~/.local/bin/
:
export PATH="${HOME}/.local/bin:${PATH}"
Instead of sudo npm install -g yarn
, try this:
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install yarn