Deep Links
Deep links allow external sources (emails, push notifications, other apps) to open specific screens within the Engineer App.
Overview
The app uses a custom URL scheme to handle deep links:
boxtinstaller://<route>?<param>=<value>When a user taps a deep link, the app opens directly to the specified screen. This is commonly used for:
- Push notifications - Tapping opens the relevant job or screen
- Email links - Direct links to invoices, jobs, or profile sections
- QA testing - Testing specific screens in the simulator
URL Format
| Component | Description | Example |
|---|---|---|
| Scheme | App identifier | boxtinstaller:// |
| Route | Screen path | /jobs/12345/repair/details |
| Parameters | Optional query params | ?selectedDate=2024-01-15 |
Examples
boxtinstaller://profile/products
boxtinstaller://jobs/24535/callout/details
boxtinstaller://diary?selectedDate=2024-01-15
boxtinstaller://profile/company/invoices/234?jobNumber=123Testing Deep Links
iOS Simulator
xcrun simctl openurl booted "boxtinstaller://<route>"Android Emulator
adb shell am start -a android.intent.action.VIEW -d "boxtinstaller://<route>"Examples
# Open profile
xcrun simctl openurl booted "boxtinstaller://profile"
# Open a specific job
xcrun simctl openurl booted "boxtinstaller://jobs/24535/callout/details"
# Open diary with a date
xcrun simctl openurl booted "boxtinstaller://diary?selectedDate=2024-01-15"Security
Deep links are validated against an allowlist before navigation. This prevents malicious links from accessing restricted screens.
- Only routes in
src/utils/navigation/allowlist.jsare permitted - Non-allowlisted attempts are blocked and logged to Sentry
- In development mode, all routes are allowed for testing convenience
Allowlisted Routes
The following routes can be opened via deep link:
/login/availability/diary/job-offers/profile/profile/company/invoices/profile/feedback/profile/my-details/profile/my-documents/profile/products/profile/settings/jobs/[id]/[type]/details
To add a new allowlisted route, update src/utils/navigation/allowlist.js.
Optional Parameters
Some routes accept query parameters:
| Route | Parameters |
|---|---|
/diary | selectedDate |
/availability | selectedDate |
/jobs/:id/:type/details | completed, action |
/profile/my-documents | tab, status |
Parameters are defined in src/utils/navigation/optionalParams.js.
All Routes
The table below shows all routes in the app, whether they require authentication, and whether they can be opened via deep link.
Auto-generated
This section is automatically updated when routes change. Do not edit manually.
| Route | Authenticated? | Deep Link Allowed | Optional Parameters |
|---|---|---|---|
/availability | ✅ | ✅ | selectedDate |
/diary | ✅ | ✅ | selectedDate |
/job-offers | ✅ | ✅ | |
/heatlink-returns | ✅ | ❌ | |
/jobs/:id/:type/cp1/appliance-assessment/:applianceIndex/checks | ✅ | ❌ | |
/jobs/:id/:type/cp1/appliance-assessment/:applianceIndex/type-and-location | ✅ | ❌ | |
/jobs/:id/:type/cp1/appliance-assessment/:applianceIndex/values | ✅ | ❌ | |
/jobs/:id/:type/cp1/assessment | ✅ | ❌ | |
/jobs/:id/:type/cp1/checks | ✅ | ❌ | |
/jobs/:id/:type/cp1/details | ✅ | ❌ | |
/jobs/:id/:type/cp1/review | ✅ | ❌ | |
/jobs/:id/:type/cp1/sign | ✅ | ❌ | |
/jobs/:id/:type/details | ✅ | ❌ | completed, action |
/jobs/:id/:type/risk-assessment | ✅ | ❌ | |
/jobs/:id/callout/cannot-complete | ✅ | ❌ | |
/jobs/:id/callout/cp1-required | ✅ | ❌ | |
/jobs/:id/callout/defect-type | ✅ | ❌ | |
/jobs/:id/callout | ✅ | ❌ | |
/jobs/:id/callout/issue-fixed-details | ✅ | ❌ | |
/jobs/:id/callout/order-parts | ✅ | ❌ | |
/jobs/:id/callout/outcome | ✅ | ❌ | |
/jobs/:id/callout/parts-and-materials | ✅ | ❌ | |
/jobs/:id/callout/photos | ✅ | ❌ | |
/jobs/:id/callout/quote-options | ✅ | ❌ | |
/jobs/:id/callout/receipt | ✅ | ❌ | |
/jobs/:id/callout/remedial | ✅ | ❌ | |
/jobs/:id/callout/remedial/report | ✅ | ❌ | |
/jobs/:id/callout/remedial/supporting-photos | ✅ | ❌ | |
/jobs/:id/callout/repair-category | ✅ | ❌ | |
/jobs/:id/callout/repair-date | ✅ | ❌ | |
/jobs/:id/callout/repair-required-details | ✅ | ❌ | |
/jobs/:id/callout/replacement-required | ✅ | ❌ | |
/jobs/:id/installation/air-conditioning/form | ✅ | ❌ | |
/jobs/:id/installation/air-conditioning | ✅ | ❌ | |
/jobs/:id/installation/air-conditioning/photos | ✅ | ❌ | |
/jobs/:id/installation/battery-only/certificates/building-regulations | ✅ | ❌ | |
/jobs/:id/installation/battery-only/certificates/electrical | ✅ | ❌ | |
/jobs/:id/installation/battery-only | ✅ | ❌ | |
/jobs/:id/installation/battery-only/photos | ✅ | ❌ | |
/jobs/:id/installation/battery-only/photos/tesla-gateway | ✅ | ❌ | |
/jobs/:id/installation/boiler/certificate | ✅ | ❌ | |
/jobs/:id/installation/boiler/form | ✅ | ❌ | |
/jobs/:id/installation/boiler | ✅ | ❌ | |
/jobs/:id/installation/boiler/photos/electric | ✅ | ❌ | |
/jobs/:id/installation/boiler/photos/gas | ✅ | ❌ | |
/jobs/:id/installation/boiler/photos/radiator | ✅ | ❌ | |
/jobs/:id/installation/boiler/photos/smart-home | ✅ | ❌ | |
/jobs/:id/installation/customer-walkthrough-app | ✅ | ❌ | |
/jobs/:id/installation/customer-walkthrough | ✅ | ❌ | |
/jobs/:id/installation/ev-chargers/building-control-certificate | ✅ | ❌ | |
/jobs/:id/installation/ev-chargers/certificate | ✅ | ❌ | |
/jobs/:id/installation/ev-chargers/charger-installation | ✅ | ❌ | |
/jobs/:id/installation/ev-chargers/form | ✅ | ❌ | |
/jobs/:id/installation/ev-chargers | ✅ | ❌ | |
/jobs/:id/installation/heat-pump | ✅ | ❌ | |
/jobs/:id/installation/heat-pump/photos/form | ✅ | ❌ | |
/jobs/:id/installation/heat-pump/photos/installation | ✅ | ❌ | |
/jobs/:id/installation/heat-pump/photos/radiator | ✅ | ❌ | |
/jobs/:id/installation/solar/certificates/building-regulations | ✅ | ❌ | |
/jobs/:id/installation/solar/certificates/electrical | ✅ | ❌ | |
/jobs/:id/installation/solar | ✅ | ❌ | |
/jobs/:id/installation/solar/photos/external/array/:arrayIndex | ✅ | ❌ | |
/jobs/:id/installation/solar/photos/external | ✅ | ❌ | |
/jobs/:id/installation/solar/photos/internal | ✅ | ❌ | |
/jobs/:id/installation/solar/photos/pv-array-test | ✅ | ❌ | |
/jobs/:id/installation/solar/photos/tesla-gateway | ✅ | ❌ | |
/jobs/:id/remedial | ✅ | ❌ | |
/jobs/:id/remedial/report | ✅ | ❌ | |
/jobs/:id/remedial/supporting-photos | ✅ | ❌ | |
/jobs/:id/repair/cannot-complete | ✅ | ❌ | |
/jobs/:id/repair/cp1-required | ✅ | ❌ | |
/jobs/:id/repair/defect-type | ✅ | ❌ | |
/jobs/:id/repair/fixed | ✅ | ❌ | |
/jobs/:id/repair/heatlink/cannot-complete | ✅ | ❌ | |
/jobs/:id/repair/heatlink/inspection-outcome | ✅ | ❌ | |
/jobs/:id/repair/heatlink/issue-fixed | ✅ | ❌ | |
/jobs/:id/repair/heatlink/repair-date | ✅ | ❌ | |
/jobs/:id/repair/heatlink/replacement-required | ✅ | ❌ | |
/jobs/:id/repair/heatlink/required-details | ✅ | ❌ | |
/jobs/:id/repair | ✅ | ❌ | |
/jobs/:id/repair/order-parts | ✅ | ❌ | |
/jobs/:id/repair/outcome | ✅ | ❌ | |
/jobs/:id/repair/parts-and-materials | ✅ | ❌ | |
/jobs/:id/repair/parts-receipt | ✅ | ❌ | |
/jobs/:id/repair/photos | ✅ | ❌ | |
/jobs/:id/repair/quote-options | ✅ | ❌ | |
/jobs/:id/repair/remedial | ✅ | ❌ | |
/jobs/:id/repair/remedial/report | ✅ | ❌ | |
/jobs/:id/repair/remedial/supporting-photos | ✅ | ❌ | |
/jobs/:id/repair/repair-category | ✅ | ❌ | |
/jobs/:id/repair/repair-date | ✅ | ❌ | |
/jobs/:id/repair/replacement-required | ✅ | ❌ | |
/jobs/:id/repair/required-details | ✅ | ❌ | |
/jobs/:id/service | ✅ | ❌ | |
/jobs/:id/service/photos | ✅ | ❌ | |
/overdue-jobs | ✅ | ❌ | |
/profile/company/invoices/:id | ✅ | ❌ | jobNumber |
/profile/company/invoices | ✅ | ✅ | |
/profile/my-documents | ✅ | ✅ | tab, status |
/profile/feedback | ✅ | ✅ | |
/profile | ✅ | ✅ | |
/profile/my-details | ✅ | ✅ | |
/profile/my-documents | ✅ | ✅ | |
/profile/products/:type/pending | ✅ | ❌ | |
/profile/products/:type/what-to-expect | ✅ | ❌ | |
/profile/products/air-conditioning/qualifications | ✅ | ❌ | |
/profile/products/boilers/engineer | ✅ | ❌ | |
/profile/products/boilers/g-s-card | ✅ | ❌ | |
/profile/products/boilers/g-s-card/skills | ✅ | ❌ | |
/profile/products/boilers | ✅ | ❌ | |
/profile/products/boilers/qualifications | ✅ | ❌ | |
/profile/products/electrical/e-c-s-card | ✅ | ❌ | |
/profile/products/electrical/governing-body | ✅ | ❌ | |
/profile/products/electrical/has-e-c-s-card | ✅ | ❌ | |
/profile/products/electrical | ✅ | ❌ | |
/profile/products/electrical/qualifications | ✅ | ❌ | |
/profile/products/electrical/support-jobs | ✅ | ❌ | |
/profile/products/ev-chargers/qualifications | ✅ | ❌ | |
/profile/products/general-skills | ✅ | ❌ | |
/profile/products/heat-pumps/qualifications | ✅ | ❌ | |
/profile/products | ✅ | ✅ | |
/profile/products/solar-and-battery | ✅ | ❌ | |
/profile/settings | ✅ | ✅ | |
/webview | ✅ | ❌ | url |
/login | ❌ | ✅ | |
/sign-up/email-password | ❌ | ❌ | |
/sign-up/address | ❌ | ❌ | |
/sign-up/company/count | ❌ | ❌ | |
/sign-up/company/documents/multi | ❌ | ❌ | |
/sign-up/company/documents/single | ❌ | ❌ | |
/sign-up/company/limited-company/company-number | ❌ | ❌ | |
/sign-up/company/limited-company/details | ❌ | ❌ | |
/sign-up/company/sole-trader/details | ❌ | ❌ | |
/sign-up/company/trading-type | ❌ | ❌ | |
/sign-up/dbs | ❌ | ❌ | |
/sign-up/loading | ❌ | ❌ | |
/sign-up/manual-address | ❌ | ❌ | addressLine1, addressLine2, addressLine3, city, county, postcode |
/sign-up/name | ❌ | ❌ | |
/sign-up/personal-id | ❌ | ❌ | |
/sign-up/regions | ❌ | ❌ | |
/sign-up/selfie | ❌ | ❌ | |
/legal-documents | ❌ | ❌ | |
/:uploadId/camera-screen | ❌ | ❌ | |
/verify-email | ❌ | ❌ | |
/whats-new | ❌ | ❌ | |
/power-up | ❌ | ❌ | |
/splash | ❌ | ❌ |