···11+"use client";
22+33+import FadeIn from "./ui/FadeIn";
44+15export default function FooterQuote() {
26 return (
37 <section className="px-6 py-24">
48 <div className="mx-auto max-w-4xl text-center">
55- <blockquote className="quote">
66- “Social media should be public infrastructure. Like roads, libraries or public
77- spaces. Open, transparent and built for the people who use it.”
88- </blockquote>
99+ <FadeIn>
1010+ <blockquote className="quote">
1111+ “Social media should be public infrastructure. Like roads, libraries or public
1212+ spaces. Open, transparent and built for the people who use it.”
1313+ </blockquote>
1414+ </FadeIn>
915 </div>
1016 </section>
1117 );
+1
app/components/Hero.tsx
···33import { useState, useEffect } from "react";
44import NavLink from "./ui/NavLink";
55import GrainedBlob from "./GrainedBlob";
66+import FadeIn from "./ui/FadeIn";
6778const slides = [
89 { word: "people", image: "/images/pexels-kindelmedia-7148409 1.png" },
+33-23
app/components/RememberWhen.tsx
···11+"use client";
22+13import SectionIntroLabel from "./ui/SectionIntroLabel";
44+import FadeIn from "./ui/FadeIn";
2536export default function RememberWhen() {
47 return (
···3134 </svg>
32353336 <div className="relative mx-auto max-w-4xl text-center">
3434- <SectionIntroLabel>Remember when</SectionIntroLabel>
3737+ <FadeIn>
3838+ <SectionIntroLabel>Remember when</SectionIntroLabel>
3939+ </FadeIn>
35403636- <h2 className="mt-6">
3737- Social media used to be{" "}
3838- <span className="italic text-tangerine">fun?</span>
3939- </h2>
4141+ <FadeIn delay={100}>
4242+ <h2 className="mt-6">
4343+ Social media used to be{" "}
4444+ <span className="italic text-tangerine">fun?</span>
4545+ </h2>
4646+ </FadeIn>
40474148 {/* Three masked photos */}
4249 <div className="mt-12 flex items-center justify-center gap-6 md:gap-10">
···5764 position: "top" as const,
5865 },
5966 ].map((item, i) => (
6060- <div
6161- key={i}
6262- className="relative w-[197px] h-[225px] md:w-[263px] md:h-[300px] overflow-hidden"
6363- style={{ clipPath: `url(#${item.mask})` }}
6464- >
6565- <img
6666- src={item.src}
6767- alt=""
6868- className="h-full w-full object-cover"
6969- style={{ objectPosition: item.position }}
7070- />
7171- </div>
6767+ <FadeIn key={i} delay={200 + i * 150}>
6868+ <div
6969+ className="relative w-[197px] h-[225px] md:w-[263px] md:h-[300px] overflow-hidden"
7070+ style={{ clipPath: `url(#${item.mask})` }}
7171+ >
7272+ <img
7373+ src={item.src}
7474+ alt=""
7575+ className="h-full w-full object-cover"
7676+ style={{ objectPosition: item.position }}
7777+ />
7878+ </div>
7979+ </FadeIn>
7280 ))}
7381 </div>
74827575- <p className="section-copy mx-auto mt-12 max-w-2xl">
7676- Finding new people. Discovering communities that get you. Tools that
7777- actually help. Somewhere along the way, that got buried under ads,
7878- algorithms, and engagement traps.{" "}
7979- <strong>We're building it back.</strong>
8080- </p>
8383+ <FadeIn delay={650}>
8484+ <p className="section-copy mx-auto mt-12 max-w-2xl">
8585+ Finding new people. Discovering communities that get you. Tools that
8686+ actually help. Somewhere along the way, that got buried under ads,
8787+ algorithms, and engagement traps.{" "}
8888+ <strong>We're building it back.</strong>
8989+ </p>
9090+ </FadeIn>
8191 </div>
82928393 {/* Decorative curved line */}
+22-13
app/components/StartingInOffenbach.tsx
···2233import SectionIntroLabel from "./ui/SectionIntroLabel";
44import ButtonCta from "./ui/ButtonCta";
55+import FadeIn from "./ui/FadeIn";
5667export default function StartingInOffenbach() {
78 return (
···1920 </svg>
20212122 <div className="relative mx-auto max-w-4xl text-center">
2222- <SectionIntroLabel>Starting in Offenbach</SectionIntroLabel>
2323+ <FadeIn>
2424+ <SectionIntroLabel>Starting in Offenbach</SectionIntroLabel>
2525+ </FadeIn>
23262424- <h2 className="mt-6">
2525- Your city. Your community.{" "}
2626- <span className="italic text-tangerine">One app.</span>
2727- </h2>
2727+ <FadeIn delay={100}>
2828+ <h2 className="mt-6">
2929+ Your city. Your community.{" "}
3030+ <span className="italic text-tangerine">One app.</span>
3131+ </h2>
3232+ </FadeIn>
28332929- <p className="section-copy mx-auto mt-8 max-w-2xl">
3030- Find your neighbors, discover local events, navigate city services
3131- from finding an apartment to figuring out trash collection day.
3232- Everything Offenbach, in one place.
3333- </p>
3434+ <FadeIn delay={200}>
3535+ <p className="section-copy mx-auto mt-8 max-w-2xl">
3636+ Find your neighbors, discover local events, navigate city services
3737+ from finding an apartment to figuring out trash collection day.
3838+ Everything Offenbach, in one place.
3939+ </p>
4040+ </FadeIn>
34413535- <ButtonCta href="/offenbach" variant="ghost" className="mt-10">
3636- discover Offenbach
3737- </ButtonCta>
4242+ <FadeIn delay={300}>
4343+ <ButtonCta href="/offenbach" variant="ghost" className="mt-10">
4444+ discover Offenbach
4545+ </ButtonCta>
4646+ </FadeIn>
3847 </div>
3948 </section>
4049 );