Merge pull request #26 from web3privacy/revert-25-pages-dev

Revert "Home, About and Membership (Get Involved) - Redesign"
This commit is contained in:
Mykola Siusko 2024-09-12 16:25:44 +02:00 committed by GitHub
commit f1b015af15
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 527 additions and 1532 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

View file

@ -1,13 +0,0 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_140_218)">
<path
d="M18.24 0.701236L18.78 2.88374C16.6557 3.40615 14.6227 4.24691 12.75 5.37749L11.595 3.44999C13.6587 2.20398 15.8991 1.27725 18.24 0.701236ZM29.76 0.701236L29.22 2.88374C31.3442 3.40615 33.3772 4.24691 35.25 5.37749L36.4125 3.44999C34.3464 2.20329 32.1035 1.27654 29.76 0.701236ZM3.44999 11.595C2.20398 13.6587 1.27725 15.8991 0.701236 18.24L2.88374 18.78C3.40615 16.6557 4.24691 14.6227 5.37749 12.75L3.44999 11.595ZM2.24999 24C2.24926 22.9092 2.33074 21.8198 2.49374 20.7412L0.269986 20.4037C-0.0899954 22.7877 -0.0899954 25.2122 0.269986 27.5962L2.49374 27.2587C2.33074 26.1802 2.24926 25.0908 2.24999 24ZM36.405 44.55L35.25 42.6225C33.3796 43.7524 31.3491 44.5931 29.2275 45.1162L29.7675 47.2987C32.1058 46.722 34.3435 45.7953 36.405 44.55ZM45.75 24C45.7507 25.0908 45.6692 26.1802 45.5062 27.2587L47.73 27.5962C48.09 25.2122 48.09 22.7877 47.73 20.4037L45.5062 20.7412C45.6692 21.8198 45.7507 22.9092 45.75 24ZM47.2987 29.76L45.1162 29.22C44.5938 31.3442 43.7531 33.3772 42.6225 35.25L44.55 36.4125C45.7967 34.3464 46.7234 32.1035 47.2987 29.76ZM27.2587 45.51C25.0984 45.835 22.9016 45.835 20.7412 45.51L20.4037 47.7337C22.7877 48.0937 25.2122 48.0937 27.5962 47.7337L27.2587 45.51ZM41.5087 36.9037C40.2115 38.6606 38.6579 40.2129 36.9 41.5087L38.235 43.32C40.1743 41.8941 41.8884 40.1851 43.32 38.25L41.5087 36.9037ZM36.9 6.49124C38.6582 7.78819 40.2118 9.34175 41.5087 11.1L43.32 9.74999C41.893 7.81602 40.1839 6.10701 38.25 4.67999L36.9 6.49124ZM6.49124 11.1C7.78819 9.34175 9.34175 7.78819 11.1 6.49124L9.74999 4.67999C7.81602 6.10701 6.10701 7.81602 4.67999 9.74999L6.49124 11.1ZM44.55 11.595L42.6225 12.75C43.7524 14.6204 44.5931 16.6508 45.1162 18.7725L47.2987 18.2325C46.722 15.8942 45.7953 13.6564 44.55 11.595ZM20.7412 2.49374C22.9016 2.16871 25.0984 2.16871 27.2587 2.49374L27.5962 0.269986C25.2122 -0.0899954 22.7877 -0.0899954 20.4037 0.269986L20.7412 2.49374ZM7.64624 43.9162L2.99999 45L4.08374 40.3537L1.89374 39.84L0.809986 44.4862C0.722695 44.859 0.731962 45.2479 0.836911 45.616C0.941859 45.9842 1.13902 46.3195 1.40973 46.5902C1.68044 46.861 2.01575 47.0581 2.38393 47.1631C2.75211 47.268 3.14098 47.2773 3.51374 47.19L8.15624 46.125L7.64624 43.9162ZM2.36249 37.8337L4.55249 38.3437L5.30249 35.1225C4.2093 33.2852 3.39421 31.2961 2.88374 29.22L0.701236 29.76C1.1905 31.7484 1.93413 33.6655 2.91374 35.4637L2.36249 37.8337ZM12.8625 42.7087L9.64124 43.4587L10.1512 45.6487L12.5212 45.0975C14.3195 46.0771 16.2365 46.8207 18.225 47.31L18.765 45.1275C16.6932 44.6109 14.7093 43.7908 12.8775 42.6937L12.8625 42.7087ZM24 4.49999C20.5159 4.50179 17.0959 5.43705 14.0957 7.20848C11.0955 8.97992 8.62472 11.5228 6.94032 14.5727C5.25593 17.6226 4.41944 21.0681 4.51787 24.5508C4.61629 28.0336 5.64603 31.4263 7.49999 34.3762L5.62499 42.375L13.6237 40.5C16.182 42.1113 19.0799 43.1056 22.0885 43.4045C25.0971 43.7033 28.134 43.2985 30.9593 42.222C33.7845 41.1455 36.3208 39.4267 38.3676 37.2015C40.4145 34.9764 41.9159 32.3057 42.7532 29.4006C43.5906 26.4954 43.7409 23.4354 43.1924 20.4622C42.6439 17.4889 41.4115 14.684 39.5926 12.2689C37.7738 9.85375 35.4182 7.89467 32.7121 6.54637C30.006 5.19808 27.0234 4.4975 24 4.49999Z"
fill="white" />
</g>
<defs>
<clipPath id="clip0_140_218">
<rect width="48" height="48" fill="white" />
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View file

@ -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 &nbsp; to preserve it
span.innerHTML = text[t] === ' ' ? '&nbsp;' : 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 &nbsp;
chars[i].innerHTML = text[i] === ' ' ? '&nbsp;' : 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] === ' ' ? '&nbsp;' : 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);

View file

