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.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
- 1{
- 2 "name": "shipment-tracker",
- 3 "owner": "eventcrew",
- 4 "version": "1.0.1",
- 5 "type": "skill",
- 6 "description": "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.",
- 7 "category": "other",
- 8 "license": "MIT",
- 9 "compat": ["claude-code"],
- 10 "permissions": {
- 11 "shell": ["node scripts/track.mjs"],
- 12 "files": {
- 13 "read": ["./data/shipments.csv", "./data/shipments.txt"],
- 14 "write": ["./data/shipments.csv", "./data/shipments.txt", "./out/shipments.md", "./out/shipments.csv", "./out/shipments.json"]
- 15 }
- 16 },
- 17 "tests": {
- 18 "cases": [
- 19 {
- 20 "name": "detects carriers and flags late, at-risk, and bad numbers",
- 21 "inputs": {
- 22 "data/shipments.csv": "Tracking Number,Item,Ship To,Needed By,Status,ETA\n1Z999AA10123456784,Backdrop,Dock B,2026-11-10,in transit,2026-11-12\n123456789012,T-shirts,Dock B,2026-11-06,label created,\n9400100000000000000000,Scanners,Hotel,2026-11-05,out for delivery,\n1234567890,Laptops,Dock B,2026-11-03,in transit,\nNOTANUMBER,Banner,Dock B,2026-11-08,,\nEC123456789US,Flyers,Hotel,,,\n"
- 23 },
- 24 "checks": [
- 25 {
- 26 "type": "command_exits_zero",
- 27 "command": "node scripts/track.mjs data/shipments.csv out --as-of 2026-11-04 --risk-days 3"
- 28 },
- 29 {
- 30 "type": "output_matches_schema",
- 31 "path": "out/shipments.json",
- 32 "schema": {
- 33 "type": "object",
- 34 "required": ["summary", "by_carrier", "shipments"],
- 35 "properties": {
- 36 "summary": {
- 37 "type": "object",
- 38 "properties": {
- 39 "total": { "const": 6 },
- 40 "late": { "const": 2 },
- 41 "at_risk": { "const": 1 },
- 42 "check_number": { "const": 1 },
- 43 "no_date": { "const": 1 },
- 44 "on_track": { "const": 1 }
- 45 }
- 46 },
- 47 "by_carrier": {
- 48 "type": "object",
- 49 "properties": {
- 50 "UPS": { "const": 1 },
- 51 "FedEx": { "const": 1 },
- 52 "USPS": { "const": 2 },
- 53 "DHL": { "const": 1 },
- 54 "unknown": { "const": 1 }
- 55 }
- 56 }
- 57 }
- 58 }
- 59 },
- 60 { "type": "file_contains", "path": "out/shipments.md", "text": "| LATE | Backdrop |" },
- 61 { "type": "file_contains", "path": "out/shipments.md", "text": "ETA 2026-11-12 is after needed-by 2026-11-10" },
- 62 { "type": "file_contains", "path": "out/shipments.csv", "text": "tracking,carrier,item,destination,needed_by" }
- 63 ]
- 64 },
- 65 {
- 66 "name": "reads a pasted list with month names and short dates",
- 67 "inputs": {
- 68 "data/shipments.txt": "1Z999AA10123456784 | Booth backdrop | Dock B | Nov 10\n123456789012\tSwag\tDock B\t11/6\n"
- 69 },
- 70 "checks": [
- 71 {
- 72 "type": "command_exits_zero",
- 73 "command": "node scripts/track.mjs data/shipments.txt out --as-of 2026-11-04"
- 74 },
- 75 {
- 76 "type": "output_matches_schema",
- 77 "path": "out/shipments.json",
- 78 "schema": {
- 79 "type": "object",
- 80 "properties": {
- 81 "summary": {
- 82 "type": "object",
- 83 "properties": { "total": { "const": 2 }, "at_risk": { "const": 1 }, "on_track": { "const": 1 } }
- 84 },
- 85 "shipments": {
- 86 "type": "array",
- 87 "items": [
- 88 { "type": "object", "properties": { "carrier": { "const": "FedEx" }, "needed_by": { "const": "2026-11-06" } } },
- 89 { "type": "object", "properties": { "carrier": { "const": "UPS" }, "needed_by": { "const": "2026-11-10" } } }
- 90 ]
- 91 }
- 92 }
- 93 }
- 94 }
- 95 ]
- 96 },
- 97 {
- 98 "name": "runs on the bundled example",
- 99 "inputs": {},
- 100 "checks": [
- 101 {
- 102 "type": "command_exits_zero",
- 103 "command": "node scripts/track.mjs examples/shipments.csv out --as-of 2026-11-04"
- 104 },
- 105 { "type": "file_contains", "path": "out/shipments.md", "text": "7 shipments: 1 late, 1 at risk" }
- 106 ]
- 107 }
- 108 ]
- 109 }
- 110}
