Skip to content
SlashClone
Made by@eventcrew

Event budget tracker

@eventcrew/event-budget-tracker

Track an event budget against what you have committed and spent, from a simple CSV of line items. Shows totals by category, lines over budget, bills coming due, contingency left, and cost per attendee or lead.

SkillFinancev1.0.1 (latest)Tested
Activity
New: be the first to try it
  1. 1{
  2. 2 "name": "event-budget-tracker",
  3. 3 "owner": "eventcrew",
  4. 4 "version": "1.0.1",
  5. 5 "type": "skill",
  6. 6 "description": "Track an event budget against what you have committed and spent, from a simple CSV of line items. Shows totals by category, lines over budget, bills coming due, contingency left, and cost per attendee or lead.",
  7. 7 "category": "finance",
  8. 8 "license": "MIT",
  9. 9 "compat": ["claude-code"],
  10. 10 "permissions": {
  11. 11 "shell": ["node scripts/budget.mjs"],
  12. 12 "files": {
  13. 13 "read": ["./data/event-budget.csv"],
  14. 14 "write": ["./data/event-budget.csv", "./out/event-budget.md", "./out/event-budget.json"]
  15. 15 }
  16. 16 },
  17. 17 "tests": {
  18. 18 "cases": [
  19. 19 {
  20. 20 "name": "rolls up categories, flags overruns and bills due",
  21. 21 "inputs": {
  22. 22 "data/event-budget.csv": "Category,Item,Budget,Committed,Actual,Vendor,Paid,Due Date\nBooth,Space,\"$10,000\",10000,10000,Organizer,yes,2026-10-01\nBooth,Build,5000,6200,3100,Builder,no,2026-11-06\nSwag,Shirts,2000,1800,1800,Printer,no,2026-11-01\nTravel,Hotel,3000,,,,,\n"
  23. 23 },
  24. 24 "checks": [
  25. 25 {
  26. 26 "type": "command_exits_zero",
  27. 27 "command": "node scripts/budget.mjs data/event-budget.csv out --total 21000 --contingency 5 --as-of 2026-11-04 --leads 100"
  28. 28 },
  29. 29 {
  30. 30 "type": "output_matches_schema",
  31. 31 "path": "out/event-budget.json",
  32. 32 "schema": {
  33. 33 "type": "object",
  34. 34 "required": ["verdict", "totals", "categories", "over_budget_lines", "bills_due", "unit_costs"],
  35. 35 "properties": {
  36. 36 "verdict": { "const": "into contingency" },
  37. 37 "totals": {
  38. 38 "type": "object",
  39. 39 "properties": {
  40. 40 "budget": { "const": 21000 },
  41. 41 "line_budgets": { "const": 20000 },
  42. 42 "committed": { "const": 18000 },
  43. 43 "actual": { "const": 14900 },
  44. 44 "forecast": { "const": 21000 },
  45. 45 "remaining": { "const": 0 },
  46. 46 "contingency": { "const": 1050 },
  47. 47 "unpaid": { "const": 4900 }
  48. 48 }
  49. 49 },
  50. 50 "over_budget_lines": {
  51. 51 "type": "array",
  52. 52 "minItems": 1,
  53. 53 "maxItems": 1,
  54. 54 "items": { "type": "object", "properties": { "item": { "const": "Build" }, "over_by": { "const": 1200 } } }
  55. 55 },
  56. 56 "bills_due": {
  57. 57 "type": "array",
  58. 58 "minItems": 2,
  59. 59 "maxItems": 2,
  60. 60 "items": [
  61. 61 { "type": "object", "properties": { "item": { "const": "Shirts" }, "days": { "const": -3 } } },
  62. 62 { "type": "object", "properties": { "item": { "const": "Build" }, "amount": { "const": 3100 } } }
  63. 63 ]
  64. 64 },
  65. 65 "unit_costs": { "type": "object", "properties": { "per_lead": { "const": 210 } } }
  66. 66 }
  67. 67 }
  68. 68 },
  69. 69 { "type": "file_contains", "path": "out/event-budget.md", "text": "| **OVER** Booth |" },
  70. 70 { "type": "file_contains", "path": "out/event-budget.md", "text": "**OVERDUE 3d**" }
  71. 71 ]
  72. 72 },
  73. 73 {
  74. 74 "name": "runs on the bundled example",
  75. 75 "inputs": {},
  76. 76 "checks": [
  77. 77 {
  78. 78 "type": "command_exits_zero",
  79. 79 "command": "node scripts/budget.mjs examples/event-budget.csv out --total 52000 --contingency 5 --as-of 2026-11-04 --attendees 2500 --leads 180"
  80. 80 },
  81. 81 { "type": "file_contains", "path": "out/event-budget.md", "text": "Forecast $51,460 of $52,000 budget" }
  82. 82 ]
  83. 83 }
  84. 84 ]
  85. 85 }