Skip to content

Weekend overhaul: SEO changes, query optimization, landing page, animations#97

Merged
notkaramel merged 9 commits intomainfrom
antoine/preview-seo-changes-and-query-optimization
Jan 27, 2026
Merged

Weekend overhaul: SEO changes, query optimization, landing page, animations#97
notkaramel merged 9 commits intomainfrom
antoine/preview-seo-changes-and-query-optimization

Conversation

@notkaramel
Copy link
Member

@notkaramel notkaramel commented Jan 25, 2026

Made quite a lot of changes, will update the list

  • Added 50 increment colors
  • Update the homepage layout
  • Changes to the landing, OH, sponsor, subcoms & affiliated groups section
  • Fix wiggle motion
  • Change preview picture on link paste
  • Fix OH: able to vertical scroll on small screen with sticky time column
  • Fix Subcoms: Reduce size and words, clear the links to below
  • Combined homepage query from 3 to 1

@vercel
Copy link

vercel bot commented Jan 25, 2026

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

Project Deployment Review Updated (UTC)
ecsess Ready Ready Preview, Comment Jan 27, 2026 4:47am

Copy link
Contributor

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 refreshes the homepage UX and SEO metadata handling, and consolidates Sanity CMS queries while updating several UI components (office hours, sponsors, affiliated groups).

Changes:

  • Reworked the homepage hero layout, sections ordering, and added a dedicated Sponsors section/component.
  • Consolidated homepage-related Sanity queries into a single GROQ fetch, and added a global layout-level thumbnail meta tag emitter.
  • UI/UX polish: sticky time column in office hours schedule, typography styling for rich text, and updated theme tokens/animation timing.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/routes/+page.svelte Homepage layout/section restructure; adds Sponsors section and updates hero + office hours copy.
src/routes/+page.server.ts Consolidates CMS queries into one combined GROQ fetch for homepage/office hours/sponsors.
src/routes/+layout.svelte Adds PageThumbnail to emit OG/Twitter image meta tags from layout data.
src/routes/+layout.server.ts New layout server load to fetch a sitewide thumbnail from Sanity.
src/routes/+error.svelte Adjusts error page copy formatting (adds a line break).
src/components/officehour/OHSchedule.svelte Adds sticky styling for the time column/header in the schedule grid.
src/components/officehour/OHBlock.svelte Office hour block styling adjustments.
src/components/layout/SeoMetaTags.svelte Removes embedded default thumbnail meta tags (now handled by PageThumbnail).
src/components/layout/PageThumbnail.svelte New component that injects OG/Twitter image meta tags.
src/components/homepage/Sponsors.svelte New Sponsors section UI for homepage.
src/components/homepage/AffiliatedGroups.svelte Updates group content/icons and refactors the card layout + links UI.
src/components/RichText.svelte Applies shared .typography styling wrapper.
src/app.css Adds new color tokens and adjusts wiggle animation timing/behavior.

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

Comment on lines +6 to +7
<meta property="og:image" content={thumbnail} />
<meta property="twitter:image" content={thumbnail} />
Copy link

Copilot AI Jan 25, 2026

Choose a reason for hiding this comment

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

PageThumbnail always emits og:image / twitter:image meta tags even when thumbnail is an empty string. If the thumbnail is missing, it’s better to omit these tags or provide a non-empty default URL to avoid emitting empty SEO metadata.

