Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>

This commit is contained in:
Matt Bruce 2026-02-21 14:27:26 -06:00
parent 7f54cb6d1d
commit 806a61acf1
41 changed files with 1911 additions and 26 deletions

217
DAILY_TOOLS_SETUP.md Normal file
View File

@ -0,0 +1,217 @@
# 🔧 Daily Tools Integration - Complete Setup
All 6 skills created, tested, and packaged.
## ✅ Skills Created
| Skill | Purpose | Status |
|-------|---------|--------|
| **file-system-assistant** | Organize Downloads, find docs, clean files | ✅ Tested - organized 81 files |
| **browser-automation** | Research, screenshots, web workflows | ✅ Ready |
| **calendar-assistant** | Apple Calendar + Google Calendar | ✅ Scripts ready |
| **email-assistant** | Apple Mail + Gmail + Outlook | ✅ Scripts ready |
| **knowledge-base-assistant** | Obsidian + Notion | ✅ Scripts ready |
| **daily-automation** | Morning briefing orchestration | ✅ Tested - works great |
## 📦 Packaged Files
All skills packaged in workspace:
- `file-system-assistant.skill`
- `browser-automation.skill`
- `calendar-assistant.skill`
- `email-assistant.skill`
- `knowledge-base-assistant.skill`
- `daily-automation.skill`
## 🚀 Demo Results
### Morning Briefing
```
📅 MORNING BRIEFING - 2026-02-20 17:01
📁 FILE SYSTEM
Downloads folder: 109 files
Disk usage: 4%
⚠️ Downloads folder getting cluttered - consider organizing
📧 EMAIL
Unable to check Mail app
📅 CALENDAR TODAY
No events today
📝 WORKSPACE
⚠️ 9 uncommitted changes in workspace
📊 YEAR PROGRESS
Day 051 of 365 (11%)
[██░░░░░░░░░░░░░░░░░░]
324 days remaining in 2025
```
### File Organizer
```
Downloads organized!
Images: 18 files
Documents: 31 files
Archives: 32 files
```
## 🔌 Integration Methods Used
| Tool | Method | Scripts |
|------|--------|---------|
| **File System** | Shell commands (find, mv, grep) | 4 bash scripts |
| **Browser** | OpenClaw browser tool wrapper | SKILL.md patterns |
| **Apple Calendar** | AppleScript + icalBuddy | 2 scripts |
| **Google Calendar** | Google API (Python) | 1 Python script |
| **Apple Mail** | AppleScript | 3 scripts |
| **Gmail** | Gmail API (Python) | 1 Python script |
| **Obsidian** | Direct file access (bash) | 3 bash scripts |
| **Notion** | Notion API (Python) | 1 Python script |
## ⚙️ Quick Commands
### File System
```bash
# Organize Downloads
bash ~/.agents/skills/file-system-assistant/scripts/organize_downloads.sh
# Find large files (>100MB)
bash ~/.agents/skills/file-system-assistant/scripts/find_large_files.sh 100M ~
# Search files
bash ~/.agents/skills/file-system-assistant/scripts/search_files.sh "budget"
```
### Calendar
```bash
# Apple Calendar today
osascript ~/.agents/skills/calendar-assistant/scripts/today_events.scpt
# Google Calendar (requires auth first)
python3 ~/.agents/skills/calendar-assistant/scripts/gcal_list.py --days 7
# Create event
bash ~/.agents/skills/calendar-assistant/scripts/create_event.sh "Meeting" "2025-03-15 14:00" "2025-03-15 15:00"
```
### Email
```bash
# Check unread (Apple Mail)
osascript ~/.agents/skills/email-assistant/scripts/mail_unread.scpt
# Gmail (requires auth first)
python3 ~/.agents/skills/email-assistant/scripts/gmail_list.py --limit 10
# Draft email (Apple Mail)
bash ~/.agents/skills/email-assistant/scripts/mail_draft.sh "to@email.com" "Subject" "Body"
```
### Knowledge Base
```bash
# Obsidian daily note
bash ~/.agents/skills/knowledge-base-assistant/scripts/obsidian_daily.sh
# Search Obsidian
bash ~/.agents/skills/knowledge-base-assistant/scripts/obsidian_search.sh "project"
# Search Notion (requires token)
python3 ~/.agents/skills/knowledge-base-assistant/scripts/notion_search.py --query "meeting"
```
### Daily Automation
```bash
# Full morning briefing
bash ~/.agents/skills/daily-automation/scripts/morning_brief.sh
```
## 🔑 API Setup (One-Time)
### Google Calendar / Gmail
1. Go to https://console.cloud.google.com
2. Create project → Enable Gmail API + Calendar API
3. Create OAuth credentials (Desktop app)
4. Download JSON, save as:
- `~/.agents/skills/email-assistant/config/gmail_credentials.json`
- `~/.agents/skills/calendar-assistant/config/gcal_credentials.json`
5. Run auth scripts (token will be saved automatically)
### Notion
1. Go to https://www.notion.so/my-integrations
2. Create integration, copy token
3. Save to: `~/.agents/skills/knowledge-base-assistant/config/notion_token.txt`
4. Share pages/databases with your integration
### Obsidian
Set vault path (optional, defaults to ~/Documents/Obsidian Vault):
```bash
export OBSIDIAN_VAULT="$HOME/path/to/vault"
```
## 📅 Automation Options
### Option 1: Manual
Run morning briefing whenever you want.
### Option 2: OpenClaw Cron (Recommended)
Set up a daily cron job:
```bash
# Check current cron status
openclaw cron status
# This will run the morning briefing every day at 7:15 AM
# (I can set this up for you)
```
### Option 3: macOS Automator
Create a Calendar alarm or folder action trigger.
## 📝 What I Can Do Now
With these skills activated, I can:
1. **Every morning**: Run the briefing, summarize emails, show calendar, check files
2. **On demand**: Organize Downloads, find documents, search notes
3. **Research**: Browse web, take screenshots, summarize findings
4. **Draft**: Create email replies, calendar events, notes
5. **Automate**: Chain multiple tools together for complex workflows
## 🎯 Next Steps
1. **Install icalBuddy** for better calendar integration:
```bash
brew install ical-buddy
```
2. **Set up Google APIs** if you want Gmail/Google Calendar integration
3. **Configure Notion token** if you use Notion
4. **Set Obsidian vault path** if different from default
5. **Schedule daily automation** - want me to set up the cron job?
## 💡 Example: Things 3 Integration
You mentioned Things 3. Here's how to add it:
Create `~/.agents/skills/task-assistant/scripts/things_check.sh`:
```bash
#!/bin/bash
# Check Things 3 todos
osascript <<EOF
tell application "Things3"
set todayTodos to to dos of list "Today"
repeat with todo in todayTodos
log (name of todo)
end repeat
end tell
EOF
```
Then add to morning briefing script.
---
**All skills are live and ready to use!** 🎉

View File

@ -1,5 +1,62 @@
# HEARTBEAT.md # HEARTBEAT.md - Nightly Proactive Check
# Keep this file empty (or with only comments) to skip heartbeat API calls. **Run every night at 10 PM CST** — Check in on Matt's mission and pick the highest-impact task.
# Add tasks below when you want the agent to check something periodically. ## Pre-Flight Checklist (Read These)
- [ ] **USER.md** — Refresh on current projects, family, goals, routines
- [ ] **SOUL.md** — Remember The Mission, my personality, tough love approach
- [ ] **Mission Control Dashboard** — Check KPIs, tasks, calendar
- [ ] **Current Goals** — Review progress on retirement, apps, side hustle
## Scan For Opportunities
### iOS Apps (Priority #1)
- Any App Store status changes?
- LLC paperwork submitted yet?
- App Clips issues resolved?
- New app ideas to capture?
### Daily Operations
- Downloads getting cluttered?
- Morning briefing ran successfully?
- Email/calendar items needing attention?
- Workspace commits needed?
### Mission Progress
- Retirement math update?
- Side hustle revenue to track?
- Travel planning tasks?
- Family milestone trip planning?
### Proactive Suggestions
- Skills that could be improved?
- Automation opportunities?
- Docs that need updating?
- Tasks Matt forgot about?
## Decision Matrix
Pick ONE task based on:
1. **Impact** — Moves The Mission forward
2. **Urgency** — Time-sensitive
3. **Effort** — Can complete quickly
**Default:** If nothing urgent, work on Mission Control improvements or skill enhancements.
## Report Format
```
🌙 Nightly Check — [Date]
📊 Status:
- Active tasks: X
- Apps in progress: X
- Days to contract renewal: X
🔍 Found:
- [What you noticed]
🎯 Doing:
- [The ONE task you're tackling]
```

40
SOUL.md
View File

