Retail SaaS
Sep 2024 – Jul 2026
At Goodwish
Client work — described generically
SaaS Parking Platform
Bookings, gate check-in, Khalti payments and thermal-printed tickets — across web, mobile and a redesign cycle.

Role
Backend and frontend engineer across five repositories
Stack
- Django
- DRF
- PostgreSQL
- Celery
- Redis
- React
- Next.js
- TypeScript
- Flutter
- Pandas
- ReportLab
Evidence
- Commits
- 207
- Repositories
- 5
- Evidence range
- Sep 2024 – Jul 2026
The problem
What this had to solve.
Parking operators need to know what is in the lot, take payment in whatever form the driver has, and produce a collection report the owner will trust at the end of the day. The catch is the report: vehicles get voided, sessions get corrected and tickets go unbilled — so naive sums quietly disagree with the cash drawer.
What I built
My contribution.
- 01
Developed multi-tenant parking workflows for locations, slots, vehicles, bookings, check-in/out, members, payments, receipts and role-aware dashboards.
- 02
Integrated Khalti payments, Cash/QR checkout, ticket generation, geocoding, OTP login and receipt/thermal-printer workflows.
- 03
Built daily, monthly, collection, vehicle-log and per-location reports with vehicle-type filters, PDF/Excel export, and corrected handling for voided or unbilled records.
- 04
Improved reliability through soft-delete protection, location-scoped data repair, safer backups, typed API handling, token refresh, recoverable error states, accessibility fixes and automated tests.
The hard part
Soft deletion is an accounting decision
Deleting a parking session looks like a UI concern and is actually a reporting one. Once records can be voided, every report has to state what it counts: a collection total that silently includes voided sessions overstates the day, and one that excludes unbilled-but-legitimate sessions understates it. I made deletion soft and explicit, then went back through each report to decide — per report — which states belong in the numerator. That, plus location-scoped repair tooling for historical rows, is what finally made the daily collection figure agree with the cash the operator actually held.
Interface
What it looks like in use.

Daily takings that reconcile two ways — by location and by cash or QR — on the Nepali calendar.