Context
Operational context
Sales representatives worked in the field while finance, management and HR teams operated from a central office. Information had to move between teams reliably despite intermittent connectivity and a previously manual reporting process.
Challenge
The problem
Manual and fragmented processes delayed reporting, limited visibility into field activity, and made it difficult to connect sales transactions with accounting and workforce operations. Management reports could take up to three months to prepare, reducing the organisation’s ability to respond quickly.
Constraints
- Field users needed to continue working when internet access was unavailable.
- Sales, accounting and workforce data had to remain consistent across mobile and web workflows.
- Deployment and support needed to be repeatable across production infrastructure.
Architecture
System design
A Cordova-based Android client stores field transactions locally and synchronises them through REST APIs when connectivity returns. Django provides the application and integration layer, PostgreSQL holds the operational record, and the web interface supports reporting, accounting and HR workflows. Docker and Kubernetes package and run the services on AWS, while Jenkins, Git and Ansible automate deployment.
Solution
What was built
I designed and delivered an offline-capable mobile sales workflow connected to a central web platform. The system brings together transaction capture, invoices, accounting information, workforce activity and management reporting, with automated deployment and operational monitoring supporting reliable releases.
Engineering judgement
Decisions and trade-offs
Offline-first transaction capture
Context: Field connectivity was unreliable
Decision: Store transactions locally and synchronise through a controlled API queue
Trade-off: Managers see some records only after a device reconnects
Single operational data layer
Context: Departments relied on fragmented records
Decision: Use PostgreSQL behind Django APIs as the shared system of record
Trade-off: Integration required careful permissions and data ownership rules
Automated infrastructure delivery
Context: Manual releases took too long
Decision: Package services in containers and deploy through Jenkins and Ansible
Trade-off: The deployment toolchain adds operational components that must be maintained
Contribution
My role
- Translated sales, finance and workforce workflows into system requirements and architecture.
- Built the Django and PostgreSQL backend and REST integration layer.
- Developed the Cordova field application and its offline synchronisation workflow.
- Containerised and deployed the platform on AWS using Docker and Kubernetes.
- Automated delivery with Jenkins, Git and Ansible.
Product demonstration
See the system in use
Results
Operational impact
- Replaced delayed manual reporting with near-real-time operational analytics.
- Connected field activity with accounting, sales and workforce information.
- Improved targeting and supported fairer performance-based rewards.
- Reduced repeat deployment work through a consistent automated release process.
Reflection
Lessons learned
- Offline workflows need explicit synchronisation states and recovery paths, not only local storage.
- A shared data model creates the most value when operational ownership is agreed across departments.
- Deployment automation is part of the product when rapid, reliable change matters to operations.