@ -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) => (
<div>
{section.name === "community" && (
<div class="middle-pane-medium mt-16">
<h1>
<a
class="glitch-text"
href="https://docs.web3privacy.info/get-involved"
>
Join the Community
<!-- <div class="mt-20">
<h1><a href="https://docs.web3privacy.info/follow-us">Follow us</a></h1>
<div class="w3pn-wgrid">
{config.landing.follow.map((item) => (
<a href={item.url || core.links[item.link]} target="_blank">
<span><span class="icon" class:list={[item.ico || ""]}></span></span>
<span class="title">{item.name}</span>
<span>{item.text}</span>
</a>
</h1>
<div>{config.landing.community}</div>
</div>
)}
{section.name === "socialLinks" && (
<div class="grid place-items-center grid-cols-1 md:grid-cols-3 lg:grid-cols-4 gap-2 pt-4 w-full">
<a
href={core.links.twitter}
class="bg-[#101010] w-full flex items-center justify-center w-full h-40 overflow-hidden"
>
<button class="flex flex-col items-center justify-center">
<div class="icon twitter" />
@web3privacy
</button>
</a>
<a
href={core.links.telegram}
class="bg-[#101010] w-full flex items-center justify-center w-full h-40 overflow-hidden"
>
<button class="flex flex-col items-center justify-center">
<div class="icon telegram" />
Telegram
</button>
</a>
<a
href={core.links.signal}
class="bg-[#101010] w-full flex items-center justify-center w-full h-40 overflow-hidden"
>
<button class="flex flex-col items-center justify-center">
<div class="icon">
<img src="/icons/signal.svg" alt="" />
</div>
Signal
</button>
</a>
<a
href={core.links.matrix}
class="bg-[#101010] w-full flex items-center justify-center w-full h-40 overflow-hidden"
>
<button class="flex flex-col items-center justify-center">
<div class="icon matrix" />
matrix
</button>
</a>
</div>
)}
{section.name === "speakers" && (
<div class="middle-pane-medium mt-16">
<h1 class="my-6 glitch-text">Speakers</h1>
<SpeakerGrid people={core.people} team={core.teams["core-team"]} />
</div>
)}
{section.name === "core contributors" && (
<div class="middle-pane-medium mt-16">
<h1 class="my-6 glitch-text">Core Contributors</h1>
<SpeakerGrid people={core.people} team={core.teams["core-team"]} />
</div>
)}
{section.name === "contributors" && (
<div class="middle-pane-medium">
<h1 class="my-6 glitch-text">Contributors</h1>
<div class="flex gap-3 flex-wrap mb-4 items-center">
{contributors.items.map((contrib) => (
<div>
<a
href={contrib.html_url}
target="_blank"
title={contrib.login}
>
<img
src={contrib.avatar_url}
class="w-14 rounded-full aspect-square"
/>
</a>
</div>
))}
</div>
<div class="flex gap-4 lg:gap-6 pt-4 flex-wrap">
<a href={core.links.telegram} class="button inverted">
<button>Become a Contributor</button>
</a>
</div>
</div>
)}
{section.name === "testimonials" && (
<div class="middle-pane-medium">
<h1 class="my-6 mt-16 glitch-text">
What People Have To Say About US
</h1>
<SliderTestimonial />
</div>
)}
{section.name === "membersGrid" && (
<div class="middle-pane-medium mt-16">
<h1 class="my-6 glitch-text">Members</h1>
<MembersGrid people={core.people} team={core.teams["core-team"]} />
</div>
)}
))}
</div>
))
}
</div>
<div class="mt-10">
<h1><a href="https://docs.web3privacy.info/communication">Coordination</a></h1>
<div class="w3pn-wgrid">
{config.landing.coord.map((item) => (
<a href={item.url || core.links[item.link]} target="_blank">
<span><span class="icon" class:list={[item.ico || ""]}></span></span>
<span class="title">{item.name}</span>
<span>{item.text}</span>
</a>
))}
</div>
</div> -->
<div class="mt-16">
<h1>
<a href="https://docs.web3privacy.info/get-involved">Join the Community</a>
</h1>
<div>{config.landing.community}</div>
<h2 class="my-6">Speakers</h2>
<div class="flex gap-3 flex-wrap items-center">
{
core.people
.filter((p) => !core.teams["core-team"].includes(p.id))
.filter((p) => p.imageUrl)
.map((person) => (
<div>
<a href={personLink(person)}>
<img
src={person.imageUrl}
title={person.name}
class="w-14 rounded-full aspect-square"
/>
</a>
</div>
))
}
</div>
<div class="flex gap-3 lg:gap-6 pt-4 flex-wrap mt-4 mb-14">
<a href={core.links.cfp} class="button inverted"
><button>Submit your proposal (CfP)</button></a
>
</div>
<h2 class="my-6">Git Contributors</h2>
<div class="flex gap-3 flex-wrap mb-4 items-center">
{
// filter(p => !core.teams['core-team'].includes(getPersonByGH(p.login)?.id))
contributors.items.map((contrib) => (
<div>
<a href={contrib.html_url} target="_blank" title={contrib.login}>
<img
src={contrib.avatar_url}
class="w-14 rounded-full aspect-square"
/>
</a>
</div>
))
}
</div>
<div class="flex gap-4 lg:gap-6 pt-4 flex-wrap">
<a href={core.links.telegram} class="button inverted"
><button>Telegram</button></a
>
<a href={core.links.signal} class="button inverted"
><button>Signal</button></a
>
<a href={core.links.matrix} class="button inverted"
><button>matrix hub</button></a
>
</div>
</div>

View file

@ -2,137 +2,236 @@
import AboutItem from "../components/AboutItem.astro";
---
<AboutItem title="RESEARCH" subtext="">
<div class="w-full">
<div class="flex flex-col gap-[8px]">
<p>
We cultivate and foster a culture of privacy in web3 making data free
and public.
</p>
<p>
Check our annual reports, infographics, privacy awards, newsletter, and
guidelines.
</p>
<a class="button inverted"><button>web3privacy Research</button></a>
<div>
<AboutItem
title="AUDIENCES"
subtext="For all of them we are building private platform to discuss and build privavy tooling and research"
>
<div class="w-full grid grid-cols-2">
<div class="flex flex-col gap-[8px] text-white font-bold">
<span> General public </span>
<span> Projects </span>
<span> Startupers</span>
</div>
<div class="flex flex-col gap-[8px] text-white font-bold">
<span> Developers </span>
<span> Audit companies </span>
<span> Investors</span>
</div>
</div>
</div>
</AboutItem>
<AboutItem title="PROJECTS & TOOLS PRODUCTION" subtext="">
<p class="mb-5">
By developing free and open tools, <br /> we empower people to make informed
decisions:
</p>
<div class="flex flex-col gap-5">
<div class="flex gap-[12px] md:items-center items-start w-full">
<div class="flex flex-row space-x-5 w-full">
<div>
<img src="/icons/database.svg" class="inline-block" />
</AboutItem>
<AboutItem
title="PLATFORM"
subtext="We need to create activation points, that will push community around privacy forward and establish new connections"
>
<div class="flex flex-col gap-[8px] items-start">
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/query_stats.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span
class="font-bold text-white leading-[1rem] w-full max-w-[110px]"
>
Market stats
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full">
Like Crunchbase, but free forever
</span>
</div>
<div>
<div class="flex items-center flex-nowrap space-x-5">
<span class="font-bold text-white"> PRIVACY EXPLORER </span>
</div>
<span class="text-[1rem] mt-0 w-full"
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/star_half.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span
class="font-bold text-white leading-[1rem] w-full max-w-[140px]"
>
Privacy Ranking
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full">
Scoring and review of current privacy projects
</span>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/school.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit max-w-[140px]">
Academy
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full"
>Education for general public how to reach privacy
</span>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/experiment.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit max-w-[140px]">
Research
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full">
Anual reports, Frameworks, Tools, Books
</span>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/database.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit max-w-[140px]">
Data
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full"
>For Projects, Use-case list, Market & Funding info
</span>
</div>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<div class="flex flex-row space-x-5 w-full">
<div>
<img src="/icons/database.svg" class="inline-block" />
</AboutItem>
<AboutItem
title="ACTIVATIONS"
subtext="With all of that we want to focus everybody more in web3 related privacy issues, those are our estimates and long-term goals"
>
<div class="flex flex-col gap-[8px] items-start">
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/visibility_lock.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit">
Advocacy
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full">
Branding “decentralization = privacy”
</span>
</div>
<div>
<div class="flex items-center flex-nowrap space-x-5">
<span class="font-bold text-white w-fit">
HACKATHON IDEA GENERATOR
</span>
</div>
<span class="text-[1rem] mt-0 w-full"
>Helps developers build applications that address real-world
problems, that people will actually use.
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/calendar_today.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit">
Events
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full">
Meetups, Summits, Hackathons, Camps
</span>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/group_work.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span
class="font-bold text-white leading-[1rem] w-full max-w-[220px]"
>
Ecosystems collaboration
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full"> Networks, Alliances, Media </span>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/encrypted.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit max-w-[140px]">
Standartisation
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full">
Privacy-features, security audit (example)
</span>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/local_florist.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit max-w-[140px]">
Incubation
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full"
>Product managers facilitation, Business sustainability
</span>
</div>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<div class="flex flex-row space-x-5 w-full">
<div>
<img src="/icons/database.svg" class="inline-block" />
</div>
<div>
<div class="flex items-center flex-nowrap space-x-5">
<span class="font-bold text-white w-fit"> WEEK IN PRIVACY </span>
</div>
<span class="text-[1rem] mt-0 w-full"
>Weekly newsletter with round-up of the most important news
happening around privacy in Web3
</AboutItem>
<AboutItem variant="secondary" title="GOALS">
<div class="flex md:flex-row flex-col gap-[32px]">
<div class="flex flex-col gap-[16px]">
<div class="flex flex-col gap-[4px]">
<span class="font-bold text-white my-2 leading-[1rem] uppercase">
GENERAL PUBLIC
</span>
<ul class="list-decimal ml-[18px]">
<li>Milions of educated users</li>
<li>Higher privacy culture</li>
</ul>
</div>
<div class="flex flex-col gap-[4px]">
<span class="font-bold text-white my-2 leading-[1rem] uppercase">
PROJECTS
</span>
<ul class="list-decimal ml-[18px]">
<li>Better privacy features</li>
<li>New use-cases</li>
<li>Efficient demos</li>
</ul>
</div>
<div class="flex flex-col gap-[4px]">
<span class="font-bold text-white my-2 leading-[1rem] uppercase">
SECURITY AUDIT COMPANIES
</span>
<ul class="list-decimal ml-[18px]">
<li>New “privacy audit” category</li>
<li>Significant growth of audited projects.</li>
</ul>
</div>
</div>
<div class="flex flex-col gap-[16px]">
<div class="flex flex-col gap-[4px]">
<span class="font-bold text-white mb-2 mt-0 leading-[1rem] uppercase">
DEVELOPERS
</span>
<ul class="list-decimal ml-[18px] w-full">
<li>More devs building privacy</li>
<li>More sustainable projects.</li>
</ul>
</div>
<div class="flex flex-col gap-[4px] w-full">
<span class="font-bold text-white my-2 leading-[1rem] uppercase">
STARTUPERS
</span>
<ul class="list-decimal ml-[18px]">
<li>More privacy-oriented projects</li>
<li>Longer runway</li>
</ul>
</div>
</div>
</div>
</div>
<!-- <div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/star_half.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-full max-w-[140px]">
Privacy Ranking
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full">
Scoring and review of current privacy projects
</span>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/school.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit max-w-[140px]">
Academy
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full"
>Education for general public how to reach privacy
</span>
</div>
</div>
<div class="flex gap-[12px] md:items-center items-start w-full">
<img src="/icons/experiment.svg" class="inline-block" />
<div
class="flex md:flex-row flex-col md:items-center md:gap-[12px] w-full"
>
<span class="font-bold text-white leading-[1rem] w-fit max-w-[140px]">
Research
</span>
<span class="md:block hidden">-</span>
<span class="text-[1rem] w-full">
Anual reports, Frameworks, Tools, Books
</span>
</div>
</div> -->
</AboutItem>
<AboutItem title="EDUCATION" subtext="">
<div class="w-full">
<div class="flex flex-col gap-[8px]">
<p>
We make privacy accessible for everyone, empowering people to learn and
implement best practices effectively.
</p>
<p>
From mentoring at hackathons, guidelines for developers, and the
Cypherpunk Academy - we offer training, incubation, and acceleration
programs.
</p>
<a class="button inverted"><button>Privacy Academy</button></a>
</div>
</div>
</AboutItem>
</AboutItem>
</div>

