Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file removed public/posadev_brochure2025.pdf
Binary file not shown.
Binary file added public/posadev_brochure2026_02.pdf
Binary file not shown.
9 changes: 1 addition & 8 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,8 @@ import Header from "@/components/Header.tsx";
import React from "react";
import PrivacyPolicy from "@/pages/PrivacyPolicy.tsx";
import Footer from "@/components/Footer.tsx";
import SpeakerInfo from "@/components/speakers/SpeakerInfo.tsx";
import {AppProvider, useAppContext} from "@/context/AppContext.tsx";
import TicketsPage from "@/pages/TicketsPage.tsx";
import CodeOfConductSpeakers from "@/pages/CodeOfConductSpeakers.tsx";
import Agenda from "@/pages/Agenda.tsx";
import MediaKit from "@/pages/MediaKit.tsx";
import SessionPage from "@/pages/SessionPage.tsx";
import {AppStatus} from "@/types/types.ts";
Expand All @@ -40,11 +37,7 @@ const App = () => {
<Route path="/code-of-conduct" element={<CodeOfConduct />}/>
<Route path="/codigo-de-conducta-speakers" element={<CodeOfConductSpeakers />}/>
<Route path="/privacy-policy" element={<PrivacyPolicy/>}/>
<Route path="/speaker/:speakerId" element={<SpeakerInfo/>}/>
<Route path="/boletos" element={<TicketsPage />} />
<Route path="/agenda" element={<Agenda/>} />
<Route path="/boletos" element={<TicketsPage />} />
<Route path="/media-kit" element={<MediaKit />} />
<Route path="/media-kit" element={<MediaKit />} />
<Route path="session/:sessionId" element={<SessionPage />} />
<Route path="/estadisticas" element={<Estadisticas />} />
</Routes>
Expand Down
5 changes: 2 additions & 3 deletions src/components/BecomeSponsor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ const BecomeSponsor = () => {
};

return (
<section id="patrocinadores"
className="py-20 bg-gradient-to-b from-white to-posadev-lightPink/20 mx-auto px-4 w-full">
<section className="py-20 bg-gradient-to-b from-white to-posadev-lightPink/20 mx-auto px-4 w-full">
{/* Section header */}
<div className="text-center mb-16">
<h2 className="text-3xl md:text-5xl font-bold text-posadev-black mb-6">
Expand Down Expand Up @@ -82,7 +81,7 @@ const BecomeSponsor = () => {
Conoce todos los detalles sobre los paquetes de patrocinio y beneficios
</p>
<a
href="/posadev_brochure2025.pdf"
href="/posadev_brochure2026_02.pdf"
download
onClick={handleBrochureClick}
className="flex gap-x-2 bg-white text-posadev-darkPink px-6 py-3 rounded-lg font-semibold hover:bg-posadev-lightPink transition-colors duration-300 items-center w-60"
Expand Down
2 changes: 1 addition & 1 deletion src/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ const Footer = () => {
onClick={() => navigate('/#patrocinadores')}
className="block text-posadev-lightPink hover:text-posadev-brightPink transition-colors duration-300"
>
Patrocinadores
Patrocinadores del 2025
</a>
</nav>
</div>
Expand Down
46 changes: 19 additions & 27 deletions src/components/Header.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, {useEffect, useState} from 'react';
import {Image, Menu, UserStar, X, BarChart3} from 'lucide-react';
import {Image, Menu, UserStar, X, BarChart3, Download} from 'lucide-react';
import posadevLogo from '/media-kit/posadev-logo.png';
import {useLocation, useNavigate} from "react-router-dom";
import {cn} from "@/lib/utils.ts";
Expand Down Expand Up @@ -47,26 +47,22 @@ const Header = () => {
</a>

<nav className="hidden md:flex items-center space-x-8">
<a
href="/posadev_brochure2026_02.pdf"
download
className="text-white hover:text-posadev-brightPink transition-colors duration-300 flex items-center space-x-1"
>
<Download className="w-4 h-4" aria-hidden="true"/>
<span>Brochure</span>
</a>
<a
onClick={() => navigate('/#patrocinadores')}
className={cn(
"bg-gradient-to-r from-posadev-darkPink to-posadev-brightPink text-white px-6 py-2 rounded-full hover:shadow-lg hover:shadow-posadev-brightPink/25 transition-all duration-300 flex items-center space-x-1 hover:underline hover:shadow-posadev-brightPink/25",
isActive('/#patrocinadores') && "underline shadow-posadev-brightPink/25"
)}>
<UserStar className="w-4 h-4" aria-hidden="true"/>
<span>Se un Patrocinador</span>
</a>
<a
onClick={() => navigate('/#speakers')}
className={cn("text-white hover:text-posadev-brightPink transition-colors duration-300 flex items-center space-x-1", isActive('/#comunidades') && "text-posadev-brightPink")}
>
<span>Speakers</span>
</a>
<a
onClick={() => navigate('/agenda')}
className={cn("text-white hover:text-posadev-brightPink transition-colors duration-300 flex items-center space-x-1", isActive('/agenda') && "text-posadev-brightPink")}
>
<span>Agenda</span>
<span>Únete como Patrocinador</span>
</a>
<a
onClick={() => navigate('/estadisticas')}
Expand Down Expand Up @@ -98,31 +94,27 @@ const Header = () => {
<div
className="md:hidden absolute top-16 left-0 right-0 bg-black/95 rounded-b-xl backdrop-blur-md border-b border-posadev-darkPink/20">
<nav className="flex flex-col gap-2 px-4 py-4 space-y-4">
<a
onClick={() => navigateMenu('/#speakers')}
className={cn("w-full text-white hover:text-posadev-brightPink transition-colors duration-300 flex items-center px-4 py-1 space-x-2", isActive('/#comunidades') && "text-posadev-brightPink")}
>
Speakers
</a>
<a
onClick={() => navigateMenu('/agenda')}
className={cn("w-full flex items-center gap-2 text-white hover:text-posadev-brightPink transition-colors px-4 py-1 duration-300 space-x-2", isActive('/agenda') && "text-posadev-brightPink")}
>
Agenda
</a>
<a
onClick={() => navigateMenu('/estadisticas')}
className={cn("w-full flex items-center gap-2 text-white hover:text-posadev-brightPink transition-colors px-4 py-1 duration-300 space-x-2", isActive('/estadisticas') && "text-posadev-brightPink")}
>
<BarChart3 className="w-4 h-4" aria-hidden="true"/>
Estadísticas
</a>
<a
href="/posadev_brochure2026_02.pdf"
download
className="w-full flex items-center gap-2 text-white hover:text-posadev-brightPink transition-colors px-4 py-1 duration-300"
>
<Download className="w-4 h-4" aria-hidden="true"/>
Brochure
</a>
<a
onClick={() => navigateMenu('/#patrocinadores')}
className={cn("w-full bg-gradient-to-r from-posadev-darkPink to-posadev-brightPink text-white px-4 py-3 rounded-lg flex items-center space-x-2 gap-2", isActive('/#patrocinadores') && "underline shadow-posadev-brightPink/25")}
>
<UserStar className="w-4 h-4" aria-hidden="true"/>
Se un patrocinador
Únete como Patrocinador
</a>
<a
onClick={() => {
Expand Down
49 changes: 8 additions & 41 deletions src/components/Hero.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
import React from 'react';
import { MapPin} from 'lucide-react';
import posadevLogo from '/media-kit/posadev-logo.png';
import Tickets from "@/components/Tickets.tsx";
import CalendarCard from "@/components/CalendarCard.tsx";

const Hero = () => {
return (
<section id="inicio"
className="min-h-screen gradient-bg flex items-center justify-center relative overflow-hidden pt-7 md:pt-0"
className="min-h-screen gradient-bg flex flex-col items-center justify-center relative pt-7 md:pt-0"
itemScope
itemType="https://schema.org/Event"
aria-labelledby="hero-title"
>
<div className="container mx-auto px-4 relative z-10 mt-16 lg:pt-0">
<div className="flex-1 flex items-center justify-center container mx-auto px-4 relative z-10">
<div className="text-center">
{/* Main title */}
<div className="mb-6 flex flex-col justify-center items-center">
<img
src={posadevLogo}
Expand All @@ -24,50 +20,21 @@ const Hero = () => {
<title id="hero-title" className="sr-only">
Posadev 2025 – El evento anual de comunidades tecnológicas
</title>
<Tickets />
<div className="mt-8 w-60 h-1 bg-gradient-to-r from-posadev-darkPink to-posadev-brightPink mx-auto rounded-full"></div>
<p
itemProp="description"
className="pt-8 text-xl md:text-2xl text-posadev-lightPink animate-fade-in font-light">
El evento anual que reúne a la comunidades tecnológicas
</p>
</div>
{/* Subtitle */}
{/* Event details */}
<section
className="grid grid-cols-1 md:grid-cols-2 gap-6 mb-12 max-w-4xl mx-auto"
itemScope
itemType="https://schema.org/Event"
aria-labelledby="event-details-title"
>
<title id="event-details-title" className="sr-only">
Detalles del evento
</title>
{/* Fecha */}
<CalendarCard />
{/* Ubicación */}
<a
href="https://maps.app.goo.gl/Gr35rz6WHsGgfeFd9"
target="_blank"
className="bg-white/10 backdrop-blur-sm rounded-2xl p-6 hover-scale text-center">
<MapPin
className="w-8 h-8 text-posadev-brightPink mx-auto mb-3"
aria-hidden="true"
/>
<h3 className="text-white font-semibold mb-2">Ubicación</h3>
<p
className="text-posadev-lightPink"
itemProp="location"
itemScope
itemType="https://schema.org/Place"
>
Tec de Monterrey Campus Guadalajara
</p>
<p className="text-xs text-posadev-lightPink/70 mt-2">(Haz clic para ir al mapa)</p>
</a>
</section>
</div>
</div>
<div className="flex flex-col items-center gap-2 text-white/90 animate-bounce pb-10 mt-auto">
<span className="text-sm font-light tracking-widest uppercase">Más información</span>
<svg xmlns="http://www.w3.org/2000/svg" className="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M19 9l-7 7-7-7" />
</svg>
</div>
</section>
);
};
Expand Down
30 changes: 7 additions & 23 deletions src/components/Sponsor.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import Lights from "@/components/ui/lights.tsx";
import React from "react";
import {ISponsor} from "@/types/types.ts";
import background from "@/img/background_blue.png";

interface SponsorProps {
sponsor: ISponsor;
Expand All @@ -10,27 +8,13 @@ interface SponsorProps {
const Sponsor: React.FC<SponsorProps> = ({sponsor}) => {
if (!sponsor.isPaid) return;
return (
<article className="relative w-full z-0 flex justify-center items-center overflow-hidden">
<Lights className="w-full absolute left-1/2 md:hidden"/>
<div className="relative flex justify-center items-center
bg-white rounded-lg z-20
lg:px-10
h-40 md:h-52 max-w-56 md:max-w-60 lg:max-w-[300px]">
<img
src={sponsor.image}
alt={sponsor.name}
className="relative z-20 object-contain"
/>
</div>
<Lights className="w-full absolute right-1/2 md:hidden" />
<div className="absolute inset-0 hidden md:flex md:top-1/3 top-1/3 w-full overflow-visible z-0">
<Lights className="md:w-full" />
<Lights className="hidden md:w-full" />
<Lights className="w-full hidden md:flex" />
<Lights className="w-full hidden lg:flex" />
<Lights className="w-full hidden lg:flex" />
</div>
<article className="flex justify-center items-center bg-white rounded-xl p-6 h-40 md:h-52 w-full">
<img
src={sponsor.image}
alt={sponsor.name}
className="object-contain max-h-full max-w-full"
/>
</article>
)
)
}
export default Sponsor
2 changes: 1 addition & 1 deletion src/components/Sponsors.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const Sponsors = () => {
>
</div>
<h2 className="text-4xl md:text-5xl font-bold text-primary-600 text-secondary-600 text-center pt-20 z-20">
Patrocinadores
Patrocinadores del 2025
</h2>
<div
className="my-10 w-40 h-1 bg-gradient-to-r from-posadev-darkPink to-posadev-brightPink mx-auto rounded-full"></div>
Expand Down
87 changes: 7 additions & 80 deletions src/components/sponsors/SponsorsByTier.tsx
Original file line number Diff line number Diff line change
@@ -1,90 +1,17 @@
import Sponsor from "@/components/Sponsor.tsx";
import React from "react";
import background from "@/img/background_blue.png";

const SponsorsByTier = ({sponsors}) => {
const diamondSponsors = sponsors.filter(sponsor => sponsor.type === "diamond");
const goldSponsors = sponsors.filter(sponsor => sponsor.type === "gold");
const silverSponsors = sponsors.filter(sponsor => sponsor.type === "silver");
const bronzeSponsors = sponsors.filter(sponsor => sponsor.type === "bronze");
const paid = sponsors.filter(s => s.isPaid);
const isOdd = paid.length % 2 !== 0;

return (
<section>
<article className="flex flex-col justify-center items-center md:py-10">
<h2 className="text-4xl font-bold gap-4 hidden md:flex"><span aria-hidden={true}>💎</span>Diamante <span aria-hidden={true}>💎</span></h2>
{diamondSponsors.map((sponsor) => (
<Sponsor key={sponsor.id} sponsor={sponsor} />
))}
</article>
{
goldSponsors.length > 0 && <div style={{ backgroundImage: `url(${background})` }} className="h-10 md:h-20 bg-cover bg-center flex justify-center items-center">
</div>
}
<article className="flex flex-col items-center justify-center py-10">
<h2 className="text-4xl font-bold hidden md:flex gap-4 pt-10"><span aria-hidden={true}>⭐</span>Oro<span aria-hidden={true}>⭐</span></h2>
{goldSponsors.map((sponsor) => (
<Sponsor key={sponsor.id} sponsor={sponsor} />
))}
</article>
{
silverSponsors.length > 0 && <div style={{ backgroundImage: `url(${background})` }} className="h-10 md:h-20 bg-cover bg-center flex justify-center items-center">
</div>
}
<article className="py-10">
<div className="relative flex justify-center items-center">

<h2 className="text-4xl font-bold hidden md:flex justify-center items-center gap-4 pt-10">

<span
className="
inline-block
bg-[linear-gradient(to_bottom,_#e2e2e2,_#b4b7bc,_#6b6f75,_#3b3e43)]
bg-clip-text
text-transparent
[text-shadow:0_0_5px_rgba(255,255,255,0.8)]
text-5xl
"
>
</span>


Plata
<span
className="
inline-block
bg-[linear-gradient(to_bottom,_#e2e2e2,_#b4b7bc,_#6b6f75,_#3b3e43)]
bg-clip-text
text-transparent
[text-shadow:0_0_5px_rgba(255,255,255,0.8)]
text-5xl
"
>
</span>


</h2>
</div>

{silverSponsors.map((sponsor) => (
<Sponsor key={sponsor.id} sponsor={sponsor}/>
))}
</article>
{
bronzeSponsors.length > 0 && <div style={{backgroundImage: `url(${background})` }} className="h-10 md:h-20 bg-cover bg-center flex justify-center items-center">
<section className="grid grid-cols-2 gap-8 py-10 px-4 max-w-2xl mx-auto">
{paid.map((sponsor, index) => (
<div key={sponsor.id} className={isOdd && index === paid.length - 1 ? 'col-span-2 mx-auto w-1/2' : ''}>
<Sponsor sponsor={sponsor} />
</div>
}
{
bronzeSponsors.length > 0 && (
<article className="py-10">
<h2 className="text-4xl font-bold hidden md:flex justify-center items-center gap-4"><span aria-hidden={true}>🖥</span>Virtual<span aria-hidden={true}>🖥</span></h2>
{bronzeSponsors.map((sponsor) => (
<Sponsor key={sponsor.id} sponsor={sponsor} />
))}
</article>
)
}
))}
</section>
)
}
Expand Down
Loading
Loading