Skip to content

Commit 5c8aac4

Browse files
sandbreak80claude
andcommitted
Remove PII from codebase for public GitHub launch
- Replaced personal names with generic "care recipients" in 18 files - Removed specific location (city, coordinates) from all docs - Removed internal network IPs from docs, configs, and nginx - Changed default email from personal to admin@example.com - Removed personal domain references - Genericized hardware specs in roadmap - Auto-detect gateway in watchdog instead of hardcoded IP - Only "Built with love for Don & Colleen" remains (project identity) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 899822e commit 5c8aac4

19 files changed

Lines changed: 89 additions & 90 deletions

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ All notable changes to Senior TV are documented here.
66

77
### First Public Beta
88

9-
The first public release of Senior TV. A fully functional kiosk entertainment, care, and communication system for seniors, deployed and battle-tested on a live system for Don & Colleen in Sun City, CA.
9+
The first public release of Senior TV. A fully functional kiosk entertainment, care, and communication system for seniors, deployed and battle-tested on a live system.
1010

1111
### Entertainment
1212
- 421 live TV channels via Pluto TV with category filters and HLS streaming

CLAUDE.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
44

55
## Project Overview
66

7-
Senior TV is a full-screen kiosk-style entertainment, communication, and care system for Don & Colleen (both 95, born 1931). Don has mid-stage dementia; Colleen has advanced Alzheimer's. TV is their primary daily activity. The system runs on a GMKtec NucBox K11 mini PC (Ubuntu 24.04, 4K) connected to a Samsung 65" TV via HDMI in Sun City, CA.
7+
Senior TV is a full-screen kiosk-style entertainment, communication, and care system for the care recipients (elderly couple with dementia/Alzheimer's). TV is their primary daily activity. The system runs on a mini PC (Ubuntu 24.04, 4K) connected to a Samsung 65" TV via HDMI.
88

99
## Architecture
1010

@@ -15,9 +15,9 @@ Senior TV is a full-screen kiosk-style entertainment, communication, and care sy
1515
- **SQLite** (`senior_tv.db`) — pills, calendar, birthdays, messages, favorites, settings; WAL mode for concurrent reads
1616
- **APScheduler** (`scheduler.py`) — pill reminders (1 min), birthday checks (1 hr), show alerts (10 min)
1717
- **SSE** (`/events`) — pushes pill reminders, doorbell alerts, show notifications, family messages to TV
18-
- **Jellyfin API** (`jellyfin_api.py`) — media library at `192.168.50.20:8096` (network server)
18+
- **Jellyfin API** (`jellyfin_api.py`) — media library on network server (URL configured in settings)
1919
- **Pluto TV** (`pluto_tv.py`) — 421 free live TV channels via HLS, logos via `path` key (not `url`)
20-
- **Immich API** (`immich_api.py`) — family photos from Immich at `192.168.50.165:2283` (network server); photos proxied through `/api/immich-photo/<id>` to hide API key
20+
- **Immich API** (`immich_api.py`) — family photos from Immich on network server (URL configured in settings); photos proxied through `/api/immich-photo/<id>` to hide API key
2121
- **Smart Home** (`smart_home.py`) — Frigate person detection on front_door camera, HA integration, room presence tracking
2222
- **Display** — forced to 1920x1080 (no 4K content); `monitors.xml` covers both HDMI ports, `start.sh` enforces via Mutter DBus API
2323
- **HDMI audio** (`fix_audio.sh`) — finds any HDMI sink via PipeWire `object.path`, works with either HDMI port; called by `start.sh` and `watchdog.sh`
@@ -45,8 +45,8 @@ Custom skills in `.claude/skills/` are automatically loaded by Claude Code when
4545

4646
These are hard constraints, not suggestions. They're driven by the users' medical conditions.
4747

48-
- **Don** can follow structured content: game shows, sports, sitcoms, westerns
49-
- **Colleen** needs low/no-plot: music, ambient, familiar visuals (music memory preserved longest)
48+
- **Care recipient with dementia** can follow structured content: game shows, sports, sitcoms, westerns
49+
- **Care recipient with Alzheimer's** needs low/no-plot: music, ambient, familiar visuals (music memory preserved longest)
5050
- **6-button navigation only** — Arrow keys, Enter, Escape. No mouse, no touch, no scroll. Everything reachable with these 6 inputs (Samsung remote → CEC → xdotool)
5151
- **36px minimum text** — Readable from 8 feet away on a 65" TV. When in doubt, make it bigger
5252
- **Dark theme, high contrast** — Light text on dark backgrounds. No thin fonts. No low-contrast decorative elements
@@ -118,19 +118,19 @@ SSE reconnects with exponential backoff (5s → 60s max). Alert sounds use Web A
118118

119119
| Service | Location | URL | Auth |
120120
|---------|----------|-----|------|
121-
| Jellyfin | Network server | `http://192.168.50.20:8096` | API key in settings DB |
122-
| Immich | Network server | `http://192.168.50.165:2283` | API key in settings DB |
123-
| Frigate | Network | `http://192.168.50.114:5000` | Session cookie login |
124-
| Home Assistant | Network | `http://192.168.50.76:8123` | Long-lived token |
121+
| Jellyfin | Network server | Configured in settings | API key in settings DB |
122+
| Immich | Network server | Configured in settings | API key in settings DB |
123+
| Frigate | Network | Configured in settings | Session cookie login |
124+
| Home Assistant | Network | Configured in settings | Long-lived token |
125125
| Pluto TV | External | Public API | No auth |
126-
| Open-Meteo | External | Public API | No auth (Sun City, CA: 33.7083, -117.1972) |
126+
| Open-Meteo | External | Public API | No auth (coordinates configured in settings) |
127127

128128
**Important:** All services run on dedicated network servers. Nothing runs in Docker on this box — no nginx, no Jellyfin, no Immich. Flask runs directly on the host. Cloudflare tunnel points directly at `localhost:5000`.
129129

130130
## Deployment & Remote Access
131131

132132
- **Fully automated install**: `git clone <repo> && cd senior-tv && sudo ./install.sh` — configures everything including Jellyfin, Immich, and Cloudflare tunnel
133-
- **Standardized credentials**: Jellyfin user `seniortv`/`seniortv`, Immich admin `bstoner@gmail.com`/`seniortv` (configurable via `.env`)
133+
- **Standardized credentials**: Jellyfin user `seniortv`/`seniortv`, Immich admin `admin@example.com`/`seniortv` (configurable via `.env`)
134134
- **Cloudflare Tunnel** for remote admin access (set `CLOUDFLARE_TUNNEL_TOKEN` in `.env`)
135135
- **SSH** via Tailscale: `ssh seniortv@<hostname>` (key-only auth)
136136
- **Tailscale** mesh VPN with SSH enabled (`tailscale up --ssh`)
@@ -150,7 +150,7 @@ SSE reconnects with exponential backoff (5s → 60s max). Alert sounds use Web A
150150
### Content population
151151
Media lives in `~/media/{movies,shows,music}/` (mounted read-only into the Jellyfin container). Two loader scripts:
152152

153-
- **`scripts/load_jellyfin_content.py`** (primary) — Downloads public domain content from Archive.org. 50 GB budget, rate limiting (auto-waits 60s on 429), resumes partial downloads, triggers Jellyfin library scan on completion. Categories: music (classical for Colleen), movies (westerns/comedy/drama), shows (game shows/sitcoms), ambient (fireplace/aquarium for wind-down).
153+
- **`scripts/load_jellyfin_content.py`** (primary) — Downloads public domain content from Archive.org. 50 GB budget, rate limiting (auto-waits 60s on 429), resumes partial downloads, triggers Jellyfin library scan on completion. Categories: music (classical, suited for Alzheimer's care), movies (westerns/comedy/drama), shows (game shows/sitcoms), ambient (fireplace/aquarium for wind-down).
154154
- **`scripts/load_jellyfin.sh`** (legacy) — Bash-based alternative, same Archive.org sources.
155155

156156
```bash

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ These aren't suggestions. They're hard constraints driven by the users.
2020

2121
2. **36px minimum text** — Readable from a couch 8 feet away on a 65" TV. When in doubt, make it bigger.
2222

23-
3. **No cognitive load**Don has mid-stage dementia. Colleen has advanced Alzheimer's. If a feature requires a decision, it should make that decision automatically.
23+
3. **No cognitive load**The care recipients have dementia/Alzheimer's. If a feature requires a decision, it should make that decision automatically.
2424

2525
4. **Dark theme, high contrast** — Light text on dark backgrounds. No thin fonts. No low-contrast decorative elements.
2626

@@ -34,7 +34,7 @@ These aren't suggestions. They're hard constraints driven by the users.
3434

3535
### Good First Issues
3636

37-
- **Remove a hardcoded value** — Search for "Don", "Colleen", "Sun City", or hardcoded IPs. Make it configurable via the Settings admin page.
37+
- **Remove a hardcoded value** — Search for hardcoded names, locations, or IPs. Make it configurable via the Settings admin page.
3838
- **Improve an admin page** — Better mobile layout, clearer labels, inline help text.
3939
- **Add a YouTube channel category** — Edit the seed data in `models.py`.
4040
- **Improve test coverage**`test_ui.py` has 93 tests but many features are untested.

FEATURE_TOUR.md

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Senior TV — Feature Tour
22

3-
**A complete entertainment, care, and communication system for Don & Colleen**
3+
**A complete entertainment, care, and communication system for seniors**
44

5-
Built for a 65" Samsung TV connected to a GMKtec NucBox K11 mini PC. Designed for two 95-year-olds with dementia and Alzheimer's — every feature prioritizes simplicity, large text, and minimal cognitive load.
5+
Built for a 65" Samsung TV connected to a mini PC. Designed for elderly viewers with dementia and Alzheimer's — every feature prioritizes simplicity, large text, and minimal cognitive load.
66

77
---
88

@@ -11,8 +11,8 @@ Built for a 65" Samsung TV connected to a GMKtec NucBox K11 mini PC. Designed fo
1111
The home screen is a hotel-TV-style welcome page that adapts throughout the day.
1212

1313
**What you see:**
14-
- Large clock, personalized greeting ("Good Morning, Colleen & Don!")
15-
- Current weather for Sun City, CA
14+
- Large clock, personalized greeting ("Good Morning!")
15+
- Current weather for your configured location
1616
- Next pill reminder and upcoming calendar event
1717
- Menu on the left, live LA news stream on the right (morning only — hidden after 3 PM per care plan)
1818
- After 3 PM: calming ambient video from Wind Down channels (Bob Ross, BBC Earth, nature, fireplace)
@@ -72,7 +72,7 @@ Powered by Jellyfin media server. Full library browsing with poster art.
7272

7373
## ▶️ YouTube — 36 Curated Channels
7474

75-
Hand-picked channels organized by category for Don & Colleen's interests.
75+
Hand-picked channels organized by category for seniors' interests.
7676

7777
**Categories:**
7878
- **Westerns:** Bonanza, The Rifleman, Death Valley Days
@@ -95,7 +95,7 @@ Hand-picked channels organized by category for Don & Colleen's interests.
9595
**You and Cheryl can send messages, photos, and videos directly to their TV.**
9696

9797
**How it works:**
98-
1. Go to the admin panel from your phone: `http://192.168.50.159:5000/admin/messages/send`
98+
1. Go to the admin panel from your phone: `http://<device-ip>:5000/admin/messages/send`
9999
2. Type a message, optionally attach a photo or video
100100
3. Hit "Send to TV Now"
101101
4. A notification pops up on the TV immediately: "💌 New Message from Brad!"
@@ -123,7 +123,7 @@ News is hidden from the home screen after 3 PM (care plan — reduces evening ag
123123

124124
## 🌤️ Weather
125125

126-
Full weather display for Sun City, CA.
126+
Full weather display for your configured location.
127127
- Current temperature, conditions, humidity, wind
128128
- 5-day forecast with daily highs/lows
129129
- Weather summary always visible on the home screen
@@ -140,7 +140,7 @@ Full weather display for Sun City, CA.
140140

141141
**Pre-loaded with US holidays** through 2027 (Memorial Day, Independence Day, Thanksgiving, Christmas, etc.)
142142

143-
**Birthdays:** Don (March 3) and Colleen (March 16) — full-screen birthday greetings at 9 AM with a Happy Birthday melody and age display.
143+
**Birthdays:** Full-screen birthday greetings at 9 AM with a Happy Birthday melody and age display.
144144

145145
*Screenshots: `09_calendar_daily.png`, `10_calendar_monthly.png`, `11_calendar_upcoming.png`*
146146

@@ -212,16 +212,15 @@ Cameras monitored: `front_door` (configurable to add `back_patio`, `garage`, etc
212212
Add family birthdays via admin. On their birthday at 9 AM:
213213
- Full-screen greeting with Happy Birthday melody
214214
- Shows their name and age (if birth year provided)
215-
- Don: March 3, 1931 (turns 95 in 2026)
216-
- Colleen: March 16, 1931 (turns 95 in 2026)
215+
- Add family birthdays with birth year for age display
217216

218217
*Screenshot: `17_admin_birthdays.png`*
219218

220219
---
221220

222221
## 📱 Admin Panel
223222

224-
Accessible from any device on the network at **http://192.168.50.159:5000/admin**
223+
Accessible from any device on the network at **http://<device-ip>:5000/admin**
225224

226225
**Sections:**
227226
| Page | What it does |
@@ -243,14 +242,14 @@ Accessible from any device on the network at **http://192.168.50.159:5000/admin*
243242

244243
## 🔧 Technical Details
245244

246-
- **Hardware:** GMKtec NucBox K11 mini PC, Ubuntu 24.04, 4K display
245+
- **Hardware:** Mini PC, Ubuntu 24.04, 4K display
247246
- **TV:** Samsung 65" connected via HDMI
248247
- **Browser:** Google Chrome kiosk mode (dedicated profile, uBlock Origin ad blocker)
249248
- **Backend:** Python/Flask, SQLite, APScheduler
250249
- **Media:** Jellyfin (local Docker on localhost:8096 — public domain movies, classical music, classic TV shows from Archive.org)
251250
- **Live TV:** Pluto TV (421 channels with logos, HLS proxy for CORS bypass)
252251
- **Photos:** Immich (local Docker on localhost:2283 — family photo library, ML disabled for RAM savings)
253-
- **Smart Home:** Frigate (doorbell camera, 192.168.50.114), Home Assistant (TV control, 192.168.50.76)
252+
- **Smart Home:** Frigate (doorbell camera), Home Assistant (TV control)
254253
- **Remote:** Samsung TV remote via HDMI-CEC → keyboard events via xdotool
255254
- **Auto-start:** systemd service with process supervision (Flask + Chrome + CEC bridge)
256255
- **Self-healing:** Local watchdog (3 min) + Claude AI health agent (hourly) + HDMI audio persistence
@@ -268,10 +267,10 @@ Accessible from any device on the network at **http://192.168.50.159:5000/admin*
268267
- Persistent title bar so they never forget what's playing
269268
- Time-of-day content adapted to cognitive needs
270269
- No high-stimulation content in the evening (sundowning prevention)
271-
- Music content prioritized for Colleen (music memory preserved longest in Alzheimer's)
272-
- Structured content for Don (game shows, sports, procedurals)
270+
- Music content prioritized for Alzheimer's care (music memory preserved longest)
271+
- Structured content for dementia care (game shows, sports, procedurals)
273272
- Shower reminders that block the TV — because that's what it takes
274273
- Family stays connected through messages, photos, and video
275274
- Doorbell alerts keep them aware of visitors
276275

277-
**Built with love for Don & Colleen.**
276+
**Built with love for seniors everywhere.**

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ This system is designed to **run for months without physical intervention**:
241241

242242
## Known Limitations
243243

244-
- **Single deployment** — Hardcoded names ("Don & Colleen") and location (Sun City, CA) throughout templates. Profile system planned
244+
- **Single deployment** — Hardcoded names and location throughout templates. Profile system planned
245245
- **No first-boot wizard** — Post-install config requires admin panel. Guided setup planned
246246
- **Pluto TV dependency** — Live TV relies on Pluto TV's free API which could change or shut down
247247
- **YouTube sandboxing** — YouTube iframes can't report playback state, so duration tracking is estimate-based
@@ -300,5 +300,5 @@ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
300300

301301
<p align="center">
302302
<em>Built with love for Don & Colleen.</em><br>
303-
<em>Two 95-year-olds in Sun City, CA who just want to watch TV.</em>
303+
<em>Two 95-year-olds who just want to watch TV.</em>
304304
</p>

0 commit comments

Comments
 (0)