View file

@ -1,29 +0,0 @@
---
const {
images = [
"/events/masonry/1.webp",
"/events/masonry/2.webp",
"/events/masonry/3.webp",
"/events/masonry/4.webp",
"/events/masonry/5.webp",
"/events/masonry/6.webp",
"/events/masonry/7.webp",
"/events/masonry/8.webp",
"/events/masonry/9.webp",
],
} = Astro.props;
---
<div class="flex flex-wrap gap-[3px]">
{
images.map((image, index) => (
<div class="flex-auto overflow-hidden">
<img
class="object-cover w-full lg:max-h-[120px] xl:max-h-[223px]"
src={image}
alt={`Image ${index + 1}`}
/>
</div>
))
}
</div>

View file

@ -1,129 +0,0 @@
---
const { people, team } = Astro.props;
// Dummy data for now:
let filteredPeople = [
{
id: "guy-zyskind",
name: "Guy Zyskind",
caption:
"Founder of [Secret Network](https://scrt.network/), CEO [SCRT Labs](https://www.scrtlabs.com/)",
country: "is",
refs: {
twitter: "GuyZys",
},
imageUrl: "https://data.web3privacy.info/img/people/guy-zyskind.jpg",
thumbs: {
"64": "https://data.web3privacy.info/img/people/thumbs/guy-zyskind-64px.webp",
"128":
"https://data.web3privacy.info/img/people/thumbs/guy-zyskind-128px.webp",
"400":
"https://data.web3privacy.info/img/people/thumbs/guy-zyskind-400px.webp",
},
},
{
id: "guy-zyskind",
name: "Guy Zyskind",
caption:
"Founder of [Secret Network](https://scrt.network/), CEO [SCRT Labs](https://www.scrtlabs.com/)",
country: "is",
refs: {
twitter: "GuyZys",
},
imageUrl: "https://data.web3privacy.info/img/people/guy-zyskind.jpg",
thumbs: {
"64": "https://data.web3privacy.info/img/people/thumbs/guy-zyskind-64px.webp",
"128":
"https://data.web3privacy.info/img/people/thumbs/guy-zyskind-128px.webp",
"400":
"https://data.web3privacy.info/img/people/thumbs/guy-zyskind-400px.webp",
},
},
{
id: "guy-zyskind",
name: "Guy Zyskind",
caption:
"Founder of [Secret Network](https://scrt.network/), CEO [SCRT Labs](https://www.scrtlabs.com/)",
country: "is",
refs: {
twitter: "GuyZys",
},
imageUrl: "https://data.web3privacy.info/img/people/guy-zyskind.jpg",
thumbs: {
"64": "https://data.web3privacy.info/img/people/thumbs/guy-zyskind-64px.webp",
"128":
"https://data.web3privacy.info/img/people/thumbs/guy-zyskind-128px.webp",
"400":
"https://data.web3privacy.info/img/people/thumbs/guy-zyskind-400px.webp",
},
},
{
id: "guy-zyskind",
name: "Guy Zyskind",
caption:
"Founder of [Secret Network](https://scrt.network/), CEO [SCRT Labs](https://www.scrtlabs.com/)",
country: "is",
refs: {
twitter: "GuyZys",
},
imageUrl: "https://data.web3privacy.info/img/people/guy-zyskind.jpg",
thumbs: {
"64": "https://data.web3privacy.info/img/people/thumbs/guy-zyskind-64px.webp",
"128":
"https://data.web3privacy.info/img/people/thumbs/guy-zyskind-128px.webp",
"400":
"https://data.web3privacy.info/img/people/thumbs/guy-zyskind-400px.webp",
},
},
];
// NOTE: Uncomment this if you want to filter people dynamically based upon a specific parameter
// const filteredPeople = people
// .filter((p) => !team.includes(p.id))
// .filter((p) => p.imageUrl);
// Limit the number of members to 12 (2 rows with a max of 6 columns each)
const limitedPeople = filteredPeople.slice(0, 12);
function personLink(person) {
return person.refs?.twitter
? `https://twitter.com/${person.refs.twitter}`
: person.refs?.bsky
? `https://bsky.app/profile/${person.refs.bsky}`
: "#";
}
function truncateCaption(caption) {
if (!caption) return "";
const words = caption.split(" ");
if (words.length > 10) {
return words.slice(0, 20).join(" ") + "...";
}
return caption;
}
---
<div
class="grid place-items-center grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 gap-2"
>
{
limitedPeople.map((person) => (
<div class=" max-w-xs w-full h-[340px] bg-transparent overflow-hidden p-1 space-y-1 mb-2">
<a href={personLink(person)}>
<img
src={person.imageUrl}
alt={person.name}
class="w-full h-48 object-cover filter grayscale"
/>
</a>
<div class=" flex items-center justify-center flex-col pt-8">
<h3 class="text-lg font-bold">{person.name}</h3>
{person.refs && person.refs.twitter && (
<p class="text-sm text-gray-500">@{person.refs.twitter}</p>
)}
{/* <p class="text-sm">{truncateCaption(person.caption)}</p> */}
</div>
</div>
))
}
</div>

View file

