Read · Remember · Act — summary-first redesign with 80-title catalog - #1
Merged
lukataylo merged 37 commits intoJun 15, 2026
Merged
Conversation
…tion plans Implements the pivot explored in research/pivot-2026: the app leads with original "The Big Ideas in …" summaries (Blinkist/Headway-style), adds a Deepstash-style knowledge-card layer, and turns every book into a 14-day implementation plan exportable to Calendar and Reminders. New tab layout: Read (library + catalog, search in toolbar), Remember (swipeable card decks per book), Saved (saved cards + the pre-existing Learnings and Highlights galleries), Act (action plans), Settings. - Models: KnowledgeCard + ActionItem (CloudKit-safe, cascade from Book); Book gains isSummaryEdition / sourceAttribution / readMinutesEstimate - SummaryPackLoader seeds 8 bundled clean-room summary packs (Atomic Habits, Deep Work, Mindset, Thinking Fast and Slow, Sapiens, The Power of Habit, 7 Habits, How to Win Friends) with curated learnings, card decks, and action plans; per-slug idempotent - KnowledgeCardEngine + ActionPlanEngine generate decks/plans for any imported book via the existing local-first LLM router - PlannerService exports plans via EventKit: events → Calendar (write-only access), tasks → Reminders - Legal framing per PLAN §3: original idea-level prose, "The Big Ideas in …" naming, attribution + buy-the-book line rendered in-app and enforced by SummaryPackTests - Docs: docs/redesign-read-remember-act.md; README + App Store copy and privacy/data-safety updates https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
Applies the independent editorial/legal review of the 8 summary packs: - Rephrase the two verbatim famous lines (Atomic Habits' compound-interest tagline, Kahneman's focusing-illusion line) and the near-paraphrases flagged in Deep Work, Sapiens, 7 Habits and How to Win Friends - Rewrite How to Win Friends' two principle-enumeration sections as pruned, original-structure prose; soften principle-title echoes in cards/learnings/actions - Drop trademark-adjacent "wildly important" phrasing from Deep Work - Sapiens: switch to the 2014 English-edition year; loosen the closing line and the wheat/fraud framings - Mindset: fix the Columbia/Stanford attribution nit; pad the one under-length card - Harmonize card titles to Title Case and normalize JSON formatting across all packs https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
…t anchoring Applies the independent code review of the redesign: - SummaryPackLoader: persist the loaded-slug flag per pack (crash mid-seed no longer re-seeds saved packs), only mark a slug loaded when the save succeeds, skip decode for already-loaded slugs, and add a content-based duplicate guard so CloudKit-synced devices don't seed their own copies; summary editions now use format .unknown - KnowledgeCardEngine/ActionPlanEngine: tolerant JSON extraction (strips code fences, finds the first top-level array) since malformed-but- successful local-model output never reaches the router's provider fallback; raise maxOutputTokens to 3000 to avoid truncated arrays - ActionPlanView: single-item exports anchor to the plan's derived start date (from already-exported siblings) instead of today https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
Design: remove every decorative gradient in favor of a clean, iOS-native glass language — knowledge cards, deck tiles, saved rows, the continue card, search field, shelf badges, toasts and the Transform CTA bar now use Material surfaces with hairline strokes (Design/Glass.swift). Category identity moves from gradient backgrounds to a small tint + SF Symbol chip; generated book spines are flat color. Haptic feedback on card saves and plan check-offs; deck position bar in the card reader. Scale/reliability for the 80-title catalog: SummaryPackLoader decodes packs off the main actor and yields between inserts; Remember and Act tabs gain search. New tests: LLMJSON extraction and SummaryPackLoader seeding idempotency/duplicate-guard contracts. https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
Applies the three independent editorial/legal reviews (24 packs each): - Break every flagged famous-line echo: Frankl's two signature sentences, Catmull's team/idea antithesis, Graham's chief-adversary line, Allen's ideas-not-storage line, Naval's aphorisms (systemic pass), Scott's ear/mouth line, Ries' first-contact and startup-definition phrasings, McKeown/Keller signature formulations, Nudge's cafeteria line, Duckworth's "effort counts twice" heading, Gilbert's stumble-upon contrast, Voss's two-shoes image, and the Hays-translation echoes in Meditations plus the Seneca imagination line - Factual fixes: Hush Puppies growth ~50x not several-hundredfold, Ericsson "naive practice" not an invented coinage, Sinek's pop-neuroscience attributed as his claim, Brown's marble-jar/years details softened, Kiyosaki slogan reworded - Trademark hygiene: tiny-habits B=MAP card softened; voice consistency and category nits (Innovator's Dilemma → Business) - Section renames keep learnings' chapter references in sync; full-catalog validator passes on all 80 packs https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
…aved stack
Applies the independent 10/10-bar design review and code review:
- Dynamic Type: Typography tokens re-anchored to text styles; swept every
fixed point size in Remember/Saved/Act/Library/Detail/card views to
scaling text styles (reader keeps its own size system)
- Dark mode: continue-reading, import, and Transform CTAs now use
inverted ink (accent bg + app-background fg) instead of hardcoded
black/white that vanished on pure-black backgrounds
- Library search field now actually filters the shelf (title, author,
category, theme) with a results grid and no-match state; SearchView
routes through BookDetailView so PDFs land in the right reader
- Saved tab restructured to one NavigationStack ("Saved") with the
segmented control pinned beneath the title; Learnings and Bookmarks
children de-stacked (their search/toolbars attach to the parent bar)
- Read→Remember→Act loop closed: the deck now ends on a completion card
with saved-count and a "Start the 14-day plan" handoff
- Act tab restyled to the Remember idiom: serif editorial header, glass
plan tiles with progress, same grid rhythm
- Reliability: per-body hoisting + cheap originalVariant checks in
Remember/Act (80-book catalog, per-keystroke body re-runs), loader
rollback on failed save, single duplicate-guard fetch per run,
glassCard shadow moved onto the background shape, deck progress clamp,
haptics fire on save/complete only, Reduce Motion gates new animations,
44pt hit targets, cover progress bar visible on light covers,
LLMJSONTests use #require, slug==filename asserted in pack tests
https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
…s, full font sweep Applies the independent verification pass on the review-fix commits: - Remember/Act show a "no matches" message during an active search instead of the misleading first-run empty state - Transform studio's selected theme chips, progress tint and toggle tint move off hardcoded black to inverted-ink palette tokens (the same dark-mode bug class as the CTAs fixed previously) - Dynamic Type sweep completed for the two remaining screens (Highlights gallery, Transform studio) - Deck progress bar counts the end card so 100% only reads on "Done" https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
The async EventKit permission requests are nonisolated, so a main-actor-isolated store can't be sent into them under strict concurrency. EKEventStore is documented thread-safe; mark the stored instance nonisolated(unsafe) and keep the non-thread-safe EKEvent/EKReminder objects confined to the main actor. https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
ReaderListenFlowTests predates this branch but stopped compiling on the updated CI image: Xcode 16.4's XCTest marks the XCUI APIs main-actor-isolated, so the test class must be @mainactor under SWIFT_STRICT_CONCURRENCY=complete. https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
… catalog All 54 unit tests pass on CI; this pre-existing UI test was the last failure. Its loose CONTAINS 'by' predicate matched 'Algorithms to Live By' off-screen in a shelf carousel (no hit point), and the flow never accounted for the Book Detail screen between Library and Reader. Now: match the catalog's 'The Big Ideas in' title convention, tap the first hittable card, push through the detail screen's reading CTA, then run the original pause/resume regression steps unchanged. https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
Hittability queries on off-screen carousel cards throw outright on the
CI simulator ('activation point invalid'), so stop iterating shelf
cards. The Library search field now filters for real — type a known
catalog title and tap the full-width result card it surfaces, which is
always on screen. Also exercises the new search path end-to-end.
https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
… Gladwell
- Every catalog title gains a second length tier: packs carry an
optional summary_short (~3-min quick take) that seeds as a compressed
BookVariant ("Quick take · 3 min") next to the full summary, with an
upgrade backfill for books seeded before the tier existed; shelf badge
now shows the 3–N MIN range (first 10 packs populated, rest landing)
- Transformation Studio: Malcolm Gladwell removed from suggested styles
(replaced in marketing copy by Joan Didion); new "Surprise me" chip
picks a random voice from the pool, never repeating the current one
- Tests: quick-take creation, no-duplication, and backfill contracts;
catalog tests require a 200–450-word headingless gist per pack
https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
…labels Applies the independent Books-app-bar design review (6.5/10 → fix list): - One search affordance: the inline Library field is the search; the toolbar magnifier + SearchView sheet are gone (SearchView deleted) - One-tap resume: the continue card opens the reader directly (PDFs keep PDFKit); chevron replaces arrow as the single forward glyph - Icon diet: BookDetail variant/action rows are text + chevron only, duplicate Generate/Transform affordance removed; ActionPlan rows and Act tiles use quiet caption text instead of labeled glyphs and the green seal; CategoryChip drops its decorative symbol - Listen-first-impression fix: attribution now closes the summary text instead of opening it, so TTS starts with ideas, not boilerplate - Honest labels: "Top selections for you" → "Recent"; cover badge replaced by a quiet "3–15 min" caption under the author (length tiers still visible on the home page without 80 pills of texture) - Hero wraps naturally (no forced breaks/negative leading); Books-style section rhythm (xl between sections); dead Hyphenation toggle removed https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
The pause/resume tests raced the wall clock against the production 0.6s suppression window; a loaded CI simulator took ~1s between recording the action and asserting, failing spuriously. Assert with a now derived from the recorded timestamp instead (plus a sanity bound that the timestamp is fresh) — deterministic, same semantics. https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
Owner-selected from the three research/cover-art mockups. New Design/CoverArt.swift renders every coverless book as a printed-jacket style cover: warm paper ground, ink serif title with THE BIG IDEAS IN eyebrow, one stroke-built Canvas glyph per category (rings, marching circles, ascending bars, orbitals, timeline, arch, pediment, memoir circle, essay lines), category-color foot bar. Per-title djb2 seed varies element counts, tilt and accents deterministically; flat fills and strokes only. Wired into BookCardView shelves and the BookDetail hero; the old flat-color spine fallbacks are gone. https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
The summary-first pivot from
research/pivot-2026/PLAN.md, built end-to-end. The app's core loop is now three tabs whose names are the pitch — Read · Remember · Act — plus Saved and Settings.Product
Content & legal posture
Every summary is clean-room original prose (idea-level, own structure, no quotes), titled distinctly, with an attribution line rendered in-app: "An original summary … Not affiliated with or endorsed by the author or publisher … buy the full book." Three independent reviewer agents audited all 80 packs against PLAN.md §3; every flagged famous-line echo, translation-tracking phrase, and factual slip was rewritten.
SummaryPackTestsenforces the framing mechanically. IP counsel sign-off is still required before public launch (tracked indocs/redesign-read-remember-act.md).Design
Clean, minimal, iOS-native, glassmorphic: no decorative gradients anywhere;
Materialsurfaces with hairline strokes (Design/Glass.swift); category tint + SF Symbol chips; flat-color spines; inverted-ink CTAs that survive dark mode; app-wide Dynamic Type (all fixed font sizes swept to text styles); haptics on saves/check-offs only; Reduce Motion respected. The reader's legibility scrim is the one sanctioned functional exception (documented).Engineering
KnowledgeCard+ActionItem(CloudKit-safe, registered in both containers);Bookgains summary-edition fields.SummaryPackLoader: off-main decode, per-pack idempotency that survives crashes, CloudKit duplicate guard, rollback on failed saves.PlannerService(EventKit, write-only calendar access; usage strings + privacy docs updated).Review process
Nothing self-graded: 24 writer agents, 3 content/legal reviewers, 1 design reviewer (all 7 of its "required for 10/10" findings fixed), 2 code reviewers, and a final independent verification pass on the fix commits — different agents on each side every time.
Built in a Linux environment (no Xcode), so this PR's CI run is the first real build — watching it.
https://claude.ai/code/session_018CZefAWk4wppn8tKr956kN
Generated by Claude Code