Skip to content

Bug fixes + interview-mode app view + mobile-responsive admin#24

Merged
Kitkatnik merged 13 commits into
mainfrom
Kitkatnik/host-activity-day
Apr 27, 2026
Merged

Bug fixes + interview-mode app view + mobile-responsive admin#24
Kitkatnik merged 13 commits into
mainfrom
Kitkatnik/host-activity-day

Conversation

@Kitkatnik

Copy link
Copy Markdown
Collaborator

Summary

  • Four small UX bug fixes: Dashboard link in the signed-in user navbar, day picker on the "Host an Activity" form (only when the day isn't already implied by the entry point), ⚡ emoji on Lightning Talks badges everywhere via KIND_DISPLAY_OVERRIDES, and a corrected page count ("3 pages") on the passport application confirmation page.
  • Admin embassy application show redesigned for interview readability — dense 3-column grid ([1.3] | question | answer), notary cheat-sheet strip, prominent Section 3 random-pool callout (yellow tint + badge); replaces the previous unstyled <dl> markup that referenced undefined CSS classes.
  • Admin dashboard made mobile-responsive — every wide table wrapped in a .table-scroll container with overflow-x: auto (border-radius/shadow moved to the wrapper to survive overflow clipping), and admin index header rows now use gap-3 flex-wrap so action buttons stack on narrow screens instead of squashing.
  • Mobile burger menu added to the admin nav without changing the desktop layout — the original .admin-nav flex/gap CSS is restored byte-for-byte and the burger lives entirely below the lg breakpoint via a CSS-only :not() rule. Plus a "Back to User Dashboard" rename and a new "Guide" link in the user navbar pointing to blueridgeruby.com/guide.

Test plan

  • /dashboard → click "Host an Activity" → day dropdown picks the right day; "+ Add custom block" on /plan still hides the picker since the day is implied
  • /schedule → ⚡ prefix on the Lightning Talks badge in kind chips and session cards
  • Submit a passport application → confirmation page shows "3 pages · standard letter size"
  • /admin/embassy_applications/:serial → all 5 sections render in dense grid; section 3 has yellow tint + "Randomized question pool" badge
  • Resize admin pages below 1024px → burger appears; tables become horizontally scrollable; header buttons wrap below titles

Surfaces /dashboard from the global nav so signed-in users can
return to the action-card grid without backing up through their
browser history. Added in both the desktop list and the mobile
drawer.
When the form is opened from /dashboard's "Host an Activity" card,
no day is implied by the entry point, so the user couldn't pick
which day their activity belonged to — everything defaulted to
Saturday.

Render a Day select dropdown in that case (driven by
ScheduleItem::DAY_META). When the form is opened from /plan's
"+ Add custom block" link the day is already implied by the
section, so keep using a hidden field there. The distinguisher
is whether the caller passes show_day_picker: true.
Single source of truth — the override flows through
kind_display_label and propagates to the kind filter chips,
public schedule cards, and admin index automatically.
The confirmation page advertised "2 pages" but the rendered PDF
is actually 3 pages — page-one's instructions overflow into a
second sheet before the notary addendum starts on the third.
The show page was a single dense card of <dl>/<dt>/<dd> styled with
undefined CSS classes, so the questions and answers blurred together
and the attaché had no way to scan during the stamping interview.

Restructure as:

- Header row with applicant + appointment + submitted timestamp
- Two-up "interview cheat sheet" panel: notary assignment (with
  follow-up prompt) and Section 3 random pool draw
- Pill-style jump-nav across the five sections
- Each section gets a strong header, instructions, and (for section 3)
  a "random pool" badge so the attaché knows the questions vary
- Each Q&A renders as its own card: a "1.3" tag, the external_id, the
  question label in muted text, and the answer in a left-accented
  callout box that's the visual focus

Answer rendering by type:
- short/long/select/date: prose in the callout, simple_format-aware
- checkbox_group: pill chips instead of bulleted list (faster to scan)
- checkbox: green "✓ Affirmed" / red "✗ Not affirmed"
- blank: muted italic "— Blank —"

Extracts a _question_row partial to keep the case-by-field-type logic
out of the show template.
Replace the card-per-question layout with a dense 3-column grid
([1.3] | question | answer) so the whole application fits without
scrolling far. Drop section instructions and jump-nav (interview
context, not form-filling). Collapse cheat-sheet panel into a
single-row notary strip — pool draw IDs were noise and got cut.

Section 3 (the randomized pool) gets a tinted background and a
prominent "★ Randomized question pool" badge so the attaché's eye
lands on it instantly; gold tags on each row carry that signal
through when scrolling.

Restore "Download PDF" button text — the truncated "PDF" label
was unclear about the action.
The admin navy bar was a single flex row with seven inline links,
which collapsed badly on mobile. Mirror the signed-in user navbar
pattern: brand left, burger right, with a toggleable drawer that
stacks the links on screens below the lg breakpoint. Drops the
flex layout from .admin-nav so the inner toggle wrapper handles
both desktop row and mobile column flows.

Reuses the existing toggle Stimulus controller, the burger SVG
markup, and the click@window-to-close behavior.
Missed in a694778 — the partial still emitted the old
qa-question card markup, which paired with the new qa-row
CSS meant questions rendered unstyled on the deployed page.
Wrap every admin table in a .table-scroll container with
overflow-x: auto so wide tables (Users, Schedule Items,
Embassy Applications, Delivered, Question Bank, Notary Pool,
Archived Questions) become horizontally swipable on narrow
screens instead of blowing out the layout.

Move the table's border-radius and shadow up to the wrapper
so the visual chrome survives the overflow clip.

Add gap-3 flex-wrap to admin page header rows so the title
and action buttons can stack vertically on mobile instead of
overlapping. Same for the search forms on the embassy
application queues. Add flex-wrap to the question-bank
section headers (CSS-side fix).
The hand-written CSS in application.css only defines lg:block
and lg:hidden — there's no lg:flex utility. The desktop link
container had "hidden lg:flex" so on desktop the hidden class
never got overridden and the links stayed display: none.

Mirror the user navbar's nesting pattern: outer "hidden lg:block"
wrapper for visibility, inner "flex items-center gap-x-6" div
for layout. The inner flex always resolves; the outer block
toggles in/out at the lg breakpoint.
The mobile-responsive rewrite changed the admin nav markup and used
Tailwind utilities (lg:flex, gap-x-6) that aren't actually defined
in the hand-rolled application.css, so links rendered smushed and
the desktop navbar no longer matched the screenshot it was supposed
to mirror.

Restore the original markup and the original .admin-nav CSS
(display: flex, gap: 1.5rem, padding: 0.875rem 2rem) byte-for-byte.
The mobile burger is now an additional last-child of the nav with
display: none on desktop — zero visual effect at lg+ widths. Below
the lg breakpoint, a CSS rule hides every nav child except the
brand and burger, and the drawer (a sibling of the nav, never
visible on desktop thanks to a !important guard) reveals the full
link list when toggled.

Also rename the "User Dashboard" link to "back to User Dashboard"
in both the desktop nav and the mobile drawer.
@railway-app

railway-app Bot commented Apr 27, 2026

Copy link
Copy Markdown

🚅 Deployed to the ruby-embassy-pr-24 environment in ruby-embassy

Service Status Web Updated (UTC)
ruby-embassy ✅ Success (View Logs) Web Apr 27, 2026 at 2:53 am

@railway-app railway-app Bot temporarily deployed to ruby-embassy / ruby-embassy-pr-24 April 27, 2026 02:52 Destroyed
@Kitkatnik Kitkatnik merged commit faeb99f into main Apr 27, 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