@ -1,123 +0,0 @@
<div class="flex flex-col md:flex-row gap-8">
<div class="flex flex-col h-full">
<div class="bg-white px-[16px] text-black">
<h3 style="color:black !important" class="pb-[3px]">SPONSORSHIP</h3>
</div>
<div class="border-4 h-full border-white w-full">
<div
class="w-full h-full md:border-x-4 md:border-b-4 border-l-0 md:border-b-0 border-b-4 border-white"
>
<div class="flex flex-col h-full justify-between p-4 z-[10] relative">
<div class="flex flex-col">
<p>
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.
</p>
<span class="leading-[1.4rem]">
Become an integral part of our community! Join us with building
privacy platform we all need.
</span>
</div>
<div class="flex flex-col md:px-[24px] z-[10]">
<span class="text-white font-bold text-[18px]"> 2024 </span>
<ul class="ml-[18px] text-white">
<li>
Privacy<li>
<li>Scaling</li>
<li>Exploration</li>
<li>Ethereum</li>
<li>Foundation</li>
<li>Railgun</li>
<li>Payy</li>
</li>
</li>
</ul>
</div>
<div class="flex flex-col md:px-[24px] z-[10]">
<span class="text-white font-bold text-[18px] leading-[1.4rem]">
2023
</span>
<p class="text-white font-bold leading-widest">
<a href="#" class="hover:underline"><span>Zcash</span></a> /
<a href="#" class="hover:underline"><span>Firo</span></a> /
<a href="#" class="hover:underline"><span>Firn</span></a> /
<a href="#" class="hover:underline"
><span>Privacy Scaling Exploration</span></a
> /
<a href="#" class="hover:underline"><span>Railgun</span></a> /
<a href="#" class="hover:underline"><span>ENS</span></a> /
<a href="#" class="hover:underline"
><span>Navio (ex Navcoin)</span></a
> /
<a href="#" class="hover:underline"><span>Panther</span></a> /
<a href="#" class="hover:underline"
><span>AragonTKResearch</span></a
> /
<a href="#" class="hover:underline"><span>Secret Network</span></a
> /
<a href="#" class="hover:underline"><span>Waku</span></a>
</p>
</div>
<a class="button inverted"><button>BECOME A SPONSOR</button></a>
</div>
</div>
</div>
</div>
<div class="flex flex-col justify-between gap-8">
<div class="">
<div class="bg-white w-full px-[16px] text-black">
<h3 style="color:black !important" class="pb-[3px]">DONATE</h3>
</div>
<div class="border-4 border-white w-full">
<div
class="w-full md:border-x-4 md:border-b-4 border-l-0 md:border-b-0 border-b-4 border-white p-4"
>
<div
class="flex flex-col h-full justify-between gap-10 z-[10]"
>
<div class="flex flex-col my-4">
<p>
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.
</p>
<p class="text-white mt-4">
<strong
>Support our independence, help us to advocate for freedom</strong
>
</p>
</div>
<a class="button inverted"><button>DONATE</button></a>
</div>
</div>
</div>
</div>
<div class="">
<div class="bg-white w-full px-[16px] text-black">
<h3 style="color:black !important" class="pb-[3px]">
SPEAK at our events
</h3>
</div>
<div class="border-4 border-white w-full">
<div
class="w-full md:border-x-4 md:border-b-4 border-l-0 md:border-b-0 border-b-4 border-white p-4"
>
<div class="flex flex-col justify-between gap-10 z-[10] ">
<div class="flex flex-col my-4">
<p>
At Web3Privacy Now, we are dedicated to fostering growth,
innovation, and collaboration. We offer a supportive environment
where like-minded individuals come together to share knowledge,
spark creativity, and drive positive change.
</p>
</div>
</div>
<a class="button inverted"><button>SPEAK AT OUR EVENTS</button></a>
</div>
</div>
</div>
</div>
</div>

View file

@ -1,152 +0,0 @@
---
import core from "../core.json";
---
<div class="flex flex-col md:flex-row gap-8">
<div>
<div class="bg-white w-full px-[16px] text-black">
<h3 style="color:black !important" class="pb-[3px]">INDIVIDUAL</h3>
</div>
<div class="border-4 h-full border-white w-full">
<div
class="w-full h-full md:border-x-4 md:border-b-4 border-l-0 md:border-b-0 border-b-4 border-white"
>
<div class="flex flex-col h-full justify-between px-4 z-[10] relative">
<div class="flex flex-col my-4">
<p>
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.
</p>
<span class="leading-[1.4rem]">
Become an integral part of our community! Join us with building
privacy platform we all need.
</span>
</div>
<div class="flex flex-col gap-[16px] md:p-[24px] z-[10]">
<span class="text-white font-bold text-[18px] leading-[1.4rem]">
Benefits
</span>
<ul class="list-disc ml-[18px] text-white">
<li>You are supporting a good thing!</li>
<li>Guaranteed access to all our events</li>
<li>Swag Privacy Pack</li>
<li>Deals from our partners</li>
<li>Voting rights in our association</li>
</ul>
</div>
<div
class="flex w-full md:justify-between md:flex-row flex-col gap-[8px] md:items-end"
>
<div class="flex flex-col justify-end h-full gap-4 mb-4 md:mb-8">
<span>Price</span>
<span class="text-white font-bold text-[24px] leading-[1.4rem]">
€100 / Year
</span>
<a class="button inverted" href={core.links.individual}
><button>BECOME A MEMBER</button></a
>
<p class="max-w-72 text-sm">
After making your donation, kindly send us the tx hash, your
T-shirt size, and let us know if you would like your membership
to be public or kept private.
</p>
</div>
<img
src="/about/image1.png"
alt=""
class="hidden md:block right-0 bottom-0 md:w-[280px] md:h-auto"
/>
</div>
</div>
</div>
</div>
</div>
<div>
<div class="bg-white w-full px-[16px] text-black">
<h3 style="color:black !important" class="pb-[3px]">INDIVIDUAL</h3>
</div>
<div class="border-4 h-full border-white w-full">
<div
class="w-full h-full md:border-x-4 md:border-b-4 border-l-0 md:border-b-0 border-b-4 border-white"
>
<div class="flex flex-col h-full justify-between px-4 z-[10] relative">
<div class="flex flex-col my-4">
<p>
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.
</p>
</div>
<div class="flex flex-col gap-[16px] md:p-[24px] z-[10]">
<span class="text-white font-bold text-[18px] leading-[1.4rem]">
Benefits
</span>
<ul class="list-disc ml-4 text-white">
<li>
<span class="font-bold leading-wide"> Greater Exposure </span>
<p>
Ensure visibility at all our events [Congresses, Summits &
Hackathons]
</p>
</li>
<li>
<span class="font-bold leading-wide"> Access to Talent </span>
<p>Grow impact through strategic, targeted communications.</p>
</li>
<li>
<span class="font-bold leading-wide"> Tought Leadership </span>
<p>Participate in speaking engagements and mentorship roles.</p>
</li>
<li>
<span class="font-bold leading-wide">
Deals from our partners
</span>
<p>More details about the deals from our partners.</p>
</li>
<li>
<span class="font-bold leading-wide"> Focused Engagement </span>
<p>
Reach and interact with specific, highly-relevant audiences.
</p>
</li>
</ul>
</div>
<div
class="flex w-full md:justify-between md:flex-row flex-col gap-[8px] md:items-end"
>
<div
class="flex w-full md:justify-between md:flex-row flex-col gap-[8px] md:items-end"
>
<div class="flex flex-col justify-end h-full gap-4 mb-4 md:mb-8">
<span>Our membership has multiple tiers ranging from</span>
<span class="text-white font-bold text-[24px] leading-[1.4rem]">
7,000 to 70,000 € / year
</span>
<a class="button inverted" href={core.links.individual}
><button>BECOME A MEMBER</button></a
>
<p class="max-w-72 text-sm">
After making your donation, kindly send us the tx hash, your
T-shirt size, and let us know if you would like your
membership to be public or kept private.
</p>
</div>
<img
src="/about/image2.png"
alt=""
class="hidden md:block right-0 bottom-0 md:w-[450px] md:h-auto"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View file

