This commit is contained in:
tree🌴 2023-12-20 23:14:44 +01:00
parent ceee85926a
commit c2fe9c03b6
24 changed files with 584 additions and 106 deletions

1
.gitignore vendored
View file

@ -21,3 +21,4 @@ pnpm-debug.log*
.DS_Store .DS_Store
.sl .sl
.watchman-*

View file

@ -11,7 +11,7 @@ export default defineConfig({
plugins: [yaml()], plugins: [yaml()],
server: { server: {
watch: { watch: {
ignored: ["**/.sl/**/*"], ignored: ["**/.sl/**/*", "**/.watchman-**"],
}, },
}, },
}, },

View file

@ -9,7 +9,9 @@
"preview": "astro preview", "preview": "astro preview",
"astro": "astro", "astro": "astro",
"contribs": "deno run --allow-all utils/contributors.js", "contribs": "deno run --allow-all utils/contributors.js",
"events": "deno run --allow-all utils/events.js" "events": "deno run --allow-all utils/events.js",
"articles": "deno run --allow-all utils/articles.js",
"talks": "deno run --allow-all utils/talks.js"
}, },
"dependencies": { "dependencies": {
"@astrojs/tailwind": "^5.0.2", "@astrojs/tailwind": "^5.0.2",

9
public/hp-box-events.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 237 KiB

BIN
public/hp-box-projects.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
public/hp-box-talks.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

16
public/hp-box-talks.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 54 MiB

62
src/articles.json Normal file
View file

@ -0,0 +1,62 @@
[
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/u-K59tVbfnFB9M-TTSpTIf7ef3zlsg9FXklDCRwAr70",
"title": "Annual Privacy Tech Poll - #2023privacyproof",
"img": "https://images.mirror-media.xyz/publication-images/28nKxSNpaag1kGfnxc89e.png?height=651&width=1302",
"date": "2023-12-17T14:12:03.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/QWXwYD2KYO6V9RDRikDGdUZe9gN9dz5jfVfrFAKxb5k",
"title": "Delivery Update Q423",
"img": "https://images.mirror-media.xyz/publication-images/H8sGrHgrTfphLwwx-kUjr.png?height=600&width=1200",
"date": "2023-12-08T12:56:35.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/bzv735Bc1zak7Yi-NcxWavMQKgt2ANXQtpkrSp8Xg3o",
"title": "Web3Privacy Now Summit #2 - \"Community 1st\"",
"img": "https://images.mirror-media.xyz/publication-images/IcVsF8hurrLoEZCK9roR-.jpeg?height=1701&width=3402",
"date": "2023-11-07T23:36:11.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/90XEXa7AG_qc-VgYKs40i88xB1HF97gr1zqb-qvnif0",
"title": "Privacy-services' scoring model for non-techies (playbook)",
"img": "https://images.mirror-media.xyz/publication-images/1BJMCcPMoB5chamycAWA6.png?height=960&width=1920",
"date": "2023-11-02T13:40:27.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/nVGxQjtLSabZe2Bkc7LZd5kGxW-C8-Rm2Se1AONqKZY",
"title": "Building \"l2beat for privacy\" at ETHRome",
"img": "https://images.mirror-media.xyz/publication-images/iTSVSyU5byDbTA3dvKbgw.png?height=602&width=1204",
"date": "2023-10-24T14:11:27.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/f3EXL1pAuI6gusHf_soq9KopU8ABC1EcV002FFlYKoM",
"title": "From scoring model to interfaces: Web3privacy now",
"img": "https://images.mirror-media.xyz/publication-images/hSDlyLZ38gkj4eSW6nEkJ.png?height=1467&width=2934",
"date": "2023-10-17T09:51:21.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/E9QPx9iKgPXPqEsAN-YklipSRJy9VTBMOLwwEcqqVpU",
"title": "Making web3-privacy assessment research: public feedback",
"img": "https://images.mirror-media.xyz/publication-images/FTxi7RtvyzeUzkhgYfbfZ.png?height=1000&width=2000",
"date": "2023-09-27T11:42:26.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/_ykJ2VOcRrH720OZTy0tT1kjrgP5kdc0Vykb0VVle0w",
"title": "Web3privacy now ecosystem launch",
"img": "https://images.mirror-media.xyz/publication-images/WqEaXaWGdBN9ctA7UZPvK.png?height=355&width=709",
"date": "2023-04-25T16:55:24.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/Ck0Sx--9QMQcSOQEHBYj8h2M8KLU-wz9YQvyybdTMN4",
"title": "Zero-knowledge for everyone as ABC!",
"img": "https://images.mirror-media.xyz/publication-images/h42FZLunrtWWsufIdArOi.png?height=481&width=962",
"date": "2023-01-22T18:25:08.000Z"
},
{
"url": "https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/eclqmWzfuJy9IDY17uGasqmgC2IVQwbfi5qMx8KFnZQ",
"title": "Proof-of-ConsenSys: A Next-Generation Smart Contract and Decentralized Application Platform",
"img": "https://images.mirror-media.xyz/publication-images/9A78bwelNtZBuAiUCGYT3.png?height=1728&width=3456",
"date": "2022-12-01T10:09:34.000Z"
}
]

View file

@ -0,0 +1,47 @@
---
import * as config from '../config.yaml';
import contributors from '../contributors.json';
---
<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 || config.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-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 || config.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>
<div class="flex gap-4 flex-wrap my-14 items-center">
{contributors.map((contrib) => (
<div><a href={contrib.html_url} target="_blank" title={contrib.login}><img src={contrib.avatar_url} class="w-16 rounded-full aspect-square"></a></div>
))}
</div>
<div class="flex gap-4 lg:gap-10 pt-4 flex-wrap">
<a href="" class="button inverted"><button>Enter the community</button></a>
<a href="" class="button inverted"><button>Become the contributor</button></a>
<a href="" class="button inverted"><button>Become the partner</button></a>
</div>
</div>

View file

@ -9,12 +9,15 @@ links:
mirror: https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/ mirror: https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/
youtube: https://youtube.com/@Web3PrivacyNow/ youtube: https://youtube.com/@Web3PrivacyNow/
forum: https://forum.web3privacy.info forum: https://forum.web3privacy.info
explorer: https://explorer.web3privacy.info
header: header:
menu: menu:
- name: Home - name: Home
url: / url: /
#- name: Projects - name: About
# url: /projects url: /about
- name: Research
url: /research
- name: Events - name: Events
url: /events url: /events
#- name: Talks #- name: Talks
@ -23,8 +26,8 @@ header:
# url: /articles # url: /articles
#- name: Leaderboard #- name: Leaderboard
# url: /leaderboard # url: /leaderboard
- name: Articles - name: Explorer
link: mirror link: explorer
- name: Docs - name: Docs
link: docs link: docs
#- name: Manifesto #- name: Manifesto

View file

@ -18,7 +18,7 @@
"received_events_url": "https://api.github.com/users/Msiusko/received_events", "received_events_url": "https://api.github.com/users/Msiusko/received_events",
"type": "User", "type": "User",
"site_admin": false, "site_admin": false,
"contributions": 1050 "contributions": 1132
}, },
{ {
"login": "burningtree", "login": "burningtree",
@ -39,7 +39,7 @@
"received_events_url": "https://api.github.com/users/burningtree/received_events", "received_events_url": "https://api.github.com/users/burningtree/received_events",
"type": "User", "type": "User",
"site_admin": false, "site_admin": false,
"contributions": 275 "contributions": 278
}, },
{ {
"login": "cryptomar1o", "login": "cryptomar1o",
@ -81,7 +81,7 @@
"received_events_url": "https://api.github.com/users/EclecticSamurai/received_events", "received_events_url": "https://api.github.com/users/EclecticSamurai/received_events",
"type": "User", "type": "User",
"site_admin": false, "site_admin": false,
"contributions": 152 "contributions": 155
}, },
{ {
"login": "jiricepelka", "login": "jiricepelka",
@ -146,6 +146,27 @@
"site_admin": false, "site_admin": false,
"contributions": 6 "contributions": 6
}, },
{
"login": "Ressac-No1",
"id": 119933943,
"node_id": "U_kgDOByYL9w",
"avatar_url": "https://avatars.githubusercontent.com/u/119933943?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Ressac-No1",
"html_url": "https://github.com/Ressac-No1",
"followers_url": "https://api.github.com/users/Ressac-No1/followers",
"following_url": "https://api.github.com/users/Ressac-No1/following{/other_user}",
"gists_url": "https://api.github.com/users/Ressac-No1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Ressac-No1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Ressac-No1/subscriptions",
"organizations_url": "https://api.github.com/users/Ressac-No1/orgs",
"repos_url": "https://api.github.com/users/Ressac-No1/repos",
"events_url": "https://api.github.com/users/Ressac-No1/events{/privacy}",
"received_events_url": "https://api.github.com/users/Ressac-No1/received_events",
"type": "User",
"site_admin": false,
"contributions": 4
},
{ {
"login": "wslyvh", "login": "wslyvh",
"id": 25974464, "id": 25974464,
@ -314,6 +335,27 @@
"site_admin": false, "site_admin": false,
"contributions": 2 "contributions": 2
}, },
{
"login": "kleinpetr",
"id": 17269309,
"node_id": "MDQ6VXNlcjE3MjY5MzA5",
"avatar_url": "https://avatars.githubusercontent.com/u/17269309?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/kleinpetr",
"html_url": "https://github.com/kleinpetr",
"followers_url": "https://api.github.com/users/kleinpetr/followers",
"following_url": "https://api.github.com/users/kleinpetr/following{/other_user}",
"gists_url": "https://api.github.com/users/kleinpetr/gists{/gist_id}",
"starred_url": "https://api.github.com/users/kleinpetr/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/kleinpetr/subscriptions",
"organizations_url": "https://api.github.com/users/kleinpetr/orgs",
"repos_url": "https://api.github.com/users/kleinpetr/repos",
"events_url": "https://api.github.com/users/kleinpetr/events{/privacy}",
"received_events_url": "https://api.github.com/users/kleinpetr/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{ {
"login": "coinmandeer", "login": "coinmandeer",
"id": 62942796, "id": 62942796,
@ -377,6 +419,27 @@
"site_admin": false, "site_admin": false,
"contributions": 1 "contributions": 1
}, },
{
"login": "ordzllg",
"id": 149235589,
"node_id": "U_kgDOCOUnhQ",
"avatar_url": "https://avatars.githubusercontent.com/u/149235589?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ordzllg",
"html_url": "https://github.com/ordzllg",
"followers_url": "https://api.github.com/users/ordzllg/followers",
"following_url": "https://api.github.com/users/ordzllg/following{/other_user}",
"gists_url": "https://api.github.com/users/ordzllg/gists{/gist_id}",
"starred_url": "https://api.github.com/users/ordzllg/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/ordzllg/subscriptions",
"organizations_url": "https://api.github.com/users/ordzllg/orgs",
"repos_url": "https://api.github.com/users/ordzllg/repos",
"events_url": "https://api.github.com/users/ordzllg/events{/privacy}",
"received_events_url": "https://api.github.com/users/ordzllg/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{ {
"login": "omahs", "login": "omahs",
"id": 73983677, "id": 73983677,
@ -524,6 +587,27 @@
"site_admin": false, "site_admin": false,
"contributions": 1 "contributions": 1
}, },
{
"login": "0xMimir",
"id": 108837858,
"node_id": "U_kgDOBny74g",
"avatar_url": "https://avatars.githubusercontent.com/u/108837858?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/0xMimir",
"html_url": "https://github.com/0xMimir",
"followers_url": "https://api.github.com/users/0xMimir/followers",
"following_url": "https://api.github.com/users/0xMimir/following{/other_user}",
"gists_url": "https://api.github.com/users/0xMimir/gists{/gist_id}",
"starred_url": "https://api.github.com/users/0xMimir/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/0xMimir/subscriptions",
"organizations_url": "https://api.github.com/users/0xMimir/orgs",
"repos_url": "https://api.github.com/users/0xMimir/repos",
"events_url": "https://api.github.com/users/0xMimir/events{/privacy}",
"received_events_url": "https://api.github.com/users/0xMimir/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{ {
"login": "KeeJef", "login": "KeeJef",
"id": 27277414, "id": 27277414,
@ -566,6 +650,27 @@
"site_admin": false, "site_admin": false,
"contributions": 1 "contributions": 1
}, },
{
"login": "fmarkor",
"id": 37598270,
"node_id": "MDQ6VXNlcjM3NTk4Mjcw",
"avatar_url": "https://avatars.githubusercontent.com/u/37598270?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/fmarkor",
"html_url": "https://github.com/fmarkor",
"followers_url": "https://api.github.com/users/fmarkor/followers",
"following_url": "https://api.github.com/users/fmarkor/following{/other_user}",
"gists_url": "https://api.github.com/users/fmarkor/gists{/gist_id}",
"starred_url": "https://api.github.com/users/fmarkor/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/fmarkor/subscriptions",
"organizations_url": "https://api.github.com/users/fmarkor/orgs",
"repos_url": "https://api.github.com/users/fmarkor/repos",
"events_url": "https://api.github.com/users/fmarkor/events{/privacy}",
"received_events_url": "https://api.github.com/users/fmarkor/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{ {
"login": "firnprotocol", "login": "firnprotocol",
"id": 93839494, "id": 93839494,

View file

@ -155,7 +155,7 @@
{ {
"id": "w3ps3", "id": "w3ps3",
"type": "summit", "type": "summit",
"date": "2024-06-04", "date": "2024-05-30",
"city": "Prague", "city": "Prague",
"country": "cz", "country": "cz",
"coincidence": "ETHPrague", "coincidence": "ETHPrague",

View file

@ -40,7 +40,7 @@ import cfonts from 'cfonts';
<div class="w-full"> <div class="w-full">
{config.header.menu.map((menuItem) => ( {config.header.menu.map((menuItem) => (
<div class="uppercase w-full"> <div class="uppercase w-full">
<a href={menuItem.url || config.links} class="inline-block hover:underline px-4 py-2" class:list={[menuItem.url?.match(/^http/) ? "external" : "", Astro.url.pathname === menuItem.url ? "text-white" : ""]} target={menuItem.url?.match(/^http/) ? '_blank' : '_self'}>{menuItem.name}</a> <a href={menuItem.url || config.links} class="inline-block hover:underline px-4 py-2" class:list={[menuItem.url?.match(/^http/) ? "external" : "", Astro.url.pathname === menuItem.url ? "text-white" : ""]}>2@@@{menuItem.name}</a>
</div> </div>
))} ))}
</div> </div>
@ -56,11 +56,9 @@ import cfonts from 'cfonts';
<div class="hidden lg:flex grow gap-0 xl:gap-2 justify-center"> <div class="hidden lg:flex grow gap-0 xl:gap-2 justify-center">
{config.header.menu.map((menuItem) => ( {config.header.menu.map((menuItem) => (
<div class="uppercase hover:text-[#c2c2c2]" class:list={[menuItem.link ? "xexternal" : "", Astro.url.pathname === menuItem.url ? "text-white" : ""]}> <div class="uppercase hover:text-[#c2c2c2]" class:list={[menuItem.link ? "xexternal" : "", Astro.url.pathname === menuItem.url ? "text-white" : ""]}>
<a href={config.links[menuItem.link] || menuItem.url} class="inline-block hover:underline px-4 py-2" target={menuItem.link ? '_blank' : '_self'}> <a href={config.links[menuItem.link] || menuItem.url} class="inline-block hover:underline px-4 py-2">
{menuItem.name} {menuItem.name}
{menuItem.link &&
<span class="external"></span>
}
</a> </a>
</div> </div>
))} ))}
@ -87,8 +85,8 @@ import cfonts from 'cfonts';
{!banner && {!banner &&
<div class="middle-pane-medium mt-8 sm:mt-14 mb-2 sm:mb-8"> <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"> <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" /> {/*<img src="/page-events.png" class="h-8 sm:h-14" title="Events" />*/}
{/*<pre><code>{cfonts.render(title + ' ', { font: '', maxLength: 1000 }).string}</code></pre>*/} <pre><code>{cfonts.render(title + ' ', { font: '', maxLength: 1000 }).string}</code></pre>
</div> </div>
</div> </div>
} }

33
src/pages/about.astro Normal file
View file

@ -0,0 +1,33 @@
---
import BaseLayout from '../layouts/base.astro';
import * as config from '../config.yaml';
import AboutFooter from '../components/AboutFooter.astro';
---
<BaseLayout title="About">
<div class="middle-pane-medium mt-10">
<div class="grid grid-cols-1 xl:grid-cols-2 gap-16">
<div>
<h1>Our mission</h1>
<div set:html={config.landing.mission}></div>
<div class="mt-8">
<a class="button inverted" href={config.links.manifesto}><button>Read manifesto</button></a>
</div>
</div>
<div>
<h1>Topics</h1>
<div class="columns-2 uppercase text-sm w3pn-topics">
{config.landing.topics.map((topic) => (
<div>{topic}</div>
))}
</div>
</div>
</div>
<AboutFooter />
</div>
</BaseLayout>

View file

@ -39,7 +39,7 @@ for (const year of pastYears.reverse()) {
<img src="/events-map.svg" class="w-full" /> <img src="/events-map.svg" class="w-full" />
</div--> </div-->
<h1>Upcoming events in 2024</h1> <h1 id="upcoming">Upcoming ({upcoming.length})</h1>
<div class="mb-10"> <div class="mb-10">
{upcoming.map((event) => ( {upcoming.map((event) => (
@ -47,10 +47,10 @@ for (const year of pastYears.reverse()) {
))} ))}
</div> </div>
<h1>Past events</h1> <h1 id="past">Past events ({events.length-upcoming.length})</h1>
{pastYears.map((year) => ( {pastYears.map((year) => (
past[year].length > 0 && past[year].length > 0 &&
<h2>{year}</h2> <h2>{year} ({past[year].length})</h2>
<div class="mt-4 mb-10"> <div class="mt-4 mb-10">
{past[year]?.map((event) => ( {past[year]?.map((event) => (
<EventItem item={event} /> <EventItem item={event} />

View file

@ -1,9 +1,28 @@
--- ---
import BaseLayout from '../layouts/base.astro'; import BaseLayout from '../layouts/base.astro';
import AboutFooter from '../components/AboutFooter.astro';
import * as config from '../config.yaml'; import * as config from '../config.yaml';
import contributors from '../contributors.json'; import events from '../events.json';
import articles from '../articles.json';
import talks from '../talks.json';
import { isRenderTemplateResult } from 'astro/runtime/server/render/astro/render-template.js'; import { isRenderTemplateResult } from 'astro/runtime/server/render/astro/render-template.js';
import { isPast, format } from 'date-fns';
let eventsPast = 0
let eventsUpcoming = 0
for (const ev of events) {
let future = true
if (ev.date.match(/^\d{4}-\d{2}-\d{2}$/) && isPast(new Date(ev.date))) {
future = false
}
if (future) {
eventsUpcoming++
} else {
eventsPast++
}
}
--- ---
@ -11,71 +30,99 @@ import { isRenderTemplateResult } from 'astro/runtime/server/render/astro/render
<div class="middle-pane-big"> <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="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 w3pn-hp-grid gap-2 mt-2">
<div>a</div> <div class="bg-events" data-url="/events">
<div>b</div> <div class="title">Events</div>
<div>c</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-talks" data-url="/talks">
<div class="title">Talks</div>
<div class="numbers">
<div>
<div class="big">?</div>
<div>Talks</div>
</div>
<div>
<div class="big">?</div>
<div>Recordings</div>
</div>
<div>
<div class="big">?</div>
<div>Speakers</div>
</div>
</div>
</div>
<div class="bg-projects" data-url="/projects">
<div class="title">Projects</div>
<div class="numbers">
<div>
<div class="semibig">Privacy explorer →</div>
</div>
<div>
<div class="semibig">3 reserch projects →</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
<div class="middle-pane-medium mt-10"> <div class="middle-pane-medium mt-10">
<div class="grid grid-cols-1 xl:grid-cols-2 gap-16">
<div>
<h1>Our mission</h1>
<div set:html={config.landing.mission}></div>
<div class="mt-8">
<a class="button inverted" href={config.links.manifesto}><button>Read manifesto</button></a>
</div>
</div>
<div>
<h1>Topics</h1>
<div class="columns-2 uppercase text-sm w3pn-topics">
{config.landing.topics.map((topic) => (
<div>{topic}</div>
))}
</div>
</div>
</div>
<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 || config.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-10"> <div class="mt-10">
<h1><a href="https://docs.web3privacy.info/communication">Coordination</a></h1> <h1>Our Projects</h1>
<div class="w3pn-wgrid">
{config.landing.coord.map((item) => (
<a href={item.url || config.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>
<div class="mt-16"> <div class="mt-16">
<h1><a href="https://docs.web3privacy.info/get-involved">Join the Community</a></h1> <h1>Featured Events</h1>
<div>{config.landing.community}</div>
<div class="flex gap-4 flex-wrap my-14 items-center">
{contributors.map((contrib) => (
<div><a href={contrib.html_url} target="_blank" title={contrib.login}><img src={contrib.avatar_url} class="w-16 rounded-full aspect-square"></a></div>
))}
</div>
<div class="flex gap-4 lg:gap-10 pt-4 flex-wrap">
<a href="" class="button inverted"><button>Enter the community</button></a>
<a href="" class="button inverted"><button>Become the contributor</button></a>
<a href="" class="button inverted"><button>Become the partner</button></a>
</div>
</div> </div>
<div class="mt-16">
<h1>Latest Talks</h1>
</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 Articles</h1>
</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>
<AboutFooter />
</div> </div>
<script>
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> </BaseLayout>

View file

@ -1,13 +0,0 @@
---
import BaseLayout from '../layouts/base.astro';
---
<BaseLayout title="Projects">
<div class="middle-pane-medium mt-10">
<p>My page content, wrapped in a layout!</p>
</div>
</BaseLayout>

View file

@ -4,7 +4,7 @@ import BaseLayout from '../layouts/base.astro';
--- ---
<BaseLayout title="Articles"> <BaseLayout title="Research">
<div class="middle-pane-medium mt-10"> <div class="middle-pane-medium mt-10">
<p>My page content, wrapped in a layout!</p> <p>My page content, wrapped in a layout!</p>

View file

@ -1,13 +0,0 @@
---
import BaseLayout from '../layouts/base.astro';
---
<BaseLayout title="Talks">
<div class="middle-pane-medium mt-10">
<p>My page content, wrapped in a layout!</p>
</div>
</BaseLayout>

View file

@ -77,6 +77,26 @@
content: "→"; content: "→";
} }
.basegrid-entry {
@apply opacity-80 hover:opacity-100 cursor-pointer flex items-end;
}
.basegrid-entry .title {
@apply p-6 bg-black/80 w-full font-semibold;
}
.basegrid-entry .title a {
@apply text-white text-lg;
}
.basegrid-entry:hover .title a {
@apply underline;
}
.basegrid-entry .date {
@apply block text-sm;
}
.w3pn-topics > div { .w3pn-topics > div {
@apply mb-3; @apply mb-3;
} }
@ -86,8 +106,47 @@
content: url('data:image/svg+xml,<svg width="12" height="2" viewBox="0 0 12 2" fill="none" xmlns="http://www.w3.org/2000/svg"><rect opacity="0.25" width="12" height="2" fill="white"/></svg>') content: url('data:image/svg+xml,<svg width="12" height="2" viewBox="0 0 12 2" fill="none" xmlns="http://www.w3.org/2000/svg"><rect opacity="0.25" width="12" height="2" fill="white"/></svg>')
} }
.w3pn-hp-grid .bg-events {
background-image: url(/hp-box-events.svg);
background-position: center;
background-size: cover;
}
.w3pn-hp-grid .bg-talks {
background-image: url(/hp-box-talks.png);
background-position: center;
background-size: cover;
}
.w3pn-hp-grid .bg-projects {
background-image: url(/hp-box-projects.png);
background-position: center;
background-size: cover;
}
.w3pn-hp-grid .numbers {
@apply flex gap-2 m-4 items-end;
}
.w3pn-hp-grid .numbers > div {
@apply bg-white px-3 py-2;
}
.w3pn-hp-grid .numbers .big {
@apply text-2xl font-bold;
}
.w3pn-hp-grid .numbers .semibig {
@apply text-lg font-bold;
}
.w3pn-hp-grid .numbers > div > div {
@apply text-black text-sm;
}
.w3pn-hp-grid .title {
@apply text-white uppercase my-3 mx-4;
}
.w3pn-hp-grid > div { .w3pn-hp-grid > div {
@apply aspect-video bg-[#0f0f0f]; @apply aspect-video bg-[#0f0f0f] grid grid-rows-2 hover:bg-[#202020] cursor-pointer;
} }
.w3pn-event-item { .w3pn-event-item {

74
src/talks.json Normal file
View file

@ -0,0 +1,74 @@
[
{
"url": "https://www.youtube.com/watch?v=QUdoGolheLQ",
"title": "Decentralized Storage and Zero Leaks Communication - Costanza Gallo | Web3Privacy Now",
"img": "https://i2.ytimg.com/vi/QUdoGolheLQ/maxresdefault.jpg",
"date": "2023-11-03T11:31:50.000Z"
},
{
"url": "https://www.youtube.com/watch?v=VmR_J0qNJXQ",
"title": "Vitalik: \"Off-Chain Privacy Solution are needed\" - Rik Krieger | Web3Privacy Now",
"img": "https://i3.ytimg.com/vi/VmR_J0qNJXQ/maxresdefault.jpg",
"date": "2023-11-03T09:05:19.000Z"
},
{
"url": "https://www.youtube.com/watch?v=BuBKfgk8evs",
"title": "How Decentralized Compliance Solves The Privacy Dilemma - Jakub K. | Web3Privacy Now",
"img": "https://i3.ytimg.com/vi/BuBKfgk8evs/maxresdefault.jpg",
"date": "2023-11-03T08:57:58.000Z"
},
{
"url": "https://www.youtube.com/watch?v=RP8Yk8HHvlY",
"title": "Timelock: Tim May's Timed Release Encryption made Reality - Vincenzo Iovino | Web3Privacy Now",
"img": "https://i3.ytimg.com/vi/RP8Yk8HHvlY/maxresdefault.jpg",
"date": "2023-11-03T08:40:44.000Z"
},
{
"url": "https://www.youtube.com/watch?v=g66OspDLnl4",
"title": "Privacy Ecosystems at Play - Alex Zaidelson | Web3Privacy Now",
"img": "https://i4.ytimg.com/vi/g66OspDLnl4/maxresdefault.jpg",
"date": "2023-11-03T08:32:14.000Z"
},
{
"url": "https://www.youtube.com/watch?v=a5p_pt4HsIY",
"title": "Self governed User Data and Web2 Verifications - Roman Prokhorenko | Web3Privacy Now",
"img": "https://i2.ytimg.com/vi/a5p_pt4HsIY/maxresdefault.jpg",
"date": "2023-11-03T08:21:16.000Z"
},
{
"url": "https://www.youtube.com/watch?v=6o_EGBp6N1k",
"title": "Securing the Solarpunks: Nym for Ethereum Validator Privacy - Serinko | Web3Privacy Now",
"img": "https://i3.ytimg.com/vi/6o_EGBp6N1k/maxresdefault.jpg",
"date": "2023-11-02T22:29:03.000Z"
},
{
"url": "https://www.youtube.com/watch?v=3h1HOg7Tnws",
"title": "Empowering Builders to Make Better Privacy Solutions - Catsnacks and Serinko | Web3Privacy Now",
"img": "https://i4.ytimg.com/vi/3h1HOg7Tnws/maxresdefault.jpg",
"date": "2023-11-02T22:04:13.000Z"
},
{
"url": "https://www.youtube.com/watch?v=OLFDe1O2r-A",
"title": "You Have Nothing to Hide! - Vaclav Pavlin | Web3Privacy Now",
"img": "https://i4.ytimg.com/vi/OLFDe1O2r-A/maxresdefault.jpg",
"date": "2023-11-02T20:06:34.000Z"
},
{
"url": "https://www.youtube.com/watch?v=Xb-PDjGLy7k",
"title": "Hacktivism in Perspective - Jaromil | Web3Privacy Now",
"img": "https://i1.ytimg.com/vi/Xb-PDjGLy7k/maxresdefault.jpg",
"date": "2023-11-02T19:37:46.000Z"
},
{
"url": "https://www.youtube.com/watch?v=lxLjZe2GeIA",
"title": "Privacy Pools Panel - Tsu_Kareta, Mesquka, Carlo Chialastri, Andrea Togni | Web3Privacy Now",
"img": "https://i1.ytimg.com/vi/lxLjZe2GeIA/maxresdefault.jpg",
"date": "2023-11-02T15:24:31.000Z"
},
{
"url": "https://www.youtube.com/watch?v=6ZMJygb9fe8",
"title": "I'm Torn - Eléonore Blanc | Web3Privacy Now",
"img": "https://i3.ytimg.com/vi/6ZMJygb9fe8/maxresdefault.jpg",
"date": "2023-11-02T14:32:27.000Z"
}
]

23
utils/articles.js Normal file
View file

@ -0,0 +1,23 @@
import { parseFeed } from "https://deno.land/x/rss/mod.ts";
import * as cheerio from "https://esm.sh/cheerio@1.0.0-rc.12";
const resp = await fetch("https://mirror.xyz/0x0f1F3DAf416B74DB3DE55Eb4D7513a80F4841073/feed/atom")
const xml = await resp.text()
const feed = await parseFeed(xml)
const articles = []
for (const entry of feed.entries) {
//console.log(entry)
const $ = cheerio.load(entry.content.value)
articles.push({
url: entry.id,
title: entry.title.value,
img: $("img").attr("src"),
date: entry.updated,
})
}
//console.log(articles)
await Deno.writeTextFile("./src/articles.json", JSON.stringify(articles, null, 2))
console.log(`File ./src/articles.json saved`)

View file

@ -2,11 +2,13 @@ import "https://deno.land/std@0.206.0/dotenv/load.ts";
const contributorRepos = [ const contributorRepos = [
"web3privacy/web3privacy", "web3privacy/web3privacy",
"web3privacy/data",
"web3privacy/events", "web3privacy/events",
"web3privacy/w3ps1", "web3privacy/w3ps1",
"web3privacy/grants", "web3privacy/grants",
"web3privacy/website", "web3privacy/website",
"web3privacy/explorer",
"web3privacy/explorer-data",
"web3privacy/explorer-app",
//"web3privacy/w3pn-web", //"web3privacy/w3pn-web",
] ]

23
utils/talks.js Normal file
View file

@ -0,0 +1,23 @@
import { parseFeed } from "https://deno.land/x/rss/mod.ts";
import * as cheerio from "https://esm.sh/cheerio@1.0.0-rc.12";
const resp = await fetch("https://www.youtube.com/feeds/videos.xml?channel_id=UCaO_vLpj164um5maEsCuEbw")
const xml = await resp.text()
const feed = await parseFeed(xml)
const talks = []
for (const entry of feed.entries) {
console.log(entry)
//const $ = cheerio.load(entry.content.value)
talks.push({
url: entry.links[0].href,
title: entry.title.value,
img: entry["media:group"]["media:thumbnail"].url.replace("hqdefault", "maxresdefault"),
date: entry.published,
})
}
//console.log(articles)
await Deno.writeTextFile("./src/talks.json", JSON.stringify(talks, null, 2))
console.log(`File ./src/talks.json saved`)