API, Front End, and Notification Clients for tracking Australia Post and other parcels
Postgresql database using custom built ORM for Typescript entity mapping.
A GitHub Action pipeline is configured to build, test, and deploy the application.
DB Migrations are tested before releasing the application.
DB Migrations are handled by the db-migrate npm package.
Migrations should be run
- during development docker-compose startup, before API starts
Steps to run them
db-migrate db:create auspohztdb-migrate up
Running DB Migrations requires the PG_ environment variables to be set.
Run the application under docker
- Run
docker compose build - Run
docker compose up -d
- Run
npm installin the root directory - Setup postgresql database using
backend/databasescripts - Run
npm run build - Configure
.envfile fromtest.env - Run
npm run back:serverin a new terminal to start the API - Run
npm run front:sitein a new terminal to server front end files - Run
npm run back:runnerperiodically to sync tracking data from remote systems
Parcel tracking UI showing delivery events for delivered package

General todo list. Some far fetched things like multi-user support, multiple package providers, etc
- Tracking
- Sync Tracking Data from UI
- Add Tracking ID
- Remove Tracking ID
- Set nickname for Tracking ID
- Update Database when status changes
- Fix duplicate events not clearing properly
- Mark parcels as disabled after 3 runner errors
- Mark parcels as disabled when status is COMPLETE
- Runner does not check disabled parcels
- Support marking package as delivered from UI
- Handle dates correctly
- Support 64 bit integers for dates, or
- Migrate to postgres datetime date types
- User Management
- Authentication
- Add User
- Remove User
- Authorization for runner, with signed tokens
- User owns parcel
- System
- Setup daemon scripts
- node systemctl script
- node macos service script
- cronjob example for notifications
- Configure Docker
- Setup multiple workers
- Default nginx config for workers
- Setup daemon scripts
- Notifications
- Barebones notification script
- custom icon for notification (in MacOS only ?)
- last events written to DB linked by mac address.
- don't send notifications for disabled parcels
- include package location in update message
- Misc
- Convert semi-JavaDocs to JSDocs
- Setup Github Actions
- Refactor
- pirate to support passing results through map() and mapMany()
- typing of entityDecorator.getEntityPrototype
- DRY dao code
- pirate.map() accepts row arg as array instead of single instance, see dao.find() comment
- controller code should use async/await instead of promise callbacks
- use proper go fmt methods for logging ( unnecessary \n everywhere )
- parcel dao should be rewritten, needs to support most parcel methods returning a list
- Documentation
- Simple package.json/tsconfig setup
- Detail webpack config