Suggested change
<meta property="og:image" content={thumbnail} />
<meta property="twitter:image" content={thumbnail} />
{#if thumbnail}
<meta property="og:image" content={thumbnail} />
<meta property="twitter:image" content={thumbnail} />
{/if}

Copilot uses AI. Check for mistakes.
{#each sponsors as sponsor}
<Link href={sponsor.url} external>
<div
class="bg-ecsess-950 border-ecsess-800 hover:border-ecsess-700 group flex h-32 w-sm items-center justify-center rounded-lg border p-4 transition-all hover:shadow-lg"
Copy link

Copilot AI Jan 25, 2026

Choose a reason for hiding this comment

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

w-sm is not a standard Tailwind width utility (likely meant max-w-sm or a fixed w-*). As-is, it will be ignored and the sponsor card width will collapse to content. Use a valid width utility (or define a custom width token) to make the layout deterministic.

Suggested change
class="bg-ecsess-950 border-ecsess-800 hover:border-ecsess-700 group flex h-32 w-sm items-center justify-center rounded-lg border p-4 transition-all hover:shadow-lg"
class="bg-ecsess-950 border-ecsess-800 hover:border-ecsess-700 group flex h-32 w-64 items-center justify-center rounded-lg border p-4 transition-all hover:shadow-lg"

Copilot uses AI. Check for mistakes.

<div
class="bg-ecsess-100 text-ecsess-900 hover:bg-ecsess-200 border-ecsess-300 grid h-full place-content-center rounded-md border text-center shadow-md transition-all hover:shadow-lg"
class="bg-ecsess-100 text-ecsess-900 hover:bg-ecsess-200 grid h-full place-content-center rounded-md border-transparent text-center shadow-md transition-all hover:shadow-lg"
Copy link

Copilot AI Jan 25, 2026

Choose a reason for hiding this comment

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

border-transparent has no effect here because border (border-width) was removed from the class list. If the intent is no border, drop border-transparent; if the intent is an invisible border to prevent layout shift on hover, add border back.

Suggested change
class="bg-ecsess-100 text-ecsess-900 hover:bg-ecsess-200 grid h-full place-content-center rounded-md border-transparent text-center shadow-md transition-all hover:shadow-lg"
class="bg-ecsess-100 text-ecsess-900 hover:bg-ecsess-200 grid h-full place-content-center rounded-md text-center shadow-md transition-all hover:shadow-lg"

Copilot uses AI. Check for mistakes.

const sponsorQuery = `*[_type=="sponsors"]{
const homepageQuery = `{
"homepage": *[_type == "homepage"]{
Copy link

Copilot AI Jan 25, 2026

Choose a reason for hiding this comment

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

homepageQuery no longer selects description, but the load function still reads homepageResp.description and the HomepageCMSResponse type requires it. This will be undefined at runtime and likely a TypeScript mismatch. Either add "description": description[] back into the homepage projection, or remove description from the return value and update HomepageCMSResponse accordingly.

Suggested change
"homepage": *[_type == "homepage"]{
"homepage": *[_type == "homepage"]{
"description": description[],

Copilot uses AI. Check for mistakes.
Comment on lines +7 to +9
export const load = async () => {
return { thumbnail: (await getFromCMS(thumbnailQuery)).thumbnail };
};
Copy link

Copilot AI Jan 25, 2026

Choose a reason for hiding this comment

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

This global +layout.server.ts load will run for every route; if the CMS request fails it will take down the entire site render. Consider wrapping the CMS fetch in try/catch and returning a safe fallback thumbnail (or omitting the tag) so non-home routes still work during CMS outages.

Copilot uses AI. Check for mistakes.
Comment on lines +28 to +36
{#each sponsors as sponsor}
<Link href={sponsor.url} external>
<div
class="bg-ecsess-950 border-ecsess-800 hover:border-ecsess-700 group flex h-32 w-sm items-center justify-center rounded-lg border p-4 transition-all hover:shadow-lg"
>
<img
src={sponsor.logo}
alt="{sponsor.name} Logo"
class="max-h-20 w-40 object-contain opacity-90 transition-opacity group-hover:opacity-100"
Copy link

Copilot AI Jan 25, 2026

Choose a reason for hiding this comment

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

sponsor.url is coming directly from the CMS and is passed as href to Link without any validation of the URL scheme. If an attacker can control a sponsors entry in the CMS (or if that data is otherwise compromised), they could set url to a javascript: or other dangerous URI and trigger XSS in the context of your site when a user clicks the sponsor card. To harden this, ensure you validate or sanitize sponsor.url on the server or before rendering so only safe schemes like https/http are allowed, and ignore or replace anything else.

Copilot uses AI. Check for mistakes.
@notkaramel
Copy link
Member Author

The CMS for homepage needs to be updated (remove description and FAQ)

@notkaramel notkaramel merged commit 7e1a57e into main Jan 27, 2026
4 checks passed
@notkaramel notkaramel deleted the antoine/preview-seo-changes-and-query-optimization branch February 9, 2026 19:48
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