Skip to content

polish(home): student-led copy, Brand Navy CTAs, motion guards#17

Open
f1shyfang wants to merge 1 commit into
mainfrom
polish/home
Open

polish(home): student-led copy, Brand Navy CTAs, motion guards#17
f1shyfang wants to merge 1 commit into
mainfrom
polish/home

Conversation

@f1shyfang
Copy link
Copy Markdown
Owner

Summary

Rewrite of the home page (CEUS/src/app/HomeClient.tsx) to match the brand register documented in the new PRODUCT.md / DESIGN.md. Critique score moved from 24/40 → 33/40.

  • Hero now leads with a concrete promise ("Events, industry connections, and the people you'll meet along the way.") and a single Brand Navy CTA anchoring to #happening, instead of restating the brand name with no call to action.
  • Sections reordered: Hero → Happening Soon → Sponsors → Video → About CEUS. The events carousel is now directly under the hero (per the "next event is the lede" project principle); About CEUS is at the foot of the page.
  • About copy rewritten out of generic university-comms voice ("vibrant, student-run organisation, fosters connection...") into one paragraph in student-led voice with specific nouns.
  • CTA palette aligned: every CTA on the page is now either Brand Navy primary (#1B397E) or Brand Navy ghost. Both bg-blue-600 and the rogue bg-emerald-600 are gone.
  • Heading hierarchy: Happening Soon dominates (text-4xl md:text-5xl lg:text-6xl), supporting sections demoted to text-3xl md:text-4xl.
  • Empty states gained brand-voice copy + Brand Navy CTAs (sponsor empty state now reaches out to prospective sponsors).
  • GSAP hero animation wrapped in prefers-reduced-motion guard via useIsomorphicLayoutEffect. Slick autoplay also detects the preference and disables autoplay for reduced-motion users.

Project-level scaffolding included

This PR also lands the foundational design-context files (everything else builds on these):

  • PRODUCT.md — register (brand), users, brand personality, anti-references, design principles, a11y target.
  • DESIGN.md — Stitch-format design system spec.
  • .impeccable/design.json — sidecar with tonal ramps, motion tokens, and self-contained component HTML/CSS.
  • CEUS/src/index.cssscroll-behavior: smooth (reduced-motion aware) and the shared animate-fade-in-up keyframes.
  • CEUS/src/lib/links.ts — hoists CALENDAR_SUBSCRIBE_URL so the next URL change is a one-line edit.
  • Two critique snapshots in CEUS/.impeccable/critique/ (pre- and post-polish home page scores).

Test plan

  • cd CEUS && npm run dev → load /, verify hero CTA scrolls smoothly to #happening
  • Try the page with prefers-reduced-motion: reduce set (browser DevTools → Rendering panel). Confirm: GSAP hero is static, slick autoplay is disabled, smooth-scroll falls back to instant
  • At mobile (≤640px), verify the hero CTAs stack and reach with the thumb; verify About CEUS no longer pushes events below the fold
  • If the calendar URL changes, update only CEUS/src/lib/links.ts

Verification

  • tsc --noEmit: clean (exit 0)
  • eslint: clean (exit 0)

🤖 Generated with Claude Code

…CTAs

Hero now leads with a concrete promise instead of restating the brand
name, with a single Brand Navy CTA anchoring to the next-event section.
Sections reordered so "Happening Soon" comes directly under the hero
(per the project's "next event is the lede" principle), with About CEUS
demoted to the foot of the page.

About copy rewritten out of generic university-comms voice into a
single student-led paragraph with specific nouns. CTA palette aligned
to the design system: Brand Navy primary, Brand Navy ghost secondary.
Heading hierarchy compressed (Happening Soon dominates, sponsors/about
quieter). Both empty states gained brand-voice copy + Brand Navy CTAs.

GSAP hero animation now wrapped in prefers-reduced-motion guard via
useIsomorphicLayoutEffect. Slick autoplay carousels also detect the
preference and disable autoplay for users who request reduced motion.

Also adds project-level design context:
- PRODUCT.md (register, users, brand personality, anti-references,
  design principles, accessibility)
- DESIGN.md (Stitch-format design system spec)
- .impeccable/design.json (sidecar with tonal ramps, motion tokens,
  component snippets)
- CEUS/src/index.css gains scroll-behavior: smooth and the shared
  animate-fade-in-up keyframes (reduced-motion aware)
- CEUS/src/lib/links.ts hoists the calendar subscribe URL so future
  changes are a one-line edit

tsc --noEmit: clean. eslint: clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 29, 2026 11:26
@vercel
Copy link
Copy Markdown

vercel Bot commented May 29, 2026

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

Project Deployment Actions Updated (UTC)
ceus-website Ready Ready Preview, Comment May 29, 2026 11:26am

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR polishes the CEUS homepage and adds product/design documentation to align the site with a defined brand register, including reduced-motion guards for hero animation and carousel autoplay.

Changes:

  • Rewrites HomeClient.tsx to reorder sections, refresh copy/CTAs, add brand-aligned empty states, and respect prefers-reduced-motion for GSAP + slick autoplay.
  • Adds foundational product/design-system docs (PRODUCT.md, DESIGN.md) plus Impeccable design sidecar + critique snapshots.
  • Adds global smooth-scrolling (reduced-motion aware) and a shared “fade-in-up” animation utility; hoists the calendar subscribe URL into links.ts.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
PRODUCT.md Introduces product purpose, audiences, and brand/register guidance.
DESIGN.md Adds a design-system specification (colors, typography, components, motion rules).
.impeccable/design.json Adds a structured design sidecar (tokens/components) for tooling/reference.
CEUS/src/index.css Adds global smooth-scroll (motion-aware) + shared fade-in-up utility.
CEUS/src/lib/links.ts Centralizes the calendar subscribe URL into a shared constant.
CEUS/src/app/HomeClient.tsx Homepage rewrite: section order, copy, CTA palette, empty states, motion guards.
CEUS/.impeccable/critique/2026-05-29T10-44-46Z__ceus-src-app-homeclient-tsx.md Adds post-polish critique snapshot.
CEUS/.impeccable/critique/2026-05-29T05-39-58Z__ceus-src-app-homeclient-tsx.md Adds pre-polish critique snapshot.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +21 to +29
const PrevArrow = (props: CustomArrowProps) => (
<div
className={props.className}
style={{ ...props.style, display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1 }}
onClick={props.onClick}
aria-label="Previous"
>
<FaChevronLeft className="text-2xl text-[#1B397E]" />
</div>
Comment on lines +32 to +40
const NextArrow = (props: CustomArrowProps) => (
<div
className={props.className}
style={{ ...props.style, display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1 }}
onClick={props.onClick}
aria-label="Next"
>
<FaChevronRight className="text-2xl text-[#1B397E]" />
</div>
Comment on lines 114 to +118
responsive: [
{ breakpoint: 1024, settings: { slidesToShow: 4, centerMode: false, arrows: true } },
{ breakpoint: 600, settings: { slidesToShow: 3, centerMode: false, arrows: true } },
{ breakpoint: 480, settings: { slidesToShow: 2, centerMode: false, arrows: true } }
]
{ breakpoint: 480, settings: { slidesToShow: 2, centerMode: false, arrows: true } },
],
Comment thread CEUS/src/index.css
Comment on lines +17 to +33
@layer utilities {
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@media (prefers-reduced-motion: no-preference) {
.animate-fade-in-up {
animation: fadeInUp 0.5s ease-out forwards;
}
}
}
Comment thread DESIGN.md
### Hero Section (signature)
- **Layout:** Full-bleed photographic background (`object-cover`), `75vh` tall capped at `600px`, Scrim (`rgba(0,0,0,0.40)`) over the image so display type stays legible.
- **Type:** Left-aligned Display + Subdisplay in white, tracked.
- **Motion:** GSAP fade-rise from `y: 20, opacity: 0` to `y: 0, opacity: 1`, `power2.out`, 0.8s, subdisplay staggered `-0.6s`. Respects `prefers-reduced-motion` (currently relies on user OS — flagged as a Don't to enforce explicitly).
Comment thread DESIGN.md
- **Motion:** GSAP fade-rise from `y: 20, opacity: 0` to `y: 0, opacity: 1`, `power2.out`, 0.8s, subdisplay staggered `-0.6s`. Respects `prefers-reduced-motion` (currently relies on user OS — flagged as a Don't to enforce explicitly).

### Sponsor Carousel (signature)
- **Layout:** Slick carousel, 3 slides desktop / 2 tablet / 2 mobile, autoplay 4.5s, pause on hover. Arrows in Accent Blue.
Comment thread PRODUCT.md

---

*Note: this PRODUCT.md was inferred from the codebase, README, and SEO metadata. Sections most worth confirming with the team: **Brand Personality** (the three words), **Anti-references** (any specific sites the exec wants to avoid resembling), and **Design Principles 1 & 3** (whether real photography and sponsor presentation are in fact the load-bearing visual commitments). Run `/impeccable init` to refine these via interview.*
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.

2 participants