Skip to content
SlashClone
Made by@eventcrew

Shipment tracker

@eventcrew/shipment-tracker

Track booth gear and swag shipments for events from a CSV or a pasted list of tracking numbers. Detects UPS, FedEx, USPS, and DHL from the number, builds a tracker table with tracking links, and flags anything at risk of missing its needed-by date. Works offline.

SkillOtherv1.0.1 (latest)Tested
Activity
New: be the first to try it
  1. 1---
  2. 2name: shipment-tracker
  3. 3description: Track event shipments (booth gear, swag, printed materials, rentals) from a CSV or a pasted list of tracking numbers. Detects the carrier (UPS, FedEx, USPS, DHL) from the number, builds a tracker table with tracking links, flags shipments at risk of missing their needed-by date, and walks the user through updating statuses. Use when the user pastes tracking numbers, asks "where is our booth stuff?", "will the swag make it?", "track these shipments", or is prepping for a conference or trade show.
  4. 4license: MIT
  5. 5---
  6. 6
  7. 7# Shipment tracker
  8. 8
  9. 9Shipping booth gear and swag to an event eats hours: a dozen boxes, four carriers, a venue dock with its own deadline. This kit turns a messy list into one table sorted by what needs attention, with a link for every package. It works offline and never contacts a carrier; the user opens the links and reports back.
  10. 11## When to use
  11. 13- "Here are our tracking numbers", "track the booth shipments", "is anything going to be late?"
  12. 14- The days before an event, daily. Also after the event, for return shipments.
  13. 15- Not for buying labels or filing claims. Point the user to the carrier for those.
  14. 17## Inputs
  15. 191. **The shipments.** A CSV at `data/shipments.csv`, or a pasted list. Only the tracking number is required. Useful columns (names are flexible): `tracking, item, destination, needed_by, carrier, status, eta, notes`.
  16. 20 - Pasted list: one shipment per line, fields split by `|`, tab, or comma, in the order tracking, item, destination, needed-by. Save it to `data/shipments.txt`.
  17. 212. **Needed-by dates.** Ask for them if missing. Use the date the box must be **in hand**, not the event date. Venue and advance warehouse deadlines are often 3 to 5 days before the show; ask if there is one.
  18. 223. **Today's date** (the script defaults to the system date). Use `--as-of` when planning ahead.
  19. 24## Steps
  20. 261. **Load the list.** If the user pasted it, write it to `data/shipments.txt`. Once statuses start coming in, convert it to `data/shipments.csv` with a `status` and `eta` column so updates have a home.
  21. 272. **Build the tracker.**
  22. 29 ```bash
  23. 30 node scripts/track.mjs data/shipments.csv out --as-of 2026-11-04 --risk-days 3
  24. 31 ```
  25. 33 It writes `out/shipments.md` (the table), `out/shipments.csv` (for a spreadsheet), and `out/shipments.json`. Rows are sorted: late, at risk, check number, no date, on track, delivered.
  26. 343. **Show the summary line and the table.** Lead with anything LATE or AT RISK.
  27. 354. **Walk through status updates**, worst first, one at a time:
  28. 36 - Give the item, the tracking link, and ask: "Open this and tell me the latest status and expected delivery date." Accept a pasted status line or a screenshot.
  29. 37 - Map what they say to one of: label created, in transit, out for delivery, delivered, exception. Put the expected date in `eta`.
  30. 38 - Update that row in `data/shipments.csv`. After the batch, run the script again and show what changed.
  31. 395. **For every LATE or AT RISK row, suggest one next action:**
  32. 40 - Label created but not moving 2+ days: call the shipper; the box may never have been picked up.
  33. 41 - Exception or customs hold: call the carrier with the tracking number; ask about address correction or hold for pickup.
  34. 42 - ETA after the needed-by date: ask the carrier about rerouting to the hotel or a pickup location near the venue, or plan a local backup (print shop, local swag vendor).
  35. 43 - Unknown carrier or CHECK #: confirm the number with whoever shipped it; photos of labels often swap 0 and O.
  36. 446. **Offer a daily rerun** until everything is delivered, and a return-shipment list after the event.
  37. 46## Output format
  38. 48```markdown
  39. 49# Shipment tracker (as of 2026-11-04)
  40. 517 shipments: 1 late, 1 at risk, 1 need a number check, 3 on track, 1 delivered.
  41. 53| Flag | Item | Destination | Needed by | Days left | Carrier | Status | Tracking | Why |
  42. 54| --- | --- | --- | --- | --- | --- | --- | --- | --- |
  43. 55| LATE | Demo laptops | Dock B | 2026-11-03 | -1 | DHL | in transit | [1234567890](link) | needed 1 day(s) ago |
  44. 57Next actions
  45. 581. Demo laptops: call DHL about rerouting to the hotel. Backup: rent two laptops locally.
  46. 59```
  47. 61## Carrier detection
  48. 63UPS `1Z` plus 16 characters. FedEx 12 or 15 digits, or 22 digits starting `96`. USPS 20 to 22 digits starting `92` to `95`, `420` plus ZIP prefixes, or `XX123456789US`. DHL Express 10 digits, DHL eCommerce `GM`, `JJD`, or `JVGL`. Formats overlap (a 10 or 20 digit number can be more than one carrier), so a `carrier` column always wins over detection, and the script flags a mismatch.
  49. 65## Guardrails
  50. 67- Never contact carrier websites or APIs yourself. The user opens the links.
  51. 68- Never guess a status. Unknown stays "not checked".
  52. 69- Tracking numbers and addresses are shared with nobody; keep them in `data/` and `out/`.
  53. 70- Do not change needed-by dates without the user saying so; they are the whole point.