guest list

This commit is contained in:
tree🌴 2024-02-01 13:08:55 +01:00
parent 4e3d9d03ca
commit dfa38c13be
4 changed files with 354 additions and 1 deletions

View file

@ -13,7 +13,8 @@
"articles": "deno run --allow-all utils/articles.js", "articles": "deno run --allow-all utils/articles.js",
"talks": "deno run --allow-all utils/talks.js", "talks": "deno run --allow-all utils/talks.js",
"explorer": "deno run --allow-all utils/explorer.js", "explorer": "deno run --allow-all utils/explorer.js",
"sync-all": "npm run core && npm run contribs && npm run articles && npm run talks && npm run explorer" "events-ext": "deno run --allow-all utils/events-ext.js",
"sync-all": "npm run core && npm run contribs && npm run articles && npm run talks && npm run explorer && npm run events-ext"
}, },
"dependencies": { "dependencies": {
"@astrojs/tailwind": "^5.0.2", "@astrojs/tailwind": "^5.0.2",

View file

@ -2,6 +2,23 @@
const { item } = Astro.props; const { item } = Astro.props;
import { format, compareAsc, addDays, isFuture } from 'date-fns'; import { format, compareAsc, addDays, isFuture } from 'date-fns';
import { marked } from 'marked'; import { marked } from 'marked';
import EventsExt from '../events-ext.json';
function findExt () {
let slug = null
if (item.links?.web && item.links.web.match(/^https:\/\/lu.ma\//)) {
slug = item.links.web.match(/^https:\/\/lu.ma\/(.+)$/)[1]
}
if (item.links?.rsvp && item.links.rsvp.match(/^https:\/\/lu.ma\//)) {
slug = item.links.rsvp.match(/^https:\/\/lu.ma\/(.+)$/)[1]
}
if (!slug) {
return null
}
return EventsExt.find(ex => ex.url === slug)
}
const ext = findExt()
const isDate = item.date.match(/^\d{4}-\d{2}-\d{2}$/) const isDate = item.date.match(/^\d{4}-\d{2}-\d{2}$/)
const future = isDate && !isFuture(new Date(item.date)); const future = isDate && !isFuture(new Date(item.date));
@ -102,6 +119,13 @@ const status = item.confirmed
</div> </div>
<div class="py-1 grow text-right items-center flex gap-4"> <div class="py-1 grow text-right items-center flex gap-4">
<div class="grow"></div> <div class="grow"></div>
{ext &&
<div class="flex -space-x-3">
{ext.guests.map((guest) => (
<div><img src={guest.avatarUrl} class="w-8 h-8 aspect-square object-fit rounded-full border-gray-800 border-2" /></div>
))}
</div>
}
{/*<div class="text-sm"></div>*/} {/*<div class="text-sm"></div>*/}
{item.links?.rsvp && {item.links?.rsvp &&
<a href={item.links?.rsvp} class="button inverted"><button>Join</button></a> <a href={item.links?.rsvp} class="button inverted"><button>Join</button></a>

293
src/events-ext.json Normal file
View file

@ -0,0 +1,293 @@
[
{
"url": "w3pn-meetup-bucharest1",
"name": "W3PN Meetup @ ETHBucharest 2024",
"period": [
"2024-03-28T13:00:00.000Z",
"2024-03-28T19:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 3,
"guests": [
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "RSSC No1",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_39.png"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
},
{
"url": "w3pn-meetup-ams1",
"name": "W3PN Meetup @ ETHDam 2024",
"period": [
"2024-04-11T13:00:00.000Z",
"2024-04-11T19:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 12,
"guests": [
{
"name": "Lanaryx",
"avatarUrl": "https://images.lumacdn.com/avatars/fu/355e98ad-8cdc-4e6a-8066-96fd9c505f24"
},
{
"name": "Alina Latinina",
"avatarUrl": "https://images.lumacdn.com/avatars/1x/73d8754f-c813-4603-90cd-a1233e12eb1a"
},
{
"name": "Kieran Mesquita",
"avatarUrl": "https://images.lumacdn.com/avatars/0c/b0ba4716-d35b-48b3-9523-62242e583013"
},
{
"name": "Dietrich Ayala",
"avatarUrl": "https://cdn.lu.ma/avatars/yx/da86d2b5-aa0e-4c77-8f06-eda042415b2c"
},
{
"name": "limone.eth",
"avatarUrl": "https://cdn.lu.ma/avatars/zo/9b09a4b5-59b6-47cd-b988-32ed7f22dc1e"
},
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "Jacob Czepluch",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_13.png"
},
{
"name": "HW",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_19.png"
},
{
"name": "Who?",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_24.png"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
},
{
"url": "w3pn-meetup-tallinn1",
"name": "W3PN Meetup @ ETHTallinn 2024",
"period": [
"2024-04-18T12:00:00.000Z",
"2024-04-18T18:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 4,
"guests": [
{
"name": "Sander Gansen",
"avatarUrl": "https://images.lumacdn.com/avatars/n9/3185a69c-8877-44a2-a3bd-d8ca324dae8d"
},
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "HW",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_19.png"
},
{
"name": "Ashton Barger",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_29.png"
}
]
},
{
"url": "w3pn-meetup-berlin1",
"name": "W3PN Meetup @ ETHBerlin 4",
"period": [
"2024-05-22T13:00:00.000Z",
"2024-05-22T19:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 7,
"guests": [
{
"name": "will scott",
"avatarUrl": "https://cdn.lu.ma/avatars/66/778a15b0-1e8b-4c45-9011-f3d19dd7cc90"
},
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "Orion",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_16.png"
},
{
"name": "alex v",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_37.png"
},
{
"name": "Elena Grafenhorst",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_38.png"
},
{
"name": "Jacob Czepluch",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_13.png"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
},
{
"url": "w3pn-summit-prague2",
"name": "W3PN Summit @ ETHPrague 2024",
"period": [
"2024-05-30T07:00:00.000Z",
"2024-05-31T02:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 4,
"guests": [
{
"name": "Ashoat Tevosyan",
"avatarUrl": "https://cdn.lu.ma/avatars/b1/66f83394-ad58-4848-8c29-292cac308fa1"
},
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "HW",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_19.png"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
},
{
"url": "w3pn-bled-hackathon1",
"name": "W3PN Hackathon @ Bled",
"period": [
"2024-06-19T13:00:00.000Z",
"2024-06-26T13:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 0,
"guests": []
},
{
"url": "w3pn-meetup-ljubljana1",
"name": "W3PN Meetup @ Ljubljana",
"period": [
"2024-06-21T13:00:00.000Z",
"2024-06-21T19:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 2,
"guests": [
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
},
{
"url": "w3pn-meetup-bru1",
"name": "W3PN Meetup @ EthCC 7",
"period": [
"2024-07-12T13:00:00.000Z",
"2024-07-12T19:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 2,
"guests": [
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
},
{
"url": "w3pn-meetup-rome1",
"name": "W3PN Meetup @ ETHRome 2024",
"period": [
"2024-10-03T13:00:00.000Z",
"2024-10-03T19:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 2,
"guests": [
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
},
{
"url": "w3pn-summit-brno1",
"name": "W3PN Summit @ ETHBrno 2024",
"period": [
"2024-10-24T07:00:00.000Z",
"2024-10-25T02:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 2,
"guests": [
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
},
{
"url": "w3pn-meetup-devcon7",
"name": "W3PN Meetup @ Devcon 7",
"period": [
"2024-11-11T08:00:00.000Z",
"2024-11-11T14:00:00.000Z"
],
"coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47",
"guestCount": 4,
"guests": [
{
"name": "tree",
"avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3"
},
{
"name": "Orion",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_16.png"
},
{
"name": "vincent",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_40.png"
},
{
"name": "bryce_gabari",
"avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png"
}
]
}
]

35
utils/events-ext.js Normal file
View file

@ -0,0 +1,35 @@
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://lu.ma/web3privacy");
const html = await resp.text();
const $ = cheerio.load(html);
const dataRaw = $("script#__NEXT_DATA__").text();
const data = JSON.parse(dataRaw);
const calendar = data.props.pageProps.initialData.data.calendar;
const items = data.props.pageProps.initialData.data.featured_items;
const output = [];
for (const item of items) {
const evt = item.event;
output.push({
url: evt.url,
name: evt.name,
period: [evt.start_at, evt.end_at],
coverUrl: evt.cover_url,
guestCount: item.guest_count,
guests: item.featured_guests.map((fg) => ({
name: fg.name,
avatarUrl: fg.avatar_url,
})),
});
//console.log(item);
}
await Deno.writeTextFile(
"./src/events-ext.json",
JSON.stringify(output, null, 2),
);
console.log(`File ./src/events-ext.json saved`);