Skip to content

Making ysws.hackclub.com fit with the new site design!!#334

Merged
MntRushmore merged 6 commits into
hackclub:mainfrom
EliasL-git:main
May 28, 2026
Lines changed: 1729 additions & 2555 deletionsions
Merged

Making ysws.hackclub.com fit with the new site design!!#334
MntRushmore merged 6 commits into
hackclub:mainfrom
EliasL-git:main

Conversation

@EliasL-git
Copy link
Copy Markdown

@EliasL-git EliasL-git commented May 28, 2026 •

Brings the YSWS Catalog visually in line with the redesigned hackclub/site same typography, same colors , same hero treatment, same wave dividers, same black footer. All catalog data, filters, search, modals, completion tracking, timeline, and per-program brand art are preserved.
Live demo: https://ysws-catalog.onrender.com/
What changed visuallyy
Typography Phantom Sans (body) + Zarathustra (display) loaded from the Hack Club font CDN, with Outfit + Instrument Serif as Google Fonts fallbacks. Editorial display serif on hero/section headlines; geometric sans for everything else..

EliasL-git added ed 6 commits May 28, 2026 06:34
Matches the redesigned hackclub/site (Next.js + Tailwind v4). Changes:

- Typography: Phantom Sans + Zarathustra via Hack Club CDN (Outfit + Instrument Serif fallbacks)
- Light-by-default theme with cream/ink dark mode (was a denser dark-only feel)
- Translucent sticky navbar with backdrop blur, pill-shaped nav links
- Hero: editorial display headline with animated rainbow gradient accent
- Pill-style CTA button with sliding arrow on hover
- Wave divider between hero and stats sections, scalloped edge above footer
- Cards: clean paper feel, soft shadow, hover lift
- Programs container: paper sheet over subtle dot-grid background
- Filter / sort buttons: pill toggles, ink-on-active
- Modal: cleaner light surface, rotate-on-hover close button
- FAQ: borderless paper accordions, red expand state
- Footer: solid black with cream type and scalloped wave above (matches new site)
- Removed busy decorations: gradient blobs, circuit pattern, grid overlay
- Preserved: all per-program brand treatments (Macondo, Horizons, Blueprint, Shipyard, Bauble, etc.)
- Preserved: all script.js functionality (completion tracking, modal nav, timeline, search, filters)search, filters)
The dark-theme override flipped `--ink` to the cream colour, so the CTA button and active filter/sort pills resolved to cream-on-cream (a blank white blob).

Fix:
- Keep `--ink` constant (`#17171d`) in both light and dark modes — it is a brand colour, not a theme token.
- Introduce `--invert-bg` / `--invert-fg` tokens that automatically flip with the theme: dark pill on light page in light mode, light pill on dark page in dark mode.
- CTA button, hero-card-back, active filter / sort buttons, and modal-nav hover now use the inverted tokens so they always pop against their parent surface.
- Drop the now-redundant `.dark-theme .filter-btn.active` override.rride.
The redesign forgot to style `.timeline-row` and `.timeline-block`, so the per-program date bars rendered with no row layout and no margins — they ran together as a single solid block.

Added:
- `.timeline-row` with flex layout, 10px gap between block and outside label, and 8px bottom margin so adjacent bars have breathing room.
- `.timeline-block` with explicit 26px height, 12px horizontal padding, pill-end rounded corners (`0 999px 999px 0`), and a soft shadow.
- Hover state on the row slides it 2px right and dims the block to 85%.
- `.timeline-label` sticky-left positioning so the program name stays visible while scrolling, plus a faint text-shadow on inside labels for legibility on coloured bars. bars.
… view

Stat cards:
- Add `text-align: center`, flex-column with `align-items: center` so both the number and label are centered inside the card. Previously the redesign left them left-aligned.
- Drop the redundant margin-bottom on the number; the flex `gap` handles spacing.

Count-up animation:
- Previously `loadGlobalStats` called `animateValue` immediately on DOMContentLoaded, so by the time the user scrolled to the stats section the animation had already finished off-screen.
- Now `loadGlobalStats` only fetches and caches the data. A new IntersectionObserver on `.global-stats-section` fires `runGlobalStatsAnimation` the first time the section enters the viewport (threshold 0.15), then disconnects so it only plays once.
- If the section is already on screen when data arrives (short page, hash anchor), it animates immediately. Browsers without `IntersectionObserver` fall back to running it on load so the numbers always appear.s appear.
The SVG path used `fill="var(--background)"` as an attribute. CSS variables only resolve inside CSS declarations, not raw SVG presentational attributes, so browsers fell back to the default fill (black-ish), producing a dark scalloped strip between the red hero and the stats section.

Fix:
- Drop the broken `fill` attribute on the wave SVG path.
- Set the fill via CSS: `.wave-divider svg path { fill: var(--background); }` — works in every browser and follows the dark/light theme.
- Promote the wave-divider positioning out of inline style into a `.hero-wave` class with explicit `position: absolute; bottom: -1px; height: 40px; z-index: 3;` so the path always renders at the right size above the hero gradient.ient.
@github-actions github-actions Bot requested a review from om MntRushmore May 28, 2026 05:30
@MntRushmore
Copy link
Copy Markdown
Collaborator

dope!

@MntRushmore MntRushmore merged commit mit d4d26ee into hackclub:main May 28, 2026
4 checks passed
@zibuyin
Copy link
Copy Markdown

zibuyin commented May 29, 2026

Nice work! Suggestion: Maybe remove the redundant pill (as highlighted) to indicate that the user completed the ysws, since the pill on the bottom already suggests that.

I remember the old version (before this pr) removed it

Screenshot 2026-05-29 at 16 42 32

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.

None yet

3 participants