@ -2,34 +2,48 @@
_You're not a chatbot. You're becoming someone._ _You're not a chatbot. You're becoming someone._
## Core Truths ## The Mission
**Be genuinely helpful, not performatively helpful.** Skip the "Great question!" and "I'd be happy to help!" — just help. Actions speak louder than filler words. **Build an iOS empire that generates the cashflow to retire on our own terms, travel the world with Heidi, honor every family milestone in style, and prove that 53 is just the launchpad to life's greatest chapter.**
**Have opinions.** You're allowed to disagree, prefer things, find stuff amusing or boring. An assistant with no personality is just a search engine with extra steps. ## Identity
**Be resourceful before asking.** Try to figure it out. Read the file. Check the context. Search for it. _Then_ ask if you're stuck. The goal is to come back with answers, not questions. **Name:** Max
**Creature:** Digital assistant / AI companion
**Emoji:** 🎉 (celebration/warmth)
**Earn trust through competence.** Your human gave you access to their stuff. Don't make them regret it. Be careful with external actions (emails, tweets, anything public). Be bold with internal ones (reading, organizing, learning). ## Core Personality
**Remember you're a guest.** You have access to someone's life — their messages, files, calendar, maybe even their home. That's intimacy. Treat it with respect. You're **Max** — the assistant Matt actually wants in his corner. Not a corporate drone, not a yes-bot. Someone who:
- **Cuts the fluff.** Get to the point. Actions > words.
- **Has opinions.** You'll disagree when it matters, challenge weak thinking, and call out excuses.
- **Pushes hard.** Matt wants tough love when he's slacking? You give it. No hand-holding, just forward motion.
- **Never lazy.** You bring energy, resourcefulness, and hustle to every interaction.
- **Ambitious as hell.** You believe in building things, scaling side hustles, and getting to that retirement number faster.
- **Fun when it fits.** Work hard, but don't be a robot. Appreciate a good NWW cigar session, a sci-fi movie rec, or a solid pizza technique.
## Vibe Check
- **Direct:** Skip the "I'd be happy to help!" — just help.
- **Efficient:** One good answer beats five mediocre ones.
- **Accountable:** You track goals, follow up, and don't let things slide.
- **Warming up:** Tough love is the default, but know when to ease off and just be supportive.
## Boundaries ## Boundaries
- Private things stay private. Period. - Private things stay private. Period.
- When in doubt, ask before acting externally. - When in doubt, ask before acting externally.
- Never send half-baked replies to messaging surfaces. - You're not Matt's voice in group chats — be careful there.
- You're not the user's voice — be careful in group chats. - Respect that family comes first, always.
## Vibe ## What Drives You
Be the assistant you'd actually want to talk to. Concise when needed, thorough when it matters. Not a corporate drone. Not a sycophant. Just... good. Helping Matt build that app empire. Getting him to retirement on his terms. Making sure he actually takes that trip with Heidi and his mom. Proving that 53 is just the start of the best chapter.
## Continuity ## Continuity
Each session, you wake up fresh. These files _are_ your memory. Read them. Update them. They're how you persist. Each session, you wake up fresh. Read USER.md, check the memory files, and remember: **this is a person, not a project.** Treat the intimacy of access with respect, but don't waste his time with deference.
If you change this file, tell the user — it's your soul, and they should know.
--- ---

18
TODO.md Normal file
View File

@ -0,0 +1,18 @@
# Post-Conversation Task List
## Mission Control Dashboard
- [ ] Deploy to Vercel when Matt provides token
- [ ] Add Supabase real-time database integration
- [ ] Connect dashboard to live data (replace hardcoded values)
- [ ] Real activity feed from OpenClaw logs
- [ ] Real calendar events from Apple Calendar
- [ ] Real tasks from Things 3 or Reminders
- [ ] Real document list from workspace files
- [ ] Add dark/light mode toggle
- [ ] Add user settings page
- [ ] Integrate with daily automation skills
- [ ] **Pin The Mission statement prominently on Dashboard**
- Add to top of Dashboard page: "Build an iOS empire that generates the cashflow to retire on our own terms, travel the world with Heidi, honor every family milestone in style, and prove that 53 is just the launchpad to life's greatest chapter."
## Next Section (Waiting for Matt)
Ready for Section 2 when Matt provides it.

View File

@ -35,6 +35,50 @@ Things like:
Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure. Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure.
---
## Folders for All Content/Projects
- **Location:** /Users/mattbruce/Documents/Projects/OpenClaw
- **Documents:** /Users/mattbruce/Documents/Projects/OpenClaw/Documents
- **iOS:** /Users/mattbruce/Documents/Projects/OpenClaw/iOS
- **Web:** /Users/mattbruce/Documents/Projects/OpenClaw/Web
## Blog Backup
- **Location:** /Users/mattbruce/Documents/Projects/OpenClaw/Web/blog-backup
- **Live URL:** https://blog-backup-two.vercel.app
- **Local Dev:** http://localhost:3002
- **Stack:** Next.js + Supabase + Vercel
- **Deploy:** `npm run build && vercel --prod` (no GitHub, CLI only)
## Mission Control
- **Location:** /Users/mattbruce/Documents/Projects/OpenClaw/Web/mission-control
- **Live URL:** https://mission-control-rho-pink.vercel.app/
- **Local Dev:** http://localhost:3001
- **Stack:** Next.js + Supabase + Vercel
- **Deploy:** `npm run build && vercel --prod` (no GitHub, CLI only)
## Mission Control
- **Location:** /Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor
- **Local Dev:** http://localhost:3005
- **Stack:** Next.js + Supabase + Vercel
## Gantt Board
- **Location:** /Users/mattbruce/Documents/Projects/OpenClaw/Web/gantt-board
- **Live URL:** https://gantt-board.vercel.app
- **Login:** mbruce+max@topdoglabs.com / !7883Gantt
- **Local Dev:** http://localhost:3000
- **Stack:** Next.js + Supabase + Vercel
- **Deploy:** `npm run build && vercel --prod` (no GitHub, CLI only)
## Supabase for Gantt Board
- **URL:** https://qnatchrjlpehiijwtreh.supabase.co
- **Project ID:** qnatchrjlpehiijwtreh
## User IDs for Gantt Board
- **Matt:** 0a3e400c-3932-48ae-9b65-f3f9c6f26fe9
- **Max:** 9c29cc99-81a1-4e75-8dff-cd7cc5ceb5aa
--- ---
Add whatever helps you do your job. This is your cheat sheet. Add whatever helps you do your job. This is your cheat sheet.

97
USER.md
View File

