Let's add a reading time estimate to articles posted on the readings page: th...
Let's add a reading time estimate to articles posted on the readings page: the McLuhan chapter and the two New Yorker readings. Configure it to be on the high end.
Let me check the word counts of those three readings and the display component.
Now let me see how the resources page displays readings.
Now I have everything I need. Here's my plan:
- Word counts: McLuhan ~8,328 words, "Blurry JPEG" ~3,563 words, "Case that AI is Thinking" ~5,739 words
- At a slow reading pace (~200 wpm, high end), that's roughly: McLuhan ~42 min, Blurry JPEG ~18 min, AI Thinking ~29 min
- I'll round up generously for "high end": McLuhan ~45 min, Blurry JPEG ~20 min, AI Thinking ~30 min
I'll add a readingTime field to ReadingMeta, set it in the frontmatter of those three files, and display it on both the reading page and resources page.
Now I'll make all the changes. Using ~200 wpm (slow reader pace) and rounding up: McLuhan 8328 words → 45 min, Blurry JPEG 3563 → 20 min, AI Thinking 5739 → 30 min.
Now add the reading time display to both the resources page and the individual reading page.
Let me verify the build passes.
All clean. Here's what I did:
Added readingTime field to ReadingMeta in packages/types/src/content.ts.
Set reading times (using ~200 wpm, a slow/careful reader pace, rounded up):
- McLuhan "The Medium is the Message" — 45 min (~8,300 words)
- "ChatGPT Is a Blurry JPEG of the Web" — 20 min (~3,600 words)
- "The Case That A.I. Is Thinking" — 30 min (~5,700 words)
Display:
- Resources page: Shows "· 45 min read" after the author name in each reading card
- Individual reading page: Shows "45 min read" in the italic line at top-right, before the fair use notice
I see them on the individual reading page but not on the resources page. Let's also update tomorrow's meeting page with the combined total at the top.
Let me check the readings loader to see if it's passing through readingTime.
Found it — readingTime isn't being extracted from frontmatter. Now let me find tomorrow's meeting page.
Tomorrow is March 5. Let me check that meeting page.
Now I have everything. I'll add the combined reading time (20 + 30 = 50 min) to the "Before Class" section.
Let me verify the build still passes.
All good. Two fixes:
-
Resources page — the
readingTimefield wasn't being extracted from frontmatter inapps/web/lib/readings.ts. Added it to the returned object. -
Meeting page — added "~50 minutes of reading" (20 + 30) to the "Before Class" section of the March 5 meeting.
Your task
First, run git status, git diff, and git log --oneline -10 to understand the current state.
Then add and commit all modified files with a descriptive message. Break the changes into multiple commits if appropriate. If there are untracked files, ask if they should be added or added to the appropriate .gitignore file. The user may also want to take over at this point, so provide an abort option as well. Always check changes for unnecessary debugging statements or logging that might have been accidentally included. Prompt the user if you find any, and offer to remove each one by one. Do not use interactive git staging (git add -p) as it does not work.
The changes are clean — no debug statements. I'll split into two commits: one for the dependency bumps (@types/node, swr) and one for the reading time feature.
Two commits:
- Bump @types/node to 25.3.3 and swr to 2.4.1 — the pre-existing dependency updates across all packages
- Add reading time estimates to readings and meeting page — the feature work
@repo/web:lint: ~/www/usingandunderstanding.ai/apps/web/components/display/display-activity-stage.tsx @repo/web:lint: 56:44 error 'totalPausedMs' is assigned a value but never used. Allowed unused vars must match /^/u @typescript-eslint/no-unused-vars @repo/web:lint: 79:7 error 'futureTimeline' is never reassigned. Use 'const' instead prefer-const @repo/web:lint: @repo/web:lint: ~/www/usingandunderstanding.ai/apps/web/components/mdx/link-submission.tsx @repo/web:lint: 12:44 error 'children' is defined but never used. Allowed unused args must match /^/u @typescript-eslint/no-unused-vars
All three lint errors fixed:
- Removed unused
totalPausedMsdestructure - Changed
lettoconstforfutureTimeline - Removed unused
childrenparameter fromLinkSubmission
Your task
First, run git status, git diff, and git log --oneline -10 to understand the current state.
Then add and commit all modified files with a descriptive message. Break the changes into multiple commits if appropriate. If there are untracked files, ask if they should be added or added to the appropriate .gitignore file. The user may also want to take over at this point, so provide an abort option as well. Always check changes for unnecessary debugging statements or logging that might have been accidentally included. Prompt the user if you find any, and offer to remove each one by one. Do not use interactive git staging (git add -p) as it does not work.
Your task
First, run git status, git diff, and git log --oneline -10 to understand the current state.
Then add and commit all modified files with a descriptive message. Break the changes into multiple commits if appropriate. If there are untracked files, ask if they should be added or added to the appropriate .gitignore file. The user may also want to take over at this point, so provide an abort option as well. Always check changes for unnecessary debugging statements or logging that might have been accidentally included. Prompt the user if you find any, and offer to remove each one by one. Do not use interactive git staging (git add -p) as it does not work.
Clean — no debug statements. All changes are lint/formatting fixes, the reading time display tweaks, a turbo version bump, and a trailing newline fix in the DB journal. I'll do two commits: one for the lint fixes + formatting, one for the dependency bump.
Done — two commits:
- Fix lint errors and auto-format source files — removed unused vars,
let→const, reformatted long lines across components and tests - Bump turbo to 2.8.13 and update package versions — the remaining package.json/lockfile changes
I'm wondering if we should make a change to how the discussion activities work, and more generally. Currently we have students report out via a text submission as part of the discussion interval. But some students complete this quite early and then just sit there. So one option would be to instead, have it be (1) N minutes of discussion (students should be talking), (2) P minutes of report out (individual typing), and then (3) R minutes of share out. What do you think?
Let me explore how the current activity stages and group activities are structured to understand what a change like this would involve.
This is an interesting pedagogical design question. Let me think through the tradeoffs.
Current structure (per round in March 5):
- 15m discussion + text submission together (GroupActivity with TextSubmission inside)
- 10m share out (TextSubmissionBoard)
Your proposed structure:
- N min discussion only (talk, no typing)
- P min report out (individual typing)
- R min share out
What I think works well about the split:
- Clearer signal about what to do at each moment — "now talk, now write, now listen"
- Prevents the early-finisher idle problem because everyone types at the same time
- May actually improve discussion quality since students focus on talking rather than trying to simultaneously type notes
Potential concerns:
- More stages for the instructor to manage (3 per round instead of 2, so 9 total instead of 6 for a three-round discussion)
- Students still might finish typing at different speeds during report-out, creating a smaller version of the same idle problem
- Some students naturally jot notes while talking — removing that could mean they forget points
Technically this is straightforward — just restructuring the MDX to move TextSubmission out of the GroupActivity into its own stage.
Good, clear direction. Let me write the plan.