From ab644e83bf47d248da2cf8f617d27c5d98ffec59 Mon Sep 17 00:00:00 2001 From: ananeridev Date: Mon, 27 Jul 2026 23:40:06 -0300 Subject: [PATCH] feat(partners): add partner rail to the homepage Replaces the duplicated sponsor pitch on the homepage with a partner rail showing Salvy, Cod3rs and UniPDS, placed right after the hero. The full pitch stays on /patrocinadores, which rendered the same component before. Logos are trimmed to their alpha bounding box and normalised to one ink, keeping each brand's own colour (Cod3rs green, UniPDS gold) so it can be revealed on hover. A per-partner scale evens out visual mass, since the wordmarks range from 1.9:1 to 6.3:1. Hover and keyboard focus light a bay: greyscale drops, a beam sweeps across it and the logo powers on, while a green segment slides along the rail. The lit state is driven only by :hover/:focus-visible so it toggles and the animations replay on every visit. Reduced motion keeps the colour and drops the movement. The sponsor call to action is now a small link under the rail. --- i18n/en-US/code.json | 9 + i18n/es-419/code.json | 9 + i18n/pt-BR/code.json | 9 + src/website/assets/img/partners/cod3rs.webp | Bin 0 -> 22218 bytes src/website/assets/img/partners/salvy.webp | Bin 0 -> 5954 bytes src/website/assets/img/partners/unipds.webp | Bin 0 -> 32430 bytes src/website/components/home/Partners.tsx | 73 +++++ src/website/configs/definitions.ts | 31 +++ src/website/pages/index.tsx | 4 +- src/website/scss/pages/_partners.scss | 288 ++++++++++++++++++++ src/website/scss/pages/root.scss | 2 + 11 files changed, 423 insertions(+), 2 deletions(-) create mode 100644 src/website/assets/img/partners/cod3rs.webp create mode 100644 src/website/assets/img/partners/salvy.webp create mode 100644 src/website/assets/img/partners/unipds.webp create mode 100644 src/website/components/home/Partners.tsx create mode 100644 src/website/scss/pages/_partners.scss diff --git a/i18n/en-US/code.json b/i18n/en-US/code.json index 426ad16..db9454a 100644 --- a/i18n/en-US/code.json +++ b/i18n/en-US/code.json @@ -215,6 +215,15 @@ "team.monica.position": { "message": "Back-end Developer" }, + "partners.eyebrow": { + "message": "Backing JSConf Brasil 2026" + }, + "partners.cta.text": { + "message": "There's room for your brand here too." + }, + "partners.cta.button": { + "message": "Become a sponsor" + }, "sponsors.pageTitle": { "message": "Sponsors" }, diff --git a/i18n/es-419/code.json b/i18n/es-419/code.json index e33539d..9a04682 100644 --- a/i18n/es-419/code.json +++ b/i18n/es-419/code.json @@ -215,6 +215,15 @@ "team.monica.position": { "message": "Desarrolladora Back-end" }, + "partners.eyebrow": { + "message": "Apoyan JSConf Brasil 2026" + }, + "partners.cta.text": { + "message": "Tu marca también cabe aquí." + }, + "partners.cta.button": { + "message": "Quiero patrocinar" + }, "sponsors.pageTitle": { "message": "Patrocinadores" }, diff --git a/i18n/pt-BR/code.json b/i18n/pt-BR/code.json index 9260b8a..3e24562 100644 --- a/i18n/pt-BR/code.json +++ b/i18n/pt-BR/code.json @@ -215,6 +215,15 @@ "team.lucas.position": { "message": "Principal Staff Engineer" }, + "partners.eyebrow": { + "message": "Apoiam a JSConf Brasil 2026" + }, + "partners.cta.text": { + "message": "Sua marca também cabe aqui." + }, + "partners.cta.button": { + "message": "Quero patrocinar" + }, "sponsors.pageTitle": { "message": "Patrocinadores" }, diff --git a/src/website/assets/img/partners/cod3rs.webp b/src/website/assets/img/partners/cod3rs.webp new file mode 100644 index 0000000000000000000000000000000000000000..2b7fa49e454b4ab1a2b8e8552b9a68791117f164 GIT binary patch literal 22218 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 literal 0 HcmV?d00001 diff --git a/src/website/assets/img/partners/salvy.webp b/src/website/assets/img/partners/salvy.webp new file mode 100644 index 0000000000000000000000000000000000000000..89225162469a78f6bcdb329445e3a4a540b225dc GIT binary patch literal 5954 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 literal 0 HcmV?d00001 diff --git a/src/website/assets/img/partners/unipds.webp b/src/website/assets/img/partners/unipds.webp new file mode 100644 index 0000000000000000000000000000000000000000..b063ca000afb12d67090ff30fefd480f75dede58 GIT binary patch literal 32430 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 literal 0 HcmV?d00001 diff --git a/src/website/components/home/Partners.tsx b/src/website/components/home/Partners.tsx new file mode 100644 index 0000000..b95191f --- /dev/null +++ b/src/website/components/home/Partners.tsx @@ -0,0 +1,73 @@ +import type { CSSProperties } from 'react'; +import { useRef, useState } from 'react'; +import { ArrowRight } from 'lucide-react'; +import { Text } from '@site/src/website/components/shared/i18n'; +import { SafeLink } from '@site/src/website/components/shared/SafeLink'; +import { link, partners } from '../../configs/definitions'; +import { useScroll } from '../../hooks/useScroll'; +import { Image } from '../shared/Image'; + +export const Partners = () => { + const ref = useRef(null); + const [show, setShow] = useState(false); + const [active, setActive] = useState(0); + + useScroll(ref, (isVisible) => { + if (isVisible) setShow(true); + }); + + return ( +
+
+

