Skip to content

feat(ui): make the app mobile-responsive#209

Merged
patrickrb merged 2 commits into
mainfrom
feat/responsive-design
May 12, 2026
Merged

feat(ui): make the app mobile-responsive#209
patrickrb merged 2 commits into
mainfrom
feat/responsive-design

Conversation

@patrickrb
Copy link
Copy Markdown
Owner

@patrickrb patrickrb commented May 12, 2026

Summary

  • Three-tier responsive treatment (mobile ≤640 / tablet 641–1024 / desktop >1024, matching Tailwind sm / md / lg) across the app shell and the three main pages.
  • Hamburger menu in Navbar.tsx (useState-toggled, closes on route change) flattens primary + more links into a single mobile panel.
  • The 7-column QSO log table on the dashboard renders as stacked per-QSO cards below md via a parallel md:hidden tree over the same filteredContacts — no changes to <Table> itself.

What changed

  • components/Navbar.tsx — mobile hamburger button, tighter px padding, mobile panel rendering both PRIMARY_LINKS and MORE_LINKS.
  • app/page.tsx (landing) — hero CTAs stack w-full sm:w-auto; preview content grid drops to single column below lg; section padding scales with viewport.
  • app/dashboard/page.tsx — page padding; hero (map + quick log) and log + DXpeditions grids drop at lg; band-activity strip becomes 4-col grid below md; toolbar wraps with search on its own row; mobile QSO card list via a small MobileCardRow helper.
  • app/new-contact/page.tsx — page padding; outer layout single column below xl; callsign mega-input text-[32px] sm:text-[56px]; lookup card grid restructures with the Verified chip spanning columns on mobile; action footer reverses with Save QSO on top.

Test plan

  • npm run dev, open Chrome devtools device toolbar
  • iPhone SE (375 × 667) on /, /dashboard, /new-contact:
    • no horizontal scroll on <body>
    • hamburger visible, tap opens vertical link panel
    • dashboard stat grid 2×2, band strip wraps 4-wide, log renders as cards (callsign prominent, 5 labeled rows)
    • new-contact form fields single column, callsign input legible
  • iPad portrait (768 × 1024): hamburger gone, full nav visible; hero/layout grids still single column (drop is at lg)
  • Desktop (1280 × 800): identical to current — no regressions
  • npm run lint && npm run typecheck && npm run build — all clean (verified locally)

🤖 Generated with Claude Code

@vercel
Copy link
Copy Markdown

vercel Bot commented May 12, 2026

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

Project Deployment Actions Updated (UTC)
nodelog Ready Ready Preview, Comment May 12, 2026 1:07am

Request Review

The redesign was built desktop-first with no media queries below 800px.
This adds a three-tier responsive treatment (mobile <=640 / tablet 641-1024
/ desktop >1024, matching Tailwind sm/md/lg) across the app shell and the
three main pages.

- Navbar.tsx: useState-driven hamburger that exposes all primary + more
  links in a single flat panel on <md viewports; closes on route change;
  px padding tightened.
- app/page.tsx (landing): hero CTAs stack with w-full sm:w-auto, preview
  grid collapses to single column below lg, section padding scales with
  viewport.
- app/dashboard/page.tsx: page padding scaled; hero (map + Quick log) and
  log + DXpeditions grids drop to single column at lg; band-activity strip
  wraps to a 4-col grid on mobile. The 7-column QSO table renders as
  stacked QSO cards on <md via a parallel md:hidden tree over the same
  filteredContacts (no <Table> changes).
- app/new-contact/page.tsx: page padding; outer layout single-col below
  xl; callsign mega-input scales 32->56px; lookup card grid restructures
  with Verified chip spanning columns on mobile; action footer reverses
  with Save QSO on top.

Verified: lint, typecheck, build all clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@patrickrb patrickrb force-pushed the feat/responsive-design branch from 82fbaca to 8e6c045 Compare May 12, 2026 01:02
@patrickrb patrickrb changed the title feat(ui): make new site design mobile-responsive feat(ui): make the app mobile-responsive May 12, 2026
The footer was layering DialogFooter's default `flex-col-reverse` with a
local `flex justify-between`, producing an awkward Cancel | Save row
above an orphaned Delete QSO button on narrow viewports.

Drop the wrapper `<div>` around the AlertDialog and let it become a
direct DialogFooter child. On mobile, every button stretches `w-full`
and stacks in the order Save Changes → Cancel → Delete QSO (the
destructive action lives at the bottom, away from the primary tap
target). On `sm` and up, Delete sits on the left and Cancel/Save group
sits on the right via `sm:justify-between` + `sm:ml-auto` (works the
same with or without onDelete).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@patrickrb patrickrb merged commit 08b31f4 into main May 12, 2026
7 checks passed
@patrickrb patrickrb deleted the feat/responsive-design branch May 12, 2026 01:18
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