# Where the pieces came from Research checked October 27, 2026. Repository activity and documentation establish availability, not that a component has been exercised in this application. The verification report records what we actually ran. ## Decision Use a mature application foundation and existing specialist components, connected by camp-specific data and rules. Do not fork a registration app and replace most of it. Do not write an optimizer, calendar engine, generic record-management application, CSV framework or revision system from scratch. | Capability | Other apps with the same property | Reused implementation | Camp refinement | |---|---|---|---| | Group activities competing for staff and space | Timefold school timetabling; Campify; Camptivities | Google OR-Tools CP-SAT | Groups, qualified specialists, room capacity, age eligibility, availability, locks and repeat limits share one model. | | Staff scheduling | Timefold employee scheduling; Engelsystem; Rosterfy | OR-Tools scheduling primitives; Django records | Hard unavailability and qualification rules, daily assignment limits, trip-driver exclusion and visible failures. | | Ranked electives | CampSite elective cycles; Campify; CAMP | OR-Tools CP-SAT | Allocate globally, maximize campers served before optimizing choice rank, report unassigned and outside-choice outcomes. | | Interactive calendar | EventCalendar; FullCalendar | MIT EventCalendar resource views and interaction handlers | Group columns, server-validated movement, rejected drag rollback. The calendar does not determine schedule validity. | | Roster and operational records | Frappe Education; React-admin applications | React-admin + Django REST Framework + Django ORM | Camp relationships and validation, real create/edit/delete/filter behavior. | | Cabin assignment | CampSite; Campfront | Existing relational forms and validation framework | Occupancy derived from enrolled campers. Capacity is enforced. Changing cabin/group records must recheck assignments. | | Imports and exports | django-import-export; Snipe-IT import workflow | django-import-export | Preview, validate, then commit transactionally; preserve identifiers and history. | | Record revisions | BookStack; Django history | django-simple-history | Preserve generated-batch and imported-record history; normal bulk updates bypass history and are not used. | | Knowledge and local context | BookStack | Django record/history machinery; BookStack workflow adapted | A note has a source, owner and review date. Reference text is explicitly distinct from rules enforced by the solver. | | Meal headcounts | CampOrganizer; Camplicity | Derived queries over the common roster and attendance | Count people once; show overlapping dietary categories; describe the baseline rather than claiming meal-specific catering. | | Vehicles and trip assignments | VROOM; PyVRP; Camplicity | Common resource/interval validation | Track vehicle, qualified driver and passenger capacity. Road routing is not implemented in this version. | ## Direct code dependencies - [Google OR-Tools](https://github.com/google/or-tools), Apache-2.0. Actual optimization engine, not a name attached to a heuristic. Official [shift scheduling example](https://github.com/google/or-tools/blob/stable/examples/python/shift_scheduling_sat.py) demonstrates fixed assignments, requests and hard/soft bounds. Python 3.14 / macOS ARM64 wheel was checked on [PyPI](https://pypi.org/project/ortools/9.15.6755/). - [React-admin](https://github.com/marmelab/react-admin), MIT. Reuses the record interface, forms, relationship fields, filtering, loading and error machinery. Custom process pages use [custom routes](https://marmelab.com/react-admin/CustomRoutes.html). Enterprise scheduler/RBAC packages are not assumed included. - [EventCalendar](https://github.com/vkurko/calendar), MIT. Resource calendar, timeline, interaction and revert API. Its resource views can be used without the commercial FullCalendar resource license. - [Django](https://github.com/django/django), BSD-3-Clause, and [Django REST Framework](https://github.com/encode/django-rest-framework), BSD-3-Clause. ORM, migrations, validation, serializers and administration. Framework authentication machinery does not mean this local sample workspace has production user authorization. - [django-import-export](https://github.com/django-import-export/django-import-export), BSD-2-Clause. Dataset conversion, dry runs and import errors. CSV imports still need camp-specific invariants. - [django-simple-history](https://github.com/django-commons/django-simple-history), BSD-3-Clause. Model snapshots. Its [bulk-operation limitation](https://django-simple-history.readthedocs.io/en/latest/common_issues.html) directly informs generated-batch and import tests. Versions are pinned in requirements.txt, requirements.lock.txt and frontend/package-lock.json. The dependency license inventory records installed packages. Upstream licenses remain applicable; this project does not relicense dependency code. ## Complete-app candidates we examined | App | Evidence | Decision | |---|---|---| | [Timefold quickstarts](https://github.com/TimefoldAI/timefold-quickstarts) | Apache-2.0 working employee, school and vehicle examples; Java 21/Quarkus. [Employee constraints](https://github.com/TimefoldAI/timefold-quickstarts/blob/stable/use-cases/employee-scheduling/src/main/java/org/acme/employeescheduling/solver/EmployeeSchedulingConstraintProvider.java), [school constraints](https://github.com/TimefoldAI/timefold-quickstarts/blob/stable/use-cases/school-timetabling/src/main/java/org/acme/schooltimetabling/solver/TimetableConstraintProvider.java). | Adapt the separation of hard conflicts and scored preferences. Their sample in-memory storage is not our persistence layer. Python binding is archived, so use maintained OR-Tools for this Python build. | | [Frappe Education](https://github.com/frappe/education) | GPL-3 school records, schedules and attendance on Frappe/ERPNext. [Attendance source](https://github.com/frappe/education/blob/develop/education/education/doctype/student_attendance/student_attendance.py) enforces enrollment and duplicates. | Credible full foundation for a school/ERP system. Adds ERPNext, MariaDB and Redis without supplying our elective optimizer. Adapt invariants; do not absorb unrelated ERP. | | [Engelsystem](https://github.com/engelsystem/engelsystem) | GPL-2 event helpers, teams, shifts, arrivals and qualification confirmations. PHP/MySQL. [Project deployment references](https://engelsystem.de/en). | Useful staff-coordination reference or future separate integration. Not a camper/elective foundation. | | [Snipe-IT](https://github.com/grokability/snipe-it) | AGPL-3 equipment custody, checkout, API and imports. | Prefer integration if full equipment inventory is required. Do not reproduce an asset-management product inside a camp scheduler. | | [BookStack](https://github.com/BookStackApp/BookStack) | MIT, source-linked knowledge, books/chapters/pages, revisions, permissions and REST API. [Reuse behavior](https://www.bookstackapp.com/docs/user/reusing-page-content/). | Adapt source ownership and revision workflow. Its PHP/MySQL app is an integration candidate, not a React library. Included content is not automatically indexed as text of the receiving page. | | [COCM Camp App](https://github.com/Oasis-Coders/COCM-Camp-App) | MIT; repository archived; registration/inventory/task prototype. README identifies check-in as a future milestone. | Reject as base: central scheduling and elective workflow would still need replacement or construction. | | [EverCamps](https://github.com/evercamps/evercamps) | GPL-3 registration adaptation of EverShop with checkout architecture. | Registration-first, not a foundation for daily program allocation. | | [techlot camp system](https://github.com/techlot/summer-camp-managment-system) | MIT Flask/MySQL enrollment demo, last repository push in 2023. | Too stale and narrow to adopt as the operating application. | | [CAMP](https://github.com/thinkle/CAMP) | Activity and peer matching, browser worker heuristics. No license found. [Author's explanation](https://www.tomhinkle.net/proj/CAMP). | Excellent behavior reference for peer preferences. Do not copy source without permission. Peer pairing is not implemented in this first build. | | [StayDesk](https://github.com/jeetdarji/StayDesk) | Room allocation and attendance description; no license found. | Behavior reference only. | ## Specific behavior learned from products [Camplicity](https://camplicity.app/) advertises group and camper scheduling, capacity, staff availability, electives, transport, housing and meal counts. These are vendor descriptions, not independently tested performance claims. It is the category reference, not the sole specification or code source. [CampSite's bunk assignment documentation](https://support.campmanagement.com/hc/en-us/articles/200766929-Assigning-Campers-and-Staff-to-Divisions-and-Bunks) explicitly allows going over cabin capacity. Camp Commons instead checks capacity as an invariant. Its [cycle-grid documentation](https://support.campmanagement.com/hc/en-us/articles/201195835-The-Cycle-Grid-Elective-Scheduling) separates available offerings, staff, dates and individual assignments; the data model retains those distinctions. [Campfront](https://help.campfront.com/4776656-bunking/7581341-bunking-boards) contributes assignment locks, unassigned pools and reassessment when capacity/settings change. [Campify](https://campify.io/) contributes editable constraints and starting from existing camp documents. [Camptivities](https://www.camptivities.com/) contributes shared-location constraints and activity frequency across successive weeks. This build implements structured roster import and within-horizon repeat caps, not automatic extraction from arbitrary handbooks or historical multiweek frequency balancing. [Rosterfy](https://helpdesk.rosterfy.uk/en/articles/16640059-shift-application-form) contributes qualifications/preferences and coordinator approval. [CampOrganizer](https://camporganizer.app/platform/) provides a meal/participant context comparison. No credible maintained permissive camp meal module was found to transplant; derived counts are small domain logic over shared records. ## Deferred components, explicit boundaries - [VROOM](https://github.com/VROOM-Project/vroom), BSD-2, and [PyVRP](https://github.com/PyVRP/PyVRP), MIT: candidates for road routing. VROOM plan validation can soften constraints and return violations, so a returned route is not automatically valid. Routing and road data are outside this build. - [Docling](https://github.com/docling-project/docling), MIT code: candidate for handbook ingestion with page-level provenance. OCR/model assets and native dependencies require a separate verified installation. No automatic document understanding is claimed here. - [LangGraph](https://github.com/langchain-ai/langgraph), MIT: candidate for durable agent proposals/approval. Deterministic scheduling does not require a conversational agent runtime. No LLM or AI assistant is simulated. - [FullCalendar](https://fullcalendar.io/license): standard calendar is MIT; resource views use Premium terms. EventCalendar meets the current requirement without that dependency. - [PocketBase](https://github.com/pocketbase/pocketbase): GitHub archival reflects a repository move, not necessarily abandonment. Pre-1.0 compatibility caveats and a separate runtime make it less suitable than Django for this Python solver. - [Directus](https://github.com/directus/directus): current source-available terms require separate evaluation. Not selected. - [Summer Camp Portal](https://www.summercampportal.com/): useful product comparison, but no public implementation was found in its [GitHub organization](https://github.com/summercampportal). Do not claim source reuse. ## Evidence limits The chosen components reduce the amount of infrastructure we must invent. They do not prove that our camp rules, workflows, deployment or load handling are correct. Synthetic-data tests and browser walkthroughs are required. A local single-operator workspace is not a production camp service, multi-tenant platform, certified staffing plan, medical/allergy system, emergency attendance system or CampMinder integration. Those claims require their own implementation and evidence.