A family command center built on a Raspberry Pi. Manage schedules, chores, countdowns, photo slideshows, and Bible verses β from a beautiful dark-themed wall display, your phone, or your watch.
| Web Dashboard | Phone App | Watch App | |
|---|---|---|---|
| π Schedule | Full-day timeline with progress tracking | Add, edit, delete blocks + templates | View today's blocks |
| β Chores | Per-kid cards with completion animations | Assign and toggle chores | Tap to complete |
| β³ Countdowns | Animated hero countdown with floating dots | Manage upcoming events | Quick glance |
| β±οΈ Timer | Full-screen countdown with alarm | Start/stop from anywhere | Timer controls |
| π Verses | Daily rotation in header | Add and manage verses | β |
| π· Photos | Ken Burns slideshow with weather overlay | Set album + switch modes | β |
| π£οΈ Voice | β | β | β |
Voice control works on any Google Home/Nest device via webhooks:
"Hey Google, Aurora finished make bed" "Hey Google, what are Deandre's chores?"
The Hub supports three display modes, switchable from the phone app:
- π₯οΈ Dashboard β Chores, schedule, countdowns, timer, Bible verse
- π· Photos β Full-screen Google Photos slideshow with clock, weather, and verse overlay
- β¨ Auto β Photos at night (8 PMβ7 AM), dashboard during the day
A live mode indicator appears on both the wall display and the phone app.
βββββββββββββββββββββββββββββββββββββββββββββββ
β Raspberry Pi (Hub) β
β β
β ββββββββββββ ββββββββββββ βββββββββββββ β
β β index.php β β api.php β β photos.phpβ β
β β Dashboard β β REST API β β Slideshow β β
β ββββββββββββ ββββββββββββ βββββββββββββ β
β β β
β βββββββββββ΄ββββββββββ β
β β data.json β β
β β photo-settings β β
β βββββββββββββββββββββ β
β β β
β ββββββββββββ βββββββ΄βββββββ β
β β voice.php β β lighttpd β β
β β Webhooks β β Web Server β β
β ββββββββββββ ββββββββββββββ β
ββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β HTTP (WiFi / Tailscale / Cloudflare)
βββββββ΄βββββββ
β β
ββββββ΄βββββ ββββββ΄βββββ
β Android β β Wear OS β
β Phone β β Watch β
βββββββββββ βββββββββββ
- Raspberry Pi 4 (2GB+ RAM) with Raspbian / Raspberry Pi OS
- Display β DAKboard, any monitor, or a TV in kiosk mode
- lighttpd with PHP (FastCGI)
- Cloudflare Tunnel (optional) β for remote access and voice webhooks
- Android phone and/or Wear OS watch for companion apps
git clone https://github.com/JasonGraber/graber-hub.git
cd graber-hubscp web/{api,index,photos,voice}.php pi@<PI_IP>:/tmp/
# On the Pi:
sudo cp /tmp/{api,index,photos,voice}.php /var/www/html/
sudo chown www-data:www-data /var/www/html/{api,index,photos,voice}.php
sudo mkdir -p /home/pi/graber-hub
sudo chown www-data:www-data /home/pi/graber-hubThe API auto-creates data.json with defaults on first request. To customize kids, copy the example:
scp web/data.example.json pi@<PI_IP>:/home/pi/graber-hub/data.jsonhttp://localhost/index.php
Phone app:
cd android && ./gradlew assembleDebug
# APK β android/app/build/outputs/apk/debug/app-debug.apkWatch app:
cd watch && ./gradlew assembleDebug
adb connect <WATCH_IP>:<PORT>
adb install watch/app/build/outputs/apk/debug/app-debug.apkBase URL: http://<PI_IP>/api.php
| Endpoint | Method | Description |
|---|---|---|
/dashboard |
GET | Full dashboard data (kids, chores, schedule, countdowns, verse) |
/schedule |
GET | Today's schedule blocks |
/schedule |
POST | Add a schedule block |
/schedule/{id} |
PUT | Edit a schedule block |
/schedule/{id} |
DELETE | Delete a schedule block |
/chores |
GET | Today's chores |
/chores |
POST | Add a chore |
/chores/{id}/toggle |
POST | Toggle chore completion |
/chores/{id} |
DELETE | Delete a chore |
/kids/{id} |
PUT | Update kid config (name, color) |
/countdowns |
GET/POST | List or add countdowns |
/countdowns/{id} |
DELETE | Delete a countdown |
/timer/start |
POST | Start timer ({ minutes, label }) |
/timer/stop |
POST | Stop the timer |
/timer |
GET | Timer status |
/mode |
GET/POST | Get or set display mode |
/photo-settings |
GET/POST | Photo slideshow settings |
/verses |
GET/POST | List or add Bible verses |
/verses/{id} |
DELETE | Delete a verse |
See docs/GOOGLE-ASSISTANT-SETUP.md for the full Google Home / IFTTT setup guide.
Built-in smart features:
- Fuzzy matching β "make the bed" matches "make bed"
- Nicknames β "Lexi" β Alexia, "Dre" β Deandre, "Tru" β Truett
- Encouraging responses β random positive messages on completion
- All-done celebration β special message when a kid finishes everything
Edit data.json to set names, initials, and accent colors:
{
"kids": [
{ "id": 1, "name": "Aurora", "initial": "A", "color": "#ec5281" },
{ "id": 2, "name": "Deandre", "initial": "D", "color": "#03a9f4" }
]
}The dashboard uses CSS custom properties β easy to retheme:
:root {
--bg: #0a0a0f;
--surface: #14141f;
--accent: #03a9f4;
--pink: #ec5281;
--green: #4ade80;
}Add via the API or companion app. Verses rotate daily.
- Create a shared Google Photos album
- Paste the share URL in the companion app
- Switch display mode to "Photos" or "Auto"
graber-hub/
βββ web/ # Raspberry Pi dashboard & API
β βββ index.php # Dashboard UI (HTML/CSS/JS)
β βββ api.php # REST API
β βββ photos.php # Photo slideshow engine
β βββ voice.php # Voice webhook endpoints
β βββ data.example.json # Example data file
βββ android/ # Phone companion app
β βββ app/src/main/java/... # Kotlin + Jetpack Compose
β βββ build.gradle.kts
β βββ gradlew
βββ watch/ # Wear OS watch app
β βββ app/src/main/kotlin/... # Kotlin + Wear Compose
β βββ build.gradle.kts
β βββ gradlew
βββ docs/ # Documentation
β βββ GOOGLE-ASSISTANT-SETUP.md
βββ LICENSE
βββ README.md
| Component | Stack |
|---|---|
| Web Dashboard | PHP, vanilla JS (ES5 for Pi compatibility), CSS3 |
| API | PHP with JSON file storage |
| Phone App | Kotlin, Jetpack Compose, Material 3, Retrofit |
| Watch App | Kotlin, Wear Compose, Horologist, Retrofit |
| Infrastructure | lighttpd, Cloudflare Tunnel, Tailscale |
This started as a family project. If you want to build something similar:
- Fork the repo
- Customize kids, colors, schedule templates, and verses
- Deploy to your Pi
- PRs welcome for features that help other families!
MIT License β see LICENSE for details.
Built with love for the Graber family by Jason Graber and Cody.
"Train up a child in the way he should go; even when he is old he will not depart from it." β Proverbs 22:6