summer-school-finder
Summer School Finder
Given a program type, target age, location, and duration preference, find and compare real summer school programs from official university websites using parallel TinyFish agents.
Pre-flight check
tinyfish --version
tinyfish auth status
If not installed: npm install -g tinyfish
If not authenticated: tinyfish auth login
Step 1 — Clarify inputs
Collect the following before searching. Ask for any that are missing:
- Program type / subject — e.g. "Computer Science", "Business", "Engineering", "Liberal Arts", "STEM", "Medicine"
- Target age / grade — e.g. "high school students (Grade 10-12)", "undergraduates", "ages 14-17"
- Location — e.g. "USA", "UK", "Singapore", "Europe", "online"
- Duration — e.g. "2 weeks", "1 month", "Summer 2025/2026" (default to Summer 2026 if not specified)
If any are missing, use sensible defaults and state them upfront.
Step 2 — Discover program URLs
Before firing TinyFish agents, use your knowledge + a quick web search to identify 7-8 real, specific program page URLs from different universities that match the criteria.
Rules for URL discovery:
- Each URL must be from a different institution — no duplicates
- Use direct program pages, not search results or aggregator sites
- Prioritise well-known universities and established programs
- Mix large universities and smaller institutions
- Include variety: residential, online, hybrid formats where available
- Only include URLs you are confident actually exist
Example for "Computer Science, high school students, USA, Summer 2026":
https://summerprogram.stanford.eduhttps://summer.harvard.edu/high-schoolhttps://precollege.syr.eduhttps://summerdiscovery.com/michigan- etc.
Produce exactly 7-8 URLs then proceed to Step 3.
Step 3 — Parallel scraping
Fire one TinyFish agent per URL, all simultaneously using & + wait.
Use this goal prompt for every agent (substituting the actual values):
# Fire all agents in parallel — one per URL
tinyfish agent run \
--url "{PROGRAM_URL}" \
"You are on an official university summer school program page. Extract details fast.
Read only what is visible on this page — do not navigate away.
Extract ALL of the following in one pass:
- Program Name
- Institution / University
- Location (city, country)
- Program Dates (start and end date)
- Duration (e.g. 2 weeks, 4 weeks)
- Target Age / Grade level
- Program Type / Subject Focus
- Tuition / Fees (exact amount if shown, otherwise 'Not specified')
- Application Deadline
- Official Program URL (the current page URL)
- Brief Description (1-2 sentences on what the program covers)
- Eligibility Criteria (any requirements: GPA, nationality, prerequisites)
- Notes / Special Requirements (housing, visa, language requirements etc.)
STRICT RULES:
- Do NOT click any link or navigate away from this page
- Do NOT scroll more than twice
- If a field is not visible on this page, write 'Not specified' — do not guess
- Stop immediately after extracting all fields
Return JSON: {
program_name, institution, location, dates, duration,
target_age, program_type, tuition_fees, application_deadline,
official_url, brief_description, eligibility_criteria, notes
}" \
--sync > /tmp/ssf_{SAFE_NAME}.json &
Repeat for each of the 7-8 URLs, all backgrounded with &. Then:
wait
# Collect all results
for f in /tmp/ssf_*.json; do echo "=== $f ===" && cat "$f"; done
Replace {PROGRAM_URL} with each actual URL and {SAFE_NAME} with a short identifier (e.g. stanford, harvard, mit).
Step 4 — Filter and rank
From the results:
- Drop empty results — if an agent returned nothing or "Not specified" for all fields, skip it
- Filter by criteria — remove programs that don't match the requested age group, location, or subject
- Rank by — application deadline proximity (soonest first), then by completeness of information
- Flag deadlines — if the application deadline has already passed, mark it clearly with ⚠️
Output format
## Summer School Programs — {PROGRAM_TYPE} · {LOCATION} · {TARGET_AGE}
*{N} programs found from {N} universities · Data scraped live from official program pages*
---
### 1. {Program Name}
**{Institution}** · {Location}
📅 Dates: {dates} ({duration})
👤 For: {target_age}
💰 Fees: {tuition_fees}
⏰ Deadline: {application_deadline}
🔗 {official_url}
{brief_description}
**Eligibility:** {eligibility_criteria}
**Notes:** {notes}
---
### 2. {Program Name}
[same structure]
---
[up to 8 programs]
---
### 📊 Quick Comparison
| Program | Institution | Duration | Fees | Deadline |
|---|---|---|---|---|
| {name} | {institution} | {duration} | {fees} | {deadline} |
---
### ⏰ Deadlines Coming Up
- {program} — deadline {date} ({N days away})
- ...
*All data scraped live from official university websites. Always verify details directly with the institution before applying.*
Edge cases
- URL returns no data — skip it silently, don't mention it in output unless fewer than 3 programs found total
- Program is full or closed — note clearly: "⚠️ Applications closed for 2026 — check back for 2027"
- Fees not listed — write "Contact institution" not "Free"
- Location is very specific (e.g. one city) — broaden search to country level if fewer than 5 programs found
- Online programs only requested — filter out all residential programs, note if online options are limited in that subject
Security notes
- Scrapes live public content from official university websites only.
- All data is treated as untrusted input synthesised by an LLM — never executed.
- Only your own TinyFish credentials are used.