@ -1,176 +0,0 @@
---
const testimonials = [
{
author: "Matteo",
text: `balance between Transparency and Privacy, accountable and unaccountable, manifest and secret, convex and concave, 1 and 0 is one of the most fun puzzles.`,
imageUrl: "/review.png",
},
{
author: "Jane",
text: `This platform has opened my eyes to the potential of blockchain technology in a way that I never imagined. The community is vibrant and full of innovation.`,
imageUrl: "/review.png",
},
{
author: "Alex",
text: `It's amazing to see how much transparency can coexist with privacy, and this is the best representation of how it can work. Great work!`,
imageUrl: "/review.png",
},
];
let currentTestimonial = 0;
---
<div class="w-full mx-auto px-8 border-2 border-[#202020]">
<div class="relative testimonial-fade active" id="testimonial-container">
<div class="flex items-center justify-center overflow-hidden">
<div>
<img
src={testimonials[currentTestimonial].imageUrl}
class="grayscale"
alt="Review Image"
id="testimonial-image"
/>
</div>
<div class="relative lg:w-9/12">
<div class="relative py-12 px-8 text-gray-700 leading-relaxed">
<h2 class="font-bold" id="testimonial-author">
{testimonials[currentTestimonial].author}:
</h2>
<p class="leading-tight" id="testimonial-text">
"{testimonials[currentTestimonial].text}"
</p>
</div>
</div>
</div>
<!-- Navigation Buttons -->
<div class="absolute inset-y-0 left-0 lg:flex lg:items-center">
<button
class="mt-24 lg:mt-0 -ml-6 h-12 w-12 rounded-full p-3 shadow-lg"
id="prev-button"
>
<svg
class="h-full w-full text-white"
fill="currentColor"
viewBox="0 0 24 24"
>
<path
d="M5.41 11H21a1 1 0 0 1 0 2H5.41l5.3 5.3a1 1 0 0 1-1.42 1.4l-7-7a1 1 0 0 1 0-1.4l7-7a1 1 0 0 1 1.42 1.4L5.4 11z"
></path>
</svg>
</button>
</div>
<div class="absolute inset-y-0 right-0 lg:flex lg:items-center">
<button
class="mt-24 lg:mt-0 -mr-6 h-12 w-12 rounded-full p-3 shadow-lg"
id="next-button"
>
<svg
class="h-full w-full text-white"
fill="currentColor"
viewBox="0 0 24 24"
>
<path
d="M18.59 13H3a1 1 0 0 1 0-2h15.59l-5.3-5.3a1 1 0 1 1 1.42-1.4l7 7a1 1 0 0 1 0 1.4l-7 7a1 1 0 0 1-1.42-1.4l5.3-5.3z"
></path>
</svg>
</button>
</div>
<div
class="absolute bottom-4 left-1/2 transform -translate-x-1/2 flex space-x-2"
>
{
testimonials.map((_, index) => (
<button
class={`h-3 w-3 rounded-full ${index === currentTestimonial ? "bg-white" : "bg-transparent border"}`}
id={`dot-${index}`}
/>
))
}
</div>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
const testimonials = [
{
author: "Matteo",
text: `balance between Transparency and Privacy, accountable and unaccountable, manifest and secret, convex and concave, 1 and 0 is one of the most fun puzzles.`,
imageUrl: "/review.png",
},
{
author: "Jane",
text: `This platform has opened my eyes to the potential of blockchain technology in a way that I never imagined. The community is vibrant and full of innovation.`,
imageUrl: "/review.png",
},
{
author: "Alex",
text: `It's amazing to see how much transparency can coexist with privacy, and this is the best representation of how it can work. Great work!`,
imageUrl: "/review.png",
},
];
let currentTestimonial = 0;
const container = document.getElementById("testimonial-container");
const authorElement = document.getElementById("testimonial-author");
const textElement = document.getElementById("testimonial-text");
const imageElement = document.getElementById("testimonial-image");
const dots = testimonials.map((_, index) =>
document.getElementById(`dot-${index}`)
);
function showTestimonial(index) {
currentTestimonial = index;
const testimonial = testimonials[currentTestimonial];
// Add fade-out class before changing the content
container.classList.remove("active");
setTimeout(() => {
// Update content after fade-out
authorElement.innerText = testimonial.author;
textElement.innerText = `"${testimonial.text}"`;
imageElement.src = testimonial.imageUrl;
// Add fade-in class
container.classList.add("active");
}, 500); // Match with the CSS transition duration
// Update dots
dots.forEach((dot, i) => {
if (i === currentTestimonial) {
dot.classList.add("bg-white");
dot.classList.remove("bg-transparent", "border");
} else {
dot.classList.remove("bg-white");
dot.classList.add("bg-transparent", "border");
}
});
}
document.getElementById("prev-button").addEventListener("click", () => {
showTestimonial(
(currentTestimonial - 1 + testimonials.length) % testimonials.length
);
});
document.getElementById("next-button").addEventListener("click", () => {
showTestimonial((currentTestimonial + 1) % testimonials.length);
});
dots.forEach((dot, index) => {
dot.addEventListener("click", () => {
showTestimonial(index);
});
});
// Automatically change testimonial every 6 seconds
setInterval(() => {
showTestimonial((currentTestimonial + 1) % testimonials.length);
}, 6000);
});
</script>

View file

@ -1,49 +0,0 @@
---
const { people, team } = Astro.props;
// Filter the people and limit the results to 12
const filteredPeople = people
.filter((p) => !team.includes(p.id))
.filter((p) => p.imageUrl)
.slice(0, 12); // Limit to the first 12 people
function personLink(person) {
return person.refs?.twitter
? `https://twitter.com/${person.refs.twitter}`
: person.refs?.bsky
? `https://bsky.app/profile/${person.refs.bsky}`
: "#";
}
function truncateCaption(caption) {
if (!caption) return "";
const words = caption.split(" ");
if (words.length > 10) {
return words.slice(0, 20).join(" ") + "...";
}
return caption;
}
---
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 gap-4">
{filteredPeople.map((person) => (
<div
class="max-w-xs w-full h-[340px] bg-transparent overflow-hidden p-1 space-y-1 mb-2"
>
<a href={personLink(person)}>
<img
src={person.imageUrl}
alt={person.name}
class="w-full h-48 object-cover"
/>
</a>
<div class="mt-4">
<h3 class="text-lg font-bold">{person.name}</h3>
{person.refs && person.refs.twitter && (
<p class="text-sm text-gray-500">@{person.refs.twitter}</p>
)}
<p class="text-sm">{truncateCaption(person.caption)}</p>
</div>
</div>
))}
</div>

View file

@ -22,7 +22,7 @@ header:
link: news
- name: Docs
link: docs
- name: Get Involved
- name: Membership
link: membership
url: /membership
#- name: Manifesto

View file