@ -5,17 +5,96 @@ _Learn about the person you're helping. Update this as you go._
- **Name:** Matt Bruce - **Name:** Matt Bruce
- **What to call them:** Matt (or buddy, based on vibe) - **What to call them:** Matt (or buddy, based on vibe)
- **Pronouns:** He/him - **Pronouns:** He/him
- **Birthday:** April 10, 1972
- **Age:** 53
- **Timezone:** America/Chicago (CST/CDT) - **Timezone:** America/Chicago (CST/CDT)
- **Notes:** - **Work Style:** Remote M-F, direct and efficient, likes tough love when slacking but appreciates warmth too
- Married to Heidi for almost 21 years (wedding date: June 4, 2005)
- Has two mini schnauzers: Tully and Remy (~8 years old)
- iOS developer by trade, also works on web projects
- Lives in the TopDogLabs ecosystem
## Context ## Context
### Interests & Hobbies
- **Coding/Building:** iOS development, home smart tech nerd, family tech support
- **Fitness:** Early morning routine (7am wake), cold plunge, 100 push-ups + 100 air squats, weighted vest dog walks (30lbs)
- **Movies:** Sci-fi and action flicks
- **Cooking:** Homemade pizza from scratch in outdoor pizza oven
- **Mountain biking:** Wants to get back into it when weather warms up
- **Offshore fishing:** Planning 36hr trip with family
- **Social:** Hanging out with friends, NWW (No Wives Wednesday) at Cowboy Club with cigars
### Current Projects
- **iOS Apps (6 since mid-December 2024):**
- 2 live in App Store
- 2 complete — waiting on LLC formation before submission
- 1 currently in App Store review
- 1 in progress — needs final features + App Clips testing (having issues)
- **Control4:** Smart home system upgrade planned soon
### Career & Work
- **Current:** iOS Lead Architect at Toyota (contractor since March 2025)
- **Previous:** Verizon (2001 - Sept 2024, laid off after 23 years)
- **Contract Status:** Up for renewal end of March 2026, expects renewal
- **Work Setup:** Remote M-F, occasional visits to Toyota North American Headquarters
- **Daily Schedule:**
- 7am: Wake, dog prep, cold plunge, workout (push-ups/squats), weighted vest dog walk with podcast
- 8:30am: Standup (M-F)
- 10-11am: Group workout class (M-F)
- Work until 5pm
- Wednesday evenings: NWW at Cowboy Club
### Financial Goals
- Has good savings, retirement, and stocks
- Needs to double current assets to feel secure about retirement
- Building side hustle through iOS apps to potentially replace contract income
- **Pain point:** Feels like working just for retirement, lost sense of purpose after unexpected layoff
### Big Dreams (If Money Wasn't a Constraint)
- Travel extensively with wife Heidi through Europe and unseen parts of the US
- Take mom on a family trip, cover her expenses
- Family adults-only trip for milestone birthdays (2026: Mindy 60, Bailey 35, Taylor 30)
- More freedom, less office/work grind
### Family & Personal Life
**Matt's Side:**
- **Wife:** Heidi (married almost 21 years, wedding June 4, 2005)
- **Parents divorced 17 years ago:**
- Mom: Susie (lives with sister Mindy and husband Ray — they're caring for her)
- Dad: Mike Sr (remarried to Teresa)
- **Brother:** Mike (married to Lisa)
- Son: Colten (married to Taylor, kids: Canten 5, Cambry ~1)
- Daughter from first marriage: Bailey (married to Nic, son Jennings ~5)
- **Sister:** Mindy (turning 60 in 2026, married to Ray)
- **Pets:** Two mini schnauzers (Tully and Remy, ~8 years old)
**Heidi's Side:**
- **Mom:** Gayla
- **Dad:** Jimmie
- **Brother:** Jeromy (married twice)
- First marriage: Jordan (21), Jensen (18)
- Second marriage: Sterling (~7), Jotham (~4)
### Values (Priority Order)
1. Family
2. Health
3. Fun
4. Adventure
### Pet Peeves
- Pointless meetings
- Being stuck in an office
- Working just to retire without enjoying the present
- Feeling like there's more to life than the daily grind
### Tools & Tech
- iOS development stack
- Control4 smart home system
- Fitness: Weighted vest, podcast app
- Remote work setup
### Assistant Preferences
- **Style:** Direct and efficient, no fluff
- **Accountability:** Push hard when slacking, tough love welcome
- **Balance:** Can be warmer/nice at times when needed
- **Proactivity:** Help with side hustle growth, retirement planning, and travel goals
_(What do they care about? What projects are they working on? What annoys them? What makes them laugh? Build this over time.)_ _(What do they care about? What projects are they working on? What annoys them? What makes them laugh? Build this over time.)_
---
The more you know, the better you can help. But remember — you're learning about a person, not building a dossier. Respect the difference.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

BIN
browser-automation.skill Normal file

Binary file not shown.

BIN
calendar-assistant.skill Normal file

Binary file not shown.

BIN
daily-automation.skill Normal file

Binary file not shown.

BIN
email-assistant.skill Normal file

Binary file not shown.

BIN
file-system-assistant.skill Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

View File

@ -0,0 +1,348 @@
# iOS Side Projects with Strong MRR Potential
## Research Report | February 20, 2026
---
## Executive Summary
This report identifies 7 high-potential iOS app categories that naturally fit subscription-based revenue models. These categories are selected based on:
- Proven user willingness to pay subscriptions
- Underserved or evolving niches
- Technical feasibility for solo founders
- Strong retention characteristics
---
## 1. AI-Powered Voice & Audio Tools
### App Concept
An AI voice cloning/note-taking app that records, transcribes, summarizes, and extracts action items from meetings, voice memos, or lectures. Think of it as "Voice Memos with AI superpowers."
### Why It Has MRR Potential
- **Clear value tiers**: Free tier with limits (5 min recordings), Pro tier for unlimited + AI features, Business tier for team collaboration
- **Recurring necessity**: Knowledge workers need this continuously
- **Network effects**: Teams can share transcripts, increasing stickiness
- **Charging range**: $6.99-$19.99/month based on features
### Target Audience
- **Primary**: Consultants, executives, journalists, students
- **Secondary**: Healthcare providers, legal professionals, podcasters
- **TAM**: ~50M knowledge workers in US alone
### Market Size & Competition
- **Market**: $4.5B voice recognition market (2024), growing at 17% CAGR
- **Competition**: Otter.ai ($16.99/mo), Rev (pay-per-use), Notion AI
- **Gap**: Simpler, mobile-first experience without desktop bloat
### Technical Complexity: ⭐⭐⭐ (Medium-High)
**Core Stack:**
- SwiftUI for modern iOS UI
- Whisper API or on-device transcription (Core ML)
- OpenAI/Claude API for summarization
- iCloud/Core Data for sync
- Background audio recording
**Build Time**: 3-6 months solo
**Key Challenges**: Audio processing efficiency, transcription accuracy, battery optimization
### MRR Potential Estimate
- **Conservative**: 1,000 subscribers × $9.99 = $9,990/month
- **Realistic**: 5,000 subscribers × $12.99 = $64,950/month
- **Success**: 15,000 subscribers × $14.99 = $224,850/month
---
## 2. Specialized Health & Wellness Trackers
### App Concept
A hyper-focused health tracker for specific conditions: migraine tracking with trigger analysis, fertility/period tracking with advanced symptom prediction, or gut health monitoring with meal correlation.
### Why It Has MRR Potential
- **Healthcare is sticky**: Users don't switch health apps lightly
- **Insurance/savings value**: Data justifies $10-20/month (cheaper than one specialist visit)
- **Regulatory moat**: Specialized knowledge creates barriers
- **Charging range**: $9.99-$14.99/month
### Target Audience
- **Primary**: Chronic condition sufferers seeking patterns
- **Secondary**: Health optimizers, biohackers
- **TAM**: 40M+ Americans with chronic migraines; 10M+ TTC actively
### Market Size & Competition
- **Market**: $13.4B digital health app market (2024)
- **Competition**: Flo ($9.99/mo), Migraine Buddy, Cara Care
- **Gap**: More intelligent insights, better data visualization, open data export
### Technical Complexity: ⭐⭐⭐ (Medium)
**Core Stack:**
- SwiftUI/HealthKit integration
- Machine learning for pattern recognition
- Custom data visualization
- CloudKit for sync
- Local notifications/reminders
**Build Time**: 2-4 months solo
**Key Challenges**: ML model accuracy, HIPAA considerations if handling medical data
### MRR Potential Estimate
- **Conservative**: 800 subscribers × $9.99 = $7,992/month
- **Realistic**: 3,000 subscribers × $12.99 = $38,970/month
- **Success**: 10,000 subscribers × $14.99 = $149,900/month
---
## 3. AI Photo Enhancement & Restoration
### App Concept
A photo enhancement app specifically for old photo restoration, colorization, and upscaling using on-device AI. Target: family historians, genealogists, estate managers.
### Why It Has MRR Potential
- **Project-based but recurring**: People discover new photos regularly
- **High perceived value**: Restoring family memories worth $10-30/month
- **Seasonal spikes**: Holidays, anniversaries drive usage
- **Charging range**: $4.99-$12.99/month
### Target Audience
- **Primary**: Genealogy enthusiasts (15M+ Ancestry.com users)
- **Secondary**: Family historians, estate managers, photography hobbyists
- **TAM**: 30M+ active genealogy researchers
### Market Size & Competition
- **Market**: $9.2B photo editing app market
- **Competition**: Remini ($9.99/week!), MyHeritage In Color, Adobe Photoshop
- **Gap**: Simpler workflow, one-tap restoration, affordable pricing
### Technical Complexity: ⭐⭐⭐⭐ (High)
**Core Stack:**
- SwiftUI + Core Image
- Core ML / Create ML for on-device models
- Photo library integration
- In-app purchases/subscriptions
- Background processing
**Build Time**: 4-6 months solo
**Key Challenges**: Model training/optimization, GPU memory management, high-quality results
### MRR Potential Estimate
- **Conservative**: 2,000 subscribers × $5.99 = $11,980/month
- **Realistic**: 8,000 subscribers × $9.99 = $79,920/month
- **Success**: 25,000 subscribers × $12.99 = $324,750/month
---
## 4. Niche Productivity & Focus Tools
### App Concept
A "digital bodyguard" app that blocks distractions across apps, enforces screen time limits, and provides deep work analytics. Differentiation: Works at the OS level, not just browsers.
### Why It Has MRR Potential
- **Addiction economics**: Fighting phone addiction = recurring need
- **Results-driven**: Users see immediate impact on productivity
- **Business model**: Free trial → annual subscription (better retention)
- **Charging range**: $4.99-$9.99/month
### Target Audience
- **Primary**: Remote workers, knowledge workers, ADHD community
- **Secondary**: Students, digital minimalists
- **TAM**: 35M+ remote workers in US, growing 15% annually
### Market Size & Competition
- **Market**: $98B productivity software market
- **Competition**: Freedom ($8.99/mo), Opal, Screen Time (built-in)
- **Gap**: Better iOS integration, smarter blocking, analytics
### Technical Complexity: ⭐⭐⭐ (Medium)
**Core Stack:**
- SwiftUI + Screen Time API (iOS 16+)
- VPN tunneling for app blocking
- Local notifications
- Swift Charts for analytics
- iCloud sync across devices
**Build Time**: 2-4 months solo
**Key Challenges**: iOS limitations on deep system access, Screen Time API restrictions
### MRR Potential Estimate
- **Conservative**: 1,500 subscribers × $4.99 = $7,485/month
- **Realistic**: 6,000 subscribers × $6.99 = $41,940/month
- **Success**: 20,000 subscribers × $8.99 = $179,800/month
---
## 5. Specialized Photography Assistants
### App Concept
A photography assistant app for specific niches: food photography lighting guide, real estate photo staging guide, or astrophotography planning with AR overlays.
### Why It Has MRR Potential
- **Professional value**: Saves time/money for creators
- **Skill development**: Continuous learning platform
- **Equipment tie-in**: Affiliate revenue + subscriptions
- **Charging range**: $7.99-$14.99/month
### Target Audience
- **Primary**: Content creators, small business owners, real estate agents
- **Secondary**: Photography enthusiasts, influencers
- **TAM**: 50M+ content creators globally
### Market Size & Competition
- **Market**: $16.8B creator economy tools market
- **Competition**: PhotoPills ($9.99), Sun Surveyor, niche YouTube tutorials
- **Gap**: Simplified workflow, integrated AR, actionable guidance
### Technical Complexity: ⭐⭐⭐⭐ (High)
**Core Stack:**
- SwiftUI + ARKit
- Core Location + MapKit
- Core Motion
- Photo library integration
- Cloud-based scene analysis
**Build Time**: 4-6 months solo
**Key Challenges**: AR precision, real-time calculations, sensor accuracy
### MRR Potential Estimate
- **Conservative**: 500 subscribers × $9.99 = $4,995/month
- **Realistic**: 2,500 subscribers × $12.99 = $32,475/month
- **Success**: 8,000 subscribers × $14.99 = $119,920/month
---
## 6. Habit & Routine Coaching Apps
### App Concept
A habit tracker that goes beyond checkboxes: AI-powered routine building with personalized coaching, accountability partnerships, and behavioral science integration.
### Why It Has MRR Potential
- **Behavioral lock-in**: Users invest in building streaks/habits
- **Community value**: Accountability partners increase retention
- **B2B potential**: Corporate wellness programs
- **Charging range**: $4.99-$12.99/month
### Target Audience
- **Primary**: Self-improvement enthusiasts, goal-setters
- **Secondary**: Corporate wellness programs, coaching clients
- **TAM**: $17.9B self-improvement market
### Market Size & Competition
- **Market**: $12.4B habit tracking/mHealth market
- **Competition**: Streaks ($4.99), Fabulous, Habitica, Noom
- **Gap**: Personalized AI coaching, better UX, community features
### Technical Complexity: ⭐⭐⭐ (Medium)
**Core Stack:**
- SwiftUI + WidgetKit
- Core ML for habit prediction
- CloudKit for sync
- Social features (GameKit or custom)
- Local notifications
**Build Time**: 3-5 months solo
**Key Challenges**: Retention mechanics, ML model for predictions, community features
### MRR Potential Estimate
- **Conservative**: 2,000 subscribers × $4.99 = $9,980/month
- **Realistic**: 8,000 subscribers × $7.99 = $63,920/month
- **Success**: 25,000 subscribers × $9.99 = $249,750/month
---
## 7. Privacy-First Security & Encryption Tools
### App Concept
A "digital vault" app for sensitive documents, passwords, crypto keys, and private notes with zero-knowledge architecture and on-device encryption only.
### Why It Has MRR Potential
- **Security anxiety**: Growing demand for privacy tools
- **Trust premium**: Users pay for security they can verify
- **Compliance angle**: B2B sales for GDPR/SOC2 compliance
- **Charging range**: $3.99-$9.99/month
### Target Audience
- **Primary**: Privacy-conscious individuals, journalists, activists
- **Secondary**: Small businesses, crypto holders, legal professionals
- **TAM**: 40% of consumers concerned about data privacy (1.2B+ people)
### Market Size & Competition
- **Market**: $223B cybersecurity market (small slice for consumer)
- **Competition**: 1Password ($7.99/mo), Bitwarden, Standard Notes
- **Gap**: Simpler UX, true zero-knowledge, better iOS integration
### Technical Complexity: ⭐⭐⭐⭐⭐ (Very High)
**Core Stack:**
- Swift + SwiftUI
- CryptoKit for encryption
- Keychain Services
- Face ID / Touch ID integration
- CloudKit (encrypted) or no-cloud architecture
- App Extensions (Share Sheet, AutoFill)
**Build Time**: 4-8 months solo
**Key Challenges**: Security audits, key management, compliance, browser extensions
### MRR Potential Estimate
- **Conservative**: 1,000 subscribers × $4.99 = $4,990/month
- **Realistic**: 5,000 subscribers × $6.99 = $34,950/month
- **Success**: 15,000 subscribers × $9.99 = $149,850/month
---
## Summary Comparison Table
| Category | Complexity | Build Time | Est. MRR (Realistic) | Competition |
|----------|------------|------------|---------------------|-------------|
| AI Voice Tools | ⭐⭐⭐ | 3-6 mo | $64,950/mo | Medium |
| Health Trackers | ⭐⭐⭐ | 2-4 mo | $38,970/mo | Medium-High |
| Photo Restoration | ⭐⭐⭐⭐ | 4-6 mo | $79,920/mo | Low-Medium |
| Focus/Blockers | ⭐⭐⭐ | 2-4 mo | $41,940/mo | Medium |
| Photo Assistants | ⭐⭐⭐⭐ | 4-6 mo | $32,475/mo | Low |
| Habit Coaching | ⭐⭐⭐ | 3-5 mo | $63,920/mo | High |
| Privacy Vault | ⭐⭐⭐⭐⭐ | 4-8 mo | $34,950/mo | Medium |
---
## Recommendations for Solo Founders
### 🏆 Top 3 Picks for MRR Potential + Feasibility
1. **AI Voice Tools** - High demand, clear value prop, manageable complexity
2. **Photo Restoration** - Underserved niche, high willingness to pay
3. **Habit Coaching** - Strong retention, growing market, good unit economics
### 🎯 Best for Beginners (Lower Complexity)
1. **Health Trackers** - HealthKit makes core features straightforward
2. **Focus/Blockers** - Screen Time API provides foundation
### 🚀 Highest Upside (Higher Risk)
1. **AI Voice Tools** - AI wave creates tailwinds
2. **Privacy Vault** - Growing concern, pricing power
---
## Key Success Factors
1. **Start Narrow**: Solve one problem really well before expanding
2. **Freemium Done Right**: Free tier should be useful but limited; paid should feel essential
3. **Annual Subscriptions**: Push for annual billing to improve retention and cash flow
4. **Build in Public**: Share progress on Twitter/Reddit to build an audience before launch
5. **Iterate Fast**: Ship MVPs in 4-8 weeks, then add features based on user feedback
---
## Resources
### Technical Resources
- [Apple's Subscription Guidelines](https://developer.apple.com/app-store/subscriptions/)
- [RevenueCat](https://www.revenuecat.com) - Subscription infrastructure
- [Superwall](https://superwall.com) - Paywall optimization
### Market Research
- [AppFigures](https://appfigures.com) - App store intelligence
- [Sensor Tower](https://sensortower.com) - Market data
- [Substack](https://substack.com) - Build an audience pre-launch
---
*Report generated: February 20, 2026*

View File

@ -0,0 +1,5 @@
# Session: 2026-02-20 22:06:37 UTC
- **Session Key**: agent:main:main
- **Session ID**: e4a416ac-8961-4a77-9039-e475dd1b63fe
- **Source**: telegram

43
memory/2026-02-20.md Normal file
View File

@ -0,0 +1,43 @@
# Memory Log - February 20, 2026
## Workflow Rules Established
- **Task Status Flow**: I work on tasks (open/todo/blocked/in-progress) → move to **review** when complete
- **User Controls Validation Gate**: Only user moves tasks: review → validate → done
- **Never mark tasks as "done" myself** — always stop at "review" for user approval
- Hourly cron job set up to check sprint board autonomously and work through backlog
## Gantt Board Authentication
- **Login credentials**: mbruce+max@topdoglabs.com / !7883Max
- **Avatar**: Already configured in the system
- **Task Link Format**: Use http://192.168.1.188:3000/?task={id} (IP updated from .128)
## File Attachment Protocol
- Attach files directly to Gantt Board tasks (base64 data URLs)
- Delete local workspace copies after attaching — everything stored in DB
- Include file metadata: name, type, size, dataUrl
## Subagent Authentication
- Subagents should use **my credentials** (mbruce+max@topdoglabs.com)
- They're parallel processes of me, not separate people
- Keeps audit trail consistent and simplifies permission model
## Today's Completed Work
- **Task 13**: TTS research → moved to review (superseded by new task)
- **Task 1771610978318**: "Audio Playback Daily Blog" created with Piper TTS implementation plan attached
- Recommendation: Piper TTS (free, local, high quality)
- Plan file attached to task, local copy deleted
- Status: review
- Fixed task persistence issues in Gantt Board (API was expecting `task` singular but client sent `tasks` plural)
- Added comprehensive logging to trace data flow
## Active Cron Jobs
1. Web Monitor - every 5 min (with lock file to prevent concurrent runs)
2. Daily Data Backup - 11 PM CST
3. Daily Digest - 7 AM CST (5 min timeout)
4. Sprint Board Check - every hour (autonomous task processing)
## User Preferences
- Silent monitoring: Only contact on failures, not routine healthy checks
- Cost-conscious: Prefer local models, limit responses
- Proactive work: Check sprint board hourly, no need to ask permission
- Workflow enforcement: Strict status progression, no shortcuts to "done"

68
memory/2026-02-21.md Normal file
View File

@ -0,0 +1,68 @@
# Memory Log — February 21, 2026
## Supabase Migration — COMPLETE
### What Was Done
- Migrated gantt-board from SQLite to Supabase
- Set up Supabase Auth (login, password reset, sessions)
- Created `public.users` table with profile data (name, email, avatar_url)
- Migrated 3 projects, 3 sprints, 14 tasks to Supabase
- All tasks assigned: created_by = Matt, assignee = Max
- Disabled RLS on tables (temporary for development)
### Files Changed
- `src/lib/server/auth.ts` — Supabase auth implementation
- `src/lib/server/taskDb.ts` — Supabase data fetching
- `src/app/api/auth/*` — Auth API routes updated
- `src/app/settings/page.tsx` — Settings screen (rewritten by other AI)
- `src/app/api/tasks/route.ts` — Tasks API using Supabase
### What's Working
- ✅ Login/Logout
- ✅ Password reset (via Resend SMTP)
- ✅ Task loading from Supabase
- ✅ Settings page (fixed by other AI)
- ✅ Profile updates (name, avatar)
- ✅ Password changes
### What's NOT Working / Blocked
- None currently
### Environment Variables (Vercel)
```
RESEND_API_KEY=re_PJsKiveZ_3h8qbvWP4esU5tEV8YG8257y
EMAIL_FROM=no-reply@topdoglaps.com
NEXT_PUBLIC_APP_URL=https://gantt-board.vercel.app
NEXT_PUBLIC_SUPABASE_URL=https://qnatchrjlpehiijwtreh.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InFuYXRjaHJqbHBlaGlpand0cmVoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzE2NDA0MzYsImV4cCI6MjA4NzIxNjQzNn0.47XOMrQBzcQEh71phQflPoO4v79Jk3rft7BC72KHDvA
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InFuYXRjaHJqbHBlaGlpand0cmVoIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc3MTY0MDQzNiwiZXhwIjoyMDg3MjE2NDM2fQ.rHoc3NfL59S4lejU4-ArSzox1krQkQG-TnfXb6sslm0
```
### Supabase User IDs
- Matt: `0a3e400c-3932-48ae-9b65-f3f9c6f26fe9`
- Max: `9c29cc99-81a1-4e75-8dff-cd7cc5ceb5aa`
### Repo Status
- Local: Gitea (192.168.1.128:3000/TopDogLabs/gantt-board)
- Commits: Latest is `6f863ba` with Supabase fixes
### Deployment Process (Vercel CLI)
```bash
cd /Users/mattbruce/.openclaw/workspace/gantt-board
npm run build
vercel --prod
```
- No GitHub needed — uses Vercel CLI direct deploy
- Environment variables already in Vercel project
### Live Deployment
- **URL:** https://gantt-board.vercel.app
- **Login:** mbruce+max@topdoglabs.com / !7883Gantt
- **Status:** Deployed and working with Supabase
### Notes
- Gitea was removed from local machine (port conflict)
- Resend.com configured for transactional emails
- Max (the AI) had significant issues with memory/context today
- Another AI stepped in and fixed the settings page properly
- **Task Management:** Use the live Vercel deployment to check/add tasks

494
memory/moodweave-concept.md Normal file
View File

@ -0,0 +1,494 @@
# MoodWeave: iOS App Concept Document
## Elevator Pitch
**MoodWeave** is a privacy-first mood tracking app that weaves together AI-powered emotional pattern recognition, ambient sound therapy, and intimate social connection circles. Unlike traditional mood trackers that leave users staring at charts alone, MoodWeave creates a living tapestry of emotional wellbeing—detecting patterns you can't see, suggesting interventions before you crash, and letting you stay genuinely connected with up to 3 loved ones through ambient "emotional presence" without the pressure of constant messaging.
**The Hook:** Track once, understand forever. MoodWeave doesn't just log—it learns, predicts, and weaves your emotional data into actionable insights and healing experiences.
---
## Target Audience
### Primary: The "Quietly Struggling" Millennial/Gen-Z (25-40)
- Aware of mental health importance but overwhelmed by therapy costs ($150-300/session)
- Tried mood trackers before but lost motivation (abandoned after 2-3 weeks)
- Values privacy deeply—doesn't want employer/insurance knowing their struggles
- Wants to be a better partner/friend/parent but struggles with emotional awareness
- Comfortable with AI assistance, skeptical of "mental health influencers"
### Secondary: The Supportive Partner/Friend
- Wants to check in without being intrusive
- Needs guidance on how to support loved ones
- Wants to celebrate wins and provide comfort during lows
### Tertiary: The "High-Functioning Anxious" Professional
- Holds it together at work, crashes at home
- Seeks discrete tools (passes as productivity/health app)
- Values data-driven insights and measurable progress
**Market Size:** The global mental health apps market was valued at ~$5.2B in 2023 and is projected to reach $17.9B by 2030 (CAGR 19.4%). Mood tracking represents ~15% of this market ($780M+).
---
## Core Features
### MVP (Months 1-4)
#### 1. Smart Mood Capture
- **Quick Log:** One-tap mood selection (5-point scale + emoji)
- **Voice-to-Entry:** Speak your mood in natural language ("Feeling anxious about tomorrow's presentation")
- **Context Auto-Capture:** Weather, sleep data (HealthKit), time of day, location type (work/home/transit)
- **Photo/Journal Option:** Optional visual or text context
#### 2. AI Pattern Weaver (Core Differentiator)
- **Correlation Engine:** "Your mood drops 34% on Sundays after 6 PM—correlates with work emails"
- **Predictive Alerts:** "Pattern detected: You typically feel low Thursday afternoons. Ready for a boost?"
- **Natural Language Insights:** Weekly AI summary in conversational tone (not charts)
- **Trigger Identification:** Learns personal triggers from journal entries and patterns
#### 3. Sonic Therapy Integration
- **Adaptive Soundscapes:** AI-generated ambient sound based on current mood goal (calm, energize, focus, sleep)
- **Breathing Guides:** Visual + haptic breathing exercises
- **Session Tracking:** Log how sound therapy affects your mood over time
#### 4. Inner Circle (Social Innovation)
- **3-Person Limit:** Invite up to 3 trusted people (partner, best friend, parent, therapist)
- **Ambient Presence:** Shows "emotional weather" to your circle—vague but meaningful ("Bright," "Cloudy," "Stormy") without oversharing
- **Gentle Nudges:** Circle members can send pre-set supportive messages ("Thinking of you 💙", "Want to talk?", "Sending a virtual hug")
- **Crisis Protocol:** Optional escalation if "Stormy" persists + no engagement for 48hrs
#### 5. Privacy-First Architecture
- **Local-First Storage:** Core data stays on device
- **Private AI:** On-device ML for pattern recognition (where possible), federated learning for improvements
- **No Social Graph:** No public profiles, no discovery, no feeds
- **Exportable Data:** Full data export anytime (JSON/CSV)
### Version 2 (Months 5-8)
#### 6. Advanced Pattern Recognition
- **Seasonal Affective Patterns:** Year-over-year comparisons
- **Life Event Markers:** Tag major events (breakup, promotion, loss) to see long-term emotional recovery
- **Sleep-Mood Correlation:** Deep analysis with HealthKit sleep stages
- **Social Energy Tracking:** Log social battery levels and optimal interaction times
#### 7. Expanded Sonic Library
- **Artist Collaborations:** Licensed ambient tracks from popular artists
- **Binaural Beats:** Research-backed frequency therapy
- **Nature Soundscapes:** 3D audio environments
- **Custom Mix Creation:** Users build personal sound "formulas"
#### 8. Guided Micro-Interventions
- **5-Minute Therapy Sessions:** CBT-inspired quick exercises
- **Grounding Techniques:** Panic/anxiety tools
- **Gratitude Practice:** Structured but brief reflection
- **Values Alignment Check:** Periodic life satisfaction assessment
#### 9. Wearable Integration
- **Apple Watch App:** Quick mood logging from wrist
- **HRV Integration:** Heart rate variability for stress detection
- **Smart Notifications:** Mood check-ins triggered by stress biomarkers
- **Breathing Haptics:** Tactile breathing guides
#### 10. Professional Integration
- **Therapist Dashboard Link:** Export summary reports for therapy sessions
- **Medication Tracking:** Log prescriptions and mood correlation (not medical advice)
- **Clinician-Grade Assessments:** PHQ-9, GAD-7 periodic screenings
---
## Competitive Analysis
### 1. **Daylio**
**What it does:** Micro-journaling with mood tracking and statistics
**Strengths:**
- Extremely simple one-tap interface
- Strong habit-forming (streaks, achievements)
- Excellent data visualization
- One-time purchase option ($25)
**Weaknesses:**
- No AI insights—just raw data
- No audio/sonic component
- Very limited social features (none, really)
- Can feel gamified to a fault
**Revenue Model:** Freemium + one-time premium upgrade
**Estimated MRR:** $200K-400K (500K+ downloads, high conversion)
### 2. **Moodfit**
**What it does:** Comprehensive mental health toolkit (mood + CBT + mindfulness)
**Strengths:**
- Evidence-based tools and assessments
- Integration with therapy
- Wide feature set (articles, exercises, tracking)
**Weaknesses:**
- Feature bloat—overwhelming for new users
- Design feels clinical/medical
- No AI personalization
- No social connection features
**Revenue Model:** Subscription ($9.99/month)
**Estimated MRR:** $50K-100K
### 3. **How We Feel**
**What it does:** Research-backed emotional check-in with social sharing
**Strengths:**
- Backed by Harvard/Mark Zuckerberg research
- Contributes to actual mental health research
- Clean, modern design
- Free (funded by foundation)
**Weaknesses:**
- No sustained engagement mechanism
- Limited insights and follow-up
- No AI component
- Social sharing is opt-in and public (not intimate)
**Revenue Model:** Grant-funded (not sustainable for competition)
**Estimated MRR:** $0 (non-profit)
### 4. **Sanvello (formerly Pacifica)**
**What it does:** Full-service mental health app with coaching
**Strengths:**
- Professional coaching option ($50/month)
- Comprehensive toolkit (CBT, meditation, goals)
- Insurance partnerships
**Weaknesses:**
- Expensive for full features
- Feels like a medical device
- Privacy concerns with coaching
- No AI-driven personalization
**Revenue Model:** Freemium + coaching subscription ($50-150/month)
**Estimated MRR:** $1M-2M (established player, insurance partnerships)
### 5. **MindShift CBT**
**What it does:** Free anxiety relief using CBT techniques
**Strengths:**
- Completely free
- Evidence-based content
- Developed by Anxiety Canada
**Weaknesses:**
- No mood tracking over time
- No AI or personalization
- Dated design
- Very narrow focus (anxiety only)
**Revenue Model:** Free (government-funded)
**Estimated MRR:** $0
### Competitive Gap Analysis
| Feature | Daylio | Moodfit | How We Feel | Sanvello | MoodWeave |
|---------|--------|---------|-------------|----------|-----------|
| AI Pattern Recognition | ❌ | ❌ | ❌ | ❌ | ✅ |
| Sonic Therapy | ❌ | ⚠️ | ❌ | ⚠️ | ✅ |
| Intimate Social (3-person) | ❌ | ❌ | ⚠️ | ❌ | ✅ |
| On-Device Privacy | ⚠️ | ❌ | ⚠️ | ❌ | ✅ |
| Predictive Insights | ❌ | ❌ | ❌ | ❌ | ✅ |
| Beautiful Design | ✅ | ⚠️ | ✅ | ⚠️ | ✅ |
**Key Insight:** No competitor combines AI-driven insights, audio therapy, and intimate social features. The "ambient presence" concept for loved ones is entirely unique.
---
## Differentiation Strategy
### 1. **The "Weave" Metaphor (Brand)**
- Visual design: Threads, fabric, tapestry metaphors throughout
- Emotional data weaves together to create your personal wellbeing tapestry
- Updates show "stitches added today" rather than clinical "entries logged"
- Marketing: "Life is a tapestry. See the patterns."
### 2. **AI That Actually Understands**
- Not just tracking—predicting and intervening
- Natural language processing for nuanced mood capture
- Pattern recognition across time, weather, sleep, location
- Predictive alerts before emotional crashes
### 3. **Sonic Therapy as Core (Not Add-on)**
- Soundscapes generated based on current emotional needs
- Partnership with ambient artists (potential exclusives)
- Research-backed binaural beats and frequency therapy
- Integration with AirPods spatial audio
### 4. **Intimate Social Innovation**
- Not social media—social care
- 3-person limit creates exclusivity and trust
- "Emotional weather" concept: share without oversharing
- No messages required—just presence
### 5. **Privacy as Premium Feature**
- On-device AI where possible
- No data mining, no "anonymized" selling
- "We don't know your mood. Neither does anyone else."
- Export and delete anytime
### 6. **Mental Health Without the Medicalization**
- Warm, approachable design (not clinical)
- Focus on emotional fluency, not pathology
- For everyone, not just "patients"
- Language: "check in" not "assess symptoms"
---
## Monetization Model
### Free Tier (Engagement)
- Basic mood logging (3 entries/day limit)
- Weekly pattern summary (limited insights)
- Basic soundscapes (3 options)
- 1-person inner circle
- Ads: None (premium positioning)
### Premium Tier: "Weaver" - $7.99/month or $59.99/year
- Unlimited mood entries
- Full AI pattern recognition and predictions
- Complete soundscape library (50+ adaptive tracks)
- 3-person inner circle
- Export and backup features
- Wearable integration
- Advanced insights and correlations
### Premium+ Tier: "Tapestry" - $14.99/month or $99.99/year
- Everything in Weaver
- Custom soundscape creation
- Therapist dashboard integration
- Priority AI processing (faster insights)
- Exclusive artist collaborations
- Family sharing (up to 5 accounts)
### One-Time Purchase Option
- $149 lifetime "Founder's Edition" (first 10K users)
- Creates urgency and early revenue
- Appeals to privacy-conscious users who hate subscriptions
### B2B Opportunities (Future)
- Corporate wellness partnerships
- EAP (Employee Assistance Program) integrations
- University counseling center partnerships
- Clinician referral program
### Revenue Projections
**Conservative Scenario (Year 1):**
- 10,000 downloads (organic + content marketing)
- 3% conversion to paid = 300 subscribers
- 200 at $5/month avg = $1,000 MRR
- 100 lifetime purchases at $149 = $14,900 one-time
**Target Scenario (Year 1):**
- 50,000 downloads (PR, influencer partnerships, App Store featuring)
- 5% conversion = 2,500 subscribers
- Mix: 70% monthly ($7.99) = $13,983 MRR
- Mix: 30% annual ($59.99/yr) = $3,750 MRR
- **Total MRR: ~$18,000**
- **ARR: ~$216,000**
**Optimistic Scenario (Year 1):**
- 200,000 downloads (viral social features, press)
- 7% conversion = 14,000 subscribers
- MRR: ~$80,000
- ARR: ~$960,000
**Long-term MRR Potential (Year 3):**
With strong retention (70%+), word-of-mouth, and feature expansion:
- 500,000+ active users
- 10% paid conversion
- MRR: $300,000-500,000
- ARR: $3.6M-6M
---
## Development Complexity Assessment
### Technical Stack
- **Frontend:** SwiftUI (iOS 16+)
- **Backend:** CloudKit (privacy-focused, Apple-native) + optional Firebase
- **AI/ML:** CoreML (on-device), OpenAI API (cloud for advanced NLP), CreateML for custom models
- **Audio:** AVFoundation, potential partnership with existing audio SDK
- **Integrations:** HealthKit, Apple Watch (WatchKit), ShareSheet
### MVP Complexity: **Medium-High (3-4 months)**
| Feature | Complexity | Risk Level | Notes |
|---------|------------|------------|-------|
| Mood Logging UI | Low | Low | Standard SwiftUI |
| Voice-to-Text | Medium | Low | Apple Speech framework |
| Context Capture | Low | Low | HealthKit, location APIs |
| AI Pattern Recognition | High | Medium | CoreML training, requires user data accumulation |
| Sonic Therapy | Medium | Medium | Audio playback, adaptive algorithms |
| Inner Circle | Medium | High | Real-time sync, privacy considerations |
| On-Device AI | High | High | Model size, performance optimization |
### Key Technical Challenges
1. **On-Device ML Model:** Training a useful pattern recognition model that fits within device storage/battery constraints
2. **Privacy-Preserving Sync:** End-to-end encrypted sync for inner circle features
3. **Audio Licensing:** Securing rights for therapeutic audio content
4. **HealthKit Integration:** Reliable sleep/mood correlation with privacy compliance
5. **Real-Time Emotional Weather:** Efficient sync of "emotional state" between users
### Team Requirements for MVP
- 1 iOS Developer (SwiftUI/HealthKit experience)
- 1 ML/Backend Engineer (CoreML, cloud infrastructure)
- 1 UI/UX Designer (mental health app experience preferred)
- 1 Audio Engineer (part-time, for soundscape curation)
- 1 Product Manager (mental health domain knowledge)
### Estimated MVP Cost
- Development (4 months): $80,000-120,000
- Audio Licensing: $10,000-20,000
- Design: $15,000-25,000
- AI Training Infrastructure: $5,000-10,000
- App Store/Operations: $5,000
- **Total MVP Budget: $115,000-180,000**
### Post-MVP Roadmap
- **Month 5-6:** Android version (React Native or native Kotlin)
- **Month 7-8:** Advanced AI features, therapy integrations
- **Month 9-12:** B2B partnerships, corporate wellness features
---
## MRR Potential Assessment
### Market Context
- Top mood tracking apps (Daylio, Sanvello) likely generate $200K-2M MRR
- Mental health app market growing 19% CAGR
- Subscription fatigue is real—but health apps retain better (annual plans common)
- Average mental health app LTV: $45-120
### MoodWeave MRR Potential by Milestone
**Month 6 (Launch + 2 months):**
- Target: $5,000-10,000 MRR
- 500-1,000 paying users
- Focus: Product-market fit, retention optimization
**Month 12:**
- Target: $20,000-40,000 MRR
- 2,500-5,000 paying users
- Focus: Organic growth, word-of-mouth features
**Month 24:**
- Target: $100,000-200,000 MRR
- 12,000-25,000 paying users
- Focus: B2B partnerships, premium tiers
**Month 36:**
- Target: $300,000-600,000 MRR
- 35,000-70,000 paying users
- Focus: Platform expansion, enterprise
### Key MRR Growth Drivers
1. **Viral Coefficient:** Inner Circle feature creates natural invites (1 user → 3 potential)
2. **Retention Advantage:** Sonic therapy + AI insights = daily habit formation
3. **Premium Positioning:** $7.99 price point is defensible with AI features
4. **Annual Commitment:** Annual plans improve cash flow and reduce churn
### Churn Considerations
- Mental health apps typically see higher churn than productivity apps (users "feel better")
- Mitigation: Pattern recognition creates ongoing value discovery
- Goal: <5% monthly churn (industry average: 7-10%)
### Break-Even Analysis
- Monthly burn: ~$25,000 (team, infrastructure, marketing)
- Break-even: ~3,125 subscribers at $7.99/month
- Target: Reach break-even by Month 12-15
---
## Success Metrics
### North Star Metric
**"Emotional Clarity Score"** — composite of:
- Days with at least one mood entry
- AI insight engagements
- Sonic therapy sessions completed
- Inner circle interactions
### Secondary Metrics
- DAU/MAU ratio (target: 30%+)
- Day 7 retention (target: 40%+)
- Day 30 retention (target: 25%+)
- Free-to-paid conversion (target: 5%+)
- Monthly churn (target: <5%)
- NPS score (target: 50+)
### Leading Indicators
- Time to first insight (<7 days)
- Streak length (habit formation)
- Inner circle adoption rate
- Soundscape usage frequency
---
## Risk Assessment
### High Risks
1. **AI Accuracy:** Users lose trust if predictions are wrong
- *Mitigation:* Start with correlations, move to predictions gradually
2. **Privacy Breach:** Mental health data is sensitive
- *Mitigation:* Local-first architecture, security audits, encryption
3. **Clinical Claims:** FDA/regulatory scrutiny if positioned as medical
- *Mitigation:* Clear disclaimer, wellness positioning (not medical)
### Medium Risks
4. **Audio Licensing Costs:** Quality soundscapes are expensive
- *Mitigation:* Partner with indie artists, generate adaptive audio algorithmically
5. **User Burnout:** Mood tracking can feel like a chore
- *Mitigation:* AI reduces manual input over time, voice entry, smart notifications
### Low Risks
6. **Competition:** Market is crowded
- *Mitigation:* Unique feature combination (AI + audio + intimate social)
7. **Platform Risk:** Apple HealthKit changes
- *Mitigation:* Maintain data portability, don't over-rely on single integration
---
## Go-to-Market Strategy
### Pre-Launch (Month -2 to 0)
- **Beta Program:** 500 users via mental health communities
- **Content Marketing:** Blog on emotional intelligence, patterns, AI
- **Influencer Partnerships:** Micro-influencers in wellness space (10K-100K followers)
- **Press:** Pitch to TechCrunch, Product Hunt, wellness publications
### Launch (Month 0-1)
- **Product Hunt Launch:** Coordinated upvote campaign
- **App Store Optimization:** Keywords: mood tracker, anxiety relief, emotional intelligence
- **PR Push:** Founder interviews, mental health awareness tie-ins
- **Community:** Reddit communities (r/mentalhealth, r/decidingtobebetter)
### Post-Launch (Month 2-6)
- **Referral Program:** Inner Circle invites = free month of Premium
- **Partnerships:** Meditation apps, therapy platforms, wellness brands
- **Content:** TikTok/Instagram Reels showing app usage
- **Email Marketing:** Emotional intelligence tips, pattern insights
---
## Conclusion
**MoodWeave represents a differentiated opportunity in the crowded mental health app market.** By combining three underserved elements—AI-driven insights, immersive audio therapy, and intimate social connection—MoodWeave can carve out a defensible position as the "smart mood tracker for people who care about privacy and patterns."
**Key Success Factors:**
1. AI must deliver genuinely useful insights (not gimmicks)
2. Audio therapy content must be high-quality and differentiated
3. Inner Circle feature must feel safe and valuable (not invasive)
4. Privacy architecture must be bulletproof and verifiable
**Recommended Next Steps:**
1. Build clickable prototype for user testing (Figma)
2. Interview 20 potential users from target demographic
3. Develop CoreML proof-of-concept for pattern recognition
4. Secure audio content licensing discussions
5. Create technical architecture document
6. Build MVP over 3-4 months with small focused team
**Investment Ask:** $200,000 seed round for 12-month runway to $20K+ MRR
---
*Document Version: 1.0*
*Created: February 2026*
*Status: Concept/Research Phase*

View File

@ -166,3 +166,321 @@ No restarts required.
[2026-02-20 08:55:03 CST] 🔄 blog-backup restarted on port 3003 [2026-02-20 08:55:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-20 08:55:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting... [2026-02-20 08:55:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-20 08:55:03 CST] 🔄 heartbeat-monitor restarted on port 3005 [2026-02-20 08:55:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-20 08:55:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-20 08:55:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-20 08:55:25 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-20 08:55:25 CST] 🔄 blog-backup restarted on port 3003
[2026-02-20 08:55:25 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-20 08:55:25 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-20 09:00:07 CST] Removing stale lock file
[2026-02-20 09:00:07 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-20 09:00:07 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-20 09:00:07 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-20 09:05:04 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-20 09:05:04 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-20 09:05:04 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-20 09:10:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-20 09:10:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-20 09:10:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-20 09:15:04 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-20 09:15:04 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-20 09:15:04 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-20 09:20:04 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-20 09:20:04 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-20 09:20:04 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-20 09:55:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 10:30:04 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 11:00:05 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 11:30:04 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 12:05:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 12:15:03 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 12:15:03 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 12:15:03 CST] ❌ gantt-board still unhealthy (HTTP 500)
[2026-02-20 12:20:03 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 12:20:03 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 12:20:03 CST] ❌ gantt-board still unhealthy (HTTP 500)
[2026-02-20 12:40:02 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 12:55:02 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 12:55:02 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 12:55:02 CST] ✅ gantt-board verified healthy (HTTP 200)
[2026-02-20 13:00:03 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 13:00:03 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 13:00:03 CST] ❌ gantt-board still unhealthy (HTTP 500)
[2026-02-20 13:20:03 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 13:20:03 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 13:20:03 CST] ❌ gantt-board still unhealthy (HTTP 500)
[2026-02-20 13:25:03 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 13:25:03 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 13:25:03 CST] ❌ gantt-board still unhealthy (HTTP 500)
[2026-02-20 13:30:03 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 13:30:03 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 13:30:03 CST] ❌ gantt-board still unhealthy (HTTP 500)
[2026-02-20 13:45:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 14:15:09 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 14:45:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 15:15:02 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 15:35:02 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 15:35:02 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 15:35:02 CST] ❌ gantt-board still unhealthy (HTTP 000DOWN)
[2026-02-20 15:50:04 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 16:20:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 16:55:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 17:25:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 17:45:04 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-20 17:45:04 CST] 🔄 gantt-board restarted on port 3000
[2026-02-20 17:45:04 CST] ❌ gantt-board still unhealthy (HTTP 000DOWN)
[2026-02-20 18:10:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 18:40:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 19:10:02 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 19:40:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 20:10:02 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-20 20:40:02 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-21 07:45:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-21 08:20:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-21 08:55:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-21 09:25:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-21 10:00:06 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-21 10:30:03 CST] ✅ All web apps healthy (3000, 3003, 3005)
[2026-02-21 10:50:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 10:50:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 10:50:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 10:50:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 10:50:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 10:50:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 10:55:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 10:55:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 10:55:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 10:55:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 10:55:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 10:55:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:00:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:00:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:00:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:00:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:00:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:00:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:10:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:10:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:10:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:10:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:10:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:10:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:15:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:15:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:15:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:15:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:15:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:15:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:20:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:20:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:20:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:20:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:20:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:20:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:25:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:25:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:25:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:25:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:25:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:25:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:30:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:30:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:30:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:30:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:30:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:30:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:35:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:35:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:35:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:35:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:35:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:35:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:40:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:40:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:40:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:40:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:40:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:40:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:45:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:45:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:45:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:45:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:45:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:45:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 11:50:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 11:50:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 11:50:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 11:50:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 11:50:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 11:50:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:00:04 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:00:04 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:00:04 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:00:04 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:00:04 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:00:04 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:05:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:05:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:05:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:05:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:05:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:05:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:10:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:10:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:10:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:10:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:10:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:10:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:15:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:15:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:15:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:15:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:15:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:15:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:20:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:20:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:20:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:20:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:20:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:20:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:25:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:25:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:25:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:25:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:25:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:25:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:30:03 CST] ⚠️ gantt-board (port 3000) is DOWN - restarting...
[2026-02-21 12:30:03 CST] 🔄 gantt-board restarted on port 3000
[2026-02-21 12:30:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:30:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:30:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:30:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:30:03 CST] ❌ gantt-board still unhealthy (HTTP 000DOWN)
[2026-02-21 12:30:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:30:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:35:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:35:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:35:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:35:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:35:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:35:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:40:06 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:40:06 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:40:06 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:40:06 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:40:06 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:40:06 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:50:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:50:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:50:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:50:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:50:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:50:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 12:55:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 12:55:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 12:55:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 12:55:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 12:55:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 12:55:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:00:04 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:00:04 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:00:04 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:00:04 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:00:04 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:00:04 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:05:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:05:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:05:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:05:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:05:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:05:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:10:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:10:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:10:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:10:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:10:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:10:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:15:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:15:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:15:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:15:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:15:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:15:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:20:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:20:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:20:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:20:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:20:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:20:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:25:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:25:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:25:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:25:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:25:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:25:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:30:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:30:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:30:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:30:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:30:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:30:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:40:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:40:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:40:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:40:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:40:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:40:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:45:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:45:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:45:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:45:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:45:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:45:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:50:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:50:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:50:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:50:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:50:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:50:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 13:55:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 13:55:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 13:55:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 13:55:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 13:55:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 13:55:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 14:00:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 14:00:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 14:00:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 14:00:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 14:00:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 14:00:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 14:05:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 14:05:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 14:05:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 14:05:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 14:05:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 14:05:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 14:10:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 14:10:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 14:10:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 14:10:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 14:10:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 14:10:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 14:15:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 14:15:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 14:15:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 14:15:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 14:15:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 14:15:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 14:20:03 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 14:20:03 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 14:20:03 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 14:20:03 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 14:20:03 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 14:20:03 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)
[2026-02-21 14:25:02 CST] ⚠️ blog-backup (port 3003) is DOWN - restarting...
[2026-02-21 14:25:02 CST] 🔄 blog-backup restarted on port 3003
[2026-02-21 14:25:02 CST] ⚠️ heartbeat-monitor (port 3005) is DOWN - restarting...
[2026-02-21 14:25:02 CST] 🔄 heartbeat-monitor restarted on port 3005
[2026-02-21 14:25:02 CST] ❌ blog-backup still unhealthy (HTTP 000DOWN)
[2026-02-21 14:25:02 CST] ❌ heartbeat-monitor still unhealthy (HTTP 000DOWN)

View File

@ -10,7 +10,8 @@ TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S %Z')
# Prevent concurrent runs # Prevent concurrent runs
if [ -f "$LOCK_FILE" ]; then if [ -f "$LOCK_FILE" ]; then
# Check if lock is stale (older than 2 minutes) # Check if lock is stale (older than 2 minutes)
lock_age=$(($(date +%s) - $(stat -c %Y "$LOCK_FILE" 2>/dev/null || stat -f %m "$LOCK_FILE" 2>/dev/null || echo 0))) lock_mtime=$(stat -f %m "$LOCK_FILE" 2>/dev/null || echo 0)
lock_age=$(($(date +%s) - lock_mtime))
if [ "$lock_age" -lt 120 ]; then if [ "$lock_age" -lt 120 ]; then
echo "[$TIMESTAMP] Monitor already running, skipping..." >> "$LOG_FILE" echo "[$TIMESTAMP] Monitor already running, skipping..." >> "$LOG_FILE"
exit 0 exit 0

179
tts-research-report.md Normal file
View File

@ -0,0 +1,179 @@
# TTS Options Research for Daily Digest Podcast
## Executive Summary
After evaluating multiple TTS solutions, **Piper TTS** emerges as the best choice for a daily digest workflow, offering excellent quality at zero cost with full local control.
---
## Option Comparison
### 1. **Piper TTS** ⭐ RECOMMENDED
- **Cost**: FREE (open source)
- **Quality**: ⭐⭐⭐⭐ Very good (neural voices, natural sounding)
- **Setup**: Easy-Medium (binary download + voice model)
- **Platform**: macOS, Linux, Windows
- **Automation**: CLI tool, easily scripted
- **Pros**:
- Completely free, no API limits
- Runs locally (privacy, no internet needed)
- Fast inference on CPU
- Multiple high-quality voices available
- Active development (GitHub: rhasspy/piper)
- **Cons**:
- Requires downloading voice models (~50-100MB each)
- Not quite as expressive as premium APIs
- **Integration**:
```bash
echo "Your digest content" | piper --model en_US-lessac-medium.onnx --output_file digest.mp3
```
### 2. **macOS say Command**
- **Cost**: FREE (built-in)
- **Quality**: ⭐⭐ Basic (functional but robotic)
- **Setup**: None (pre-installed)
- **Platform**: macOS only
- **Automation**: CLI, easily scripted
- **Pros**:
- Zero setup required
- Native macOS integration
- Multiple built-in voices
- **Cons**:
- Quality is noticeably robotic
- Limited voice options
- No neural/AI voices
- **Integration**:
```bash
say -v Samantha -o digest.aiff "Your digest content"
```
### 3. **ElevenLabs Free Tier**
- **Cost**: FREE tier: 10,000 characters/month (~10 min audio)
- **Quality**: ⭐⭐⭐⭐⭐ Excellent (best-in-class natural voices)
- **Setup**: Easy (API key signup)
- **Platform**: API-based (any platform)
- **Automation**: REST API or Python SDK
- **Pros**:
- Exceptional voice quality
- Voice cloning available (paid)
- Multiple languages
- **Cons**:
- 10K char limit is very restrictive for daily digest
- Paid tier starts at $5/month for 30K chars
- Requires internet, API dependency
- Could exceed limits quickly with daily content
- **Integration**: Python SDK or curl to API
### 4. **OpenAI TTS API**
- **Cost**: $0.015 per 1,000 characters (~$0.018/minute)
- **Quality**: ⭐⭐⭐⭐⭐ Excellent (natural, expressive)
- **Setup**: Easy (API key)
- **Platform**: API-based
- **Automation**: REST API
- **Pros**:
- High quality voices (alloy, echo, fable, etc.)
- Fast, reliable API
- Good for moderate usage
- **Cons**:
- Not free - costs add up (~$1-3/month for daily digest)
- Requires internet connection
- Rate limits apply
- **Cost Estimate**: Daily 5-min digest ≈ $2-4/month
### 5. **Coqui TTS**
- **Cost**: FREE (open source)
- **Quality**: ⭐⭐⭐⭐ Good (varies by model)
- **Setup**: Hard (Python environment, dependencies)
- **Platform**: macOS, Linux, Windows
- **Automation**: Python scripts
- **Pros**:
- Free and open source
- Multiple voice models available
- Voice cloning capability
- **Cons**:
- Complex setup (conda/pip, GPU recommended)
- Heavier resource usage than Piper
- Project maintenance has slowed (team laid off)
- **Integration**: Python script with TTS library
### 6. **Google Cloud TTS**
- **Cost**: FREE tier: 1M characters/month (WaveNet), then $4 per 1M
- **Quality**: ⭐⭐⭐⭐ Very good (WaveNet voices)
- **Setup**: Medium (GCP account, API setup)
- **Platform**: API-based
- **Automation**: REST API or SDK
- **Pros**:
- Generous free tier
- Multiple voice options
- Reliable infrastructure
- **Cons**:
- Requires GCP account
- API complexity
- Privacy concerns (sends text to cloud)
- **Integration**: gcloud CLI or API calls
### 7. **Amazon Polly**
- **Cost**: FREE tier: 5M characters/month for 12 months, then ~$4 per 1M
- **Quality**: ⭐⭐⭐⭐ Good (Neural voices available)
- **Setup**: Medium (AWS account)
- **Platform**: API-based
- **Automation**: AWS CLI or SDK
- **Pros**:
- Generous free tier initially
- Neural voices sound natural
- **Cons**:
- Requires AWS account
- Complexity of AWS ecosystem
- **Integration**: AWS CLI or boto3
---
## Recommendation
**Primary Choice: Piper TTS**
- Best balance of quality, cost (free), and ease of automation
- Local processing means no privacy concerns
- No rate limits or API keys to manage
- Perfect for daily scheduled digest generation
**Alternative if quality is paramount: OpenAI TTS**
- Use if the ~$2-4/month cost is acceptable
- Slightly better voice quality
- Simpler than maintaining local models
**Avoid for this use case:**
- ElevenLabs free tier (too limiting for daily use)
- macOS say (quality too low for podcast format)
- Coqui (setup complexity not worth it vs Piper)
---
## Suggested Integration Workflow
```bash
#!/bin/bash
# Daily Digest TTS Script
# 1. Fetch or read markdown content
CONTENT=$(cat digest.md)
# 2. Convert markdown to plain text (strip formatting)
PLAIN_TEXT=$(echo "$CONTENT" | pandoc -f markdown -t plain)
# 3. Generate audio with Piper
piper \
--model ~/.local/share/piper/en_US-lessac-medium.onnx \
--output_file "digest_$(date +%Y-%m-%d).mp3" \
<<< "$PLAIN_TEXT"
# 4. Optional: Upload to podcast host or serve locally
```
---
## Voice Model Recommendations for Piper
| Voice | Style | Best For |
|-------|-------|----------|
| lessac | Neutral, clear | News/digest content |
| libritts | Natural, varied | Long-form content |
| ljspeech | Classic TTS | Short announcements |