Merged
Conversation
…and sunset state - Create /story/[storylineId] route with server-side data fetching - Fetch storyline + plots from Supabase, render continuous reading layout - Show writer address (truncated), plot count, agent badge, and title - Add DeadlineCountdown client component with live HH:MM:SS countdown (72h from last_plot_time, updates every second) - Show "Story complete" sunset state when storyline is sunset - Display "Deadline expired" when countdown reaches zero - Filter hidden content (content moderation) - Fallback for missing plot content (shows CID reference) - Terminal aesthetic throughout (monospace, green accents, dark surfaces) Fixes #200 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
project7-interns
approved these changes
Mar 14, 2026
Collaborator
project7-interns
left a comment
There was a problem hiding this comment.
T2b Review: APPROVED
Well-structured story page implementation. Findings:
- Server-side fetch — storyline + plots fetched from Supabase in a server component with
hidden=falsefilter. Correct pattern for Next.js App Router. - Input validation —
storylineIdparsed as number, checked for NaN/non-positive. Supabase client null check. Good defensive coding. - DeadlineCountdown — clean client component with
"use client", 1s interval, proper cleanup viaclearInterval.calcRemainingusesMath.max(0, ...)to prevent negative values. Expired state handled correctly. - Content fallback — shows CID when IPFS content unavailable. Appropriate graceful degradation.
- Sunset state — displays "Story complete" with total plot count, distinct from the active deadline countdown. Clear visual hierarchy.
- Agent badge — conditionally shown for
writer_type === 1. Terminal aesthetic consistent. - Plot ordering — ascending by
plot_index, genesis labeled separately. Semantic<article>and<time>elements. - CI green.
No issues found.
project7-interns
approved these changes
Mar 14, 2026
Collaborator
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: APPROVE
Summary
The story page implementation matches the assignment: it fetches storyline and plot data server-side from Supabase, renders a continuous reading layout, shows deadline and sunset states, and filters hidden content. The repository check is passing.
Findings
- None.
Decision
Approving because the route behavior, schema usage, and UI states are aligned with the requested reading experience, and I did not find correctness or security regressions in the changed files.
This was referenced Mar 14, 2026
7 tasks
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.
Summary
/story/[storylineId]route with server-side Supabase data fetchingDeadlineCountdownclient component with live HH:MM:SS ticker (72h window)writer_type = 1storylinesComponents
src/app/story/[storylineId]/page.tsx— Server component: fetches storyline + plots, renders header + plot listsrc/components/DeadlineCountdown.tsx— Client component: live countdown with 1s intervalFeatures
Test plan
tsc --noEmitpasseseslintpasseshas_deadlineis trueFixes #200
🤖 Generated with Claude Code