fix loading
ci/woodpecker/push/woodpecker Pipeline was successful
Details
@ -0,0 +1,3 @@
|
||||
IPFS_CLUSTER_HOST=https://my-ipfs-cluster.example
|
||||
IPFS_CLUSTER_USER=my_username
|
||||
IPFS_CLUSTER_PASS=my_password
|
@ -0,0 +1,13 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Ignore files for PNPM, NPM and YARN
|
||||
pnpm-lock.yaml
|
||||
package-lock.json
|
||||
yarn.lock
|
@ -0,0 +1,15 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
extends: ['eslint:recommended', 'prettier'],
|
||||
plugins: ['svelte3'],
|
||||
overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
|
||||
parserOptions: {
|
||||
sourceType: 'module',
|
||||
ecmaVersion: 2020
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
es2017: true,
|
||||
node: true
|
||||
}
|
||||
};
|
@ -0,0 +1,12 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
bun.lockb
|
||||
src/lib/data.json
|
||||
static/data.json
|
||||
.gitsigners
|
@ -0,0 +1,13 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Ignore files for PNPM, NPM and YARN
|
||||
pnpm-lock.yaml
|
||||
package-lock.json
|
||||
yarn.lock
|
@ -0,0 +1,9 @@
|
||||
{
|
||||
"useTabs": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"printWidth": 100,
|
||||
"plugins": ["prettier-plugin-svelte"],
|
||||
"pluginSearchDirs": ["."],
|
||||
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
pipeline:
|
||||
|
||||
build_and_test:
|
||||
image: node
|
||||
commands:
|
||||
- node --version
|
||||
- npm ci
|
||||
- npm run build
|
||||
- npm run test
|
||||
|
||||
deploy:
|
||||
image: rclone/rclone
|
||||
commands:
|
||||
- "rclone sync build/ :sftp: --sftp-host frontier.gwei.cz --sftp-user eb2-website-dev --sftp-port 2022 --sftp-pass $RCLONE_PASS -v"
|
||||
secrets: [RCLONE_PASS]
|
||||
when:
|
||||
branch: [main]
|
||||
|
||||
deploy_ipfs:
|
||||
image: node
|
||||
environment:
|
||||
IPFS_CLUSTER_HOST: https://ipfs-cluster.gwei.cz
|
||||
IPFS_CLUSTER_USER: ethbrno
|
||||
commands:
|
||||
- npx -y --loglevel=error github:burningtree/ipfs-cluster-deploy ./build ethbrno-web
|
||||
secrets: [IPFS_CLUSTER_PASS]
|
||||
when:
|
||||
event: tag
|
||||
branch: main
|
@ -0,0 +1,13 @@
|
||||
# ETHBrno² Website
|
||||
|
||||
Website is created using [SvelteKit](https://kit.svelte.dev/) and deployed as a static application to these addresses:
|
||||
* [ethbrno.cz](https://ethbrno.cz) (self-hosted @ [gwei.cz](https://gwei.cz))
|
||||
* [mirror.ethbrno.cz](https://mirror.ethbrno.cz/) (mirror @ [Netlify](https://www.netlify.com/))
|
||||
* IPFS network - the url is changing (example: [bafybeiddx4e2yyur3kjyppcvcg2nb7yxrxs2b2y7lfe4pgekgwpjwtsh7y.ipfs.gwei.cz](https://bafybeiddx4e2yyur3kjyppcvcg2nb7yxrxs2b2y7lfe4pgekgwpjwtsh7y.ipfs.gwei.cz))
|
||||
|
||||
The [IPFS](https://ipfs.io/) addresses of the major versions are stored directly in the `ethbrno.eth` [ENS](https://ens.domains/) record. You can access the site using these gateways:
|
||||
* [ethbrno.eth.link](https://ethbrno.eth.link)
|
||||
* [ethbrno.eth.limo](https://ethbrno.eth.limo)
|
||||
|
||||
## Authors
|
||||
* vorcigernix
|
@ -0,0 +1 @@
|
||||
../static/photos
|
@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "eb2-website",
|
||||
"version": "v2022-10-16",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "npm run make-data && vite build",
|
||||
"preview": "vite preview",
|
||||
"test": "playwright test",
|
||||
"lint": "prettier --plugin-search-dir . --check . && eslint .",
|
||||
"format": "prettier --plugin-search-dir . --write .",
|
||||
"make-data": "node ./scripts/make-data.js",
|
||||
"ipfs-deploy": "npx -y --loglevel=error github:burningtree/ipfs-cluster-deploy ./build ethbrno-web",
|
||||
"postinstall": "npx playwright install --with-deps chromium"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.25.0",
|
||||
"@sveltejs/adapter-auto": "next",
|
||||
"@sveltejs/adapter-static": "next",
|
||||
"@sveltejs/kit": "next",
|
||||
"autoprefixer": "^10.4.12",
|
||||
"eslint": "^8.16.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-svelte3": "^4.0.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"postcss": "^8.4.17",
|
||||
"prettier": "^2.6.2",
|
||||
"prettier-plugin-svelte": "^2.7.0",
|
||||
"svelte": "^3.44.0",
|
||||
"svelte-preprocess": "^4.10.7",
|
||||
"tailwindcss": "^3.1.8",
|
||||
"vite": "^3.1.0"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"snarkdown": "^2.0.0"
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
/** @type {import('@playwright/test').PlaywrightTestConfig} */
|
||||
const config = {
|
||||
use: {
|
||||
browserName: 'chromium',
|
||||
headless: true,
|
||||
},
|
||||
webServer: {
|
||||
command: 'npm run build && npm run preview',
|
||||
port: 4173
|
||||
}
|
||||
};
|
||||
|
||||
export default config;
|
@ -0,0 +1,6 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
import yaml from 'js-yaml'
|
||||
import fs from 'fs'
|
||||
|
||||
const DATA_FILE = './data/data.yaml'
|
||||
const DATA_OUTPUT = './src/lib/data.json'
|
||||
const DATA_STATIC_OUTPUT = './static/data.json'
|
||||
const PKG_FILE = './package.json'
|
||||
const VERSION_PATTERN = /^v\d{4}-\d{2}-\d{2}$/
|
||||
|
||||
function gen() {
|
||||
// load data
|
||||
const data = yaml.load(fs.readFileSync(DATA_FILE))
|
||||
const pkg = JSON.parse(fs.readFileSync(PKG_FILE))
|
||||
|
||||
if (!pkg.version.match(VERSION_PATTERN)) {
|
||||
console.error(`Version not match pattern [${VERSION_PATTERN}]: ${pkg.version}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// add generation time
|
||||
data.time = new Date
|
||||
data.version = pkg.version
|
||||
|
||||
// write to json
|
||||
fs.writeFileSync(DATA_OUTPUT, JSON.stringify(data, null, 2))
|
||||
console.log(`Writed: ${DATA_OUTPUT}`)
|
||||
|
||||
// write to json (static)
|
||||
fs.writeFileSync(DATA_STATIC_OUTPUT, JSON.stringify(data, null, 2))
|
||||
console.log(`Writed: ${DATA_STATIC_OUTPUT}`)
|
||||
}
|
||||
|
||||
gen()
|
@ -0,0 +1,87 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@layer components {
|
||||
.header {
|
||||
@apply sm:text-4xl text-3xl mb-4 font-medium text-white;
|
||||
}
|
||||
.subhead {
|
||||
@apply text-xl md:text-3xl my-2;
|
||||
}
|
||||
.list {
|
||||
@apply text-white
|
||||
}
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url('/fonts/roboto-mono-v22-latin-300.woff2'), url('https://fonts.gstatic.com/s/robotomono/v22/L0x5DF4xlVMF-BfR8bXMIjhLq38.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url('/fonts/roboto-mono-v22-latin-regular.woff2'), url('https://fonts.gstatic.com/s/robotomono/v22/L0x5DF4xlVMF-BfR8bXMIjhLq38.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url('/fonts/roboto-mono-v22-latin-700.woff2'), url('https://fonts.gstatic.com/s/robotomono/v22/L0x5DF4xlVMF-BfR8bXMIjhLq38.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
font-family: 'Roboto Mono', monospace;
|
||||
background: white;
|
||||
scrollbar-width: none;
|
||||
scrollbar-color: black;
|
||||
}
|
||||
|
||||
.serif {
|
||||
font-family: 'Roboto Slab', serif;
|
||||
}
|
||||
|
||||
.hyph {
|
||||
overflow-wrap: break-word;
|
||||
hyphens: manual;
|
||||
-webkit-hyphenate-character: "...";
|
||||
hyphenate-character: "...";
|
||||
}
|
||||
|
||||
.clippic {
|
||||
clip-path: polygon(85% 0%, 100% 20%, 100% 100%, 0% 100%, 0% 0%);
|
||||
}
|
||||
|
||||
@layer components {
|
||||
.active {
|
||||
@apply underline;
|
||||
}
|
||||
}
|
||||
|
||||
.external::after {
|
||||
padding-left: 10px;
|
||||
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13.5' height='13.5' aria-hidden='true' viewBox='0 0 24 24' class='iconExternalLink_nPIU'%3E%3Cpath fill='currentColor' d='M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z'%3E%3C/path%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.external.text-white::after {
|
||||
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13.5' height='13.5' aria-hidden='true' viewBox='0 0 24 24' class='iconExternalLink_nPIU'%3E%3Cpath fill='white' d='M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z'%3E%3C/path%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.contributor-remote::after {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
margin-left: 3px;
|
||||
content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='white' %3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M12 21a9.004 9.004 0 008.716-6.747M12 21a9.004 9.004 0 01-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 017.843 4.582M12 3a8.997 8.997 0 00-7.843 4.582m15.686 0A11.953 11.953 0 0112 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0121 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0112 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 013 12c0-1.605.42-3.113 1.157-4.418' /%3E%3C/svg%3E");
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
%sveltekit.head%
|
||||
<link rel="icon" href="%sveltekit.assets%/icons/favicon-32x32.png" />
|
||||
<meta name="description" content="November 11 - 13, 2022, Impact Hub / Clubco, Brno, Czech Republic - Lunarpunk hackathon focused on privacy and security. We believe that privacy is a fundamental human right. And good privacy needs good security foundations." />
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
|
||||
<!-- Facebook Meta Tags -->
|
||||
<meta property="og:url" content="https://ethbrno.cz/">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="ETHBrno² 2022">
|
||||
<meta property="og:description" content="November 11 - 13, 2022, Impact Hub / Clubco, Brno, Czech Republic - Lunarpunk hackathon focused on privacy and security. We believe that privacy is a fundamental human right. And good privacy needs good security foundations.">
|
||||
<meta property="og:image" content="https://ethbrno.pages.dev/ogbrno.png">
|
||||
|
||||
<!-- Twitter Meta Tags -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta property="twitter:domain" content="ethbrno.cz">
|
||||
<meta property="twitter:url" content="https://ethbrno.pages.dev/">
|
||||
<meta name="twitter:title" content="ETHBrno² 2022">
|
||||
<meta name="twitter:description" content="November 11 - 13, 2022, Impact Hub / Clubco, Brno, Czech Republic - Lunarpunk hackathon focused on privacy and security. We believe that privacy is a fundamental human right. And good privacy needs good security foundations.">
|
||||
<meta name="twitter:image" content="https://dev.ethbrno.cz/ogbrno.png">
|
||||
|
||||
<!-- Plausible -->
|
||||
<script defer data-domain="ethbrno.cz" src="https://x.gwei.cz/js/script.js"></script>
|
||||
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div>%sveltekit.body%</div>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -0,0 +1,59 @@
|
||||
<script>
|
||||
import logo from '$lib/assets/logo_black.svg';
|
||||
import cityscape from '$lib/assets/cityscape2.png';
|
||||
import { time } from '$lib/data.json';
|
||||
|
||||
const options = {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
hour: 'numeric',
|
||||
minute: 'numeric',
|
||||
second: 'numeric',
|
||||
timeZone: 'Europe/Prague'
|
||||
};
|
||||
</script>
|
||||
|
||||
<footer class="bg-black mx-auto">
|
||||
<div class="pt-12">
|
||||
<img src={cityscape} alt="cityscape" class="object-cover w-full" />
|
||||
</div>
|
||||
<div class="bg-white flex flex-col justify-end">
|
||||
<div
|
||||
class="container mx-auto px-4 flex flex-wrap flex-col sm:flex-row justify-center items-center mt-20"
|
||||
>
|
||||
<div>
|
||||
<img src={logo} class=" h-6" alt="logo" />
|
||||
</div>
|
||||
|
||||
<div class="md:inline-flex gap-10 sm:ml-auto sm:mt-0 mt-10 justify-center sm:justify-start">
|
||||
<div class="flex justify-center">
|
||||
<a class="text-black external" href="https://docs.ethbrno.cz/events/2022" rel="noopener noreferrer"
|
||||
>Documentation
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex justify-center">
|
||||
<a
|
||||
class="text-black external"
|
||||
href="https://twitter.com/ethbrno"
|
||||
rel="noopener noreferrer"
|
||||
>Twitter
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex justify-center">
|
||||
/join
|
||||
<a class="text-black external" href="https://matrix.ethbrno.cz" rel="noopener noreferrer"
|
||||
>#ethbrno:gwei.cz
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-black text-center my-16 text-sm opacity-50 leading-7">
|
||||
<a href="https://git.gwei.cz/ethbrno/eb2-website" target="_blank" class="external"
|
||||
>Source code</a
|
||||
>
|
||||
- Generated @ {new Date(time).toLocaleString('en-GB', options)} (UTC+2)
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
@ -0,0 +1,83 @@
|
||||
<script>
|
||||
/**
|
||||
* @type {boolean}
|
||||
*/
|
||||
export let open;
|
||||
import logo from '$lib/assets/logo_black.svg';
|
||||
import { page } from '$app/stores';
|
||||
</script>
|
||||
|
||||
<nav class="flex flex-wrap items-center justify-center py-6 bg-white mx-auto sticky top-0 z-50">
|
||||
<div class="container flex flex-wrap items-center justify-between xl:max-w-screen-xl px-3">
|
||||
<div class="w-full relative flex justify-between xl:w-auto xl:static xl:block xl:justify-start">
|
||||
<a class="text-sm leading-relaxed flex items-center justify-center" href="/" on:click={() => (open = false)}>
|
||||
<img src={logo} alt="logo" class="w-[145px] h-[54px] md:mr-14 ml-4 md:ml-0" />
|
||||
</a>
|
||||
<button
|
||||
class="text-black cursor-pointer text-xl leading-none px-3 py-1 border border-solid border-transparent rounded bg-transparent block xl:hidden outline-none focus:outline-none"
|
||||
type="button"
|
||||
on:click={() => (open = !open)}
|
||||
>
|
||||
☰
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class={open ? 'block w-full' : 'xl:flex flex-grow items-center hidden'}
|
||||
id="navbar"
|
||||
>
|
||||
|
||||
<div class="text-sm pt-10 xl:pt-0 pl-4 xl:pl-0">
|
||||
<strong>November 11 - 13, 2022</strong><br />
|
||||
Brno, Czech Republic
|
||||
</div>
|
||||
<div class="flex flex-grow items-center">
|
||||
<ul
|
||||
class="flex flex-col xl:flex-row xl:flex-grow-0 xl:mt-0 list-none xl:ml-auto text-base flex-grow my-8 xl:my-0"
|
||||
>
|
||||
<li>
|
||||
<a
|
||||
href="/"
|
||||
class="px-5 py-2 flex items-center leading-snug text-black hover:opacity-75" on:click={() => (open = false)}
|
||||
class:active={$page.url.pathname === '/'}>Home</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="/venues"
|
||||
class="px-5 py-2 flex items-center leading-snug text-black hover:opacity-75" on:click={() => (open = false)}
|
||||
class:active={$page.url.pathname === '/venues/'}>Venues</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="/contributors"
|
||||
class="px-5 py-2 flex items-center leading-snug text-black hover:opacity-75" on:click={() => (open = false)}
|
||||
class:active={$page.url.pathname.match(/^\/contributors\//)}
|
||||
>Contributors</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://matrix.ethbrno.cz"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
on:click={() => (open = false)}
|
||||
class="px-5 py-2 flex items-center leading-snug text-black hover:opacity-75 external">Chat</a
|
||||
>
|
||||
</li>
|
||||
<li class="pl-0 xl:pl-5">
|
||||
<a
|
||||
href="https://join.ethbrno.cz"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
on:click={() => (open = false)}
|
||||
class="px-5 py-2 flex items-center bg-black text-white leading-snug hover:opacity-75 external"
|
||||
>Join</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 6.4 KiB |
@ -0,0 +1,8 @@
|
||||
/** @type {import('./$types').PageLoad} */
|
||||
export const prerender = true;
|
||||
|
||||
export async function load() {
|
||||
return {
|
||||
title: 'ETHBrno² 2022'
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
<script>
|
||||
import '../app.css';
|
||||
import Navigation from '$lib/Navigation.svelte';
|
||||
import Footer from '$lib/Footer.svelte';
|
||||
</script>
|
||||
|
||||
<Navigation open={false} />
|
||||
<slot />
|
||||
<Footer />
|
@ -0,0 +1,171 @@
|
||||
<script>
|
||||
import { sponsors } from '$lib/data.json';
|
||||
|
||||
const tiers = [
|
||||
{
|
||||
id: 'schnorr',
|
||||
name: 'Schnorr'
|
||||
},
|
||||
{
|
||||
id: 'ecdsa',
|
||||
name: 'ECDSA'
|
||||
},
|
||||
{
|
||||
id: 'aes',
|
||||
name: 'AES'
|
||||
},
|
||||
{
|
||||
id: '3des',
|
||||
name: '3DES'
|
||||
},
|
||||
{
|
||||
id: 'community',
|
||||
name: 'Community'
|
||||
}
|
||||
];
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>ETHBrno² 2022</title>
|
||||
</svelte:head>
|
||||
<section class="text-gray-400 bg-black border-b">
|
||||
<div class="w-full mx-auto flex md:flex-row md:h-5/6 flex-col items-center">
|
||||
<div class="md:w-5/12 md:mb-0 mb-4 md:flex justify-center md:h-[800px] bg-white">
|
||||
<img src="cam2.png" class="object-cover object-center invert -ml-20 md:ml-0 md:invert-0 -mt-20 md:mt-0" alt="cam" />
|
||||
</div>
|
||||
<div
|
||||
class="md:w-5/12 xl:pr-16 md:pr-4 pt-4 flex flex-col md:items-start md:text-left mx-auto items-center text-center text-white transition-transform px-4 md:px-0"
|
||||
>
|
||||
<img src="logo.svg" class="md:-ml-4 p-2 md:p-0 w-[250px] md:w-[343px] " alt="logo" />
|
||||
<p class="text-xl md:text-3xl my-2">privacy {`&`} security edition</p>
|
||||
<p class="text-base md:text-xl">NOVEMBER 11-13, 2022</p>
|
||||
<p class="text-base md:text-xl">Brno, Czech republic</p>
|
||||
<div class="h-[1px] bg-white w-full my-2 opacity-20" />
|
||||
<p class="mb-8 py-4 leading-relaxed opacity-30 text-sm md:text-lg font-light" data-testid="tags">
|
||||
#freedom #anonymity #non-kyc #encryption #selfsovereignty #p2p #opensource #web3
|
||||
#smartcontracts #audits #vulnerabilities #analytics #wallets #scams #darkforest #mev
|
||||
#zeroknowledgeproofs #cypherpunk #lunarpunk #hackathon
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="text-black bg-white body-font border-b">
|
||||
<div class="container mx-auto flex px-5 py-12 md:py-24 md:flex-row flex-col items-center">
|
||||
<div
|
||||
class="xl:flex-grow md:w-1/2 xl:pl-32 md:pl-16 xl:pr-32 md:pr-16 flex flex-col md:items-start md:text-left mb-16 md:mb-0 items-center text-center"
|
||||
>
|
||||
<h1 class="md:text-5xl text-3xl font-bold mb-4">About</h1>
|
||||
|
||||
<p class="mb-8 leading-relaxed">
|
||||
<a href="https://docs.ethbrno.cz" target="_blank">ETHBrno²</a> is an annual independent {`&`}
|
||||
open community hackathon for supporters of decentralised finance, smart contracts and Web3 happening
|
||||
in
|
||||
<a href="https://en.wikipedia.org/wiki/Brno" target="_blank" class="external"
|
||||
>Brno, Czech Republic</a
|
||||
>. ETHBrno² is the second, and we believe the best yet, edition.
|
||||
</p>
|
||||
|
||||
<!--p class="mb-8 leading-relaxed">
|
||||
ETHBrno² events are organized by <a href="https://gwei.cz" target="_blank" class="external">Gwei.cz community</a>
|
||||
with the help of the <a href="https://utxo.foundation" target="_blank" class="external">UTXO Foundation</a>.
|
||||
</p-->
|
||||
|
||||
<p class="mb-8 leading-relaxed">
|
||||
This year we are focusing on <strong>privacy and security</strong> topics.
|
||||
</p>
|
||||
|
||||
<p class="mb-8 leading-relaxed">
|
||||
You can read more in the article <a
|
||||
href="https://mirror.xyz/ethbrno.eth/6BH9cUVuD85hy5O0L5cOOOE7niSA9Yo5eWsXVzKOlO4"
|
||||
target="_blank"
|
||||
class="external">"Announcing ETHBrno²" on Mirror</a
|
||||
>.
|
||||
</p>
|
||||
|
||||
<div class="flex justify-center flex-wrap">
|
||||
<a
|
||||
href="https://join.ethbrno.cz/"
|
||||
class="inline-flex text-white bg-black border-0 py-2 px-6 focus:outline-none hover:bg-gray-900 text-lg external"
|
||||
>Apply To Hack</a
|
||||
>
|
||||
<a
|
||||
href="https://ethbrno.cz/sponsor-deck.pdf"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="ml-4 inline-flex border-0 py-2 px-6 focus:outline-none hover:bg-gray-100 text-lg underline external"
|
||||
>Sponsor</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="xl:max-w-lg xl:w-full md:w-1/2 w-[300px]">
|
||||
<img class="object-cover object-center" alt="hero" src="key.png" />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto flex px-5 py-12 md:py-24 md:flex-row flex-col-reverse items-center">
|
||||
<div class="xl:max-w-lg xl:w-full md:w-1/2 w-[150px] md:mb-0 mt-10 md:mb-10 flex justify-center">
|
||||
<img class="object-cover object-center" alt="hero" src="lock.png" />
|
||||
</div>
|
||||
<div
|
||||
class="xl:flex-grow md:w-1/2 xl:pl-32 md:pl-2 xl:pr-32 md:pr-8 flex flex-col md:items-start md:text-left items-center text-center"
|
||||
>
|
||||
<h1 class="md:text-5xl text-3xl mb-4 font-bold text-white">Manifesto</h1>
|
||||
<p class="mb-4 leading-relaxed">
|
||||
We believe that privacy is a fundamental human right. And good privacy needs good security
|
||||
foundations. Especially today, in a digital age full of people, organizations or governments
|
||||
that want to control you, your money or your data. Therefore, the second edition of ETHBrno
|
||||
(ETHBrno²) will be mainly dedicated to these important topics ― privacy & security.
|
||||
</p>
|
||||
<p class="mb-4 leading-relaxed">
|
||||
Our hackathon is for everyone who understands the urgency of these issues and wants to help.
|
||||
We want to present the current progress in this sector as well as the projects, technologies
|
||||
and people involved. We are Ethereum people, but we welcome creators and fans of all
|
||||
blockchains and directions.
|
||||
</p>
|
||||
<p class="mb-4 leading-relaxed">
|
||||
Let's learn together to defend against all threats, whether it's loss of privacy and state
|
||||
oppression, smart-contract exploits or simple phishing scams. Let's learn how to analyse
|
||||
them retrospectively. Let's learn how to use the right tools, and if we don't have them,
|
||||
let's create them together.
|
||||
</p>
|
||||
<p class="leading-relaxed">Don't Trust. Verify. - Run a node - Protect privacy</p>
|
||||
<p class="mt-8 leading-relaxed">
|
||||
<a
|
||||
href="https://docs.ethbrno.cz/events/2022/hackathon"
|
||||
class="inline-flex text-black bg-white border-0 py-2 px-6 focus:outline-none hover:bg-gray-600 text-lg external"
|
||||
>Read more about hackathon</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto flex px-5 py-24 md:flex-row flex-col items-center">
|
||||
<div
|
||||
class="flex-grow w-full px-4 md:px-0 xl:pl-32 md:pl-16 xl:pr-32 md:pr-16 flex flex-col md:items-start md:text-left items-center text-center"
|
||||
>
|
||||
<h1 class="md:text-5xl text-3xl mb-8 font-bold text-white">Sponsors</h1>
|
||||
{#each tiers as tier, tierNumber}
|
||||
<div class="mb-4 flex flex-row w-full items-center">
|
||||
<p class="leading-relaxed font-bold whitespace-nowrap">{tier.name}</p>
|
||||
<div class="border-b border-white border-dashed w-full ml-4 opacity-30" />
|
||||
<p class="whitespace-nowrap ml-4 opacity-30">Tier {tierNumber}</p>
|
||||
</div>
|
||||
<div
|
||||
class="flex flex-col md:flex-row items-center justify-center w-full md:m-6 border-l border-white/30"
|
||||
>
|
||||
{#each sponsors.filter((x) => x.tier.includes(tier.id)) as sponsor}
|
||||
<a href={sponsor.url} rel="noopener noreferrer" target="_blank" alt="link to">
|
||||
<img
|
||||
class="w-60 m-6"
|
||||
src="/photos/sponsors/{sponsor.id}.png"
|
||||
alt="{sponsor.name} Logo"
|
||||
/>
|
||||
</a>
|
||||
{/each}
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -0,0 +1,19 @@
|
||||
/** @type {import('./$types').PageLoad} */
|
||||
|
||||
import { error } from '@sveltejs/kit';
|
||||
import { contributorTypes, contributors } from '$lib/data.json';
|
||||
export const prerender = true;
|
||||
|
||||
export async function load({ parent, params }) {
|
||||
let type = params.type.replace(/\//, "");
|
||||
if (!type.trim()) {
|
||||
type = 'all'
|
||||
}
|
||||
|
||||
const typeConfig = contributorTypes[type]
|
||||
if (!typeConfig) {
|
||||
throw error(404, 'Not found');
|
||||
}
|
||||
|
||||
return { type, typeConfig, contributors, contributorTypes }
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
<script>
|
||||
//import { contributors, contributorTypes } from '$lib/data.json';
|
||||
import { base } from '$app/paths';
|
||||
import { onMount } from 'svelte';
|
||||
export let data;
|
||||
function wrapContributor(c) {
|
||||
if (c.twitter) {
|
||||
c.link = 'https://twitter.com/' + c.twitter;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
onMount(async () => {
|
||||
//console.log(data.contributors);
|
||||
const response = await fetch(`${base}/data.json`);
|
||||
const result = await response.json();
|
||||
data.contributors = result.contributors;
|
||||
//console.log(data.contributors);
|
||||
});
|
||||
|
||||
$: filteredContributors = data.contributors
|
||||
.filter((c) => data.type === 'all' || c.roles.includes(data.typeConfig.role))
|
||||
.sort((a, b) => 0.5 - Math.random())
|
||||
.map(wrapContributor);
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Contributors{data.type !== 'all' ? `: ${data.typeConfig.title}` : ''} | ETHBrno²</title>
|
||||
</svelte:head>
|
||||
|
||||
<section
|
||||
class="text-white body-font bg-black px-2 py-6 md:py-12 flex justify-center flex-row overflow-x-scroll flex-wrap text-sm md:text-base"
|
||||
>
|
||||
{#each Object.entries(data.contributorTypes) as [ctKey, ct]}
|
||||
<a
|
||||
href="/contributors/{ctKey === 'all' ? '' : ctKey}"
|
||||
class="px-3 py-2 md:px-5 md:py-2 border m-2 {ctKey === data.type
|
||||
? 'text-black bg-white'
|
||||
: 'hover:outline-none hover:bg-gray-600'}">{ct.title}</a
|
||||
>
|
||||
{/each}
|
||||
</section>
|
||||
<section class="text-gray-400 body-font bg-black py-6 md:py-12">
|
||||
<div class=" px-5 mx-auto">
|
||||
<div class="flex flex-wrap justify-center" data-testid="list">
|
||||
{#if filteredContributors.length > 0}
|
||||
{#each filteredContributors as item}
|
||||
<div class="bg-black bg-opacity-40 p-6 h-full w-full md:w-1/3 lg:w-1/4">
|
||||
<a href={item.link} target="_blank">
|
||||
<img
|
||||
class="h-40 md:h-60 w-full object-cover object-center mb-6 grayscale hover:grayscale-0"
|
||||
loading="lazy"
|
||||
src={`/photos/contributors/${item.id}.jpg`}
|
||||
alt={item.desc}
|
||||
/>
|
||||
</a>
|
||||
<h3
|
||||
class="tracking-widest text-gray-400 text-xs font-medium title-font flex flex-row divide-x"
|
||||
>
|
||||
{#each item.roles as role}
|
||||
<span class="underline">{role}</span>
|
||||
{/each}
|
||||
</h3>
|
||||
<div class="flex flex-row mb-2 {item.remote ? 'contributor-remote' : ''}">
|
||||
<a class="text-lg text-white font-medium title-font" href={item.link} target="_blank">
|
||||
{item.name}
|
||||
{#if item.nickname}
|
||||
({item.nickname})
|
||||
{/if}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p class="leading-relaxed text-sm">{item.bio}</p>
|
||||
</div>
|
||||
{/each}
|
||||
{:else}
|
||||
<div class="p-6">Nobody's here yet.</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -0,0 +1,13 @@
|
||||
/** @type {import('./$types').PageLoad} */
|
||||
|
||||
import { error } from '@sveltejs/kit';
|
||||
import snarkdown from 'snarkdown';
|
||||
|
||||
|
||||
export async function load({ fetch }) {
|
||||
const response = await fetch("https://raw.githubusercontent.com/ethbrno/docs/master/events/2022/hackathon/hacker-manual-wip.md").then((r) => r.text());
|
||||
//console.log(response);
|
||||
const compiledResponse = await snarkdown(response);
|
||||
//console.log('compiledResponse is: ', compiledResponse);
|
||||
return { content: compiledResponse };
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
<script>
|
||||
export let data;
|
||||
</script>
|
||||
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto py-12 md:py-24 xl:max-w-screen-xl md:px-0 px-4">
|
||||
<div class="[&_h1]:header [&_h2]:subhead [&_li]:list [&_h3]:font-bold">
|
||||
{@html data.content}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -0,0 +1,111 @@
|
||||
<script>
|
||||
export let data;
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Venues | {data.title}</title>
|
||||
</svelte:head>
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto flex py-12 md:py-24 md:flex-row flex-col items-center xl:max-w-screen-xl md:px-0 px-4">
|
||||
<div
|
||||
class="xl:flex-grow xl:pr-24 md:pr-16 flex flex-col lg:items-start lg:text-left mb-16 md:mb-0 items-center text-center"
|
||||
>
|
||||
<h1 class="title-font sm:text-4xl text-3xl mb-4 font-medium text-white">
|
||||
<a href="https://www.hubbrno.cz/en/" class="hover:underline"> Impact Hub Brno </a>
|
||||
</h1>
|
||||
<p class="leading-relaxed text-white">Opening hours:</p>
|
||||
<p class="leading-relaxed mb-5 text-white">Fri Nov 11 13:00 - Sun Nov 13 20:00 (nonstop!)</p>
|
||||
<div class="leading-relaxed relative mb-4">
|
||||
The main venue will be a modern coworking space called Impact Hub, just a few minutes walk
|
||||
from the city centre and the main train station. In less than 7 years of its existence, it
|
||||
has become an important part of Brno's freelancing community, inspiring and connecting many
|
||||
people. Great place for our hackathon, don't you think?
|
||||
</div>
|
||||
<div class="leading-relaxed relative mb-4">
|
||||
Impact Hub will serve as the main basecamp for the hackathon and will be available for
|
||||
hackers all day 24/7.
|
||||
</div>
|
||||
<div class="leading-relaxed relative mb-4">
|
||||
You'll have everything you might need - different work areas (single or team, sitting or
|
||||
standing), fast internet, power sockets everywhere, meeting rooms, refreshments and much
|
||||
more. We want you to feel as comfortable as possible and we will do everything we can to
|
||||
make that happen.
|
||||
</div>
|
||||
<div class="flex flex-wrap justify-center gap-4">
|
||||
<a
|
||||
href="https://www.openstreetmap.org/way/339769163"
|
||||
target="_blank"
|
||||
class="inline-flex text-black bg-white border-0 py-2 px-6 focus:outline-none hover:bg-gray-600 text-lg external"
|
||||
>
|
||||
OpenStreetMap
|
||||
</a>
|
||||
<a
|
||||
href="https://goo.gl/maps/8bKsGHhVSYrF8ZmE8"
|
||||
target="_blank"
|
||||
class="inline-flex text-black bg-white border-0 py-2 px-6 focus:outline-none hover:bg-gray-600 text-lg external"
|
||||
>
|
||||
Google Maps
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="xl:max-w-lg xl:w-full w-5/6 flex md:justify-end">
|
||||
<img
|
||||
class="object-cover object-center "
|
||||
decoding="async"
|
||||
loading="lazy"
|
||||
src="/venues/ihhero.png"
|
||||
alt="venue"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto flex py-12 md:py-24 md:flex-row flex-col-reverse items-center xl:max-w-screen-xl md:px-0 px-4">
|
||||
<div class="xl:max-w-lg xl:w-full md:w-1/2 w-5/6 md:mb-0 mt-10 md:mt-0">
|
||||
<img
|
||||
class="object-cover object-center grayscale hover:grayscale-0"
|
||||
decoding="async"
|
||||
loading="lazy"
|
||||
src="/venues/cc1.png"
|
||||
alt="venue"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="xl:flex-grow md:w-1/2 xl:pl-24 md:pl-16 flex flex-col md:items-start md:text-left items-center text-center"
|
||||
>
|
||||
<h1 class="title-font sm:text-4xl text-3xl mb-4 font-medium text-white">Clubco Brno</h1>
|
||||
<p class="leading-relaxed text-white">Opening hours:</p>
|
||||
<p class="leading-relaxed mb-5 text-white">
|
||||
Fri Nov 11: 14:30 - 22:00, Sat Nov 10: 9:00 - 22:00, Sun Nov 13: 9:00 - 17:00
|
||||
</p>
|
||||
<p class="relative mb-4">
|
||||
Additional venue, only 5 minutes walk (400m) from the main venue (Impact Hub).
|
||||
</p>
|
||||
{' '}
|
||||
<p class="relative mb-4">
|
||||
It will be an additional space for hackers that offers another style, with private meeting
|
||||
rooms and open workspaces. It also includes an event space where additional workshops and
|
||||
lectures will be held.
|
||||
</p>
|
||||
<div class="relative mb-4">
|
||||
This location will NOT be open 24/7, you will need to move to the Impact Hub for the night.
|
||||
</div>
|
||||
<div class="flex flex-wrap justify-center gap-4">
|
||||
<a
|
||||
href="https://www.openstreetmap.org/node/8848071783"
|
||||
target="_blank"
|
||||
class="inline-flex text-black bg-white border-0 py-2 px-6 focus:outline-none hover:bg-gray-600 text-lg external"
|
||||
>
|
||||
OpenStreetMap
|
||||
</a>
|
||||
<a
|
||||
href="https://g.page/clubco-brno"
|
||||
target="_blank"
|
||||
class="inline-flex text-black bg-white border-0 py-2 px-6 focus:outline-none hover:bg-gray-600 text-lg external"
|
||||
>
|
||||
Google Maps
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -0,0 +1,4 @@
|
||||
<h1>We need JavaScript</h1>
|
||||
<p>You reached part of the web that use javascript to fetch the data from external sources. When we had a choice between
|
||||
making javascript mandatory and using a centralized infrastructure, we picked prior. Apologies for any
|
||||
inconvenience.</p>
|
After Width: | Height: | Size: 57 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 704 B |
@ -0,0 +1,16 @@
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//ICalendarCreator//NONSGML//EN
|
||||
BEGIN:VEVENT
|
||||
DTSTART;VALUE=DATE:20221111
|
||||
DTEND;VALUE=DATE:20221113
|
||||
SUMMARY:ETHBrno
|
||||
LOCATION:Impact Hub, Brno
|
||||
DESCRIPTION:ETHBrno² is an annual independent & open community hackathon (former conference) for supporters of decentralised finance, smart contracts and Web3 happening in Brno, Czech Republic. ETHBrno² is the second, and we believe the best yet, edition.
|
||||
BEGIN:VALARM
|
||||
TRIGGER:-PT7D
|
||||
ACTION:DISPLAY
|
||||
DESCRIPTION:ETHBrno
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 337 B |
After Width: | Height: | Size: 598 B |
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "ETH Brno volume 2",
|
||||
"short_name": "ETHBrno",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/icons/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/icons/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#000",
|
||||
"background_color": "#000",
|
||||
"display": "standalone"
|
||||
}
|
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 679 B |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 241 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 15 KiB |