This skill should be used when the user asks to "add a school calendar", "import school calendar", "save school calendar", "import PA day dates", "import PA days from PDF", "add a school to the planner", "save school dates", "load school calendar from URL", "import school year", or provides a school calendar PDF or URL and wants it saved as reference data for camp planning. Extracts and saves structured calendar data from school board or private school sources.
Extracts school calendar data from PDFs or URLs and saves it for camp planning reference.
/plugin marketplace add reggiechan74/cc-plugins/plugin install kids-camp-planner@cc-pluginsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
references/calendar-template.mdscripts/scrape_board_calendar.pyscripts/validate_calendar.pyLocate research directory: Read .claude/kids-camp-planner.local.md to get the research_dir path (default: camp-research). All user data paths below are relative to this directory. The family profile is at <research_dir>/family-profile.md.
Extract school calendar data from a URL, PDF, or web search and save it as a structured reference file in the school-calendars directory. This makes the data instantly available to all planning skills (plan-summer, plan-march-break, plan-pa-days) without requiring web searches for known schools.
All planning skills use the School Calendar Lookup pattern (see below) before asking the user or searching the web. This skill is what populates the internal library that those lookups check first.
This is the standard lookup pattern used by all planning skills in the plugin. When any skill needs school calendar data:
Search the plugin's pre-saved calendar data:
${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/public-boards/${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/private-schools/Use Glob to find files matching the school name or abbreviation. If a matching file exists and covers the required school year, use it directly. Inform the user: "Found [school] calendar data in the internal library for [year]."
If data exists but is for a different school year, inform the user and proceed to Tier 2.
If no internal data is found, ask the user: "I don't have [school name] calendar data saved. Do you have the school calendar available? You can provide:"
If the user doesn't have the calendar handy, conduct a web search:
curl -L -o) and save to ${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/pdfs/[abbreviation]/[abbreviation]-[YYYY-YYYY].pdf, then read the PDF to extract dataAfter extracting data from any tier, proceed to the extraction and saving workflow below.
Collect the following (skip any the user has already provided):
Then run the 3-Tier Lookup above. If Tier 1 finds existing data and the user just wants to verify it, show them the saved data and offer to update it.
Read the source (PDF via Read tool, URL via WebFetch, or web search results) and extract all of the following. If a field cannot be found, mark it as "Not specified" rather than guessing.
| Field | Example |
|---|---|
| First instructional day | September 2, 2025 |
| Last instructional day (elementary) | June 25, 2026 |
| Last instructional day (secondary) | June 24, 2026 |
| PA days with dates and day-of-week | Sep 26 (Fri), Oct 10 (Fri)... |
| March break dates | March 16-20, 2026 |
| Winter/Christmas break dates | December 22 - January 2 |
| Summer break start | Day after last instructional day |
| Field | Example |
|---|---|
| Fall break dates | November 3-7, 2025 |
| Early dismissal dates | June 26 (1:15pm) |
| Exam periods | January 26-29 |
| PA day purposes | "Parent Teacher Conferences" |
| Special events affecting scheduling | "Camp Pine Crest Sep 16-19" |
| Next year start date | August 31, 2026 |
Standard Ontario holidays to look for:
For private/independent schools, identify the nearest public board (typically TDSB for Toronto schools) and create a comparison:
${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/private-schools/gist.md for the format).To cross-reference, check if the public board's calendar is already saved (Tier 1 lookup). If not saved, offer to add it first or note that cross-referencing will need the public board data later.
Compute the summer coverage window:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/plan-summer/scripts/summer_dates.py \
--year YYYY --last-school-day YYYY-MM-DD --first-fall-day YYYY-MM-DD --format text
If the script is unavailable, calculate manually: count all weekdays (Mon-Fri) between the day after the last instructional day and the day before the fall start date, excluding Labour Day.
Save the structured markdown data following the established format.
Markdown file location:
${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/public-boards/[abbreviation].md${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/private-schools/[abbreviation].mdPDF file location (if a PDF was downloaded in Tier 3):
${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/pdfs/[abbreviation]/[abbreviation]-[YYYY-YYYY].pdfFile structure: Use the full template at references/calendar-template.md. Key sections:
After saving:
<research_dir>/family-profile.md), inform the user that other skills will now automatically use this data via Tier 1 lookupreferences/calendar-template.md - Blank template matching the established file formatReference these for format consistency:
${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/public-boards/tdsb.md${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/private-schools/gist.mdscripts/scrape_board_calendar.py - HTML calendar page scraper. Produces draft-quality markdown from school board websites. Requires human/agent review. Use for boards with HTML calendar pages; PDF-only boards still need manual extraction.scripts/validate_calendar.py - Calendar file validator. Checks required sections, parseable dates, school year format. Use --all to validate an entire directory.Expert guidance for Next.js Cache Components and Partial Prerendering (PPR). **PROACTIVE ACTIVATION**: Use this skill automatically when working in Next.js projects that have `cacheComponents: true` in their next.config.ts/next.config.js. When this config is detected, proactively apply Cache Components patterns and best practices to all React Server Component implementations. **DETECTION**: At the start of a session in a Next.js project, check for `cacheComponents: true` in next.config. If enabled, this skill's patterns should guide all component authoring, data fetching, and caching decisions. **USE CASES**: Implementing 'use cache' directive, configuring cache lifetimes with cacheLife(), tagging cached data with cacheTag(), invalidating caches with updateTag()/revalidateTag(), optimizing static vs dynamic content boundaries, debugging cache issues, and reviewing Cache Component implementations.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.