add people

This commit is contained in:
tree🌴 2024-02-02 05:23:07 +01:00
parent c2e1bc90f5
commit 047f81ebe4
51 changed files with 194 additions and 34 deletions

View file

@ -75,6 +75,32 @@ $defs:
"^[\\w]+": "^[\\w]+":
type: string type: string
format: uri format: uri
person:
type: object
additionalProperties: false
required:
- name
properties:
name:
type: string
caption:
type: string
country:
type: string
pattern: '^[a-z]{2}$'
refs:
type: object
additionalProperties: false
properties:
twitter:
type: string
linkedin:
type: string
bsky:
type: string
imageUrl:
type: string
format: uri
type: object type: object
additionalProperties: false additionalProperties: false
@ -95,3 +121,8 @@ properties:
type: array type: array
items: items:
$ref: "#/$defs/event" $ref: "#/$defs/event"
people:
type: array
items:
$ref: "#/$defs/person"

View file

@ -20,3 +20,7 @@ projects:
$load: projects $load: projects
events: events:
$load: events $load: events
people:
$load: people
$opts:
loader: person

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
src/people/_images/pg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
src/people/_images/tree.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

View file

@ -0,0 +1,5 @@
name: Alex Kampa
caption: Director at [Aragon ZK Research](https://research.aragon.org/)
country: lu
refs:
linkedin: alex-kampa

View file

@ -0,0 +1,5 @@
name: Alona Shevchenko
caption: Unapologetic Ukrainian behind [Ukraine DAO](https://ukrainedao.love/) & [Kyiv Tech Summit](https://www.kyivtechsummit.com/)
country: ua
refs:
twitter: cryptodrftng

2
src/people/althea.yaml Normal file
View file

@ -0,0 +1,2 @@
name: Althea
caption: Head of Comms, Privacy & Scaling Exploration

View file

@ -0,0 +1,5 @@
name: Ameen Soleimani
caption: Summoner of [IranUnchained](https://www.iranunchained.com/), [Privacy Pools](https://www.privacypools.com/), [MolochDAO](https://molochdao.com/)
country: us
refs:
twitter: ameensol

View file

@ -0,0 +1,5 @@
name: Antoni Zolciak
caption: Co-founder of [Aleph Zero](https://alephzero.org/) & [Cardinal](https://cardinal.co/)
country: pl
refs:
twitter: AntoniZolciak

View file

@ -0,0 +1,5 @@
name: Costanza Gallo
caption: Head of partnerships at the [The Swarm Foundation](https://www.ethswarm.org/foundation)
country: it
refs:
twitter: costgallo

View file

@ -0,0 +1,5 @@
name: dcbuilder.eth
caption: Research engineer at [Worldcoin](https://worldcoin.org/), ZKML & Rust enthusiast
country: cz
refs:
twitter: DCbuild3r

View file

@ -0,0 +1,5 @@
name: Guy Zyskind
caption: Founder of [Secret Network](https://scrt.network/), CEO [SCRT Labs](https://www.scrtlabs.com/)
country: is
refs:
twitter: GuyZys

View file

@ -0,0 +1,5 @@
name: Juraj Bednar
caption: Educator, writer, cryptoanarchist & biohacker ([blog](https://juraj.bednar.io/))
country: sk
refs:
twitter: jurbed

View file

@ -0,0 +1,5 @@
name: Manu Alzuru
caption: Humanist, solarpunk, Founder of [DoinGud](https://doingud.com/) & [ETH Barcelona](https://ethbarcelona.com/)
country: es
refs:
twitter: ManuAlzuru

View file

@ -0,0 +1,5 @@
name: Mario Havel
caption: Hacker, Co-Founder of [Bordel Hackerspace](https://bordel.paralelnipolis.cz/#/)
country: cz
refs:
twitter: TMIYChao

View file

@ -0,0 +1,5 @@
name: Max Hampshire
caption: Senior devrel of [Nym](https://nymtech.net/), Co-founder of [terra0](https://terra0.org/)
country: at
refs:
twitter: _wjth

2
src/people/merula.yaml Normal file
View file

@ -0,0 +1,2 @@
name: Merula
caption: Software engineer and cryptographer Circles Entropy

View file

@ -0,0 +1,5 @@
name: Mykola Siusko
caption: Web3 privacy advocate behind [Web3Privacy Now](https://web3privacy.info/), [NYM](https://nymtech.net/) ambassador
country: es
refs:
twitter: nicksvyaznoy

View file

@ -0,0 +1,5 @@
name: Nick Almond
caption: Building next generation DAOs with [FactoryDAO](https://www.factorydao.xyz/)
country: gb
refs:
twitter: DrNickA

View file

@ -0,0 +1,4 @@
name: Oliver Gale
caption: CEO of [Panther Protocol](https://www.pantherprotocol.io/)
refs:
twitter: OriginalOlii

5
src/people/pg.yaml Normal file
View file

@ -0,0 +1,5 @@
name: PG
caption: Organizing [ETHRome](https://ethrome.org) w/ [urbe.eth](https://linktr.ee/urbe.eth), making sauce w/ [SpaghettETH](https://linktr.ee/spaghetteth)
country: it
refs:
twitter: PG_CDG

View file

@ -0,0 +1,4 @@
name: Rachel-Rose O'Leary
caption: "[DarkFi](https://dark.fi/) core dev, writer"
refs:
twitter: lunar_mining

2
src/people/serinko.yaml Normal file
View file

@ -0,0 +1,2 @@
name: Serinko
caption: Privacy Researcher

View file

@ -0,0 +1,4 @@
name: Steffen Kux
caption: CEO dm3
refs:
twitter: SteffenKux

View file

@ -0,0 +1,2 @@
name: Tibor Csóka
caption: Software Engineer at [HOPR](https://hoprnet.org/)

5
src/people/tree.yaml Normal file
View file

@ -0,0 +1,5 @@
name: Tree
caption: Orchestrating lunarpunk events [ETHBrno](https://ethbrno.cz) & [w3ps](https://github.com/web3privacy/w3ps) w/ [gwei.cz](https://gwei.cz)
country: cz
refs:
bsky: tree.fail

4
src/people/wslyvh.yaml Normal file
View file

@ -0,0 +1,4 @@
name: Wesley
caption: Events @ Ethereum 🛠️ Indie Maker
refs:
twitter: wslyvh

View file

@ -5,4 +5,4 @@ await engine.init();
await engine.build(); await engine.build();
console.log('Done') console.log("Done");

View file

@ -2,6 +2,7 @@ import { join } from "https://deno.land/std@0.208.0/path/mod.ts";
import { emptyDir } from "https://deno.land/std@0.196.0/fs/empty_dir.ts"; import { emptyDir } from "https://deno.land/std@0.196.0/fs/empty_dir.ts";
import { parse, stringify } from "npm:yaml"; import { parse, stringify } from "npm:yaml";
import { exists } from "https://deno.land/std@0.213.0/fs/exists.ts"; import { exists } from "https://deno.land/std@0.213.0/fs/exists.ts";
import { copy } from "https://deno.land/std@0.214.0/fs/copy.ts";
const SRC_DIR = "./src"; const SRC_DIR = "./src";
const DEST_DIR = "./dist"; const DEST_DIR = "./dist";
@ -23,51 +24,76 @@ export class Engine {
// load // load
this.index = await readYamlFile(join(SRC_DIR, "index.yaml")); this.index = await readYamlFile(join(SRC_DIR, "index.yaml"));
this.rendered = await this.render(this.index); this.rendered = await this.render(this.index);
} }
async loadDir(src) { async loadDir(src, opts = {}) {
const out = {} const out = {};
const dir = join(SRC_DIR, src) const dir = join(SRC_DIR, src);
console.log(`reading dir=${dir}`) console.log(`reading dir=${dir}`);
if (await exists(join(dir, "index.yaml"))) { if (await exists(join(dir, "index.yaml"))) {
const out = readYamlFile(join(dir, "index.yaml")); const out = readYamlFile(join(dir, "index.yaml"));
return out return out;
} }
let images = [];
if (await exists(join(dir, "_images"))) {
for await (const ie of Deno.readDir(join(dir, "_images"))) {
const [id, ext] = ie.name.split(".");
images.push({ id, ext });
}
}
const arr = []; const arr = [];
for await (const dirEntry of Deno.readDir(dir)) { for await (const dirEntry of Deno.readDir(dir)) {
const [fn, ext] = dirEntry.name.split("."); const [fn, ext] = dirEntry.name.split(".");
if (!ext) { if (!ext && !fn.startsWith("_")) {
const obj = Object.assign({ id: fn }, await this.loadDir(join(src, fn))) const obj = Object.assign(
arr.push(obj) { id: fn },
await this.loadDir(join(src, fn)),
);
arr.push(obj);
} }
/*if (ext === "yaml" && fn !== "index") { if (ext === "yaml" && fn !== "index") {
out[fn] = await readYamlFile(join(dir, dirEntry.name)); const item = await readYamlFile(join(dir, dirEntry.name));
}*/ if (opts.loader === "person") {
// load image
const img = images.find((i) => i.id === fn);
if (img) {
item.imageUrl =
`https://data.web3privacy.info/img/people/${img.id}.${img.ext}`;
} }
return arr }
arr.push(item);
}
}
return arr;
} }
async render(src) { async render(src) {
const out = {} const out = {};
for (const key of Object.keys(src)) { for (const key of Object.keys(src)) {
const val = src[key]; const val = src[key];
if (typeof val === "object" && val.$load) { if (typeof val === "object" && val.$load) {
out[key] = await this.loadDir(val.$load); out[key] = await this.loadDir(val.$load, val.$opts);
continue; continue;
} }
out[key] = val out[key] = val;
} }
return out return out;
} }
async build() { async build() {
await emptyDir(DEST_DIR); await emptyDir(DEST_DIR);
//await writeJSONFile(join(DEST_DIR, "index.json"), this.index); //await writeJSONFile(join(DEST_DIR, "index.json"), this.index);
// copy images
await emptyDir(join(DEST_DIR, "img"));
await copy(
join(SRC_DIR, "people", "_images"),
join(DEST_DIR, "img", "people"),
);
await writeJSONFile( await writeJSONFile(
join(DEST_DIR, "index.json"), join(DEST_DIR, "index.json"),
Object.assign({}, this.rendered), Object.assign({}, this.rendered),

View file

@ -12,14 +12,14 @@ addFormats(ajv);
function checkCollection(name, schema, data) { function checkCollection(name, schema, data) {
Deno.test(name, () => { Deno.test(name, () => {
if (!schema) { if (!schema) {
return return;
} }
const validator = ajv.compile(schema); const validator = ajv.compile(schema);
if (!validator(data)) { if (!validator(data)) {
throw validator.errors; throw validator.errors;
} }
}) });
} }
// check index // check index
checkCollection("index", engine.schemas.index, engine.rendered) checkCollection("index", engine.schemas.index, engine.rendered);