Skip to content

fix: mobile hover tips, About page updates, and Vercel build#84

Merged
kaiiiichen merged 2 commits into
mainfrom
fix/mobile-hover-tip-stacking
Jun 26, 2026
Merged

fix: mobile hover tips, About page updates, and Vercel build#84
kaiiiichen merged 2 commits into
mainfrom
fix/mobile-hover-tip-stacking

Conversation

@kaiiiichen

@kaiiiichen kaiiiichen commented Jun 26, 2026

Copy link
Copy Markdown
Owner

Summary

  • Fix mobile homepage overflow and tooltip behavior (HoverTip tap-to-toggle, help icon styling, z-index/stacking).
  • Sync About page experience/volunteering layout with LinkedIn and align volunteering to the experience card format.
  • Fix Vercel production build failure by typing volunteering roles with optional AboutRole.detail.

Test plan

  • npm run lint && npm run typecheck && npm run test && npm run build
  • Verify About page Experience + Volunteering render correctly on desktop and mobile
  • Tap the homepage Signal help ? icon on mobile — tooltip toggles without horizontal overflow
  • Confirm Vercel preview deployment succeeds

Made with Cursor


Open in Devin Review

Summary by CodeRabbit

  • New Features
    • Improved the About page’s Experience and Volunteering sections with a cleaner, more consistent layout.
    • Role entries now display years more clearly, with optional extra details shown when available.
    • Updated several role descriptions and date ranges for more accurate information.

kaiiiichen and others added 2 commits June 25, 2026 18:14
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude <noreply@anthropic.com>
Volunteering roles only had years and role, so TypeScript narrowed away
optional detail and failed the Vercel production typecheck.

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@vercel

vercel Bot commented Jun 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
kaichen.dev Ready Ready Preview, Comment Jun 26, 2026 10:11pm

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The About page now uses a shared role-item structure for experience and volunteering entries. Experience items render years separately, and volunteering entries now group roles under organizations with optional meta and detail fields.

Changes

About page role layout refactor

Layer / File(s) Summary
Role data shape updates
app/about/page.tsx
Introduces a shared AboutRole type and updates experience entries to use years, role, and optional detail fields with revised ranges and meta text.
Experience role rendering
app/about/page.tsx
Renders experience role years in a dedicated span beneath each role title instead of the prior combined years and meta block.
Volunteering role structure
app/about/page.tsx
Stores volunteering entries as organizations with optional meta and nested roles, and renders role details when present.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

I hopped by the About page, bright-eyed and spry,
With years in neat burrows and roles stacked sky-high.
A carrot of order, a nibble of grace,
Now volunteering dances in its proper place.
🐇✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately reflects the main changes: mobile tooltip fixes, About page updates, and the Vercel build fix.
Description check ✅ Passed The description has the required Summary and Test plan sections, but it omits several template sections like Type of change, Related issues, and Checklist.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mobile-hover-tip-stacking

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

@devin-ai-integration devin-ai-integration 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.

Devin Review found 1 potential issue.

Open in Devin Review

