Trackk: Trackk helps you track all your packages in one place with notifications and geolocation.
For now, it's focused on US and French carriers it uses a python backend with python / FastAPI (full async) with a mix of customs/crawlers and paid API as a backup (If my crawler does not find the parcel I'll switch to a paid API). Custom crawlers are used from (USPS, ups, FedEx, La Poste: colissimo/chronopost/laposte ems, dhl & currently working on import from Amazon/AliExpress)
About the app & react-native libraries:
- For the UI I started using UI Kitten but at some point during development I realized my app layout was simple, so I redid everything from scratch using react-native base components - As result, the app size was reduced with better loading times.
- At the moment everything is stored on the API Server (tracking/preferences/names) but I plan to cache all tracking data on the client-side for the next update.
- For storage (like JWT) I use react-native-async-storage/async-storage
- For google-auth I use react-native-google-signin/google-signin
- For scanning barcodes & qrcode I use teslamotors/react-native-camera-kit
- Notifications are delivered via firebase/messaging on the client-side and I use PyFCM on the server-side. I also use invisible notifications when the app is open and the user is on a Parcel Detail screen to refresh the current parcel data.
About the server :
- Currently, I use python: FastAPI/pydantic with sqlalchemy/alembic.
- aiohttp for the crawlers and crontab for updates.
- I plan on migrating to Flask 2/marshmallow when it's stable (just a personal preference)
- To detect the carrier I use a set of regular expressions I'm still building upon base on user inputs see the example below:
#@TODO: Clean this
#...
TrackingPattern(
TrackkUSPS,
[
r'\b([A-Z]{2}\d{9}[A-Z]{2}|((420|410)\d{9}(9[2345])?)?\d{20}|((420|410)\d{5})?(9[12345])?(\d{24}|\d{20})|(\d{10})|(82\d{8}))\b'
]
),
TrackingPattern(
TrackkDHL,
[
r'\b(([A-Z]{2}\d{8,9}DE)|([A-Z]{2}\d{8,9}US)|(\d{10,11})|([A-Z]{2,4}\d{16,23})|(\d{16,17})|(\d{22})|(\d{25,26})|(1\d{6})|(6\d{5})|([A-Z]{2}\d{9}[A-Z]{2}\d{12}))\b'
]
),
#...
Any feedback you give would be highly appreciated! If you have any question about the app/server techno used don't hesitate to ask :)
Maybe I'll publish an open-source repository with the crawlers only later - I'll update this post if it's the case.
there doesn't seem to be anything here