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