Comment thread app/about/page.tsx
Comment on lines 286 to 360
{/* Volunteering */}
<div className="mag-card shrink-0">
<div className="mag-label">Volunteering</div>
<div>
<div className="flex flex-col">
{[
{
years: "Oct 2023 – Dec 2025",
role: "Certified First Aider",
org: "SUSTech Emergency Rescue Association",
meta: "Shenzhen",
roles: [
{
years: "Oct 2023 – Dec 2025",
role: "Certified First Aider",
},
] as AboutRole[],
},
].map(({ years, role, org }, i) => (
].map(({ org, meta: orgMeta, roles }, groupIndex) => (
<div
key={i}
className="py-4 border-b border-zinc-100 dark:border-zinc-800/60 last:border-0"
key={org}
className="py-4 md:py-3 border-b border-zinc-100 dark:border-zinc-800/60 last:border-0"
>
<span
style={{ fontFamily: "'Nunito'", fontWeight: 400, fontSize: 11, letterSpacing: "0.04em" }}
className="text-zinc-400 dark:text-zinc-600 block mb-1"
>
{years}
</span>
<p
style={{ fontFamily: "'Nunito'", fontWeight: 600, fontSize: 17, lineHeight: 1.4 }}
className="text-zinc-800 dark:text-zinc-200"
>
{role}
</p>
<p
style={{ fontFamily: "'Nunito'", fontWeight: 400, fontSize: 16, lineHeight: 1.5 }}
className="text-[#C4894F] dark:text-[#D9A870] mt-0.5"
>
{org}
</p>
{orgMeta ? (
<p
style={{ fontFamily: "'Nunito'", fontWeight: 400, fontSize: 11, letterSpacing: "0.04em" }}
className="text-zinc-400 dark:text-zinc-600 mt-1"
>
{orgMeta}
</p>
) : null}
<div className={roles.length > 1 ? "mt-3 space-y-0" : "mt-2.5"}>
{roles.map((roleItem, roleIndex) => (
<div
key={`${groupIndex}-${roleIndex}`}
className={
roleIndex > 0
? "pt-4 mt-4 border-t border-zinc-100 dark:border-zinc-800/60"
: undefined
}
>
<p
style={{ fontFamily: "'Nunito'", fontWeight: 600, fontSize: 17, lineHeight: 1.4 }}
className="text-[#C4894F] dark:text-[#D9A870]"
>
{roleItem.role}
</p>
<span
style={{
fontFamily: "'Nunito'",
fontWeight: 400,
fontSize: 11,
letterSpacing: "0.04em",
}}
className="text-zinc-400 dark:text-zinc-600 block mt-1"
>
{roleItem.years}
</span>
{roleItem.detail ? (
<p
style={{ fontFamily: "'Nunito'", fontWeight: 400, fontSize: 15, lineHeight: 1.55 }}
className="text-zinc-500 dark:text-zinc-500 mt-1.5"
>
{roleItem.detail}
</p>
) : null}
</div>
))}
</div>
</div>
))}
</div>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚩 Volunteering section restructured to match Experience — visual ordering changed

The old Volunteering section rendered items in the order: years → role → org (with the org styled as an accent-colored sub-label). The new code at app/about/page.tsx:286-361 restructures it to match Experience: org → meta → role → years. This means the org name is now the primary heading (zinc-800/200) and the role is the accent-colored element beneath it. For the single current entry ('SUSTech Emergency Rescue Association' / 'Certified First Aider'), this changes the visual hierarchy noticeably — the role title ('Certified First Aider') moves from being the large primary text to being the accent sub-heading. This is likely intentional for consistency but is a semantic/visual change worth confirming.

(Refers to lines 286-361)

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@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/about/page.tsx (1)

299-299: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Avoid as AboutRole[] on the inline data.

This assertion weakens field checking for future edits in the volunteering block. Typing the collection itself preserves the optional detail fix without masking misspelled or missing role fields.

🤖 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/about/page.tsx` at line 299, The volunteering data block is using an
inline type assertion to AboutRole[], which bypasses field validation. Remove
the inline assertion and type the collection itself where it is defined in the
About page data so the existing detail optionality is preserved while still
catching misspelled or missing role fields in the volunteering entries.
🤖 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/about/page.tsx`:
- Line 299: The volunteering data block is using an inline type assertion to
AboutRole[], which bypasses field validation. Remove the inline assertion and
type the collection itself where it is defined in the About page data so the
existing detail optionality is preserved while still catching misspelled or
missing role fields in the volunteering entries.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2609ab39-7acd-434b-b1ef-cb241dd73a89

📥 Commits

Reviewing files that changed from the base of the PR and between 377533c and 807e5e4.

📒 Files selected for processing (1)
  • app/about/page.tsx

@kaiiiichen kaiiiichen merged commit 379889e into main Jun 26, 2026
6 checks 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.

1 participant