PermitPal is a Go/HTMX dashboard for tracking NC learner permit exam readiness.
Tagline: Your permit pal—less yelling, more tracking.
make devOpen http://localhost:4600 and sign in with your configured local password.
Set PERMITPAL_PASSWORD or PERMITPAL_PASSWORD_HASH and SESSION_SECRET in
your untracked local.mk first. See local.mk.example for the expected keys.
The default development mode uses DATA_STORE=memory, so dashboard changes persist only while the process is running.
make migrate
make run-postgresSet DATABASE_URL in local.mk or the environment before running Postgres-backed targets.
PermitPal uses Postgres in production. Create a dedicated database and role before deploying:
create user permitpal with password '<strong-password>';
create database permitpal owner permitpal;
grant all privileges on database permitpal to permitpal;Apply the schema once from a machine with goose and network access to the database:
make migrateThe Makefile passes DATABASE_URL through from local.mk or the environment.
URL-encode reserved username or password characters before setting the value.
The Swarm deployment expects these external secrets:
docker secret create permitpal_database_url /path/to/database-url
htpasswd -bnBC 12 "" '<app-password>' | tr -d ':\n' \
| docker secret create permitpal_password_hash -
openssl rand -base64 48 | docker secret create permitpal_session_secret -Production deploys through home_swarm as proxy_permitpal behind Traefik at permitpal.bitofbytes.io. The permitpal/post-receive hook in home_swarm rolls the service after CI pushes a new image tag to registry.bitofbytes.io/permitpal.
make test
make build