Conversation
phlangiee
commented
Jan 26, 2026
- looping animation with pictures (minimum of 5, but can be duplicated)
- button to view 2025 winners (does nothing currently)
- has title and lil note underneath
- everything is dependant of width
There was a problem hiding this comment.
Pull request overview
This PR adds the “CelebratePast” animated photo stack to the About Us experience, updates Tailwind configuration to support its animations and fonts, and refreshes several build/tooling dependencies.
Changes:
- Extend
tailwind.config.tswith project fonts and custom keyframe animations for the five-picture stack, and wire them to Tailwindanimationutilities. - Implement the
CelebratePastclient component with a looping animated image stack, heading/copy, and a “View 2025 Winners” button, and integrate it into the About Us page. - Update
package.jsontooling versions (Next.js, Tailwind, ESLint, PostCSS, Autoprefixer, etc.) and add public image assets used by the new component.
Reviewed changes
Copilot reviewed 6 out of 12 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
tailwind.config.ts |
Defines custom fonts and keyframe animations (picture1–picture5) plus matching animation utilities used by the CelebratePast stack. |
public/placeholder.jpg |
Placeholder asset used in the CelebratePast image rotation. |
public/clouds.jpg |
Asset used in the CelebratePast image rotation. |
public/anotherplaceholder.png |
Additional placeholder asset used in the CelebratePast image rotation. |
package.json |
Bumps Next.js and related tooling (ESLint, Tailwind, PostCSS, Autoprefixer, etc.) to newer versions and reorders some devDependencies. |
app/(pages)/layout.tsx |
Root layout now imports and renders the About Us page component after all route children. |
app/(pages)/about-us/page.tsx |
About Us route page now renders the new CelebratePast component instead of simple placeholder text. |
app/(pages)/about-us/_components/CelebratePast/celebratePast.tsx |
New client component implementing the animated photo stack, text content, and 2025 winners button, including animation-end handling and container-based sizing. |
app/(pages)/_globals/styles/globals.scss |
Fixes a minor CSS variable syntax issue (missing semicolon) in the global About Us theme variables. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
app/(pages)/about-us/page.tsx
Outdated
| @@ -1,7 +1,9 @@ | |||
| import CelebratePast from './_components/CelebratePast/CelebratePast'; | |||
There was a problem hiding this comment.
This import uses ./_components/CelebratePast/CelebratePast, but the actual file in this folder is named celebratePast.tsx (lowercase c). On case-sensitive file systems this will fail to compile at runtime; please update the import path to match the file name exactly (including case).
| import CelebratePast from './_components/CelebratePast/CelebratePast'; | |
| import CelebratePast from './_components/CelebratePast/celebratePast'; |
| <div className="container-type-inline-size pt-[3cqw] pb-[8cqw] rounded-[8cqw] shadow-[2cqw_2cqw_0_0_#A6BFC7] outline outline-[0.3cqw] outline-[#A6BFC7] md:outline-[0cqw] flex flex-col items-center bg-[#E5EEF1] place-content-center"> | ||
| <div className="p-[2cqw] flex flex-col items-center"> | ||
| <div className="py-[0.5cqw] text-center"> | ||
| <p className="text-[5cqw] md:text-[3cqw] leading-tight text-[#123041] font-bold font-montserrat"> | ||
| Come celebrate | ||
| <br className="md:hidden" /> our past with us! | ||
| </p> | ||
| </div> | ||
| <div className="py-[0.5cqw] text-center"> | ||
| <p className="text-[2.4cqw] md:text-[1.2cqw] text-[#123041] font-jakarta"> | ||
| We truly could not have done any of this | ||
| <br className="md:hidden" /> without you. Your support means the | ||
| world! | ||
| </p> | ||
| </div> | ||
| </div> | ||
| <div className="h-[50cqw] relative flex items-center justify-center"> | ||
| {images.map((image, index) => ( | ||
| <Pictures | ||
| key={`${image.path}-${index}`} | ||
| path={image.path} | ||
| alt={image.alt} | ||
| order={index + 1} | ||
| /> | ||
| ))} | ||
| </div> | ||
| <button className="px-[3cqw] py-[1cqw] md:px-[1.5cqw] md:py-[.5cqw] rounded-full bg-[#123041] text-[#F9FBFC]"> | ||
| <p className="text-[3cqw] md:text-[1.3cqw] font-medium font-jakarta tracking-wide"> | ||
| VIEW 2025 WINNERS | ||
| </p> | ||
| </button> | ||
| </div> |
There was a problem hiding this comment.
The container-type-inline-size utility used here relies on Tailwind's container-queries plugin, but the Tailwind config currently has an empty plugins array and does not enable @tailwindcss/container-queries. As a result this class will not generate any CSS and the cqw units in this component will not behave as intended; either add the appropriate plugin or replace this with a custom CSS rule that sets container-type: inline-size.
| <div className="container-type-inline-size pt-[3cqw] pb-[8cqw] rounded-[8cqw] shadow-[2cqw_2cqw_0_0_#A6BFC7] outline outline-[0.3cqw] outline-[#A6BFC7] md:outline-[0cqw] flex flex-col items-center bg-[#E5EEF1] place-content-center"> | |
| <div className="p-[2cqw] flex flex-col items-center"> | |
| <div className="py-[0.5cqw] text-center"> | |
| <p className="text-[5cqw] md:text-[3cqw] leading-tight text-[#123041] font-bold font-montserrat"> | |
| Come celebrate | |
| <br className="md:hidden" /> our past with us! | |
| </p> | |
| </div> | |
| <div className="py-[0.5cqw] text-center"> | |
| <p className="text-[2.4cqw] md:text-[1.2cqw] text-[#123041] font-jakarta"> | |
| We truly could not have done any of this | |
| <br className="md:hidden" /> without you. Your support means the | |
| world! | |
| </p> | |
| </div> | |
| </div> | |
| <div className="h-[50cqw] relative flex items-center justify-center"> | |
| {images.map((image, index) => ( | |
| <Pictures | |
| key={`${image.path}-${index}`} | |
| path={image.path} | |
| alt={image.alt} | |
| order={index + 1} | |
| /> | |
| ))} | |
| </div> | |
| <button className="px-[3cqw] py-[1cqw] md:px-[1.5cqw] md:py-[.5cqw] rounded-full bg-[#123041] text-[#F9FBFC]"> | |
| <p className="text-[3cqw] md:text-[1.3cqw] font-medium font-jakarta tracking-wide"> | |
| VIEW 2025 WINNERS | |
| </p> | |
| </button> | |
| </div> | |
| <> | |
| <div className="celebrate-container pt-[3cqw] pb-[8cqw] rounded-[8cqw] shadow-[2cqw_2cqw_0_0_#A6BFC7] outline outline-[0.3cqw] outline-[#A6BFC7] md:outline-[0cqw] flex flex-col items-center bg-[#E5EEF1] place-content-center"> | |
| <div className="p-[2cqw] flex flex-col items-center"> | |
| <div className="py-[0.5cqw] text-center"> | |
| <p className="text-[5cqw] md:text-[3cqw] leading-tight text-[#123041] font-bold font-montserrat"> | |
| Come celebrate | |
| <br className="md:hidden" /> our past with us! | |
| </p> | |
| </div> | |
| <div className="py-[0.5cqw] text-center"> | |
| <p className="text-[2.4cqw] md:text-[1.2cqw] text-[#123041] font-jakarta"> | |
| We truly could not have done any of this | |
| <br className="md:hidden" /> without you. Your support means the | |
| world! | |
| </p> | |
| </div> | |
| </div> | |
| <div className="h-[50cqw] relative flex items-center justify-center"> | |
| {images.map((image, index) => ( | |
| <Pictures | |
| key={`${image.path}-${index}`} | |
| path={image.path} | |
| alt={image.alt} | |
| order={index + 1} | |
| /> | |
| ))} | |
| </div> | |
| <button className="px-[3cqw] py-[1cqw] md:px-[1.5cqw] md:py-[.5cqw] rounded-full bg-[#123041] text-[#F9FBFC]"> | |
| <p className="text-[3cqw] md:text-[1.3cqw] font-medium font-jakarta tracking-wide"> | |
| VIEW 2025 WINNERS | |
| </p> | |
| </button> | |
| </div> | |
| <style jsx>{` | |
| .celebrate-container { | |
| container-type: inline-size; | |
| } | |
| `}</style> | |
| </> |
tailwind.config.ts
Outdated
| // picture 5 poistion | ||
| '89%': { | ||
| transform: 'translateY(0%)', | ||
| zIndex: '0', | ||
| }, | ||
| // picture 5 poistion |
There was a problem hiding this comment.
Typo in this comment: "poistion" should be spelled "position" for clarity.
| // picture 5 poistion | |
| '89%': { | |
| transform: 'translateY(0%)', | |
| zIndex: '0', | |
| }, | |
| // picture 5 poistion | |
| // picture 5 position | |
| '89%': { | |
| transform: 'translateY(0%)', | |
| zIndex: '0', | |
| }, | |
| // picture 5 position |
tailwind.config.ts
Outdated
| // picture 5 poistion | ||
| '89%': { | ||
| transform: 'translateY(0%)', | ||
| zIndex: '0', | ||
| }, | ||
| // picture 5 poistion |
There was a problem hiding this comment.
Typo in this comment: "poistion" should be spelled "position" for clarity.
| // picture 5 poistion | |
| '89%': { | |
| transform: 'translateY(0%)', | |
| zIndex: '0', | |
| }, | |
| // picture 5 poistion | |
| // picture 5 position | |
| '89%': { | |
| transform: 'translateY(0%)', | |
| zIndex: '0', | |
| }, | |
| // picture 5 position |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 12 changed files in this pull request and generated 5 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| { path: '/realclouds.jpg', alt: 'amongsus' }, | ||
| { path: '/frog.png', alt: 'among us!!!' }, |
There was a problem hiding this comment.
Two of the configured image paths (/realclouds.jpg and /frog.png) do not exist under public/, which will result in broken images at runtime. Either add these files to public/ or update path values here to point at existing assets so that all five frames render correctly.
| { path: '/realclouds.jpg', alt: 'amongsus' }, | |
| { path: '/frog.png', alt: 'among us!!!' }, | |
| { path: '/placeholder.jpg', alt: 'amongsus' }, | |
| { path: '/anotherplaceholder.png', alt: 'among us!!!' }, |
package.json
Outdated
| "@typescript-eslint/eslint-plugin": "^6.16.0", | ||
| "autoprefixer": "^10.4.23", | ||
| "eslint": "^9.39.1", | ||
| "eslint-config-next": "^16.1.3", | ||
| "eslint-config-prettier": "^9.1.0", | ||
| "eslint-plugin-lit-a11y": "^1.1.0-next.1", | ||
| "eslint-plugin-prettier": "^5.0.1", | ||
| "eslint-plugin-unicorn": "^50.0.1", | ||
| "eslint-plugin-lit-a11y": "^1.1.0-next.1", | ||
| "postcss": "^8.4.49", | ||
| "tailwindcss": "^3.4.1", | ||
| "postcss": "^8.5.6", | ||
| "prettier": "3.0.3", | ||
| "tailwindcss": "^3.4.19", | ||
| "typescript": "^5.9.3", | ||
| "typescript-eslint": "^8.46.3", | ||
| "@typescript-eslint/eslint-plugin": "^6.16.0", | ||
| "prettier": "3.0.3" | ||
| "typescript-eslint": "^8.46.3" |
There was a problem hiding this comment.
@typescript-eslint/eslint-plugin is pinned at ^6.16.0 while typescript-eslint is at ^8.46.3, which mixes two major versions of the same tooling stack and can lead to duplicate installs or config incompatibilities. For consistency, align these to the same major version (e.g., upgrade @typescript-eslint/eslint-plugin to ^8.x and rely on the meta typescript-eslint package for parser/plugin versions, or remove the redundant dependency).
tailwind.config.ts
Outdated
| // picture 5 poistion | ||
| '89%': { | ||
| transform: 'translateY(0%)', | ||
| zIndex: '0', | ||
| }, | ||
| // picture 5 poistion |
There was a problem hiding this comment.
The word "poistion" in these comments is misspelled and should be "position". Updating the spelling will keep the animation comments clear and consistent.
| // picture 5 poistion | |
| '89%': { | |
| transform: 'translateY(0%)', | |
| zIndex: '0', | |
| }, | |
| // picture 5 poistion | |
| // picture 5 position | |
| '89%': { | |
| transform: 'translateY(0%)', | |
| zIndex: '0', | |
| }, | |
| // picture 5 position |
app/(pages)/layout.tsx
Outdated
| import fonts from './_globals/fonts'; | ||
| import Navbar from '@app/(pages)/_components/Navbar/Navbar'; | ||
| import Footer from '@app/(pages)/_components/Footer/Footer'; | ||
| import AboutUs from './about-us/page'; |
There was a problem hiding this comment.
Rendering the AboutUs page component directly inside RootLayout means the About Us content (including CelebratePast) will be injected on every route, and on /about-us it will appear twice (once as children and once via this import). Layouts in the App Router are meant to wrap the active page via {children} only; consider removing this import/usage and letting the /about-us page render exclusively when that route is matched.
| @@ -0,0 +1,108 @@ | |||
| 'use client'; | |||
|
|
|||
| import React from 'react'; | |||
There was a problem hiding this comment.
React is imported but never used in this file, and with the automatic JSX runtime enabled it is not required. This will trigger the @typescript-eslint/no-unused-vars rule in .eslintrc.json; please remove the unused default import and keep only the useState/useEffect named imports.
| import React from 'react'; |