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]+":
type: string
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
additionalProperties: false
@ -94,4 +120,9 @@ properties:
events:
type: array
items:
$ref: "#/$defs/event"
$ref: "#/$defs/event"
people:
type: array
items:
$ref: "#/$defs/person"

View File

@ -19,4 +19,8 @@ core-team:
projects:
$load: projects
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();
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 { parse, stringify } from "npm:yaml";
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 DEST_DIR = "./dist";
@ -17,57 +18,82 @@ export class Engine {
async init() {
// load schemas
for await (const dirEntry of Deno.readDir(SCHEMA_DIR)) {
const [fn, _] = dirEntry.name.split(".");
this.schemas[fn] = await readYamlFile(join(SCHEMA_DIR, dirEntry.name));
const [fn, _] = dirEntry.name.split(".");
this.schemas[fn] = await readYamlFile(join(SCHEMA_DIR, dirEntry.name));
}
// load
this.index = await readYamlFile(join(SRC_DIR, "index.yaml"));
this.rendered = await this.render(this.index);
}
async loadDir(src) {
const out = {}
const dir = join(SRC_DIR, src)
console.log(`reading dir=${dir}`)
async loadDir(src, opts = {}) {
const out = {};
const dir = join(SRC_DIR, src);
console.log(`reading dir=${dir}`);
if (await exists(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 = [];
for await (const dirEntry of Deno.readDir(dir)) {
const [fn, ext] = dirEntry.name.split(".");
if (!ext) {
const obj = Object.assign({ id: fn }, await this.loadDir(join(src, fn)))
arr.push(obj)
if (!ext && !fn.startsWith("_")) {
const obj = Object.assign(
{ id: fn },
await this.loadDir(join(src, fn)),
);
arr.push(obj);
}
if (ext === "yaml" && fn !== "index") {
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}`;
}
}
arr.push(item);
}
/*if (ext === "yaml" && fn !== "index") {
out[fn] = await readYamlFile(join(dir, dirEntry.name));
}*/
}
return arr
return arr;
}
async render(src) {
const out = {}
const out = {};
for (const key of Object.keys(src)) {
const val = src[key];
if (typeof val === "object" && val.$load) {
out[key] = await this.loadDir(val.$load);
out[key] = await this.loadDir(val.$load, val.$opts);
continue;
}
out[key] = val
out[key] = val;
}
return out
return out;
}
async build() {
await emptyDir(DEST_DIR);
//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(
join(DEST_DIR, "index.json"),
Object.assign({}, this.rendered),

View File

@ -9,17 +9,17 @@ await engine.init();
const ajv = new Ajv({ strict: false });
addFormats(ajv);
function checkCollection (name, schema, data) {
Deno.test(name, () => {
if (!schema) {
return
}
const validator = ajv.compile(schema);
if (!validator(data)) {
throw validator.errors;
}
})
function checkCollection(name, schema, data) {
Deno.test(name, () => {
if (!schema) {
return;
}
const validator = ajv.compile(schema);
if (!validator(data)) {
throw validator.errors;
}
});
}
// check index
checkCollection("index", engine.schemas.index, engine.rendered)
checkCollection("index", engine.schemas.index, engine.rendered);