diff --git a/public/events/masonry/1.webp b/public/events/masonry/1.webp deleted file mode 100644 index a8a1e92..0000000 Binary files a/public/events/masonry/1.webp and /dev/null differ diff --git a/public/events/masonry/2.webp b/public/events/masonry/2.webp deleted file mode 100644 index 67711fb..0000000 Binary files a/public/events/masonry/2.webp and /dev/null differ diff --git a/public/events/masonry/3.webp b/public/events/masonry/3.webp deleted file mode 100644 index c711b96..0000000 Binary files a/public/events/masonry/3.webp and /dev/null differ diff --git a/public/events/masonry/4.webp b/public/events/masonry/4.webp deleted file mode 100644 index 5a26a3e..0000000 Binary files a/public/events/masonry/4.webp and /dev/null differ diff --git a/public/events/masonry/5.webp b/public/events/masonry/5.webp deleted file mode 100644 index 25ba17b..0000000 Binary files a/public/events/masonry/5.webp and /dev/null differ diff --git a/public/events/masonry/6.webp b/public/events/masonry/6.webp deleted file mode 100644 index c516f03..0000000 Binary files a/public/events/masonry/6.webp and /dev/null differ diff --git a/public/events/masonry/7.webp b/public/events/masonry/7.webp deleted file mode 100644 index 56c798b..0000000 Binary files a/public/events/masonry/7.webp and /dev/null differ diff --git a/public/events/masonry/8.webp b/public/events/masonry/8.webp deleted file mode 100644 index bc40740..0000000 Binary files a/public/events/masonry/8.webp and /dev/null differ diff --git a/public/events/masonry/9.webp b/public/events/masonry/9.webp deleted file mode 100644 index e8c39a2..0000000 Binary files a/public/events/masonry/9.webp and /dev/null differ diff --git a/public/hp-bg-redesign.webp b/public/hp-bg-redesign.webp deleted file mode 100644 index 0d0b6de..0000000 Binary files a/public/hp-bg-redesign.webp and /dev/null differ diff --git a/public/icons/signal.svg b/public/icons/signal.svg deleted file mode 100644 index cc07d87..0000000 --- a/public/icons/signal.svg +++ /dev/null @@ -1,13 +0,0 @@ - - \ No newline at end of file diff --git a/public/review.png b/public/review.png deleted file mode 100644 index 41954b9..0000000 Binary files a/public/review.png and /dev/null differ diff --git a/public/scripts/text-scramble.js b/public/scripts/text-scramble.js deleted file mode 100644 index 0cbf305..0000000 --- a/public/scripts/text-scramble.js +++ /dev/null @@ -1,99 +0,0 @@ -function applyScrambleEffect() { - const glitchTextElements = document.querySelectorAll('.glitch-text'); - const glitchTextHoverElements = document.querySelectorAll('.glitch-text-hover'); - - function animateScramble(element, text, duration = 2000) { - const chars = []; - element.innerHTML = ''; // Clear the original text - - // Measure the element's width before animation starts - const preScrambleWidth = element.offsetWidth; - element.style.width = `${preScrambleWidth}px`; - - for (let t = 0; t < text.length; t++) { - const span = document.createElement('span'); - - // Check if the character is a space, then use to preserve it - span.innerHTML = text[t] === ' ' ? ' ' : text[t]; - chars[t] = span; - span.style.display = 'inline-block'; - element.appendChild(span); - } - - const rand = Math.random; - const SECONDS = 1000; - const FPS = 30; - const animationLength = duration; - - function animate3(k) { - const kk = k * text.length; - for (let i = 0; i < text.length; i++) { - if (kk < i) { - chars[i].innerHTML = String.fromCharCode(~~(65 + rand() * 26)); - } else { - // Preserve spaces with - chars[i].innerHTML = text[i] === ' ' ? ' ' : text[i]; - } - } - } - - // Animation loop - let start = Date.now(); - function animate() { - const current = Date.now(); - const time = current - start; - const k = time / animationLength; - - if (k < 1) { - setTimeout(animate, SECONDS / FPS); - animate3(k); - } else { - // Ensure the final text is revealed once the animation is complete - for (let i = 0; i < text.length; i++) { - chars[i].innerHTML = text[i] === ' ' ? ' ' : text[i]; - } - // Restore the original width (optional if you want to revert to normal) - element.style.width = 'auto'; - // Allow new hover events after the animation completes - element.isAnimating = false; - } - } - - animate(); - } - - // Use Intersection Observer to observe when the element comes into view - const observer = new IntersectionObserver((entries, observer) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const element = entry.target; - const text = element.innerText; - animateScramble(element, text); - observer.unobserve(element); // Stop observing after the animation has been triggered - } - }); - }, { - threshold: 0.1 // Trigger when 10% of the element is visible - }); - - // Observe each glitchTextElement for when it comes into view - glitchTextElements.forEach((element) => { - observer.observe(element); - }); - - glitchTextHoverElements.forEach((element) => { - const text = element.innerText; - - element.isAnimating = false; - - element.addEventListener('mouseenter', () => { - if (!element.isAnimating) { - element.isAnimating = true; // Set flag to prevent re-triggering during animation - animateScramble(element, text, 800); - } - }); - }); - } - - document.addEventListener('DOMContentLoaded', applyScrambleEffect); - \ No newline at end of file diff --git a/src/components/AboutFooter.astro b/src/components/AboutFooter.astro index 6e85303..199f1f9 100644 --- a/src/components/AboutFooter.astro +++ b/src/components/AboutFooter.astro @@ -2,147 +2,114 @@ import * as config from "../config.yaml"; import core from "../core.json"; import contributors from "../contributors.json"; -import SpeakerGrid from "./SpeakerGrid.astro"; -import SliderTestimonial from "./SliderTestimonial.astro"; -import MembersGrid from "./MembersGrid.astro"; +import { getPersonByGH } from "../lib/core.js"; +import PeopleCarousel from "../components/PeopleCarousel.astro"; -// Accept sectionsConfig as a prop -const { - sectionsConfig = [ - { name: "community", visible: true, order: 1 }, - { name: "socialLinks", visible: true, order: 2 }, - { name: "speakers", visible: true, order: 3 }, - { name: "core contributors", visible: true, order: 4 }, - { name: "contributors", visible: true, order: 5 }, - { name: "testimonials", visible: true, order: 6 }, - { name: "membersGrid", visible: true, order: 7 }, - { name: "communityPartners", visible: true, order: 8 }, - ], -} = Astro.props; +function findPerson(src) { + const p = core.people.find((p) => + src.refs?.twitter + ? p.refs?.twitter === src.refs.twitter + : src.refs?.bsky + ? p.refs.bsky === src.refs.bsky + : {} + ); + if (p) { + p.ct = src; + } + return p; +} -console.log(sectionsConfig); -// Function to sort sections by order -const sortedSections = sectionsConfig - .filter((section) => section.visible) - .sort((a, b) => a.order - b.order); +function personLink(person) { + return person.refs?.twitter + ? `https://twitter.com/${person.refs.twitter}` + : person.refs?.bsky + ? `https://bsky.app/profile/${person.refs.bsky}` + : "#"; +} --- -{ - sortedSections.map((section) => ( -
- We cultivate and foster a culture of privacy in web3 making data free - and public. -
-- Check our annual reports, infographics, privacy awards, newsletter, and - guidelines. -
- +
- By developing free and open tools,
we empower people to make informed
- decisions:
-
@{person.refs.twitter}
- )} - {/*{truncateCaption(person.caption)}
*/} -- Members are our chosen collaborators for mutual support and - growth. Rather than one-time deals for individual events or - projects, we strive for consistent collaboration to achieve - lasting impact. -
- - Become an integral part of our community! Join us with building - privacy platform we all need. - -- Zcash / - Firo / - Firn / - Privacy Scaling Exploration / - Railgun / - ENS / - Navio (ex Navcoin) / - Panther / - AragonTKResearch / - Secret Network / - Waku -
-- Members are our chosen collaborators for mutual support and - growth. Rather than one-time deals for individual events or - projects, we strive for consistent collaboration to achieve - lasting impact. -
- - Become an integral part of our community! Join us with building - privacy platform we all need. - -- Members are our chosen collaborators for mutual support and - growth. Rather than one-time deals for individual events or - projects, we strive for consistent collaboration to achieve - lasting impact. -
-- Ensure visibility at all our events [Congresses, Summits & - Hackathons] -
-Grow impact through strategic, targeted communications.
-Participate in speaking engagements and mentorship roles.
-More details about the deals from our partners.
-- Reach and interact with specific, highly-relevant audiences. -
-- "{testimonials[currentTestimonial].text}" -
-@{person.refs.twitter}
- )} -{truncateCaption(person.caption)}
-
{genHeading(title)}
@@ -177,7 +176,7 @@ function genHeading(str) {
- Privacy Explorer -
- -- {item.title} -
-- This is the kind of support we value most: open-source, grassroots - initiatives driven by individual passion and the desire to create - something meaningful. -
-- We thrive on uniting diverse perspectives, skills, and visions. Both - online and offline, we bring together tech and non-tech individuals, - activists, key players, hackers, lawyers, researchers, philosophers, - policymakers, local communities, and grassroots movements. -
- -