mirror of
https://github.com/web3privacy/web
synced 2024-10-15 18:26:27 +02:00
updates
This commit is contained in:
parent
ceee85926a
commit
c2fe9c03b6
24 changed files with 584 additions and 106 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -21,3 +21,4 @@ pnpm-debug.log*
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
.sl
|
.sl
|
||||||
|
.watchman-*
|
|
@ -11,7 +11,7 @@ export default defineConfig({
|
||||||
plugins: [yaml()],
|
plugins: [yaml()],
|
||||||
server: {
|
server: {
|
||||||
watch: {
|
watch: {
|
||||||
ignored: ["**/.sl/**/*"],
|
ignored: ["**/.sl/**/*", "**/.watchman-**"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -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
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
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
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
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
62
src/articles.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
47
src/components/AboutFooter.astro
Normal file
47
src/components/AboutFooter.astro
Normal 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>
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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
33
src/pages/about.astro
Normal 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>
|
|
@ -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} />
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
<div class="flex gap-4 flex-wrap my-14 items-center">
|
<div class="mt-16">
|
||||||
{contributors.map((contrib) => (
|
<h1>Latest Talks</h1>
|
||||||
<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="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>
|
||||||
|
|
||||||
<div class="flex gap-4 lg:gap-10 pt-4 flex-wrap">
|
<div class="mt-16">
|
||||||
<a href="" class="button inverted"><button>Enter the community</button></a>
|
<h1>Latest Articles</h1>
|
||||||
<a href="" class="button inverted"><button>Become the contributor</button></a>
|
</div>
|
||||||
<a href="" class="button inverted"><button>Become the partner</button></a>
|
|
||||||
|
<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>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<AboutFooter />
|
||||||
|
</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>
|
|
@ -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>
|
|
|
@ -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>
|
|
@ -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>
|
|
|
@ -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
74
src/talks.json
Normal 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
23
utils/articles.js
Normal 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`)
|
|
@ -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
23
utils/talks.js
Normal 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`)
|
Loading…
Reference in a new issue