Skip to content

feat: align track page schedule with the new session table design#281

Merged
mirumodapon merged 2 commits into
mainfrom
track-page-redesign
Jul 14, 2026
Merged

feat: align track page schedule with the new session table design#281
mirumodapon merged 2 commits into
mainfrom
track-page-redesign

Conversation

@pan93412

@pan93412 pan93412 commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Closes #280

What

Redesign the track detail page (/track/[id]) so its schedule matches the desktop session table, and show session details using the existing session-detail modal in place (keeping the user on the track page).

Changes

  • Schedule visual alignment (CpTrackSchedule): rewritten to the same vertical room-timeline grid as CpSessionTable — rooms as columns, downward time axis with hour bands, solid/dashed grid lines, track-coloured cards (title + speaker + time + difficulty pill + bookmark, past-session dimming), and a now line.
  • Shared detail modal (CpSessionDetailModal): extracted from /session/[id] and reused on the track page via ?session=<id>, so both surfaces share one design. Favorites are shared (localStorage). Removed the old right-drawer CpTrackSessionPanel.
  • API/type: /api/track/[id] returns per-day colors from the same palette the session table builds, so a session keeps the same colour in either view.
  • Short-slot fix: card content drops in tiers (speaker → time/tag row) so very short sessions don't overflow.
  • Removed CpTrackSessionBlock and CpTrackSessionPanel.

Verification

  • Browser-tested: in-place detail modal (open/close), favorite toggle synced with the session grid, zh/en locales, Aug.9/Aug.10 day switch (colours differ per day, matching the grid), short-card layout.
  • pnpm lint and pnpm typecheck pass; pnpm build prerenders 2236 routes with no i18n warnings.

Net −115 lines despite adding the shared modal.

Note: CpSessionTable has the same theoretical short-card overflow but was left untouched as out of scope for this issue.


CleanShot 2026-07-13 at 23 51 45@2x CleanShot 2026-07-13 at 23 50 08@2x CleanShot 2026-07-13 at 23 50 04@2x CleanShot 2026-07-13 at 23 50 15@2x
CleanShot 2026-07-13 at 23 50 20@2x

Summary by CodeRabbit

  • New Features
    • Added a session detail modal with localized session info, favorites, optional advertising, and multiple ways to close (button, backdrop, Escape key, and mobile drag).
    • Replaced the track schedule with a unified room×time grid including sticky time axis, session cards with favorites, and a real-time “now” indicator.
  • Improvements
    • Updated the session detail and track pages to use the shared modal experience.
    • Enhanced track schedule data to use confirmed sessions and derive per-day track colors.
    • Corrected the English “Time” label.

@rileychh-dokploy-coscup

rileychh-dokploy-coscup Bot commented Jul 13, 2026

Copy link
Copy Markdown

Dokploy Preview Deployment

Name Status Preview Updated (UTC)
Nuxt ✅ Done Preview URL 2026-07-14T07:15:56.289Z

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@pan93412, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 28 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7ad83810-3321-4832-9b29-1c604f1645af

📥 Commits

Reviewing files that changed from the base of the PR and between 8b24dc1 and 54d413e.

📒 Files selected for processing (1)
  • app/components/feature/CpSessionDetailShareButton.vue
📝 Walkthrough

Walkthrough

Adds a reusable session-detail modal, refactors track schedules into a unified room-by-time grid, and updates track APIs and pages to provide confirmed sessions, daily colors, favorites, ads, and modal-ready session data.

Changes

Session and track experience

Layer / File(s) Summary
Confirmed session and color data
server/api/track/[id]/index.get.ts, shared/types/session.ts
The track endpoint now filters confirmed sessions and computes day-scoped track colors, while TrackDetailSchema validates the returned color map.
Shared session detail modal
app/components/feature/CpSessionDetailModal.vue, app/components/feature/CpSessionInfoCard.vue
Adds a reusable modal with typed session props, ad selection, favorites, drag/Escape/overlay closing, scroll locking, and localized labels.
Unified track schedule grid
app/components/feature/CpTrackSchedule.vue
Replaces per-room session blocks with a day-scoped room-by-time grid containing sticky time labels, session cards, favorites, and a realtime indicator.
Page integration and modal replacement
app/pages/session/[id].vue, app/pages/track/[id].vue, app/components/feature/CpTrackSessionBlock.vue, app/components/feature/CpTrackSessionPanel.vue
Session and track pages now prepare modal data, pass ads and colors, and use CpSessionDetailModal; the previous session block and panel components are removed.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant TrackPage
  participant TrackAPI
  participant CpTrackSchedule
  participant CpSessionDetailModal

  TrackPage->>TrackAPI: request track sessions and daily colors
  TrackAPI-->>TrackPage: return confirmed sessions and colors
  TrackPage->>CpTrackSchedule: pass sessions, day, and color
  CpTrackSchedule-->>TrackPage: render session links
  TrackPage->>CpSessionDetailModal: pass selected session and ads
  CpSessionDetailModal-->>TrackPage: emit close
Loading

