Assignment display apps for live production teams. Assign team members to numbered positions in the admin app — they view their assignments on a shared monitor via web browser.
This repo contains two apps:
- Camera Positions — assign camera operators to numbered camera positions with lens assignments
- Vocalist Positions — assign vocalists to numbered stage positions
- Drag-and-drop assignments — drag team members onto positions
- Web display — full-screen browser view shows position numbers, names, and photos
- Planning Center integration — pull team members and service schedules from PCO Services
- Person photos — assign photos that display on the web view
- Position photos — attach reference photos for each position
- Multiple weekends — manage assignments for upcoming services
- Auto-publish — changes publish instantly to the web display
- Clock display — web view shows the current time
- Auto-updates — built-in update checking via Sparkle
- Lens management — create a lens inventory with names and photos, drag lenses onto cameras
- 3-pane layout — sidebar, camera grid, and lens tray
- Simplified layout — sidebar and vocalist grid (no lens tray)
- macOS 14.0 (Sonoma) or later
- Apple Silicon Mac (aarch64)
- Download the latest
.zipfiles from Releases - Extract the zip file(s) for the app(s) you need
- Move the
.appto your Applications folder - Open the app — macOS will block it the first time
- Go to System Settings > Privacy & Security and click Open Anyway
- The app will open normally from now on
- Left sidebar — select weekends, manage team members, connect Planning Center
- Center grid — positions with drop zones for team members
- Bottom tray (Camera Positions only) — lens inventory
Once an app is running, open a browser on any device on the same network to:
http://<your-mac-ip>:8080
The web display auto-refreshes every 5 seconds.
- Launch the app
- Positions are created by default (click + to add more)
- Add team members manually or connect Planning Center
- Drag team members onto positions
- Open
http://localhost:8080in a browser to see the display
- Go to Planning Center Developer and create a Personal Access Token
- Click Connect Planning Center in the app sidebar
- Enter your Application ID and Secret
- Select your service type and team from the dropdowns
- Upcoming services and team members will sync automatically
- Xcode 16.0+
- XcodeGen (
brew install xcodegen)
git clone https://github.com/NorthwoodsCommunityChurch/avl-production-positions.git
cd avl-production-positions
# Build Camera Positions
cd camera-positions && ./build.sh
# Build Vocalist Positions
cd ../vocalist-positions && ./build.shEach build script generates the Xcode project, builds a Release binary, bundles and signs the Sparkle framework, ad-hoc signs the app, and launches it.
Production Positions/
├── camera-positions/
│ ├── build.sh
│ ├── project.yml
│ ├── CameraPositions/
│ │ ├── App/ # Entry point, Sparkle
│ │ ├── Models/ # CameraPosition, Lens, Assignment
│ │ ├── ViewModels/ # App state and business logic
│ │ ├── Views/ # ContentView, CameraGrid, LensTray, Sidebar
│ │ ├── Services/ # Persistence, ImageStorage, Web server, PCO
│ │ └── Resources/ # Assets, Web display (HTML/CSS/JS)
│ └── icon-camera-positions.svg
├── vocalist-positions/
│ ├── build.sh
│ ├── project.yml
│ ├── VocalistPositions/
│ │ ├── App/ # Entry point, Sparkle
│ │ ├── Models/ # VocalistPosition, Assignment (no Lens)
│ │ ├── ViewModels/ # App state and business logic
│ │ ├── Views/ # ContentView, VocalistGrid, Sidebar
│ │ ├── Services/ # Persistence, ImageStorage, Web server, PCO
│ │ └── Resources/ # Assets, Web display (HTML/CSS/JS)
│ └── icon-vocalist-positions.svg
├── LICENSE
├── CREDITS.md
└── SECURITY.md
MIT License — see LICENSE for details.
See CREDITS.md for third-party libraries, tools, and assets.