Planning Center scheduling tools for worship admins.
This app helps teams schedule people into open positions for specific plans by combining:
- service type and plan selection
- needed team positions grouped by team
- people matching for the selected team/position
- availability and recent scheduling history context
- one-click scheduling into Planning Center
The root route (/) redirects to /services.
This repo uses Bun for dependency management and scripts. Use bun.lock as the only lockfile; do not use npm or commit package-lock.json.
bun installCreate a local env file from the template:
cp .env.example .env.localRequired values are documented in .env.example:
BETTER_AUTH_URLBETTER_AUTH_SECRETDATABASE_URLPLANNING_CENTER_OAUTH_CLIENT_IDPLANNING_CENTER_OAUTH_CLIENT_SECRET
In your Planning Center OAuth app settings, add:
- Local:
http://localhost:3000/api/auth/oauth2/callback/planning-center - Production:
https://worshipadmin.com/api/auth/oauth2/callback/planning-center
bun run db:migrate
bun run db:seedbun run devOpen http://localhost:3000.
All routes are server-side and use authenticated Planning Center access where required.
GET /api/service-typesGET /api/plans?service_type_id=...GET /api/team-positions?service_type_id=...&plan_id=...GET /api/people?service_type_id=...&position_id=...GET /api/blockouts/[id]GET /api/schedule-history/[id]?days=...POST /api/my-scheduled-plansPOST /api/scheduleGET/POST /api/planning-center/accountsGET /api/debug/planning-center-context(debug endpoint)ALL /api/auth/[...all](Better Auth handler)
app/
api/ # Next.js API routes
auth/page.tsx # Sign-in route
services/page.tsx # Service plan selection route
services/[serviceTypeId]/plans/[planId]/[view]/page.tsx
# Main plan workspace route
components/
dashboard-page.tsx # Main schedule workflow UI
person-card.tsx # Person row/card with schedule actions
service-plan-table-selector.tsx
account-menu.tsx
ui/ # UI primitives
hooks/
use-service-types.ts
use-plans.ts
use-team-positions.ts
use-people.ts
use-schedule-history.ts
use-blockouts.ts
use-my-scheduled-plans.ts
lib/
use-cases/planning-center/ # Business logic
planning-center/services/ # Planning Center API wrappers
http/ # Shared route/client helpers
auth.ts # Better Auth config
bun run devbun run buildbun run startbun run lintbun run typecheckbun run testbun run test:watch
bun run typecheck
bun run testUnit tests are colocated with use-cases under lib/use-cases/planning-center/*.test.ts.
Local scraped API docs are in docs/planning-center-api/. See docs/planning-center-api/README.md for export details.