Possibly related PRs

  • COSCUP/2026#227: Contains overlapping weighted ad selection and session-detail modal wiring.
  • COSCUP/2026#215: Contains overlapping timetable and session rendering work.
  • COSCUP/2026#262: Covers related session-detail modal, gesture, favorites, and track metadata wiring.

Suggested reviewers: mirudapon

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: aligning the track page schedule with the new session table design.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch track-page-redesign

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@pan93412 pan93412 force-pushed the track-page-redesign branch from b7adce2 to e95f30e Compare July 13, 2026 15:49
@pan93412 pan93412 marked this pull request as ready for review July 13, 2026 15:53
@pan93412 pan93412 requested a review from a team July 13, 2026 15:56

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
app/components/feature/CpSessionDetailModal.vue (1)

155-161: 🩺 Stability & Availability | 🔵 Trivial | ⚖️ Poor tradeoff

Modal lacks focus management (trap + initial focus + restore).

The dialog sets role="dialog"/aria-modal="true" but never moves focus into the sheet on open, traps focus within it, or restores focus to the trigger on close. Keyboard/screen-reader users can tab into the dimmed background behind the overlay. Consider focusing the close button on mount and constraining Tab order (or use a headless dialog primitive).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/components/feature/CpSessionDetailModal.vue` around lines 155 - 161,
Update the modal component’s dialog behavior to manage focus: move focus to the
close button when the modal opens, trap Tab and Shift+Tab navigation within the
dialog, and restore focus to the triggering element when it closes. Anchor the
implementation to the visible dialog container and its close-button element,
preserving the existing close emissions and overlay behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@app/components/feature/CpSessionDetailModal.vue`:
- Around line 155-161: Update the modal component’s dialog behavior to manage
focus: move focus to the close button when the modal opens, trap Tab and
Shift+Tab navigation within the dialog, and restore focus to the triggering
element when it closes. Anchor the implementation to the visible dialog
container and its close-button element, preserving the existing close emissions
and overlay behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: fed7f859-ecb7-4253-b5b4-1b1f53e1cc1e

📥 Commits

Reviewing files that changed from the base of the PR and between 4b5fb72 and e95f30e.

📒 Files selected for processing (9)
  • app/components/feature/CpSessionDetailModal.vue
  • app/components/feature/CpSessionInfoCard.vue
  • app/components/feature/CpTrackSchedule.vue
  • app/components/feature/CpTrackSessionBlock.vue
  • app/components/feature/CpTrackSessionPanel.vue
  • app/pages/session/[id].vue
  • app/pages/track/[id].vue
  • server/api/track/[id]/index.get.ts
  • shared/types/session.ts
💤 Files with no reviewable changes (2)
  • app/components/feature/CpTrackSessionBlock.vue
  • app/components/feature/CpTrackSessionPanel.vue

@mirudapon mirudapon left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

把註解改英文、還有把變數命名改掉是有什麼原因嗎

@pan93412

pan93412 commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

把註解改英文、還有把變數命名改掉是有什麼原因嗎

CpTrackSchedule 和所有跟 tracks 相關的程式碼,我都直接移植自新版本 Session Table 的設計,而不是在現有的 Track Schedule 上改樣式,保證兩邊的行為能夠一致。由於新的 Session Table 的 code practice 是 用英文寫註解 的,看起來沒有必要特別把註解寫成中文(進而破壞 Track = Session 的實踐)。

除了這個因為改寫而改變實踐的部分之外,比如 shared/types/session.ts 是沒有刻意把註解翻譯成英文的。

@pan93412 pan93412 requested a review from mirudapon July 14, 2026 02:03
@mirudapon

mirudapon commented Jul 14, 2026

Copy link
Copy Markdown

把註解改英文、還有把變數命名改掉是有什麼原因嗎

CpTrackSchedule 和所有跟 tracks 相關的程式碼,我都直接移植自新版本 Session Table 的設計,而不是在現有的 Track Schedule 上改樣式,保證兩邊的行為能夠一致。由於新的 Session Table 的 code practice 是 用英文寫註解 的,看起來沒有必要特別把註解寫成中文(進而破壞 Track = Session 的實踐)。

除了這個因為改寫而改變實踐的部分之外,比如 shared/types/session.ts 是沒有刻意把註解翻譯成英文的。

那我認爲這應該要拆成兩個問題來處理:

  1. 對齊 Code base
  2. issue 讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊 #280

期待這應該要是不同 commit,這邊 @Link1515 參與討論。

@pan93412

Copy link
Copy Markdown
Contributor Author

把註解改英文、還有把變數命名改掉是有什麼原因嗎

CpTrackSchedule 和所有跟 tracks 相關的程式碼,我都直接移植自新版本 Session Table 的設計,而不是在現有的 Track Schedule 上改樣式,保證兩邊的行為能夠一致。由於新的 Session Table 的 code practice 是 用英文寫註解 的,看起來沒有必要特別把註解寫成中文(進而破壞 Track = Session 的實踐)。
除了這個因為改寫而改變實踐的部分之外,比如 shared/types/session.ts 是沒有刻意把註解翻譯成英文的。

