🧠 Context
src/components/Footer.astro is the scaffold's minimal footer: a Carleton accent bar over a single muted, static line reading "Carleton Computer Science Society". This ticket fills it out into a two-side footer:
- Left:
© <year> Carleton Computer Science Society, where "Carleton Computer Science Society" is a link to the main CCSS site (https://ccss.carleton.ca). The year is dynamic.
- Right: a link to this site's GitHub repo (
https://github.com/CarletonComputerScienceSociety/showcase) with a standard external-link arrow icon next to it.
Both links highlight to Carleton red on hover. On small screens the two sides stack vertically. Keep the two behaviors the scaffold already has: the sticky bottom-0 positioning and the red accent bar. The footer text is currently dull/muted — make it read clearly.
Files you'll touch:
src/components/Footer.astro (the whole job)
Don't touch: the header, the layout, or the design tokens. This is footer-only.
🛠️ Implementation Plan
Style everything with Tailwind utility classes — not raw CSS or inline style attributes. The scaffold already uses utilities + the design tokens (text-muted, text-accent, bg-accent, etc.); stay in that system.
-
Frontmatter + dynamic year. The block fenced by --- at the top of an .astro file is the component frontmatter — JS/TS that runs at build time (on the server), not in the browser. Remove the scaffold comment currently sitting between the --- fences and compute the current year there (and import the icon component you'll need in step 3):
---
import { Icon } from 'astro-icon/components';
const year = new Date().getFullYear();
---
You'll reference {year} in the markup.
-
Lay out the two sides. Build the footer as a shell — work out the actual classes yourself:
<footer>
{/* keep the existing sticky positioning */}
{/* keep the Carleton accent bar */}
{
/* container: copyright on the left, GitHub link on the right —
a flex column on mobile, a row with justify-between on sm: and up */
}
</footer>
The one fiddly bit is the copyright line: plain text + the dynamic year + an inline link, all in one paragraph. Render it like this (only the society name is the link; © {year} is plain text, and {' '} keeps the space before the link):
<p>
© {year}{' '}
<a href="https://ccss.carleton.ca" target="_blank" rel="noopener">
Carleton Computer Science Society
</a>
</p>
-
GitHub link + arrow icon. The right side links to the repo with the lucide external-link arrow next to the label. Using the Icon you imported:
<a
href="https://github.com/CarletonComputerScienceSociety/showcase"
target="_blank"
rel="noopener"
>
GitHub
<Icon name="lucide:external-link" class="h-3.5 w-3.5" aria-hidden="true" />
</a>
aria-hidden hides the icon from screen readers only (it stays visible), so the link isn't announced as "GitHub, image." astro-icon renders an inline SVG that inherits currentColor, so it follows the link color and the red hover automatically.
-
Keep the accent bar and sticky behavior. Leave the <div class="bg-accent/80 h-0.5 w-full"> accent bar above the content, and keep sticky bottom-0 z-10 on the <footer>. Make sure the muted text reads clearly against the canvas; both links should visibly shift to text-accent on hover.
-
Verify in pnpm dev: footer sticks to the bottom; on a wide screen the copyright is left and the GitHub link is right; on a narrow screen they stack; the year is current; both links go red on hover and open in a new tab; the accent bar is intact.
✅ Acceptance Criteria
🧠 Context
src/components/Footer.astrois the scaffold's minimal footer: a Carleton accent bar over a single muted, static line reading "Carleton Computer Science Society". This ticket fills it out into a two-side footer:© <year> Carleton Computer Science Society, where "Carleton Computer Science Society" is a link to the main CCSS site (https://ccss.carleton.ca). The year is dynamic.https://github.com/CarletonComputerScienceSociety/showcase) with a standard external-link arrow icon next to it.Both links highlight to Carleton red on hover. On small screens the two sides stack vertically. Keep the two behaviors the scaffold already has: the
sticky bottom-0positioning and the red accent bar. The footer text is currently dull/muted — make it read clearly.Files you'll touch:
src/components/Footer.astro(the whole job)Don't touch: the header, the layout, or the design tokens. This is footer-only.
🛠️ Implementation Plan
Style everything with Tailwind utility classes — not raw CSS or inline
styleattributes. The scaffold already uses utilities + the design tokens (text-muted,text-accent,bg-accent, etc.); stay in that system.Frontmatter + dynamic year. The block fenced by
---at the top of an.astrofile is the component frontmatter — JS/TS that runs at build time (on the server), not in the browser. Remove the scaffold comment currently sitting between the---fences and compute the current year there (and import the icon component you'll need in step 3):You'll reference
{year}in the markup.Lay out the two sides. Build the footer as a shell — work out the actual classes yourself:
The one fiddly bit is the copyright line: plain text + the dynamic year + an inline link, all in one paragraph. Render it like this (only the society name is the link;
© {year}is plain text, and{' '}keeps the space before the link):GitHub link + arrow icon. The right side links to the repo with the lucide external-link arrow next to the label. Using the
Iconyou imported:aria-hiddenhides the icon from screen readers only (it stays visible), so the link isn't announced as "GitHub, image." astro-icon renders an inline SVG that inheritscurrentColor, so it follows the link color and the red hover automatically.Keep the accent bar and sticky behavior. Leave the
<div class="bg-accent/80 h-0.5 w-full">accent bar above the content, and keepsticky bottom-0 z-10on the<footer>. Make sure the muted text reads clearly against the canvas; both links should visibly shift totext-accenton hover.Verify in
pnpm dev: footer sticks to the bottom; on a wide screen the copyright is left and the GitHub link is right; on a narrow screen they stack; the year is current; both links go red on hover and open in a new tab; the accent bar is intact.✅ Acceptance Criteria
© <dynamic year> Carleton Computer Science Society, with the society name linking tohttps://ccss.carleton.ca.…/CarletonComputerScienceSociety/showcase) with an inline external-link arrow icon.sticky bottom-0behavior are preserved; footer text reads clearly (no longer dull).<Icon name="lucide:external-link" />(astro-icon), themed viacurrentColorandaria-hidden.style).pnpm format:check,pnpm check, andpnpm buildall pass.