+ +

+ +
+
+ {partners.map((partner, index) => ( + setActive(index)} + onFocus={() => setActive(index)} + > + {partner.name} + + ))} +
+ +
+ +
+
+ +
+

+ +

+ + + +
+
+
+ ); +}; diff --git a/src/website/configs/definitions.ts b/src/website/configs/definitions.ts index c2c6d28..e76e596 100644 --- a/src/website/configs/definitions.ts +++ b/src/website/configs/definitions.ts @@ -2,3 +2,34 @@ export const link = { tickets: 'https://guild.host/events/jsconf-brasil-primeira-vdc8dh', sponsors: 'https://forms.gle/SPyyD3SsuurVpvCNA', } as const; + +export type Partner = { + name: string; + logo: string; + url: string; + /** Optical size tuning: logos differ in visual mass at the same box size. */ + scale?: number; +}; + +export const partners: Partner[] = [ + { + // Compact logotype (1.9:1) — fills the height cap long before the others. + name: 'Salvy', + logo: '/img/partners/salvy.webp', + url: 'https://salvy.com.br/', + scale: 0.95, + }, + { + // Very wide wordmark (6.3:1) — width-bound rather than height-bound. + name: 'Cod3rs', + logo: '/img/partners/cod3rs.webp', + url: 'https://www.coders.com.br/', + scale: 0.8, + }, + { + name: 'UniPDS Educação', + logo: '/img/partners/unipds.webp', + url: 'https://unipds.com.br/', + scale: 0.7, + }, +]; diff --git a/src/website/pages/index.tsx b/src/website/pages/index.tsx index ce122e6..583ac04 100644 --- a/src/website/pages/index.tsx +++ b/src/website/pages/index.tsx @@ -2,8 +2,8 @@ import { Benefits } from '../components/home/Benefits'; import { Gallery } from '../components/home/Gallery'; import { Home } from '../components/home/Home'; import { Location } from '../components/home/Location'; +import { Partners } from '../components/home/Partners'; // import { Speakers } from '../components/home/Speakers'; -import { Sponsors } from '../components/home/Sponsors'; import { TicketSelection } from '../components/home/TicketSelection'; import { Waitlist } from '../components/home/Waitlist'; import { Page } from '../components/shared/Page'; @@ -11,12 +11,12 @@ import { Page } from '../components/shared/Page'; export default () => ( + {/* */} - ); diff --git a/src/website/scss/pages/_partners.scss b/src/website/scss/pages/_partners.scss new file mode 100644 index 0000000..129093a --- /dev/null +++ b/src/website/scss/pages/_partners.scss @@ -0,0 +1,288 @@ +@use '../global/mixins' as *; + +// A beam crossing the bay when it lights up — the rail reading that channel. +@keyframes partner-sweep { + 0% { + transform: translateX(-140%) skewX(-12deg); + opacity: 0; + } + 25% { + opacity: 1; + } + 100% { + transform: translateX(280%) skewX(-12deg); + opacity: 0; + } +} + +// Overshoots past the resting hover position, then settles back into it. +@keyframes partner-power-on { + 0% { + transform: scale(var(--logo-scale, 1)); + } + 55% { + transform: translateY(-0.9rem) scale(calc(var(--logo-scale, 1) * 1.1)); + } + 100% { + transform: translateY(-0.5rem) scale(calc(var(--logo-scale, 1) * 1.06)); + } +} + +@mixin partners { + &#partners { + // Sits directly under the hero, so it stays low-profile on purpose. + // The hero ends on its own credit block ("Realização"), so this needs real + // air above it or the two credit lines read as one stack. + padding-top: 7rem; + padding-bottom: 9rem; + + $ink: #f5f6fa; + $mute: #6f7b72; + $signal: var(--ifm-color-primary); + + & > .content { + gap: 2.4rem; + max-width: 112rem; + } + + .eyebrow { + margin: 0; + font-family: var(--ifm-font-family-title); + font-size: 1.2rem; + font-weight: 700; + // Widest tracking on the site: reads as a rail marker, not a heading. + letter-spacing: 0.32em; + text-transform: uppercase; + color: $mute; + } + + .rail { + position: relative; + width: 100%; + } + + .bays { + display: grid; + grid-auto-flow: column; + grid-auto-columns: 1fr; + background-color: rgba(141, 248, 34, 0.03); + } + + .bay { + @include flex(row, center, center); + position: relative; + height: 13rem; + padding-inline: 2rem; + overflow: hidden; + text-decoration: none; + transition: background-color 0.35s var(--ease-out-quad); + + // Green wash behind the lit partner, faded at the edges so the bay glows + // rather than turning into a coloured box. + &::before { + content: ''; + position: absolute; + inset: 0; + background-image: radial-gradient( + ellipse at center, + rgba(141, 248, 34, 0.1), + transparent 72% + ); + opacity: 0; + transition: opacity 0.35s var(--ease-out-quad); + pointer-events: none; + } + + // Driven by :hover/:focus only — never by .active. A sticky class would + // leave the bay lit after the pointer left, and would stop the animations + // below from ever replaying on a second visit. + &:hover::before, + &:focus-visible::before { + opacity: 1; + } + + // The sweeping beam itself, parked off-frame until the bay lights up. + &::after { + content: ''; + position: absolute; + inset-block: 0; + left: 0; + width: 38%; + background-image: linear-gradient( + 100deg, + transparent, + rgba(141, 248, 34, 0.2), + rgba(245, 246, 250, 0.14), + transparent + ); + opacity: 0; + transform: translateX(-140%) skewX(-12deg); + pointer-events: none; + } + + &:hover::after, + &:focus-visible::after { + animation: partner-sweep 0.75s var(--ease-out-quad); + } + + & + .bay { + border-left: 0.1rem solid rgba(141, 248, 34, 0.08); + } + + &:hover, + &:focus-visible { + text-decoration: none; + } + + &:focus-visible { + outline: 0.2rem solid $signal; + outline-offset: -0.2rem; + } + } + + .logo { + position: relative; + max-width: 100%; + max-height: 7rem; + object-fit: contain; + opacity: 0.55; + // Logos differ in visual mass at the same box size; --logo-scale evens them out. + transform: scale(var(--logo-scale, 1)); + // At rest every logo is one neutral ink; colour is the reward for attention. + filter: grayscale(1) brightness(1.05); + transition: + opacity 0.35s var(--ease-out-quad), + filter 0.35s var(--ease-out-quad), + transform 0.35s var(--ease-back-out-soft); + } + + .bay:hover .logo, + .bay:focus-visible .logo { + opacity: 1; + // Drops the greyscale, so the partner's real brand colours come back. + filter: drop-shadow(0 0 1.8rem rgba(141, 248, 34, 0.3)); + transform: translateY(-0.5rem) scale(calc(var(--logo-scale, 1) * 1.06)); + animation: partner-power-on 0.55s var(--ease-out-quad); + } + + .track { + position: relative; + height: 0.2rem; + background-color: rgba(141, 248, 34, 0.18); + transform: scaleX(0); + transform-origin: left center; + transition: transform 0.8s var(--ease-out-quad); + } + + .content.show .track { + transform: scaleX(1); + } + + .segment { + position: absolute; + inset-block: 0; + left: 0; + width: calc(100% / var(--bays, 1)); + background-color: $signal; + box-shadow: 0 0 1.2rem rgba(141, 248, 34, 0.5); + transform: translateX(calc(var(--active, 0) * 100%)); + transition: transform 0.45s var(--ease-back-out-soft); + } + + // A quiet footnote under the rail, not a fourth partner competing with them. + .invite { + @include flex(row, center, center, wrap); + gap: 0.2rem 0.8rem; + margin-top: 0.4rem; + } + + .invite-text { + margin: 0; + font-size: 1.3rem; + color: $mute; + } + + .invite-button { + @include flex(row, center, center); + gap: 0.5rem; + font-size: 1.3rem; + font-weight: 600; + color: $signal; + text-decoration: none; + text-underline-offset: 0.4rem; + + &:hover, + &:focus-visible { + color: $signal; + text-decoration: underline; + } + + &:focus-visible { + outline: 0.2rem solid $signal; + outline-offset: 0.4rem; + border-radius: 0.2rem; + } + + .icon { + width: 1.3rem; + height: 1.3rem; + } + } + + @media (max-width: 630px) { + padding-bottom: 6rem; + + .bays { + grid-auto-flow: row; + } + + .bay { + height: 10rem; + border-bottom: 0.2rem solid rgba(141, 248, 34, 0.12); + + & + .bay { + border-left: 0; + } + + &.active { + border-bottom-color: var(--ifm-color-primary); + } + } + + .logo { + max-height: 5.6rem; + } + + // The sliding rail needs a horizontal row; stacked bays carry it themselves. + .track { + display: none; + } + } + + @media (prefers-reduced-motion: reduce) { + .track, + .segment, + .logo, + .bay, + .bay::before { + transition: none; + } + + .track { + transform: scaleX(1); + } + + // Colour and glow still resolve; only the movement is dropped. + .bay:hover .logo, + .bay:focus-visible .logo { + transform: scale(var(--logo-scale, 1)); + animation: none; + } + + .bay:hover::after, + .bay:focus-visible::after { + animation: none; + } + } + } +} diff --git a/src/website/scss/pages/root.scss b/src/website/scss/pages/root.scss index fdc5d88..52baa51 100644 --- a/src/website/scss/pages/root.scss +++ b/src/website/scss/pages/root.scss @@ -4,6 +4,7 @@ @use 'speakers' as *; @use 'benefits' as *; @use 'gallery' as *; +@use 'partners' as *; @use 'location' as *; @use 'waitlist' as *; @use 'ticket-selection' as *; @@ -49,6 +50,7 @@ @include home; @include benefits; @include gallery; + @include partners; @include speakers; @include location; @include waitlist;