Kamp Solver Workbench
Proper Next.js UI for real data lookup, constraint editing, solve, and validate.
Server
Checking…
Quick flow
Real data lookup
Checking lookup config…
Constraint builder
No constraint applied yet.
Marketplace solve JSON
Matches current kamp-frontend architecture more closely: activities own calendars/listings, sessions cache RRULE, solver expands occurrences for the planning window.
{
"requestId": "marketplace-week-1",
"planningWindow": {
"startsAt": "2026-07-06T00:00:00",
"endsAt": "2026-07-12T23:59:59"
},
"children": [
{
"id": "child-ava",
"name": "Ava",
"birthYear": 2017
},
{
"id": "child-ben",
"name": "Ben",
"birthYear": 2015
}
],
"desiredPrograms": [
{
"id": "ava-soccer",
"childId": "child-ava",
"activityId": "soccer-camp",
"required": true,
"priority": 30
},
{
"id": "ava-art",
"childId": "child-ava",
"activityId": "art-camp",
"required": false,
"priority": 10
},
{
"id": "ben-science",
"childId": "child-ben",
"activityId": "science-camp",
"required": true,
"priority": 25
},
{
"id": "ben-swim",
"childId": "child-ben",
"activityId": "swim-lessons",
"required": false,
"priority": 8
}
],
"activities": [
{
"id": "soccer-camp",
"title": "Soccer Camp",
"category": "sports",
"locationAddress": "North Oval, Vancouver",
"ageGroupMin": 8,
"ageGroupMax": 12,
"status": "published",
"sharetribeListingId": "listing-soccer",
"sessions": [
{
"id": "soccer-series-a",
"label": "Mon/Wed Afternoon",
"status": "published",
"startDate": "2026-07-06",
"endDate": "2026-07-08",
"daysOfWeek": [
"MO",
"WE"
],
"startTime": "13:00",
"endTime": "16:00",
"totalSeats": 6,
"seatsRemaining": 2,
"priceSubUnits": 22000,
"currency": "AUD",
"rrule": "FREQ=WEEKLY;COUNT=2;BYDAY=MO,WE",
"metadata": {
"travelMinutes": 18
}
},
{
"id": "soccer-series-b",
"label": "Tue/Thu Afternoon",
"status": "published",
"startDate": "2026-07-07",
"endDate": "2026-07-09",
"daysOfWeek": [
"TU",
"TH"
],
"startTime": "13:30",
"endTime": "16:30",
"totalSeats": 6,
"seatsRemaining": 4,
"priceSubUnits": 20000,
"currency": "AUD",
"rrule": "FREQ=WEEKLY;COUNT=2;BYDAY=TU,TH",
"metadata": {
"travelMinutes": 22
}
}
]
},
{
"id": "art-camp",
"title": "Art Camp",
"category": "arts",
"locationAddress": "Studio East, Vancouver",
"ageGroupMin": 6,
"ageGroupMax": 10,
"status": "published",
"sharetribeListingId": "listing-art",
"sessions": [
{
"id": "art-mon",
"label": "Monday Morning Art",
"status": "published",
"startDate": "2026-07-06",
"startTime": "09:30",
"endTime": "11:30",
"totalSeats": 8,
"seatsRemaining": 6,
"priceSubUnits": 12000,
"currency": "AUD",
"metadata": {
"travelMinutes": 8
}
},
{
"id": "art-tue",
"label": "Tuesday Art Lab",
"status": "published",
"startDate": "2026-07-07",
"startTime": "13:00",
"endTime": "15:00",
"totalSeats": 8,
"seatsRemaining": 6,
"priceSubUnits": 14000,
"currency": "AUD",
"metadata": {
"travelMinutes": 10
}
}
]
},
{
"id": "science-camp",
"title": "Science Camp",
"category": "stem",
"locationAddress": "Science Hub, Vancouver",
"ageGroupMin": 9,
"ageGroupMax": 13,
"status": "published",
"sharetribeListingId": "listing-science",
"sessions": [
{
"id": "science-series-a",
"label": "Mon-Wed Science Series",
"status": "published",
"startDate": "2026-07-06",
"endDate": "2026-07-08",
"startTime": "09:00",
"endTime": "12:00",
"totalSeats": 2,
"seatsRemaining": 1,
"priceSubUnits": 18000,
"currency": "AUD",
"rrule": "FREQ=DAILY;COUNT=3",
"metadata": {
"travelMinutes": 12
}
},
{
"id": "science-series-b",
"label": "Tue-Wed Science Series",
"status": "published",
"startDate": "2026-07-07",
"endDate": "2026-07-08",
"startTime": "09:00",
"endTime": "12:00",
"totalSeats": 5,
"seatsRemaining": 5,
"priceSubUnits": 16000,
"currency": "AUD",
"rrule": "FREQ=DAILY;COUNT=2",
"metadata": {
"travelMinutes": 25
}
}
]
},
{
"id": "swim-lessons",
"title": "Swim Lessons",
"category": "sports",
"locationAddress": "Community Pool, Vancouver",
"ageGroupMin": 8,
"ageGroupMax": 12,
"status": "published",
"sharetribeListingId": "listing-swim",
"sessions": [
{
"id": "swim-tue",
"label": "Tuesday Swim",
"status": "published",
"startDate": "2026-07-07",
"startTime": "11:00",
"endTime": "12:30",
"totalSeats": 10,
"seatsRemaining": 8,
"priceSubUnits": 5000,
"currency": "AUD",
"metadata": {
"travelMinutes": 6
}
}
]
}
],
"existingEvents": [
{
"childId": "child-ava",
"startsAt": "2026-07-08T09:00:00",
"endsAt": "2026-07-08T10:00:00",
"source": "caldav",
"title": "Dentist"
}
],
"objectiveWeights": {
"requiredPlacement": 120,
"totalPlacement": 25,
"travelPenalty": 2,
"costPenalty": 1
},
"options": {
"proposalCount": 3
}
}Solve request JSON
{
"requestId": "demo-summer-week-1",
"children": [
{
"id": "child-ava",
"name": "Ava",
"birthYear": 2017
},
{
"id": "child-ben",
"name": "Ben",
"birthYear": 2015
}
],
"desiredPrograms": [
{
"id": "ava-soccer",
"childId": "child-ava",
"activityId": "soccer-camp",
"required": true,
"priority": 30
},
{
"id": "ava-art",
"childId": "child-ava",
"activityId": "art-camp",
"required": false,
"priority": 10
},
{
"id": "ben-science",
"childId": "child-ben",
"activityId": "science-camp",
"required": true,
"priority": 25
},
{
"id": "ben-swim",
"childId": "child-ben",
"activityId": "swim-lessons",
"required": false,
"priority": 8
}
],
"candidateAssignments": [
{
"assignmentKey": "ava-soccer-a",
"desiredProgramId": "ava-soccer",
"childId": "child-ava",
"activityId": "soccer-camp",
"sessionId": "soccer-mon-am",
"startsAt": "2026-07-06T09:00:00Z",
"endsAt": "2026-07-06T12:00:00Z",
"seatsRemaining": 4,
"costCents": 22000,
"travelMinutes": 15,
"status": "available"
},
{
"assignmentKey": "ava-soccer-b",
"desiredProgramId": "ava-soccer",
"childId": "child-ava",
"activityId": "soccer-camp",
"sessionId": "soccer-mon-pm",
"startsAt": "2026-07-06T13:00:00Z",
"endsAt": "2026-07-06T16:00:00Z",
"seatsRemaining": 2,
"costCents": 20000,
"travelMinutes": 20,
"status": "available"
},
{
"assignmentKey": "ava-art-a",
"desiredProgramId": "ava-art",
"childId": "child-ava",
"activityId": "art-camp",
"sessionId": "art-mon-am",
"startsAt": "2026-07-06T09:30:00Z",
"endsAt": "2026-07-06T11:30:00Z",
"seatsRemaining": 6,
"costCents": 12000,
"travelMinutes": 8,
"status": "available"
},
{
"assignmentKey": "ava-art-b",
"desiredProgramId": "ava-art",
"childId": "child-ava",
"activityId": "art-camp",
"sessionId": "art-tue-pm",
"startsAt": "2026-07-07T13:00:00Z",
"endsAt": "2026-07-07T15:00:00Z",
"seatsRemaining": 6,
"costCents": 14000,
"travelMinutes": 10,
"status": "available"
},
{
"assignmentKey": "ben-science-a",
"desiredProgramId": "ben-science",
"childId": "child-ben",
"activityId": "science-camp",
"sessionId": "science-mon-am",
"startsAt": "2026-07-06T09:00:00Z",
"endsAt": "2026-07-06T12:00:00Z",
"seatsRemaining": 1,
"costCents": 18000,
"travelMinutes": 12,
"status": "available"
},
{
"assignmentKey": "ben-science-b",
"desiredProgramId": "ben-science",
"childId": "child-ben",
"activityId": "science-camp",
"sessionId": "science-tue-am",
"startsAt": "2026-07-07T09:00:00Z",
"endsAt": "2026-07-07T12:00:00Z",
"seatsRemaining": 5,
"costCents": 16000,
"travelMinutes": 25,
"status": "available"
},
{
"assignmentKey": "ben-swim-a",
"desiredProgramId": "ben-swim",
"childId": "child-ben",
"activityId": "swim-lessons",
"sessionId": "swim-mon-pm",
"startsAt": "2026-07-06T13:30:00Z",
"endsAt": "2026-07-06T14:30:00Z",
"seatsRemaining": 8,
"costCents": 7000,
"travelMinutes": 5,
"status": "available"
},
{
"assignmentKey": "ben-swim-b",
"desiredProgramId": "ben-swim",
"childId": "child-ben",
"activityId": "swim-lessons",
"sessionId": "swim-tue-am-overlap",
"startsAt": "2026-07-07T11:00:00Z",
"endsAt": "2026-07-07T12:30:00Z",
"seatsRemaining": 8,
"costCents": 5000,
"travelMinutes": 6,
"status": "available"
}
],
"objectiveWeights": {
"requiredPlacement": 120,
"totalPlacement": 25,
"travelPenalty": 2,
"costPenalty": 1
},
"options": {
"proposalCount": 3
}
}Solve result
No solve run yet.
Validation inputs
Previous items
[]
Current truth items
[
{
"assignmentKey": "ava-art-a",
"desiredProgramId": "ava-art",
"childId": "child-ava",
"activityId": "art-camp",
"sessionId": "art-mon-am",
"startsAt": "2026-07-06T09:30:00Z",
"endsAt": "2026-07-06T11:30:00Z",
"seatsRemaining": 6,
"status": "available",
"costCents": 12000,
"travelMinutes": 8
},
{
"assignmentKey": "ava-soccer-b",
"desiredProgramId": "ava-soccer",
"childId": "child-ava",
"activityId": "soccer-camp",
"sessionId": "soccer-mon-pm",
"startsAt": "2026-07-06T13:15:00Z",
"endsAt": "2026-07-06T16:15:00Z",
"seatsRemaining": 2,
"status": "available",
"costCents": 20000,
"travelMinutes": 20
},
{
"assignmentKey": "ben-science-a",
"desiredProgramId": "ben-science",
"childId": "child-ben",
"activityId": "science-camp",
"sessionId": "science-mon-am",
"startsAt": "2026-07-06T09:00:00Z",
"endsAt": "2026-07-06T12:00:00Z",
"seatsRemaining": 0,
"status": "sold_out",
"costCents": 18000,
"travelMinutes": 12
},
{
"assignmentKey": "ben-swim-a",
"desiredProgramId": "ben-swim",
"childId": "child-ben",
"activityId": "swim-lessons",
"sessionId": "swim-mon-pm",
"startsAt": "2026-07-06T13:30:00Z",
"endsAt": "2026-07-06T14:30:00Z",
"seatsRemaining": 8,
"status": "available",
"costCents": 7000,
"travelMinutes": 5
}
]Validation result
No validation run yet.