那我認爲這應該要拆成兩個問題來處理:

  1. 對齊 Code base
  2. issue 讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊 #280

期待這應該要是不同 commit,這邊 @Link1515 參與討論。

咦,但不正是因為 (1) 沿用了新議程表的程式碼(也就是對齊 Codebase),所以就做到了 (2) 讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊?其實不太清楚對齊 Codebase 但沒讓設計對齊會是什麼樣的概念。 cc @rileychh

@mirudapon

Copy link
Copy Markdown

把註解改英文、還有把變數命名改掉是有什麼原因嗎

CpTrackSchedule 和所有跟 tracks 相關的程式碼,我都直接移植自新版本 Session Table 的設計,而不是在現有的 Track Schedule 上改樣式,保證兩邊的行為能夠一致。由於新的 Session Table 的 code practice 是 用英文寫註解 的,看起來沒有必要特別把註解寫成中文(進而破壞 Track = Session 的實踐)。
除了這個因為改寫而改變實踐的部分之外,比如 shared/types/session.ts 是沒有刻意把註解翻譯成英文的。

那我認爲這應該要拆成兩個問題來處理:

  1. 對齊 Code base
  2. issue 讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊 #280

期待這應該要是不同 commit,這邊 @Link1515 參與討論。

咦,但不正是因為 (1) 沿用了新議程表的程式碼(也就是對齊 Codebase),所以就做到了 (2) 讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊?其實不太清楚對齊 Codebase 但沒讓設計對齊會是什麼樣的概念。 cc @rileychh

我覺得應該是我誤會了

@Link1515

Copy link
Copy Markdown
Member

把註解改英文、還有把變數命名改掉是有什麼原因嗎

CpTrackSchedule 和所有跟 tracks 相關的程式碼,我都直接移植自新版本 Session Table 的設計,而不是在現有的 Track Schedule 上改樣式,保證兩邊的行為能夠一致。由於新的 Session Table 的 code practice 是 用英文寫註解 的,看起來沒有必要特別把註解寫成中文(進而破壞 Track = Session 的實踐)。
除了這個因為改寫而改變實踐的部分之外,比如 shared/types/session.ts 是沒有刻意把註解翻譯成英文的。

那我認爲這應該要拆成兩個問題來處理:

  1. 對齊 Code base
  2. issue 讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊 #280

期待這應該要是不同 commit,這邊 @Link1515 參與討論。

如果拆成兩個 commit,無論採用哪種順序,似乎都會需要先加入額外的過渡程式碼,之後再修改或移除

所以我自己比較傾向一個 commit (目前作法)就好

@pan93412

Copy link
Copy Markdown
Contributor Author

把註解改英文、還有把變數命名改掉是有什麼原因嗎

CpTrackSchedule 和所有跟 tracks 相關的程式碼,我都直接移植自新版本 Session Table 的設計,而不是在現有的 Track Schedule 上改樣式,保證兩邊的行為能夠一致。由於新的 Session Table 的 code practice 是 用英文寫註解 的,看起來沒有必要特別把註解寫成中文(進而破壞 Track = Session 的實踐)。
除了這個因為改寫而改變實踐的部分之外,比如 shared/types/session.ts 是沒有刻意把註解翻譯成英文的。

那我認爲這應該要拆成兩個問題來處理:

  1. 對齊 Code base
  2. issue 讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊 #280

期待這應該要是不同 commit,這邊 @Link1515 參與討論。

咦,但不正是因為 (1) 沿用了新議程表的程式碼(也就是對齊 Codebase),所以就做到了 (2) 讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊?其實不太清楚對齊 Codebase 但沒讓設計對齊會是什麼樣的概念。 cc @rileychh

我覺得應該是我誤會了

我覺得可以討論看看要不要統一用中文寫註解,然後把他寫進去 CLAUDE.md,來保證整個 codebase 的統一性

Redesign the track detail schedule to match the session table's vertical
room-timeline grid (rooms as columns, hour-band time axis, track-coloured
cards, now line), and open session details in place using the shared
session-detail modal instead of a side drawer.

- Extract CpSessionDetailModal, reused by /session/[id] and the track page
- Return per-day track colours from the track API for card parity
- Drop card content in tiers so short slots don't overflow
- Remove CpTrackSessionBlock and CpTrackSessionPanel
@pan93412 pan93412 force-pushed the track-page-redesign branch from e95f30e to 8b24dc1 Compare July 14, 2026 06:40

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8b24dc1ba6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/components/feature/CpSessionDetailModal.vue
@mirumodapon

Copy link
Copy Markdown
Collaborator

咦?這是已經有 rebase main 了嗎

@mirumodapon mirumodapon merged commit c85cfd5 into main Jul 14, 2026
2 checks passed
@mirumodapon mirumodapon deleted the track-page-redesign branch July 14, 2026 10:37
@pan93412

Copy link
Copy Markdown
Contributor Author

咦?這是已經有 rebase main 了嗎

對哇,有補分享按鈕上去了~

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.

讓「議程軌」頁面的設計跟桌面端新的議程表設計對齊

4 participants