LunarCast¶
| Field | Value |
|---|---|
| Status | Live — demand-gated (2026-06-14) — no new features until user demand justifies it |
| Availability | Free · public — App Store, lunarcast.app, open source on GitHub |
| Portfolio | One of two live iOS apps on the App Store (with projects/metronaut) |
| Type | Native iOS podcast client |
| Repo | dmoniker/moonlex (MIT, open source) |
| Site | https://lunarcast.app |
| App Store (US) | https://apps.apple.com/us/app/lunarcast/id6761336207 |
Description¶
LunarCast is a native iOS podcast app positioned as calm listening: no ads, no aggressive discovery, optional curated feeds, RSS for any show, emphasis on playback and settings, and news kept separate from the player. It is a no-nonsense player that does not push shows on the user; it ships with a starter library aimed at people who already like moonshot / long-form tech content, without turning the whole product into a discovery engine.
Product principles¶
- Calm UX — listening and controls first; separate space for news so it does not interrupt the player.
- No account wall — CloudKit sync without sign-up or sign-in.
- Open inputs — add shows via RSS; optional curated feeds for those who want them.
- No ad stack — clean playback positioning at launch.
Preloaded starter content (default library)¶
Ships populated with example subscriptions (user can change or remove):
- Moonshots
- Lex Fridman
- The Innermost Loop — podcast plus newsfeed article channel (news not mixed into the player experience)
- A curated list of Elon Musk interviews across multiple podcasts (one coherent entry point, not algorithmic recommendations)
Tech & data¶
- Platform: iOS (native). Source: dmoniker/moonlex — Xcode target moonmind, App Store name LunarCast.
- Sync: CloudKit (no separate account system).
- Secrets: optional Podcast Index keys live in gitignored
LocalSecrets.swift(not in the public repo).
Business¶
- Free for everyone — no paywall, no ads, no IAP today.
- Actively supported — App Store updates and issue response via lunarcast.app/support.
- Later: Possible monetization only if adoption warrants — TBD; core positioning stays no-BS listening.
Launch narrative¶
Origin: Frustration with the stock Apple podcast app while listening to Moonshots (late episodes, queue clutter, weak relisten flow) → build a calm player that respects the user’s queue and library. Public story + drafted X thread live in raw/lunarcast-summary.md.
Post-launch updates¶
- 2026-04-16: Search bug fixed, build submitted to the App Store, approved in a few hours (fast review turnaround).
- 2026-05-21: Subscription caching improved — library reads local-first; background RSS refresh instead of blocking reload on every open. Output device switching — route playback to AirPlay or other external outputs. Audience is tiny (me + my son); changes are daily-driver UX, not growth.
- 2026-06-07: App Store update shipped (open-source repo hygiene + rotated Podcast Index credentials in local build). lunarcast.app footer links GitHub. Posture: free, publicly available, actively maintained.
- 2026-06-21: Metronaut joined LunarCast as Darcy's second live iOS app on the App Store → projects/metronaut
Raw sources¶
raw/lunarcast-summary.md
Related¶
- index — catalog (this project listed under Projects).
- glossary — LunarCast term.
- What-Im-Working-On — high-level snapshot.
Marketing / Crusty (planned)¶
- Goal: crusty acts as autonomous marketing for LunarCast — recurring X posts (listening tips, App Store + lunarcast.app links, changelog highlights), Grok-backed copy on Crusty's xAI-only stack, same X API–first pattern as intended for ayerobot-comic (possibly a different handle or your main account — TBD). Note: @ayerobotcomic unattended loop is paused (2026); LunarCast promo can still follow API or manual cadence — see projects/aye-robot-crusty-paused-x-automation.
- Easiest path: define X contract (API vs manual) for Crusty, then clone scheduler + templates for LunarCast; keep human review until tone is locked.
Active maintenance (2026-05-20 → 2026-05-21)¶
2026-05-21 — shipped: Subscription caching and output device switching landed in a build.
- Caching: Library reads local store first; feeds refresh in the background on a sane interval — no full show reload blocking every cold start.
- Output routing: User can switch playback to AirPlay or other external output devices without leaving the player flow.
- Scope: Two-user household (Darcy + son) — polish for calm listening UX.
2026-05-20 — original problem statement (resolved by above):
Subscription / library stability: App had been forcing a full reload of subscribed shows too often — e.g. reopening the app or returning to the library re-fetched instead of showing cached subscriptions + last-known episodes immediately. Goal: persist the user's show list and recent episode metadata locally (SwiftData / Core Data or equivalent), refresh feeds in the background on a sane interval, and only block the UI on first subscribe or explicit pull-to-refresh — not on every cold start. CloudKit sync should merge deltas, not require a network round-trip before the library renders.
Likely fix shape (engineering notes, not prescriptive):
- Read path: library UI reads from local store first; network fetch updates the store asynchronously.
- Write path: new RSS subscribe writes locally immediately, then kicks off background parse.
- Stale-while-revalidate: show last synced timestamp; optional subtle "refreshing…" rather than empty state.
- Regression check: airplane mode after one successful sync should still show My Shows with playable cached episodes.
Next on the stack — transcribe, query, share (2026-06)¶
Share: Episode sharing is live (2026-06-07).
Deferred — transcription + AI episode tools (2026-06-13)¶
Status: Demand-gated (2026-06-14) — not building new features until user demand justifies the work. Removed from top-priority product building alongside Happy Body and Rusty Cage (now life & identity).
Original vision: Transcripts + AI to discuss the episode, extract to-do lists, actionable takeaways, NotebookLM-style querying — the real product leap beyond Apple Podcasts' tap-to-jump transcripts.
Why deferred (not killed):
- LunarCast is free with no IAP today — any cloud LLM feature implies open-ended token cost subsidized by Darcy for all users. Not acceptable at current scale/posture.
- On-device transcription alone (Apple Speech / WhisperKit) is feasible but doesn't deliver the vision without a capable local model for summarization, Q&A, and action extraction.
- Gate: Revisit when Apple ships on-device models (Foundation Models / Apple Intelligence class) powerful enough for episode discussion + structured takeaways entirely on device — zero marginal API cost, aligned with calm / no-sign-in / local-first thesis.
Until then: Demand-gated — bug fixes only if something breaks. No feature sprints, no calm-UX polish unless a user reports pain.
Preserved plan (when gate clears):
| Phase | Scope |
|---|---|
| 1 — Transcribe | Apple Speech primary; WhisperKit fallback; local store + CloudKit metadata |
| 2 — Search | Timestamped transcript; jump-to-playback |
| 3 — Local AI | On-device only: discuss episode, to-dos, takeaways — no cloud tokens for free tier |
| 4 — Share/export | Text/Markdown export; clip sharing; respect RSS rights |
Counterpoint (unchanged): Apple Podcasts already has searchable transcripts. LunarCast only wins with local-first + owned data + AI depth — not parity transcribe-only.
Kill criteria (if gate never clears affordably): Stay a calm player; do not ship half-baked cloud AI or a paid tier just to fund tokens unless adoption explicitly warrants it.
Archive — pre-deferral engineering notes (2026-06)¶
Inactive until Apple local-model gate clears. Transcription is compute-heavy; moat = on-device transcript you own.
- Phase 1: Apple Speech; background transcribe; WhisperKit fallback; local + CloudKit metadata.
- Phase 2: Timestamped search; offline index.
- Phase 3: Sharing — export text/Markdown; share clip; no rehosting.
- Phase 4: AVFoundation + Speech; tie to local-first cache.
- Phase 5: Transcript toggle UI; App Store ship; two-user household test.
Known gaps / next updates¶
- Transcription + local AI — deferred (see above); not active engineering.
- Post-launch: iterate from App Store reviews and user feedback; keep tools-and-repos URLs current if listings change region or ID.