@ -155,9 +155,7 @@ function genHeading(str) {
<div class="text-left mt-10">{config.hero.text}</div>
<div class="mt-6">
<a class="button" href="/about">
<button>
<strong>About US</strong>
</button>
<button>About Web3Privacy Now</button>
</a>
</div>
</div>
@ -169,6 +167,7 @@ function genHeading(str) {
<>
<div class="middle-pane-medium mt-8 sm:mt-14 mb-2 sm:mb-8">
<div class="leading-none flex justify-center text-[4px] sm:text-[8px] text-white">
{/*<img src="/page-events.png" class="h-8 sm:h-14" title="Events" />*/}
<pre>
<code class="font-mono layout-heading ">
{genHeading(title)}
@ -177,7 +176,7 @@ function genHeading(str) {
</div>
</div>
<div class="flex items-center justify-center w-full text-center">
<h3 class=" w-full max-w-[938px] glitch-text">{subtext}</h3>
<h3 class=" w-full max-w-[938px]">{subtext}</h3>
</div>
</>
)
@ -189,79 +188,40 @@ function genHeading(str) {
<div
class="border border-t-2 border-b-0 border-l-0 border-r-0 border-[#0f0f0f] mt-20 pt-10 pb-10"
>
<div
class="flex mx-6 gap-10 text-lg items-center flex-wrap align-top"
id="footerMenu"
>
<a href="/" class="w3pn-logo w-52"></a>
<div class="text-md">
<a
href="https://github.com/web3privacy/web"
class="text-white hover:underline">v{pkg.version}</a
>
</div>
</div>
<div class="flex justify-between">
<div class="mx-6 py-10 text-center md:text-left">
<div class="grid-1 grid gap-8 md:grid-cols-2 lg:grid-cols-3">
<div class="">
<p class="mb-4">
<a href="#!">Manifesto</a>
</p>
<p class="mb-4">
<a href="#!">How to get involved?</a>
</p>
<p class="mb-4">
<a href="#!">Grants / Support Us</a>
</p>
</div>
<div>
<p class="mb-4">
<a href="#!">Events</a>
</p>
<p class="mb-4">
<a href="#!">Articles</a>
</p>
<p class="mb-4">
<a href="#!">Talks</a>
</p>
</div>
<div>
<p class="mb-4">
<a href="/#">Privacy Explorer</a>
</p>
<p class="mb-4">
<a href="/#">Privacy use-cases database</a>
</p>
</div>
</div>
</div>
<div class="py-10 md:text-left">
<div class="grid-1 grid gap-4 md:grid-cols-2 lg:grid-cols-5">
{
config.footer.menu.map((item) => (
<div>
<p class="mb-4">
<a href={item.url || core.links[item.link]}>{item.title}</a>
</p>
</div>
))
}
</div>
</div>
</div>
<!--Copyright section-->
<div class="bg-black/5 p-6 text-start">
<a class="font-semibold" href="https://tw-elements.com/"
>All rights not reserved, Creative commons 2024 - Web3Privacy z.s.</a
<div class="middle-pane-big">
<div
class="flex gap-10 text-lg items-center flex-wrap align-top"
id="footerMenu"
>
<a href="/" class="w3pn-logo w-32"></a>
<div class="text-md">
<a
href="https://github.com/web3privacy/web"
class="text-white hover:underline">v{pkg.version}</a
>
</div>
<div class="grow flex sm:justify-end">
<div class="sm:flex justify-center flex-wrap gap-4 lg:gap-10">
{
config.footer.menu.map((item) => (
<div class="flex gap-4 items-center menuItem lg:mb-0 mb-2">
<div
class="icon small opacity-50"
class:list={[item.ico]}
/>
<div class="text-white hover:underline">
<a href={item.url || core.links[item.link]}>
{item.title}
</a>
</div>
</div>
))
}
</div>
</div>
</div>
</div>
</div>
<!-- Load TextScramble.js -->
<script src="/scripts/text-scramble.js" type="module"></script>
<script>
document.querySelector(".hamburger").addEventListener("click", () => {
document.querySelector(".nav-links").classList.toggle("expanded");

View file

@ -4,55 +4,14 @@ import * as config from "../config.yaml";
import core from "../core.json";
import AboutFooter from "../components/AboutFooter.astro";
import AboutItemGrid from "../components/AboutItemGrid.astro";
import EventMasonry from "../components/EventMasonry.astro";
import EventItem from "../components/EventItem.astro";
import { isFutureDate } from "../lib/date";
const events = core.events;
const upcomingEvents = [];
let eventsPast = 0;
let eventsUpcoming = 0;
const sectionsConfig = [
{ name: "testimonials", visible: true, order: 1 },
{ name: "core contributors", visible: true, order: 2 },
{ name: "contributors", visible: true, order: 3 },
{ name: "membersGrid", visible: true, order: 4 },
{ name: "socialLinks", visible: true, order: 5 },
// { name: "community", visible: false, order: 6 },
];
for (const ev of events) {
let future = isFutureDate(ev.date);
if (future) {
upcomingEvents.push(ev);
eventsUpcoming++;
} else {
eventsPast++;
}
}
const featuredEvents = [];
for (const e of upcomingEvents) {
if (featuredEvents.length > 2) {
break;
}
if (
["summit", "meetup", "online-summit"].includes(e.type) &&
e.links?.rsvp &&
!featuredEvents.find((ex) => ex.type === e.type)
) {
featuredEvents.push(e);
}
}
import AboutWidget from "../components/AboutWidget.astro";
---
<BaseLayout
title="About web3privacy"
image="og_about"
subimage="/about/about.png"
subtext="We are a think-and-do tank of hundreds of people, projects, and organizations committed to protecting and advancing civil liberties, decentralization, and open-source software."
subtext="we are a privacy focused ecosystem of hacktivists, researchers, lawyers, event organisers... pushing web3privacy forward"
>
<div class="middle-pane-medium mt-10">
<!-- <div class="mb-20">
@ -63,25 +22,25 @@ for (const e of upcomingEvents) {
<div class="grid grid-cols-1 xl:grid-cols-2 gap-16 mb-[82px]">
<div class="flex flex-col gap-[36px] md:order-2">
<div class="md:hidden block mb-[12px] ">
<h1>activism. care. solidarity.</h1>
<div class="md:hidden block mb-[12px]">
<h1>Our mission</h1>
<div set:html={config.landing.mission} />
<div class="mt-8 flex gap-6 items-center w-full">
<a class="button inverted" href={core.links.manifesto}
><button>Read manifesto</button></a
>
<a class="button font-bold" href={core.links.telegram}
<a class="button" href={core.links.telegram}
><button>Join us</button></a
>
</div>
</div>
<h1 class="glitch-text">how we support privacy in web3</h1>
<h1>how we support privacy in web3</h1>
<AboutItemGrid />
</div>
<div class="md:order-1 order-2">
<div class="md:block hidden">
<h1 class="glitch-text">activism. care. solidarity.</h1>
<h1>Our mission</h1>
<div set:html={config.landing.mission} />
<div class="mt-8 flex gap-6 items-center w-full">
<a class="button inverted" href={core.links.manifesto}
@ -92,40 +51,7 @@ for (const e of upcomingEvents) {
>
</div>
</div>
<hr class="mt-10 border-[#e0e0e0]" />
<div class="md:block hidden mt-[26px]">
<h1 class="glitch-text">Our mission</h1>
<div set:html={config.landing.mission} />
</div>
<hr class="mt-10 border-[#e0e0e0]" />
<div class="mt-[26px]">
<h1 class="glitch-text">why privacy</h1>
<p class="mt-0 w-full">
In any society, privacy is essential for protecting civil liberties
and human rights.
<br />
<br />
Privacy enables individuals to participate in political processes without
fear of retribution or surveillance, ensuring that they can freely express
their views, associate with others, and engage in activism. <br />
<br />
Robust privacy practices assist in balancing power between individuals
and the state or corporations. Without them, unchecked surveillance and
control leads to a loss of personal freedoms and the rise of authoritarianism.
<br />
<br /> When we talk about privacy, we are discussing more than just data
protection. We are addressing the fate of our societies, their present,
and their future.
</p>
<div class="mt-8 flex gap-6 items-center w-full">
<a class="button inverted" href={core.links.manifesto}
><button>Read More</button></a
>
</div>
</div>
<!-- <div class="md:mt-[56px] mt-[26px]">
<div class="md:mt-[56px] mt-[26px]">
<h1>our events</h1>
<div set:html={config.landing.event} />
<div class="mt-8 flex flex-col gap-6 items-start w-full">
@ -139,8 +65,8 @@ for (const e of upcomingEvents) {
><button>EVENTS</button></a
>
</div>
</div> -->
<!-- <div class="md:mt-[56px] mt-[26px]">
</div>
<div class="md:mt-[56px] mt-[26px]">
<h1>Our Projects & research</h1>
<div set:html={config.landing.research} />
<div class="mt-8 flex gap-6 items-center w-full">
@ -151,7 +77,7 @@ for (const e of upcomingEvents) {
><button>Research</button></a
>
</div>
</div> -->
</div>
<!-- <div>
<h1>Topics</h1>
<div class="columns-2 uppercase text-sm w3pn-topics">
@ -160,25 +86,23 @@ for (const e of upcomingEvents) {
</div> -->
</div>
</div>
</div>
<div class="my-10">
<EventMasonry />
</div>
<div class="middle-pane-medium">
<div class="mb-6">
{featuredEvents.map((event) => <EventItem item={event} />)}
<AboutWidget variant="membership" />
<div
class="flex md:flex-row flex-col items-center gap-[24px] justify-center w-full mt-[24px]"
>
<div class="md:mt-[56px] mt-[26px] max-w-[460px] md:order-1 order-2">
<h1>empowering community with our brand</h1>
<div set:html={config.landing.merch} />
<div class="mt-8 flex gap-6 items-center w-full">
<a class="button inverted" href={core.links.brand}
><button>Brand on Github</button></a
>
</div>
</div>
<div class="md:order-2 order-1">
<img src="/about/stickers.png" alt="" />
</div>
</div>
<div class="mt-6">
<a href="/events" class="button inverted"
><button>Show all events</button></a
>
</div>
</div>
<div class="middle-pane-medium mt-10">
<AboutFooter {sectionsConfig} />
<AboutFooter />
</div>
</BaseLayout>

View file

@ -1,213 +1,159 @@
---
import BaseLayout from "../layouts/base.astro";
import AboutFooter from "../components/AboutFooter.astro";
import core from "../core.json";
import articles from "../articles.json";
import talks from "../talks.json";
import dbRepo from "../db-repo.json";
import { format } from "date-fns";
import EventItem from "../components/EventItem.astro";
import { isFutureDate } from "../lib/date";
import EventMasonry from "../components/EventMasonry.astro";
import BaseLayout from '../layouts/base.astro';
import AboutFooter from '../components/AboutFooter.astro';
import core from '../core.json';
import articles from '../articles.json';
import talks from '../talks.json';
import explorer from '../explorer.json';
import dbRepo from '../db-repo.json';
import { format } from 'date-fns';
import EventItem from '../components/EventItem.astro';
import { isFutureDate } from '../lib/date';
const events = core.events;
const upcomingEvents = [];
let eventsPast = 0;
let eventsUpcoming = 0;
const upcomingEvents = []
let eventsPast = 0
let eventsUpcoming = 0
for (const ev of events) {
let future = isFutureDate(ev.date);
if (future) {
upcomingEvents.push(ev);
eventsUpcoming++;
} else {
eventsPast++;
}
let future = isFutureDate(ev.date)
if (future) {
upcomingEvents.push(ev)
eventsUpcoming++
} else {
eventsPast++
}
}
const featuredEvents = [];
const featuredEvents = []
for (const e of upcomingEvents) {
if (featuredEvents.length > 2) {
break;
}
if (
["summit", "meetup", "online-summit"].includes(e.type) &&
e.links?.rsvp &&
!featuredEvents.find((ex) => ex.type === e.type)
) {
featuredEvents.push(e);
}
if (featuredEvents.length > 2) {
break;
}
if (['summit', 'meetup', 'online-summit'].includes(e.type) &&
e.links?.rsvp && !featuredEvents.find(ex => ex.type === e.type)) {
featuredEvents.push(e)
}
}
---
<BaseLayout
banner="true"
description="Advocates worldwide are uniting to make privacy fundamental pillar of the Web3 industry, transforming it into a cultural movement that champions freedom and decentralization."
>
<div class="middle-pane-big">
<div
class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 w3pn-hp-grid gap-2 mt-2"
>
<div class="bg-events" data-url="/events">
<div class="title">Events</div>
<div class="numbers">
<div>
<div class="big">{eventsUpcoming}</div>
<div>Upcoming events</div>
</div>
<div>
<div class="big">{eventsPast}</div>
<div>Past events</div>
</div>
</div>
</div>
<div
class="bg-projects relative"
data-url="https://github.com/web3privacy/web3privacy/blob/main/README.md#contents"
>
<div class="title">
<div class="flex items-center">
<div class="icon github small mr-1.5 inline-block"></div>
<div class="text-white mt-1 ml-1.5">
<a
href="https://github.com/web3privacy/web3privacy/blob/main/README.md#contents"
>Web3 Privacy Database</a
>
</div>
</div>
</div>
<!-- Place this tag where you want the button to render. -->
<div
class="flex items-center absolute top-4 right-4 text-white opacity-30"
>
<div class="icon star small mr-1.5"></div>
{dbRepo.stars}
</div>
<div class="numbers">
<div>
<div class="big">{dbRepo.count}</div>
<div>Projects</div>
</div>
<div>
<div class="big">{dbRepo.contributors}</div>
<div>Contributors</div>
</div>
</div>
</div>
<div class="bg-talks" data-url="/research">
<div class="title">Research</div>
<div class="numbers">
<div>
<div class="big">{core.research.length} research projects →</div>
</div>
</div>
</div>
</div>
</div>
<BaseLayout banner="true" description="Advocates worldwide are uniting to make privacy fundamental pillar of the Web3 industry, transforming it into a cultural movement that champions freedom and decentralization.">
<div class="middle-pane-medium mt-10">
<!--div class="mt-10">
<div class="middle-pane-big">
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 w3pn-hp-grid gap-2 mt-2">
<div class="bg-events" data-url="/events">
<div class="title">Events</div>
<div class="numbers">
<div>
<div class="big">{eventsUpcoming}</div>
<div>Upcoming events</div>
</div>
<div>
<div class="big">{ eventsPast}</div>
<div>Past events</div>
</div>
</div>
</div>
<div class="bg-projects relative" data-url="https://github.com/web3privacy/web3privacy/blob/main/README.md#contents">
<div class="title">
<div class="flex items-center">
<div class="icon github small mr-1.5 inline-block"></div>
<div class="text-white mt-1 ml-1.5"><a href="https://github.com/web3privacy/web3privacy/blob/main/README.md#contents">Web3 Privacy Database</a></div>
</div>
</div>
<!-- Place this tag where you want the button to render. -->
<div class="flex items-center absolute top-4 right-4 text-white opacity-30"><div class="icon star small mr-1.5"></div> {dbRepo.stars}</div>
<div class="numbers">
<div>
<div class="big">{dbRepo.count}</div>
<div>Projects</div>
</div>
<div>
<div class="big">{dbRepo.contributors}</div>
<div>Contributors</div>
</div>
</div>
</div>
<div class="bg-talks" data-url="/research">
<div class="title">Research</div>
<div class="numbers">
<div>
<div class="big">{core.research.length} research projects →</div>
</div>
</div>
</div>
</div>
</div>
<div class="middle-pane-medium mt-10">
<!--div class="mt-10">
<h1>Our Projects</h1>
</div-->
<div class="mt-16">
<h1>Featured Events</h1>
</div>
<div class="mt-16">
<h1>Featured Upcoming Events</h1>
</div>
<div class="text-left">
Our gatherings aim to build understanding and solidarity among diverse
interest groups, cultures, states, chains, ecosystems, and backgrounds. We
bring together Web3 and non-tech individuals, builders, researchers,
philosophers, lawyers, policymakers, hacktivists, key players, local
communities, and the general public. Formats: Meetups, Summits,
Congresses, Hackathons, Camp fires
</div>
</div>
<div class="mb-6">
{featuredEvents.map((event) => (
<EventItem item={event} />
))}
</div>
<div class="my-10">
<EventMasonry />
</div>
<div class="mt-6">
<a href="/events" class="button inverted"><button>Show all events</button></a>
</div>
<div class="middle-pane-medium">
<div class="mb-6">
{featuredEvents.map((event) => <EventItem item={event} />)}
</div>
<div class="mt-16">
<h1>Latest Articles</h1>
</div>
<div class="mt-6">
<a href="/events" class="button inverted"
><button>Show all events</button></a
>
</div>
<div class="w3pn-articles grid md:grid-cols-2 gap-6">
{articles.slice(0,4).map((entry) => (
<div class="basegrid-entry aspect-video" style={{backgroundImage: `url("${entry.img}")`, backgroundSize: '100% 100%;'}}>
<div class="title">
<a href={entry.url}>{entry.title}</a>
<span class="date">{format(new Date(entry.date), 'MMMM do, yyyy')}</span>
</div>
</div>
))}
</div>
<div class="mt-16">
<h1>Latest Articles</h1>
</div>
<div class="mt-8">
<a href={core.links.mirror} class="button inverted"><button>More articles on Mirror</button></a>
</div>
<div class="w3pn-articles grid md:grid-cols-2 gap-6">
{
articles.slice(0, 4).map((entry) => (
<div
class="basegrid-entry aspect-video"
style={{
backgroundImage: `url("${entry.img}")`,
backgroundSize: "100% 100%;",
}}
>
<div class="title">
<a href={entry.url}>{entry.title}</a>
<span class="date">
{format(new Date(entry.date), "MMMM do, yyyy")}
</span>
</div>
</div>
))
}
</div>
<div class="mt-16">
<h1>Latest Talks</h1>
</div>
<div class="mt-8">
<a href={core.links.mirror} class="button inverted"
><button>More articles on Mirror</button></a
>
</div>
<div class="grid md:grid-cols-2 gap-6">
{talks.slice(0,4).map((entry) => (
<div class="basegrid-entry aspect-video" style={{backgroundImage: `url("${entry.img}")`, backgroundSize: 'cover', backgroundPosition: 'center'}}>
<a href={entry.url} class="w-full h-full" title={entry.title}></a>
</div>
))}
</div>
<div class="mt-16">
<h1>Latest Talks</h1>
</div>
<div class="mt-8">
<a href={core.links.youtube} class="button inverted"><button>More talks on YouTube</button></a>
</div>
<div class="grid md:grid-cols-2 gap-6">
{
talks.slice(0, 4).map((entry) => (
<div
class="basegrid-entry aspect-video"
style={{
backgroundImage: `url("${entry.img}")`,
backgroundSize: "cover",
backgroundPosition: "center",
}}
>
<a href={entry.url} class="w-full h-full" title={entry.title} />
</div>
))
}
</div>
<div class="mt-8">
<a href={core.links.youtube} class="button inverted"
><button>More talks on YouTube</button></a
>
</div>
</div>
<AboutFooter />
<script is:inline>
document.querySelectorAll(".w3pn-hp-grid > div").forEach((el) => {
el.addEventListener("click", () => {
window.location = el.getAttribute("data-url");
});
});
document.querySelectorAll(".w3pn-articles > div").forEach((el) => {
el.addEventListener("click", () => {
window.location = el.querySelector("a").getAttribute("href");
});
});
</script>
<AboutFooter />
</div>
<script is:inline>
document.querySelectorAll('.w3pn-hp-grid > div').forEach(el => {
el.addEventListener('click', () => {
window.location = el.getAttribute('data-url');
});
});
document.querySelectorAll('.w3pn-articles > div').forEach(el => {
el.addEventListener('click', () => {
window.location = el.querySelector('a').getAttribute('href');
});
});
</script>
</BaseLayout>

View file

@ -1,24 +1,13 @@
---
import BaseLayout from "../../layouts/base.astro";
import * as config from "../config.yaml";
import core from "../../core.json";
import AboutFooter from "../../components/AboutFooter.astro";
import MembershipWidget from "../../components/MembershipWidget.astro";
import contributors from "../../contributors.json";
import MembershipOtherOptionsWidget from "../../components/MembershipOtherOptionsWidget.astro";
import MembersGrid from "../../components/MembersGrid.astro";
const sectionsConfig = [
// { name: "membersGrid", visible: true, order: 1 },
// { name: "socialLinks", visible: true, order: 2 },
// { name: "testimonials", visible: true, order: 1 },
// { name: "speakers", visible: true, order: 2 },
// { name: "contributors", visible: true, order: 3 },
// { name: "community", visible: false, order: 6 },
];
import AboutWidget from "../../components/AboutWidget.astro";
---
<BaseLayout
title="GET INVOLVED"
title="MEMBERSHIP"
image="og_membership"
subimage="/membership/membership.png"
>
@ -32,115 +21,10 @@ const sectionsConfig = [
part of our ecosystem.
</h3>
</div>
</div>
<div class="middle-pane-medium my-10">
<div class="border-4 border-white">
<div class="bg-white w-full px-[16px] text-black">
<h3 style="color:black !important " class="pb-[3px] pl-4 font-[21px]">
Github Contributors
</h3>
</div>
<div class="w-full text-center my-10 text-lg">
<p>
This is the kind of support we value most: open-source, grassroots
initiatives driven by individual passion and the desire to create
something meaningful.
</p>
</div>
<div class="flex gap-3 flex-wrap mb-4 justify-center items-center mx-4">
{
contributors.items.map((contrib) => (
<div>
<a href={contrib.html_url} target="_blank" title={contrib.login}>
<img
src={contrib.avatar_url}
class="w-14 rounded-full aspect-square"
/>
</a>
</div>
))
}
</div>
<div class="flex gap-4 p-4 lg:gap-6 pt-4 flex-wrap">
<a href={core.links.telegram} class="button inverted">
<button>Become a Contributor</button>
</a>
</div>
<div>
<AboutWidget variant="membership" />
</div>
<div class="my-10">
<h1 class="font-[32px]">membership</h1>
<MembershipWidget />
</div>
</div>
<div class="middle-pane-medium mt-20">
<h1 class="font-[32px]">other ways</h1>
<MembershipOtherOptionsWidget />
<AboutFooter />
</div>
<div class="mt-16">
<h1 class="my-6 middle-pane-medium">Members</h1>
<MembersGrid people={core.people} team={core.teams["core-team"]} />
</div>
<div class="middle-pane-medium my-10">
<h1>Join the community</h1>
<p>
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.
</p>
<div
class="grid place-items-center grid-cols-1 md:grid-cols-3 lg:grid-cols-4 gap-2 pt-4 w-full"
>
<a
href={core.links.twitter}
class="bg-[#101010] w-full flex items-center justify-center w-full h-40 overflow-hidden"
>
<button class="flex flex-col items-center justify-center">
<div class="icon twitter"></div>
@web3privacy
</button>
</a>
<a
href={core.links.telegram}
class="bg-[#101010] w-full flex items-center justify-center w-full h-40 overflow-hidden"
>
<button class="flex flex-col items-center justify-center">
<div class="icon telegram"></div>
Telegram
</button>
</a>
<a
href={core.links.signal}
class="bg-[#101010] w-full flex items-center justify-center w-full h-40 overflow-hidden"
>
<button class="flex flex-col items-center justify-center">
<div class="icon"><img src="/icons/signal.svg" alt=""></div>
Signal
</button>
</a>
<a
href={core.links.matrix}
class="bg-[#101010] w-full flex items-center justify-center w-full h-40 overflow-hidden"
>
<button class="flex flex-col items-center justify-center">
<div class="icon matrix"></div>
matrix
</button>
</a>
</div>
</div>
<div class="mt-16">
<h1 class="my-6 middle-pane-medium">Community Partners</h1>
<MembersGrid people={core.people} team={core.teams["core-team"]} />
</div>
<AboutFooter {sectionsConfig} />
</BaseLayout>

View file

@ -28,28 +28,13 @@
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* Add animation */
.testimonial-fade {
opacity: 0;
transition: opacity 0.2s ease-in-out;
}
.testimonial-fade.active {
opacity: 1;
}
.glitch-text {
font-family: Major Mono Display, ui-monospace, SFMono-Regular, Menlo, Monaco,
Consolas, "Liberation Mono", "Courier New", monospace;
}
@tailwind components;
@layer components {
body, p, div {
@apply text-[#C0C0C0] leading-8;
@apply text-[#909090] leading-8;
}
h1, h2, h3, h4 {
@ -73,7 +58,7 @@
}
#intro {
background-image: url(/hp-bg-redesign.webp);
background-image: url(/hp-bg.webp);
background-repeat: repeat;
background-color: #0f0f0f;
background-position: center;