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.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
- 1{
- 2 "name": "event-budget-tracker",
- 3 "owner": "eventcrew",
- 4 "version": "1.0.1",
- 5 "type": "skill",
- 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 "category": "finance",
- 8 "license": "MIT",
- 9 "compat": ["claude-code"],
- 10 "permissions": {
- 11 "shell": ["node scripts/budget.mjs"],
- 12 "files": {
- 13 "read": ["./data/event-budget.csv"],
- 14 "write": ["./data/event-budget.csv", "./out/event-budget.md", "./out/event-budget.json"]
- 15 }
- 16 },
- 17 "tests": {
- 18 "cases": [
- 19 {
- 20 "name": "rolls up categories, flags overruns and bills due",
- 21 "inputs": {
- 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 },
- 24 "checks": [
- 25 {
- 26 "type": "command_exits_zero",
- 27 "command": "node scripts/budget.mjs data/event-budget.csv out --total 21000 --contingency 5 --as-of 2026-11-04 --leads 100"
- 28 },
- 29 {
- 30 "type": "output_matches_schema",
- 31 "path": "out/event-budget.json",
- 32 "schema": {
- 33 "type": "object",
- 34 "required": ["verdict", "totals", "categories", "over_budget_lines", "bills_due", "unit_costs"],
- 35 "properties": {
- 36 "verdict": { "const": "into contingency" },
- 37 "totals": {
- 38 "type": "object",
- 39 "properties": {
- 40 "budget": { "const": 21000 },
- 41 "line_budgets": { "const": 20000 },
- 42 "committed": { "const": 18000 },
- 43 "actual": { "const": 14900 },
- 44 "forecast": { "const": 21000 },
- 45 "remaining": { "const": 0 },
- 46 "contingency": { "const": 1050 },
- 47 "unpaid": { "const": 4900 }
- 48 }
- 49 },
- 50 "over_budget_lines": {
- 51 "type": "array",
- 52 "minItems": 1,
- 53 "maxItems": 1,
- 54 "items": { "type": "object", "properties": { "item": { "const": "Build" }, "over_by": { "const": 1200 } } }
- 55 },
- 56 "bills_due": {
- 57 "type": "array",
- 58 "minItems": 2,
- 59 "maxItems": 2,
- 60 "items": [
- 61 { "type": "object", "properties": { "item": { "const": "Shirts" }, "days": { "const": -3 } } },
- 62 { "type": "object", "properties": { "item": { "const": "Build" }, "amount": { "const": 3100 } } }
- 63 ]
- 64 },
- 65 "unit_costs": { "type": "object", "properties": { "per_lead": { "const": 210 } } }
- 66 }
- 67 }
- 68 },
- 69 { "type": "file_contains", "path": "out/event-budget.md", "text": "| **OVER** Booth |" },
- 70 { "type": "file_contains", "path": "out/event-budget.md", "text": "**OVERDUE 3d**" }
- 71 ]
- 72 },
- 73 {
- 74 "name": "runs on the bundled example",
- 75 "inputs": {},
- 76 "checks": [
- 77 {
- 78 "type": "command_exits_zero",
- 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 },
- 81 { "type": "file_contains", "path": "out/event-budget.md", "text": "Forecast $51,460 of $52,000 budget" }
- 82 ]
- 83 }
- 84 ]
- 85 }
- 86}
