-
Notifications
You must be signed in to change notification settings - Fork 1
feat: hide author name on mobile footer and add contact links #4160
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
285b2d1
211867f
fbd202c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| # Responsive Footer Name & Legal Contact Links | ||
|
|
||
| **Run ID:** d7e7bdf6 | ||
| **Date:** 2026-02-07 | ||
| **Specification:** agentic/specs/260207-footer-responsive-hide-name-add-contact-links.md | ||
|
|
||
| ## Overview | ||
|
|
||
| The footer's "markus neusinger" link is hidden on mobile viewports (below 960px / `md` breakpoint) to prevent a cramped layout, and social contact links (LinkedIn, X, GitHub) were added to the Legal Notice page's Contact section to keep contact information discoverable. | ||
|
|
||
| ## What Was Built | ||
|
|
||
| - Responsive hiding of the "markus neusinger" link and its dot separators in the footer on screens below the `md` breakpoint (960px) | ||
| - LinkedIn, X (Twitter), and GitHub contact links added to the Legal Notice page Contact section with analytics tracking | ||
|
|
||
| ## Technical Implementation | ||
|
|
||
| ### Files Modified | ||
|
|
||
| - `app/src/components/Footer.tsx`: Wrapped the "markus neusinger" link and its surrounding dot separators in a `<Box>` with responsive `display` (`{ xs: 'none', md: 'contents' }`) to hide them on mobile | ||
| - `app/src/pages/LegalPage.tsx`: Added three social links (LinkedIn, X, GitHub) to the Contact section below the existing email link, each with `target="_blank"`, `rel="noopener noreferrer"`, matching `#3776AB` color styling, and `trackEvent` analytics calls | ||
|
|
||
| ### Key Changes | ||
|
|
||
| - Used MUI's responsive `sx` display prop for pure CSS-based hiding — no JavaScript media query hooks needed | ||
| - The `<Box component="span" sx={{ display: { xs: 'none', md: 'contents' } }}>` wrapper ensures the name link and both adjacent dot separators are hidden/shown together, and `contents` on desktop means the Box has no visual impact | ||
| - Social links in the Legal page follow the existing pattern: `<br />` line breaks within the `<Typography>` block, consistent `#3776AB` link color | ||
| - Analytics tracking uses `trackEvent('external_link', { destination: 'linkedin' | 'x' | 'github_personal' })` matching the existing event pattern | ||
|
|
||
| ## How to Use | ||
|
|
||
| 1. On mobile devices or viewports narrower than 960px, the footer displays: `github · stats · mcp · legal` | ||
| 2. On desktop viewports (960px and wider), the footer displays the full set: `github · stats · markus neusinger · mcp · legal` | ||
| 3. Social contact links are always visible on the Legal Notice page (`/legal`) in the Contact section | ||
|
|
||
| ## Configuration | ||
|
|
||
| No configuration needed. The `md` breakpoint (960px) is defined by the MUI theme and matches the FilterBar's mobile breakpoint. | ||
|
|
||
|
||
| ## Testing | ||
|
|
||
| - `cd app && npx tsc --noEmit` — Verify TypeScript types | ||
| - `cd app && yarn build` — Verify no compilation errors | ||
| - Resize browser below/above 960px to confirm the footer name link hides/shows | ||
| - Visit `/legal` and verify LinkedIn, X, and GitHub links appear in the Contact section | ||
|
|
||
| ## Notes | ||
|
|
||
| - The 960px breakpoint was chosen to match where the FilterBar catalog/filter row wraps to 2 lines on the homepage | ||
| - The LinkedIn URL in the footer and Legal page are intentionally the same — redundancy ensures discoverability | ||
| - The `github_personal` destination in analytics distinguishes the personal GitHub profile link from the project repository link | ||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,88 @@ | ||||||||||||||||||||||||||||||||||
| # Feature: Responsive Footer Name & Legal Contact Links | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| ## Metadata | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| run_id: `d7e7bdf6` | ||||||||||||||||||||||||||||||||||
| prompt: `im footer mein name markus neusinger ist recht lang bei kleinen bildschrimen mobile... sieht das nichtmehr gut, minimal aus, ich möchte das ab der grösse bei der auch auf der startseite die filter zeile mit catolog... steht in 2 zeilen übergeht das mein name nichtmehr im footer zu sehen ist, dafür soll aber im legal tab bei contact links zu meinem linkedin x und github account sein zusätlich zu der email die schon da steht https://x.com/MarkusNeusinger https://github.com/MarkusNeusinger https://www.linkedin.com/in/markus-neusinger/` | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
| prompt: `im footer mein name markus neusinger ist recht lang bei kleinen bildschrimen mobile... sieht das nichtmehr gut, minimal aus, ich möchte das ab der grösse bei der auch auf der startseite die filter zeile mit catolog... steht in 2 zeilen übergeht das mein name nichtmehr im footer zu sehen ist, dafür soll aber im legal tab bei contact links zu meinem linkedin x und github account sein zusätlich zu der email die schon da steht https://x.com/MarkusNeusinger https://github.com/MarkusNeusinger https://www.linkedin.com/in/markus-neusinger/` | |
| prompt: `In the footer, my full name "markus neusinger" is quite long and on small mobile screens it no longer looks clean or minimal. Starting at the same breakpoint where the filter row on the homepage ("catalog" / filters) wraps to two lines, I want my name to no longer be shown in the footer. Instead, in the Legal page Contact section there should be links to my LinkedIn, X, and GitHub accounts in addition to the existing email: https://x.com/MarkusNeusinger https://github.com/MarkusNeusinger https://www.linkedin.com/in/markus-neusinger/.` |
Copilot
AI
Feb 7, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This spec repeatedly states md is a 960px breakpoint, but the app theme does not override MUI breakpoints (so md defaults to 900px). Please correct the pixel values (or document the actual source of 960px if breakpoints are customized elsewhere) to avoid implementing/testing against the wrong cutoff.
| 1. **Footer**: Hide the "markus neusinger" link on small screens (below `md` / 960px breakpoint) — the same breakpoint where the FilterBar catalog/filter row wraps to 2 lines on the homepage. The name is too long and makes the footer look cramped on mobile. The dot separator before/after the name link should also be hidden. | |
| 2. **Legal Page**: Add social/contact links (LinkedIn, X/Twitter, GitHub) to the Contact section in the Legal Notice, alongside the existing email. This ensures the contact information remains discoverable even when the footer name link is hidden on mobile. | |
| ## Requirements | |
| - Hide the "markus neusinger" link (and its surrounding dot separators) in the footer when viewport width is below `md` (960px) — matching the FilterBar's `isMobile` breakpoint | |
| - On viewports `md` and above (960px+), the footer remains unchanged | |
| 1. **Footer**: Hide the "markus neusinger" link on small screens (below `md` / 900px breakpoint) — the same breakpoint where the FilterBar catalog/filter row wraps to 2 lines on the homepage. The name is too long and makes the footer look cramped on mobile. The dot separator before/after the name link should also be hidden. | |
| 2. **Legal Page**: Add social/contact links (LinkedIn, X/Twitter, GitHub) to the Contact section in the Legal Notice, alongside the existing email. This ensures the contact information remains discoverable even when the footer name link is hidden on mobile. | |
| ## Requirements | |
| - Hide the "markus neusinger" link (and its surrounding dot separators) in the footer when viewport width is below `md` (900px) — matching the FilterBar's `isMobile` breakpoint | |
| - On viewports `md` and above (900px+), the footer remains unchanged |
Copilot
AI
Feb 7, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This spec says there is “no test infrastructure for React components”, but the frontend already has Vitest configured (app/vitest.config.ts, yarn test). If the intent is that there’s no React component testing setup (e.g., Testing Library/JSDOM), please clarify the wording to avoid implying there’s no frontend test runner at all.
| - No frontend test files exist in the project currently — skip test creation as there is no test infrastructure for React components | |
| - The frontend already has Vitest configured as a test runner, but there is currently no React component testing setup (e.g., Testing Library/JSDOM) for this area — you can skip adding new component tests for this change |
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
|
|
@@ -50,21 +50,23 @@ export function Footer({ onTrackEvent, selectedSpec, selectedLibrary }: FooterPr | |||||||
| > | ||||||||
| stats | ||||||||
| </Link> | ||||||||
| <span>·</span> | ||||||||
| <Link | ||||||||
| href="https://www.linkedin.com/in/markus-neusinger/" | ||||||||
| target="_blank" | ||||||||
| rel="noopener noreferrer" | ||||||||
| onClick={() => onTrackEvent?.('external_link', { destination: 'linkedin', spec: selectedSpec, library: selectedLibrary })} | ||||||||
| sx={{ | ||||||||
| color: '#9ca3af', | ||||||||
| textDecoration: 'none', | ||||||||
| '&:hover': { color: '#6b7280' }, | ||||||||
| }} | ||||||||
| > | ||||||||
| markus neusinger | ||||||||
| </Link> | ||||||||
| <span>·</span> | ||||||||
| <Box component="span" sx={{ display: { xs: 'none', md: 'contents' } }}> | ||||||||
|
||||||||
| <span>·</span> | ||||||||
| <Link | ||||||||
|
Comment on lines
+53
to
+55
|
||||||||
| href="https://www.linkedin.com/in/markus-neusinger/" | ||||||||
| target="_blank" | ||||||||
| rel="noopener noreferrer" | ||||||||
| onClick={() => onTrackEvent?.('external_link', { destination: 'linkedin', spec: selectedSpec, library: selectedLibrary })} | ||||||||
| sx={{ | ||||||||
| color: '#9ca3af', | ||||||||
| textDecoration: 'none', | ||||||||
| '&:hover': { color: '#6b7280' }, | ||||||||
| }} | ||||||||
| > | ||||||||
| markus neusinger | ||||||||
| </Link> | ||||||||
| <span>·</span> | ||||||||
| </Box> | ||||||||
|
||||||||
| </Box> | |
| </Box> | |
| <Box component="span" sx={{ display: { xs: 'inline', md: 'none' } }}>·</Box> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
agentic/commands/context.mdis a general “conditional documentation” guide; adding a single run-specific context file path here doesn’t scale and will quickly bloat this list. Consider pointing toagentic/context/(or describing a naming pattern) instead of hardcoding an individual context file entry.