How kirkkala/hoopfinder works
Hoop Finder is a Finnish-first directory for finding outdoor basketball courts in Finland, with map, city listings, and court pages. Visitors can also suggest courts and corrections, upload photos, and send feedback; administrators review and publish submissions. The public catalog uses a committed snapshot rather than querying source APIs at runtime. Edges are limited to README-documented behavior and relationships shown by the excerpts or SOURCE INDEX; some page-to-component wiring is therefore omitted.
Main entry points: submitted-courts.ts Submission workflow · court-edits/route.ts Correction API · [id]/route.ts Admin court API · catalog.ts Court catalog
Components 23
Court discovery
- Court map
src/app/kartta/page.tsx - City listings
src/app/koripallokentat/page.tsx - City courts
src/app/koripallokentat/[city]/page.tsx - Court details
src/components/court/CourtDetails.tsx - Map explorer
src/components/explorer/CourtExplorer.tsx - Court catalog
src/lib/catalog.ts - Court snapshot
data/courts.json
Visitor contributions
- Suggest a court
src/components/add-court/AddCourtView.tsx - Court submission API
src/app/api/submitted-courts/route.ts - Email confirmation
src/app/add/confirm/[token]/page.tsx - Submission workflow
src/lib/submitted-courts.ts - Correction API
src/app/api/court-edits/route.ts - Court photos API
src/app/api/court-photos/route.ts - Photo service
src/lib/court-photos.ts - Feedback API
src/app/api/feedback/route.ts - Feedback service
src/lib/feedback.ts
Administration
- Admin workspace
src/components/admin/AdminCourtsView.tsx - Admin court API
src/app/api/admin/courts/[id]/route.ts
Shared services
- Court rules
src/lib/courts.ts - Admin authentication
src/auth.ts - Postgres access
src/lib/db.ts - Transactional email
src/lib/email.ts
Other components
- Visitor
Connections 21
- Visitor → Court map: finds courts
README.md - Visitor → City listings: browses cities
README.md - Visitor → Court details: opens court
README.md - Visitor → Suggest a court: suggests court
README.md - Visitor → Correction API: suggests correction
README.md - Visitor → Court photos API: adds photos
README.md - Visitor → Feedback API: sends feedback
README.md - Court catalog → Court snapshot: reads snapshot
src/lib/catalog.ts - Court catalog → Court rules: merges courts
src/lib/catalog.ts - Court submission API → Submission workflow: creates submission
src/app/api/submitted-courts/route.ts - Correction API → Submission workflow: creates correction
src/app/api/court-edits/route.ts - Correction API → Admin authentication: checks session
src/app/api/court-edits/route.ts - Submission workflow → Postgres access: stores submissions
src/lib/submitted-courts.ts - Submission workflow → Transactional email: sends confirmations
src/lib/submitted-courts.ts - Visitor → Email confirmation: confirms by email
README.md - Admin workspace → Admin court API: publishes courts
README.md - Admin court API → Admin authentication: checks admin
src/app/api/admin/courts/[id]/route.ts - Admin court API → Submission workflow: updates submissions
src/app/api/admin/courts/[id]/route.ts - Court photos API → Photo service: handles photos
src/app/api/court-photos/route.ts - Feedback API → Feedback service: handles feedback
src/app/api/feedback/route.ts - Photo service → Postgres access: stores metadata
src/lib/court-photos.ts