Skip to content

Read · Remember · Act — summary-first redesign with 80-title catalog - #1

Merged
lukataylo merged 37 commits into
mainfrom
claude/summary-app-memorization-redesign-ov23gy
Jun 15, 2026
Merged

Read · Remember · Act — summary-first redesign with 80-title catalog#1
lukataylo merged 37 commits into
mainfrom
claude/summary-app-memorization-redesign-ov23gy

Conversation

@lukataylo

Copy link
Copy Markdown
Owner

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

  • Read — the library, now summary-first. Ships an 80-title catalog of original "The Big Ideas in …" editions (~123k words of summaries). All existing features kept: import, variants, TTS, speed-read, transformations work on summaries because each summary is stored as the book's original variant. Search moved into the home (live shelf filtering + the full search screen).
  • Remember — Deepstash-style knowledge cards: 945 curated cards across the catalog, swipeable full-screen decks, save/share, LLM generation for any imported book. Decks end with a handoff into the book's plan.
  • Saved — saved cards plus the pre-existing Learnings and Highlights galleries as segments under one navigation identity.
  • Act — a 14-day implementation plan per book (760 curated steps; LLM generation for imports). Steps check off in-app or export to Calendar (write-only EventKit) and Reminders.

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. SummaryPackTests enforces the framing mechanically. IP counsel sign-off is still required before public launch (tracked in docs/redesign-read-remember-act.md).

Design

Clean, minimal, iOS-native, glassmorphic: no decorative gradients anywhere; Material surfaces 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

  • New SwiftData models KnowledgeCard + ActionItem (CloudKit-safe, registered in both containers); Book gains 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).
  • Fence-tolerant LLM JSON parsing shared by the card/plan engines; new router tasks.
  • Tests: catalog contract (80 titles, unique slugs/titles, attribution, deck/plan validity, slug==filename), loader idempotency, JSON extraction.

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

claude added 30 commits June 9, 2026 21:21
…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
claude added 7 commits June 10, 2026 06:10
…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
@lukataylo
lukataylo merged commit 987afc2 into main Jun 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants