Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
11a6cc7
feat: Implement HomeWTC section displaying event information and a li…
anyulled Dec 18, 2025
9b7795c
Update src/views/Home/components/HomeWTC/HomeWTC.tsx
anyulled Dec 18, 2025
5417212
refactor: Remove unused `useWindowSize` hook and improve `StyledSubti…
anyulled Dec 18, 2025
70a98a3
refactor: centralize countdown components and date utilities into com…
anyulled Dec 19, 2025
d200009
refactor: Extract and centralize countdown components and date utilit…
anyulled Dec 19, 2025
a46538a
feat: Introduce 2025 conference components and data, including tests …
anyulled Dec 19, 2025
0d1660c
refactor: Separate HomeWTC background image from gradient overlay usi…
anyulled Dec 19, 2025
e734843
feat: Update event data and UI components across multiple years and p…
anyulled Dec 19, 2025
d41d94b
refactor: Improve test date mocking, enforce strict equality, reorder…
anyulled Dec 19, 2025
48fda9d
refactor: remove unused imports, constants, and test utilities across…
anyulled Dec 19, 2025
9d82866
chore: remove unused navigation routes, reorder imports, and add an E…
anyulled Dec 19, 2025
edb006d
refactor: Improve TypeScript type safety by replacing 'any' with expl…
anyulled Dec 19, 2025
803f872
refactor: improve type safety by replacing `any` with specific types …
anyulled Dec 19, 2025
43d4862
refactor: Reorder imports, add accommodation route, and adjust talk t…
anyulled Dec 19, 2025
48a54f4
fix: disable import/order ESLint rule
anyulled Dec 19, 2025
559d068
fix: correct import path in SponsorBadge.tsx
anyulled Dec 19, 2025
0128efc
refactor: enhance speaker fetching test reliability and apply general…
anyulled Dec 20, 2025
afff279
feat: Introduce native React 19 metadata support with a new `PageMeta…
anyulled Dec 20, 2025
64d5bfc
feat: Introduce `ResourcePreloader` component and default configurati…
anyulled Dec 20, 2025
3cdc3cd
chore: add newline at end of package.json (prettier)
anyulled Dec 20, 2025
bc785f2
feat: introduce new venue images, update home component styles to inc…
anyulled Dec 20, 2025
4276cec
feat: enhance HomeWTC UI with updated layout, animations, and typogra…
anyulled Dec 20, 2025
4cb1fb4
Merge branch 'main' into feat/landing-page-image
anyulled Dec 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions src/views/Home/components/ActionButtons/ActionButtons.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { useCallback } from "react";
import { styled } from "styled-components";

import { gaEventTracker } from "../../../../components/analytics/Analytics";
import { formatDateWithOrdinal } from "../../../../components/date/dateUtils";
import Button from "../../../../components/UI/Button";
import { BIG_BREAKPOINT } from "../../../../constants/BreakPoints";
import { useUrlBuilder } from "../../../../services/urlBuilder";
import { gaEventTracker } from "@components/analytics/Analytics";
import { formatDateWithOrdinal } from "@components/date/dateUtils";
import Button from "@components/UI/Button";
import { BIG_BREAKPOINT } from "@constants/BreakPoints";
import { useUrlBuilder } from "@services/urlBuilder";

import type { FC } from "react";

const StyledActionDiv = styled.div`
margin-top: 2rem;
display: flex;
text-align: center;

Expand Down
56 changes: 31 additions & 25 deletions src/views/Home/components/HomeWTC/HomeWTC.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@ import edition from "@data/2026.json";
import { useDateInterval } from "@hooks/useDateInterval";

// @ts-expect-error some quirky import

import { Color } from "@styles/colors";
import { formatDateRange } from "@utils/dateUtils";

import ActionButtons from "../ActionButtons/ActionButtons";
import InfoButtons from "../InfoButtons/InfoButtons";
import {
StyledDevBcnLogo,
StyledHomeImage,
Expand All @@ -25,8 +26,6 @@ import {
StyledTitleContainer,
StyleHomeContainer,
} from "./Style.Home";
import ActionButtons from "../ActionButtons/ActionButtons";
import InfoButtons from "../InfoButtons/InfoButtons";

import type { FC } from "react";

Expand Down Expand Up @@ -59,33 +58,31 @@ const HomeWTC: FC<React.PropsWithChildren<unknown>> = () => {
The Barcelona Developers Conference {edition?.edition}
</StyledTitle>
<StyledSubtitle
fontWeight={600}
fontWeight={700}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.5, delay: 0.8 }}
transition={{ duration: 0.5, delay: 0.7 }}
>
{edition?.trackNumber} tracks with the following topics: <br />
{edition?.tracks}
{edition?.startDay &&
edition.endDay &&
formatDateRange(
new Date(edition.startDay),
new Date(edition.endDay),
)}
</StyledSubtitle>
<StyledSubtitle
shadow={true}
fontWeight={700}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.5, delay: 1 }}
transition={{ duration: 0.5, delay: 0.8 }}
>
<small>
Past events: <Link to="/2025">2025 edition</Link> |{" "}
<Link to="/2024">2024 edition</Link> |{" "}
<Link to="/2023">2023 edition</Link>
</small>
World Trade Center, Barcelona
</StyledSubtitle>
</StyledTitleContainer>
<motion.img
src="/images/devBcn-sponsorship.png"
alt="DevBcn sponsorship value"
width="635"
height="125"
style={{ aspectRatio: "127:25", maxWidth: "100%" }}
style={{ maxWidth: "100%", marginTop: "8rem" }}
initial={{ opacity: 0, x: -50 }}
animate={{ opacity: 1, x: 0 }}
transition={{ duration: 0.7, delay: 1.2 }}
Expand All @@ -96,16 +93,25 @@ const HomeWTC: FC<React.PropsWithChildren<unknown>> = () => {
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6, delay: 1.5 }}
>
<StyledSubtitle fontWeight={600}>
{edition?.startDay &&
edition.endDay &&
formatDateRange(
new Date(edition.startDay),
new Date(edition.endDay),
)}
<StyledSubtitle fontWeight={700}>
{edition?.trackNumber} tracks with the following topics:
</StyledSubtitle>
<StyledSubtitle fontWeight={600}>
World Trade Center, Barcelona
{edition?.tracks}
</StyledSubtitle>
</StyledTitleContainer>
<StyledTitleContainer
color={Color.TRANSPARENT}
initial={{ opacity: 0, y: 30 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6, delay: 1.7 }}
>
<StyledSubtitle shadow={true}>
<small>
Past events: <Link to="/2025">2025 edition</Link> |{" "}
<Link to="/2024">2024 edition</Link> |{" "}
<Link to="/2023">2023 edition</Link>
</small>
</StyledSubtitle>
</StyledTitleContainer>
<motion.div
Expand Down
77 changes: 67 additions & 10 deletions src/views/Home/components/HomeWTC/Style.Home.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
// @ts-expect-error some quirky import
import { motion } from "motion/react";
import { styled } from "styled-components";

import { BIG_BREAKPOINT, BIGGER_BREAKPOINT } from "@constants/BreakPoints";
import { Color } from "@styles/colors";

// @ts-expect-error some quirky import

// By © Alice Wiegand / CC-BY-SA-3.0 (via Wikimedia Commons), CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=30463612
// By © Felix König / CC-BY-3.0 (via Wikimedia Commons), CC BY-SA 3.0, https://commons.wikimedia.org/wiki/File:World_Trade_Center_Barcelona_2013_1.jpg
// By © Felix König / CC-BY-SA-3.0 (via Wikimedia Commons), CC BY-SA 4.0, https://commons.wikimedia.org/wiki/File:015_Port_Vell_%28Barcelona%29,_World_Trade_Center,_torre_de_Jaume_I_i_cobert_de_l%27America%27s_Cup.jpg
Expand Down Expand Up @@ -54,6 +53,23 @@ export const StyledHomeImage = styled.div`
animation: gradient 15s ease infinite;
}

/* Static dark vignette overlay on top of animated gradient */
&::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
backdrop-filter: blur(2px);
background: linear-gradient(
to bottom,
rgba(0, 0, 0, 0.3),
rgba(0, 0, 0, 0.6)
);
pointer-events: none;
}

@keyframes gradient {
0% {
background-position: 0 50%;
Expand Down Expand Up @@ -82,32 +98,71 @@ export const StyledTitleContainer = styled(motion.div)`
border-radius: 10px;
width: 70%;
margin-bottom: 1rem;
padding: 10px 5px;
padding: 5px 20px;

@media (max-width: ${BIG_BREAKPOINT}px) {
width: 80%;
padding: 5px 10px;
}

@media (max-width: 480px) {
width: 90%;
padding: 5px 8px;
}
`;

export const StyledTitle = styled(motion.h1)`
padding: 0.5rem 1rem;
color: ${Color.WHITE};
font-family: "Square 721 Regular", sans-serif;
font-weight: 800;
font-size: 3rem;
letter-spacing: 0.03em;
line-height: 1.2;
text-shadow:
0 2px 4px rgba(0, 0, 0, 0.9),
0 4px 8px rgba(0, 0, 0, 0.7),
0 8px 16px rgba(0, 0, 0, 0.5);

@media (max-width: ${BIG_BREAKPOINT}px) {
font-size: 2rem;
letter-spacing: 0.02em;
}

@media (max-width: 480px) {
font-size: 1.5rem;
}
`;

export const StyledSubtitle = styled(motion.h2) <StyledSubtitleProps>`
color: ${(props) => props.color ?? Color.WHITE};
font-family: "DejaVu Sans ExtraLight", sans-serif;
font-size: 1.25rem;
font-weight: ${(props) => props.fontWeight ?? 400};
font-size: 1.5rem;
font-weight: ${(props) => props.fontWeight ?? 600};
letter-spacing: 0.02em;
text-shadow: ${(props) =>
props.shadow ? "2px 2px 2px rgba(0, 0, 0, 0.5)" : "none"};
props.shadow
? `0 1px 2px rgba(0, 0, 0, 0.9),
0 2px 4px rgba(0, 0, 0, 0.6),
0 4px 8px rgba(0, 0, 0, 0.4)`
: `0 1px 2px rgba(0, 0, 0, 0.8),
0 2px 4px rgba(0, 0, 0, 0.5)`};

padding: 0.25rem;

a {
text-decoration: none;
color: ${Color.LIGHT_BLUE};
text-shadow:
0 1px 2px rgba(0, 0, 0, 0.9),
0 2px 4px rgba(0, 0, 0, 0.6);
}

@media (max-width: ${BIG_BREAKPOINT}px) {
font-size: 1.1rem;
}

@media (max-width: 480px) {
font-size: 1rem;
}
`;

Expand Down Expand Up @@ -166,7 +221,7 @@ export const StyledBlueSlash = styled(motion.p)`
height: 100%;
`;
export const StyledDevBcnLogo = styled.img`
margin: 20px;
margin-top: 20px;
height: 13rem;
aspect-ratio: 800/327;
transition: height 0.2s ease-in-out;
Expand Down Expand Up @@ -214,15 +269,17 @@ export const StyledPlusSign = styled.span`
}
`;
export const StyledLogoDiv = styled(motion.div)`
padding-top: 4rem;
padding-bottom: 2rem;
padding-top: 0.5rem;
padding-bottom: 0.5rem;
display: flex;

@media (max-width: ${BIGGER_BREAKPOINT}px) {
padding-top: 2rem;
flex-direction: column;
}

@media (max-width: ${BIG_BREAKPOINT}px) {
padding-top: 1rem;
flex-direction: column;
}
`;
19 changes: 18 additions & 1 deletion wordlist.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
APIs
Axios
BvU
camelCase
CFP
CRA's
Cfp
DevTools
DNS
DOM
DevBCN
DevBcn
Expand Down Expand Up @@ -54,6 +57,8 @@ ico
icougil
incimages
integrations
io
JobsData
jonathanvila
jpg
js
Expand All @@ -64,28 +69,39 @@ linkedin
localhost
Lucide
matchers
metatags
minified
nd
npm
OG
onChange
param
pbs
png
PageMetadata
Preconnect
predeploy
Prefetch
Preload
preloaded
PrimeIcons
px
pwa
queryKey
rd
robotstxt
SEO
selectedGroupId
sessionize
SSR
st
svg
TanStack
th
toHaveTextContent
tsconfig
twimg
typeof
txt
urlOrId
urlOrYear
Expand All @@ -103,4 +119,5 @@ wikipedia
www
xSBqFVCYSpsyuO
YAGNI
youtube
youtube
YYYY
Loading