Porovnat revize
162 Commity
v2022-10-1
...
main
Autor | SHA1 | Datum |
---|---|---|
tree | 63c4c8134c | |
tree | 5c86dc1fcc | |
tree | 80dd0f9763 | |
tree | f1947300a7 | |
tree | 5ed49deab1 | |
tree | 00c17974f3 | |
tree | fca0d9f068 | |
tree | 79a11ba98e | |
tree | 55ab6a0a2c | |
Adam Sobotka | fc8b4dc838 | |
Adam Sobotka | 59d3c29aa0 | |
Adam Sobotka | 8fe6f6ce0b | |
tree | 65d2388f95 | |
tree | 6a0e7609d2 | |
tree | 297dd262f7 | |
Adam Sobotka | c7207988dc | |
tree | 2b5954d9a5 | |
tree | 4f8f46bb27 | |
tree | d6075eb29c | |
tree | e4f81224a4 | |
terka | f06994923f | |
terka | 7cf42eb9f0 | |
tree | 403efb82dc | |
Adam Sobotka | 4a3b3acaf7 | |
Adam Sobotka | a09f7904ef | |
Adam Sobotka | 1b287ba682 | |
tree | c9c4cd89b9 | |
tree | 6c82c76ced | |
tree | 78a166e42d | |
tree | 7fdd2443f2 | |
tree | f7aa1574c9 | |
terka | 25cb86ce2c | |
tree | 9720b64d2e | |
tree | 14ebb713e3 | |
tree | df9e3d7b8f | |
tree | 7f662b2ab9 | |
Adam Sobotka | 110c944d7d | |
Adam Sobotka | 1961cd31f4 | |
Adam Sobotka | 03578de1db | |
Adam Sobotka | 9abf68f586 | |
tree | 009c84be9a | |
tree | 8a8045b5dd | |
tree | 2fc9670fb8 | |
Adam Sobotka | f2ef5be996 | |
Adam Sobotka | daebcb790d | |
Adam Sobotka | f0206ab56e | |
tree | 3e0c6679ab | |
tree | 343bb639a2 | |
tree | e2d206d245 | |
tree | e077eb7cbb | |
Adam Sobotka | eb2a6d9d78 | |
Adam Sobotka | dd712f54d4 | |
Adam Sobotka | eb4bb555a6 | |
tree | 47e4a5fb0e | |
tree | e130734d7f | |
Adam Sobotka | 03a0f8ed9c | |
Adam Sobotka | 6732f79112 | |
tree | b40713931f | |
tree | dab4624e8d | |
Adam Sobotka | 9c93131b15 | |
Adam Sobotka | 6514e4e1e8 | |
Adam Sobotka | abd2c842e4 | |
Adam Sobotka | fbf2cdf03c | |
Adam Sobotka | cb7bb0dc33 | |
Adam Sobotka | efe0755d20 | |
tree | 49369494fa | |
tree | ce3de00a87 | |
tree | 3f48b3c9fe | |
tree | fbe43da8b0 | |
tree | 1a685b64c4 | |
tree | d3b322d7b2 | |
tree | 054efb9f20 | |
tree | 09b3ec8fa0 | |
Adam Sobotka | bde429694e | |
Adam Sobotka | b5f03f73cd | |
Adam Sobotka | 296488d3e2 | |
tree | 2cc36ca979 | |
tree | 662d915475 | |
tree | 9c8b77ccc6 | |
Adam Sobotka | 51a11e4335 | |
Adam Sobotka | 359c2851bf | |
tree | 88d78e2122 | |
tree | 4ab1d757d5 | |
Adam Sobotka | 4126d0cedb | |
Adam Sobotka | 07916e7826 | |
Adam Sobotka | bbf796673e | |
Adam Sobotka | 077006f776 | |
Adam Sobotka | ed0f0370d1 | |
Adam Sobotka | 30added2c0 | |
Adam Sobotka | df1bafbcaa | |
Adam Sobotka | 88b64d52dc | |
Adam Sobotka | 94c4780e1a | |
Adam Sobotka | 213bec0e10 | |
Adam Sobotka | 8a12e9861a | |
Adam Sobotka | cf0ac38771 | |
tree | f841772edb | |
Adam Sobotka | 7d4b6dff01 | |
tree | 9984e26704 | |
Adam Sobotka | dfee2189de | |
Adam Sobotka | 3a3571aacf | |
Adam Sobotka | 479011b8a8 | |
Adam Sobotka | cfa68b3f20 | |
Adam Sobotka | dbd759e858 | |
Adam Sobotka | 9db7d84bc2 | |
Adam Sobotka | 8a3d1e5c27 | |
Adam Sobotka | 0708b19cc2 | |
Adam Sobotka | 348fba5692 | |
Adam Sobotka | 937ca5d30c | |
Adam Sobotka | 79dfaae20d | |
Adam Sobotka | 824c7654c2 | |
Adam Sobotka | fb2426bdbc | |
tree | 7fd2014f7b | |
Adam Sobotka | 17cee95450 | |
Adam Sobotka | cc2f621078 | |
Adam Sobotka | 6760fab59d | |
Adam Sobotka | 60e5b8cf2e | |
Adam Sobotka | 56abf8e83f | |
Adam Sobotka | afe283c036 | |
Adam Sobotka | f962ace3db | |
Adam Sobotka | d2703bebae | |
Adam Sobotka | 9ec1becacb | |
Adam Sobotka | 29218c6bdf | |
Adam Sobotka | 061d612034 | |
Adam Sobotka | e10e366148 | |
Adam Sobotka | f283716c3a | |
Adam Sobotka | ceca0a9f48 | |
Adam Sobotka | 0fde958608 | |
Adam Sobotka | 126f6d6484 | |
Adam Sobotka | 5ac232ad60 | |
Adam Sobotka | e3ae228007 | |
Adam Sobotka | 228a82372e | |
Adam Sobotka | 6916c624f3 | |
tree | f047cfc14f | |
Adam Sobotka | 41c82e1cf0 | |
tree | 5351450d2c | |
tree | 3f0633aa81 | |
Adam Sobotka | 47043ad59b | |
tree | 4f0427a5b0 | |
Adam Sobotka | e396cb734e | |
tree | 9a105b61ee | |
tree | 0778b2d5ac | |
Adam Sobotka | 686bdfe26c | |
Adam Sobotka | 0ff67464e5 | |
Adam Sobotka | 59305860dd | |
Adam Sobotka | 78b03c9d11 | |
Adam Sobotka | 6c68a2e1f2 | |
Adam Sobotka | dce1b08397 | |
Adam Sobotka | 432d5d0332 | |
Adam Sobotka | cdcba31d06 | |
Adam Sobotka | edf7b4cbbf | |
Adam Sobotka | 5bc0620e30 | |
tree | 59a377850d | |
tree | ca4898d03e | |
tree | 5eff1b87e0 | |
tree | 26ba4ca034 | |
tree | 7cefea1ecf | |
tree | 1a532c8e9f | |
tree | fe07af1df2 | |
Adam Sobotka | 0801efbeab | |
Adam Sobotka | 03c2fb5b01 | |
Adam Sobotka | f2c3abe502 | |
tree | 546ceb05de |
|
@ -7,4 +7,7 @@ node_modules
|
|||
.env.*
|
||||
!.env.example
|
||||
bun.lockb
|
||||
.gitsigners
|
||||
src/lib/data.json
|
||||
src/lib/events.json
|
||||
static/data.json
|
||||
|
|
|
@ -1,20 +1,30 @@
|
|||
pipeline:
|
||||
|
||||
build:
|
||||
build_and_test:
|
||||
image: node
|
||||
commands:
|
||||
- node --version
|
||||
- npm ci
|
||||
- npm run build
|
||||
#- npm run test
|
||||
secrets: [AR]
|
||||
|
||||
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"
|
||||
- "rclone sync build/ :sftp:production/ --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_dev:
|
||||
image: rclone/rclone
|
||||
commands:
|
||||
- "rclone sync build/ :sftp:dev/ --sftp-host frontier.gwei.cz --sftp-user eb2-website-dev --sftp-port 2022 --sftp-pass $RCLONE_PASS -v"
|
||||
secrets: [RCLONE_PASS]
|
||||
when:
|
||||
branch: [dev]
|
||||
|
||||
deploy_ipfs:
|
||||
image: node
|
||||
environment:
|
||||
|
@ -24,4 +34,5 @@ pipeline:
|
|||
- npx -y --loglevel=error github:burningtree/ipfs-cluster-deploy ./build ethbrno-web
|
||||
secrets: [IPFS_CLUSTER_PASS]
|
||||
when:
|
||||
tag: v*
|
||||
branch: [main]
|
||||
|
|
10
README.md
|
@ -3,7 +3,13 @@
|
|||
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)
|
||||
|
||||
Site is configured to prerender all content and refresh the data from Arweave. Publishing script is named upload-data and require your own Arweave wallet (whole JSON string) as an AR parameter in the environment, like `AR={"kty":"RSA","n":....`. IPFS publishing is not prepared out of the box, but it basically takes output of `/build` and send it to the ipfs pinning service like Pinata. We are using self hosted server for this.
|
||||
|
||||
## Authors
|
||||
|
||||
* vorcigernix
|
||||
* [vorcigernix](https://github.com/vorcigernix) & [tree](https://github.com/burningtree)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
../static/code-of-conduct.md
|
355
data/data.yaml
|
@ -1,9 +1,40 @@
|
|||
# ---- CONTRIBUTORS ----
|
||||
|
||||
contributorTypes:
|
||||
all:
|
||||
title: All
|
||||
role: null
|
||||
speakers:
|
||||
title: Speakers
|
||||
role: speaker
|
||||
mentors:
|
||||
title: Mentors
|
||||
role: mentor
|
||||
judges:
|
||||
title: Judges
|
||||
role: judge
|
||||
advisors:
|
||||
title: Advisors
|
||||
role: advisor
|
||||
volunteers:
|
||||
title: Volunteers
|
||||
role: volunteer
|
||||
team:
|
||||
title: Core Team
|
||||
role: team
|
||||
|
||||
contributors:
|
||||
|
||||
# ---- SPEAKERS ----
|
||||
|
||||
- id: silur
|
||||
name: Abraham Endre
|
||||
nickname: Silur
|
||||
link: https://github.com/Silur
|
||||
bio: Hackoholic Cryptonaut - Early Ethereum dev and blockchain pioneer
|
||||
roles: [ speaker ]
|
||||
pretalxId: 45
|
||||
|
||||
- id: rachel-oleary
|
||||
name: Rachel-Rose O'Leary
|
||||
twitter: lunar_mining
|
||||
|
@ -12,12 +43,20 @@ contributors:
|
|||
desc: |
|
||||
Rachel-Rose O’Leary is a core dev at lunarpunk layer 1, DarkFi. She is also co-editor of the philosophy journal Agorism in the 21st Century. As a writer she has published in egirlcapital, CoinDesk, Defiant, Wired and elsewhere under anonymous accounts. She believes privacy is necessary for communities to define their own destinies.
|
||||
|
||||
- id: artem-vorotnikov
|
||||
name: Artem Vorotnikov
|
||||
twitter: vorot93
|
||||
bio: Ethereum Core Developer, creator of Akula
|
||||
- id: nick-almond
|
||||
name: Nick Almond
|
||||
nickname: DrNick
|
||||
twitter: DrNickA
|
||||
bio: Building the next generation of DAOs with FactoryDAO
|
||||
roles: [ speaker ]
|
||||
|
||||
- id: juraj-bednar
|
||||
name: Juraj Bednar
|
||||
twitter: jurbed
|
||||
bio: Hacktrophy, Hackyourself.io
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
pretalxId: 47
|
||||
|
||||
- id: pavol-luptak
|
||||
name: Pavol Luptak
|
||||
|
@ -26,102 +65,317 @@ contributors:
|
|||
bio: Nethemba, Hacktrophy, liberation.travel
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
pretalxId: 5
|
||||
|
||||
- id: dcbuilder
|
||||
name: dcbuilder.eth
|
||||
twitter: DCbuild3r
|
||||
bio: WorldCoin, devpill.me
|
||||
roles: [ speaker ]
|
||||
roles: [ judge, advisor, speaker ]
|
||||
remote: true
|
||||
pretalxId: 53
|
||||
|
||||
- id: juraj-bednar
|
||||
name: Juraj Bednar
|
||||
twitter: jurbed
|
||||
bio: Hacktrophy, Hackyourself.io
|
||||
- id: artem-vorotnikov
|
||||
name: Artem Vorotnikov
|
||||
twitter: vorot93
|
||||
bio: Ethereum Core Developer, creator of Akula
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
|
||||
- id: owen-barnes
|
||||
name: Owen Barnes
|
||||
nickname: temporalwave
|
||||
twitter: temporalwave
|
||||
bio: independent freedom adviser
|
||||
bio: Independent freedom adviser
|
||||
roles: [ speaker, mentor ]
|
||||
pretalxId: 41
|
||||
|
||||
- id: william-mitsuda
|
||||
name: Willian Mitsuda
|
||||
twitter: wmitsuda
|
||||
bio: creator of Otterscan
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
|
||||
- id: qedk
|
||||
name: QEDK
|
||||
twitter: qedk_
|
||||
bio: engineering Polygon, Moonshot Collective
|
||||
bio: Creator of Otterscan
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
pretalxId: 10
|
||||
|
||||
- id: vojtech-simetka
|
||||
name: Vojtěch Šimetka
|
||||
twitter: vojtechsimetka
|
||||
bio: Blockchain for Humanity, Swarm, Giveth
|
||||
roles: [ speaker, mentor, judge ]
|
||||
|
||||
- id: qedk
|
||||
name: QEDK
|
||||
twitter: qedk_
|
||||
bio: Engineering @ Polygon, EthIndia alum, ex-Moonshot Collective
|
||||
roles: [ speaker, mentor ]
|
||||
pretalxId: 15
|
||||
|
||||
- id: radek-svarz
|
||||
name: Radek Švarz
|
||||
twitter: radk
|
||||
bio: dCZK, Apus.finance, BeerFi dev meetup
|
||||
roles: [ speaker ]
|
||||
pretalxId: 2
|
||||
|
||||
- id: lauri-peltonen
|
||||
name: Lauri Peltonen
|
||||
twitter: lauripelto
|
||||
bio: Ethereum & StarkNet @ Equilibrium
|
||||
roles: [ speaker, mentor, judge ]
|
||||
pretalxId: 4
|
||||
|
||||
- id: jakub-jedlinsky
|
||||
name: Jakub Jedlinský
|
||||
twitter: Jakub_Jedlinsky
|
||||
bio: Macroeconomist and analyst - Altlift.cz, lecturer at KMEV VŠE
|
||||
roles: [ speaker ]
|
||||
pretalxId: 21
|
||||
|
||||
- id: steffen-kux
|
||||
name: Steffen Kux
|
||||
twitter: steffenkux
|
||||
bio: Co-founder, researcher, and developer at corpus.ventures
|
||||
roles: [ speaker ]
|
||||
pretalxId: 17
|
||||
|
||||
- id: max-hampshire
|
||||
name: Max Hampshire
|
||||
nickname: Mx
|
||||
twitter: _wjth
|
||||
bio: Developer Relations for Nym, previously a smart contract developer and researcher
|
||||
roles: [ speaker ]
|
||||
pretalxId: 11
|
||||
|
||||
- id: danish-shabbir
|
||||
name: Danish Shabbir
|
||||
nickname: fuzuli
|
||||
twitter: fullyfuzuli
|
||||
bio: Privacy researcher and a fiction writer
|
||||
roles: [ speaker, judge ]
|
||||
pretalxId: 12
|
||||
|
||||
- id: jan-zibner
|
||||
name: Jan Zibner
|
||||
link: https://www.artiffine.com/team/jan-zibner
|
||||
bio: Lawyer specialising in intellectual property law and digital trends @ Artiffine
|
||||
roles: [ speaker ]
|
||||
pretalxId: 22
|
||||
|
||||
- id: bigq
|
||||
name: bigq
|
||||
twitter: big_q__
|
||||
bio: Building new ZK primitives @ Sismo, vyper lover on my spare time
|
||||
remote: true
|
||||
roles: [ speaker ]
|
||||
pretalxId: 51
|
||||
|
||||
- id: chris-blec
|
||||
name: Chris Blec
|
||||
twitter: ChrisBlec
|
||||
bio: 'The intersection of Bitcoin, DeFi and Liberty || MakerDAO delegate'
|
||||
remote: true
|
||||
roles: [ speaker ]
|
||||
pretalxId: 38
|
||||
|
||||
- id: six
|
||||
name: six
|
||||
link: https://cryptoctf.org/
|
||||
bio: CCTF founder
|
||||
roles: [ speaker, judge ]
|
||||
pretalxId: 6
|
||||
|
||||
- id: nikete
|
||||
name: nikete
|
||||
twitter: nikete
|
||||
bio: Curiosity driven. Open science, individual privacy, collective cognition
|
||||
roles: [ mentor, speaker ]
|
||||
pretalxId: 27
|
||||
|
||||
- id: mykola-siusko
|
||||
name: Mykola Siusko
|
||||
twitter: nicksvyaznoy
|
||||
bio: Web3 fixer | Curing surveillance capitalism
|
||||
roles: [ speaker ]
|
||||
pretalxId: 28
|
||||
|
||||
- id: roman-mazur
|
||||
name: Roman Mazur
|
||||
twitter: romanmazur
|
||||
bio: CEO & Co-founder @ Wido
|
||||
roles: [ speaker, judge ]
|
||||
pretalxId: 37
|
||||
|
||||
- id: kurt-opsahl
|
||||
name: Kurt Opsahl
|
||||
twitter: kurtopsahl
|
||||
bio: Deputy Executive Director and General Counsel of the Electronic Frontier Foundation (EFF)
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
pretalxId: 3
|
||||
|
||||
- id: robert-de-groot
|
||||
name: Robert de Groot
|
||||
twitter: robdotrego
|
||||
bio: Dutch privacy advocate - ecosystem manager @ Swarm, Board member @ Open Signum
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
pretalxId: 29
|
||||
|
||||
- id: anirudha-bose
|
||||
name: Anirudha Bose
|
||||
twitter: onybose
|
||||
bio: Wallet Engineer at Brave
|
||||
roles: [ speaker ]
|
||||
pretalxId: 33
|
||||
|
||||
- id: felix-leupold
|
||||
name: Felix Leupold
|
||||
twitter: fleupold_
|
||||
bio: Software Engineer. Technical Lead @ CoWSwap
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
pretalxId: 39
|
||||
|
||||
- id: luca
|
||||
name: Luca
|
||||
bio: Blockchain protocol developer currently working at Kiln
|
||||
link: https://github.com/0xpanoramix
|
||||
roles: [ speaker ]
|
||||
remote: true
|
||||
pretalxId: 40
|
||||
|
||||
# ---- JUDGES ----
|
||||
|
||||
- id: ashhanai
|
||||
name: ashhanai
|
||||
bio: builder @ PWN DAO
|
||||
twitter: ashhanai
|
||||
roles: [ judge ]
|
||||
|
||||
# ---- ADVISORS ----
|
||||
|
||||
- id: mario-havel
|
||||
name: Mario Havel
|
||||
twitter: TMIYChao
|
||||
bio: Ethereum Foundation, Bordel Hackerspace
|
||||
roles: [ advisor ]
|
||||
remote: true
|
||||
|
||||
- id: josef-j
|
||||
name: Josef J
|
||||
twitter: JosefJ_
|
||||
bio: ETHPrague, PWN Finance (previously Ethereum Foundation & Devcon)
|
||||
roles: [ advisor ]
|
||||
remote: true
|
||||
|
||||
- id: anett
|
||||
name: Anett Rolikova
|
||||
twitter: AnettRolikova
|
||||
bio: Nethermind, previously Ethereum Magicians
|
||||
roles: [ advisor, judge, speaker ]
|
||||
pretalxId: 48
|
||||
|
||||
# ---- VOLUNTEERS ----
|
||||
|
||||
- id: gabari
|
||||
name: Bryce
|
||||
nickname: gabari
|
||||
twitter: gabari___
|
||||
bio: Sponsor & Speaker seeker | Former head of communication for a top 3 DAO, Member of Developer DAO
|
||||
roles: [ volunteer ]
|
||||
|
||||
- id: hazae41
|
||||
name: Hugo
|
||||
nickname: Haz Æ 41
|
||||
twitter: hazae41
|
||||
bio: Sponsor & Speakers seeker | Software Engineer specialised in Privacy & Decentralized systems, member of Developer DAO
|
||||
roles: [ volunteer ]
|
||||
|
||||
- id: victor
|
||||
name: Victor
|
||||
twitter: Heliatr0p
|
||||
bio: Sponsors & Speakers seeker | Software Engineer
|
||||
roles: [ volunteer ]
|
||||
|
||||
- id: juan-abia
|
||||
name: Juan Alberto Abia Alvarez
|
||||
twitter: juanabia99
|
||||
bio: General help | Software engineer with too many side hobbies
|
||||
roles: [ volunteer ]
|
||||
|
||||
- id: ethan-clime
|
||||
name: Ethan Clime
|
||||
link: https://t.me/ethanclime
|
||||
bio: Stage manager | Former DApp CEO and product manager
|
||||
roles: [ volunteer ]
|
||||
|
||||
- id: caner-budak
|
||||
name: Caner Budak
|
||||
twitter: caner_eth
|
||||
bio: General help | Research & Data Analyst in Web3 ecoystem. Former Chairman of ITU Blockchain
|
||||
roles: [ volunteer ]
|
||||
|
||||
- id: ksenia
|
||||
name: Ksenia
|
||||
twitter: Fara38643010
|
||||
bio: Registration | Japanese lang. specialist + CZ・ENG・RUS / Artist / Crypto enthusiast / Vibe manager
|
||||
roles: [ volunteer ]
|
||||
|
||||
# ---- TEAM ----
|
||||
|
||||
- id: tree
|
||||
name: Tree
|
||||
twitter: treecz
|
||||
bio: Gwei.cz and BohemianDAO founder, UTXO.22 steward
|
||||
bio: Vision, content | Gwei.cz and BohemianDAO founder, Ethereum enthusiast
|
||||
roles: [ team ]
|
||||
pretalxId: 1
|
||||
|
||||
- id: tereza
|
||||
name: Tereza
|
||||
twitter: terkastarostova
|
||||
bio: Holky v Kryptu co-founder, chairman of UTXO Foundation
|
||||
bio: Production, sponsors | Holky v Kryptu co-founder, chairman of UTXO Foundation
|
||||
roles: [ team ]
|
||||
pretalxId: 31
|
||||
|
||||
- id: exez
|
||||
name: Exez
|
||||
twitter: OndraPulc
|
||||
bio: TODO
|
||||
roles: [ team ]
|
||||
|
||||
- id: hedvika
|
||||
name: Hedvika
|
||||
twitter: HedvikaPa
|
||||
nickname: headwitch
|
||||
bio: TODO
|
||||
roles: [ team ]
|
||||
|
||||
- id: jacob
|
||||
name: Jacob
|
||||
twitter: jacobjelen
|
||||
bio: TODO
|
||||
roles: [ team ]
|
||||
|
||||
- id: damsky
|
||||
name: Damsky
|
||||
twitter: helloitsdamsky
|
||||
bio: TODO
|
||||
bio: Visual identity, design
|
||||
roles: [ team ]
|
||||
|
||||
- id: adam
|
||||
name: Adam
|
||||
nickname: vorcigernix
|
||||
twitter: vorcigernix
|
||||
bio: Zitrone founder, member of Developer DAO and Forefront
|
||||
bio: Website, community calls | Zitrone founder, member of Developer DAO and Forefront
|
||||
roles: [ team ]
|
||||
pretalxId: 18
|
||||
|
||||
- id: hedvika
|
||||
name: Hedvika
|
||||
twitter: HedvikaPa
|
||||
nickname: headwitch
|
||||
bio: Mentor seeking, experiences curation
|
||||
roles: [ team ]
|
||||
|
||||
- id: clairee
|
||||
name: Clairee
|
||||
twitter: De_luneClaire
|
||||
bio: TODO
|
||||
bio: Social networks
|
||||
roles: [ team ]
|
||||
|
||||
- id: jacob
|
||||
name: Jacob
|
||||
twitter: jacobjelen
|
||||
bio: Networking | Donat.Network, Product Designer & Technologist
|
||||
roles: [ team ]
|
||||
pretalxId: 24
|
||||
|
||||
- id: dominika
|
||||
name: Dominika
|
||||
twitter: DominikaV5
|
||||
bio: TODO
|
||||
bio: Volunteers
|
||||
roles: [ team ]
|
||||
|
||||
# ---- SPONSORS ----
|
||||
|
@ -133,6 +387,11 @@ sponsors:
|
|||
tier: ecdsa
|
||||
url: https://ethereum.foundation/
|
||||
|
||||
- id: metamask
|
||||
name: MetaMask Snaps
|
||||
tier: 3des
|
||||
url: https://metamask.io/snaps/
|
||||
|
||||
- id: mitonc
|
||||
name: MitonC
|
||||
tier: 3des
|
||||
|
@ -152,3 +411,13 @@ sponsors:
|
|||
name: Devfolio
|
||||
tier: community
|
||||
url: https://devfolio.co/
|
||||
|
||||
- id: worldcoin
|
||||
name: Worldcoin
|
||||
tier: community
|
||||
url: https://worldcoin.org/
|
||||
|
||||
- id: factorydao
|
||||
name: FactoryDAO
|
||||
tier: community
|
||||
url: https://www.factorydao.xyz/
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
../static/hacker-manual.md
|
73
package.json
|
@ -1,37 +1,40 @@
|
|||
{
|
||||
"name": "eb2-website",
|
||||
"version": "0.0.1",
|
||||
"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"
|
||||
},
|
||||
"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": {
|
||||
"moment": "^2.29.4"
|
||||
}
|
||||
"name": "eb2-website",
|
||||
"version": "v2022-10-16",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "npm run make-data && npm run schedule && 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",
|
||||
"schedule": "node ./scripts/schedule.js",
|
||||
"upload-data": "node ./scripts/upload-data.js",
|
||||
"ipfs-deploy": "npx -y --loglevel=error github:burningtree/ipfs-cluster-deploy ./build ethbrno-web"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sveltejs/adapter-auto": "next",
|
||||
"@sveltejs/adapter-static": "next",
|
||||
"@sveltejs/kit": "next",
|
||||
"arweave": "^1.11.6",
|
||||
"autoprefixer": "^10.4.12",
|
||||
"dotenv": "^16.0.3",
|
||||
"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.2.1",
|
||||
"vite": "^3.1.0"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"marked": "^4.1.1"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
/** @type {import('@playwright/test').PlaywrightTestConfig} */
|
||||
const config = {
|
||||
use: {
|
||||
browserName: 'chromium',
|
||||
headless: true,
|
||||
},
|
||||
webServer: {
|
||||
command: 'npm run build && npm run preview',
|
||||
port: 4173
|
||||
|
|
|
@ -3,17 +3,31 @@ 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,48 @@
|
|||
|
||||
import fs from 'fs'
|
||||
|
||||
const SCHEDULE_URL = 'https://cfp.ethbrno.cz/ethbrno2/schedule/export/schedule.json'
|
||||
const OUTPUT = './src/lib/events.json'
|
||||
|
||||
function duration (str) {
|
||||
const spl = str.split(':')
|
||||
return (Number(spl[0]) * 60) + Number(spl[1])
|
||||
}
|
||||
|
||||
async function run () {
|
||||
|
||||
const resp = await fetch(SCHEDULE_URL)
|
||||
const data = await resp.json()
|
||||
|
||||
const rooms = []
|
||||
const out = []
|
||||
for (const day of data.schedule.conference.days) {
|
||||
for (const roomKey of Object.keys(day.rooms)) {
|
||||
for (const item of day.rooms[roomKey]) {
|
||||
const dur =
|
||||
out.push({
|
||||
id: item.id,
|
||||
name: item.title,
|
||||
description: item.abstract,
|
||||
speakers: item.persons.map(p => {
|
||||
return {
|
||||
id: p.id,
|
||||
name: p.public_name
|
||||
}
|
||||
}),
|
||||
datetime: item.date,
|
||||
duration: duration(item.duration),
|
||||
stage: roomKey,
|
||||
eventType: item.type,
|
||||
track: item.track
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`Writing output: ${OUTPUT}`)
|
||||
fs.writeFileSync(OUTPUT, JSON.stringify(out, null, 2))
|
||||
}
|
||||
|
||||
run()
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
import Arweave from "arweave";
|
||||
import dotenv from 'dotenv';
|
||||
import fs from 'fs';
|
||||
|
||||
dotenv.config();
|
||||
const arweave = Arweave.init({
|
||||
host: "arweave.net", // Hostname or IP address for a Arweave host
|
||||
port: 443, // Port
|
||||
protocol: "https", // Network protocol http or https
|
||||
timeout: 20000, // Network request timeouts in milliseconds
|
||||
logging: false, // Enable network request logging
|
||||
});
|
||||
|
||||
const datajson = fs.readFileSync('./static/data.json', 'utf8');
|
||||
const datamarkdown = fs.readFileSync('./static/hacker-manual.md', 'utf8');
|
||||
const { AR_KEY } = process.env;
|
||||
|
||||
if (!datajson || !datamarkdown || !AR_KEY) { console.error("datafiles or AR_KEY missing"); }
|
||||
|
||||
|
||||
let uploadJSON = await arweave.createTransaction({
|
||||
data: datajson
|
||||
}, AR_KEY);
|
||||
|
||||
uploadJSON.addTag('Content-Type', 'application/json');
|
||||
uploadJSON.addTag("AppName", "ETHBrno");
|
||||
uploadJSON.addTag("DataTag", "json");
|
||||
await arweave.transactions.sign(uploadJSON, AR_KEY);
|
||||
//console.log(uploadJSON);
|
||||
|
||||
let uploader = await arweave.transactions.getUploader(uploadJSON);
|
||||
|
||||
while (!uploader.isComplete) {
|
||||
await uploader.uploadChunk();
|
||||
console.log(`${uploader.pctComplete}% complete, ${uploader.uploadedChunks}/${uploader.totalChunks}`);
|
||||
}
|
||||
|
||||
console.log("Data JSON uploaded in transaction:", uploadJSON.id);
|
||||
|
||||
let uploadMD = await arweave.createTransaction({
|
||||
data: datamarkdown
|
||||
}, AR_KEY);
|
||||
|
||||
uploadMD.addTag('Content-Type', 'text/plain');
|
||||
uploadMD.addTag('charset', 'UTF-8');
|
||||
uploadMD.addTag("AppName", "ETHBrno");
|
||||
uploadMD.addTag("DataTag", "markdown");
|
||||
await arweave.transactions.sign(uploadMD, AR_KEY);
|
||||
//console.log(uploadJSON);
|
||||
|
||||
let uploader2 = await arweave.transactions.getUploader(uploadMD);
|
||||
|
||||
while (!uploader2.isComplete) {
|
||||
await uploader2.uploadChunk();
|
||||
console.log(`${uploader2.pctComplete}% complete, ${uploader2.uploadedChunks}/${uploader2.totalChunks}`);
|
||||
}
|
||||
|
||||
console.log("Content markdown uploaded in transaction:", uploadMD.id);
|
161
src/app.css
|
@ -2,9 +2,89 @@
|
|||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@layer components {
|
||||
.header {
|
||||
@apply text-4xl mt-12 mb-4 font-bold text-white scroll-mt-28;
|
||||
}
|
||||
|
||||
.head2 {
|
||||
@apply text-3xl mt-12 mb-4 font-bold text-white scroll-mt-28;
|
||||
}
|
||||
|
||||
.head3 {
|
||||
@apply text-2xl mt-12 mb-4 scroll-mt-28;
|
||||
}
|
||||
|
||||
.head4 {
|
||||
@apply text-lg mt-12 mb-4 font-bold;
|
||||
}
|
||||
|
||||
.head5 {
|
||||
@apply font-bold mt-12 mb-8;
|
||||
}
|
||||
|
||||
.list {
|
||||
@apply my-3 leading-relaxed hover:text-white list-disc list-inside;
|
||||
}
|
||||
|
||||
.sublist {
|
||||
@apply my-3 leading-relaxed hover:text-white ml-4 md:ml-8 list-[circle];
|
||||
}
|
||||
|
||||
.active {
|
||||
@apply underline;
|
||||
}
|
||||
|
||||
.paragraph {
|
||||
@apply leading-relaxed mb-4;
|
||||
}
|
||||
|
||||
.href
|
||||
{
|
||||
@apply underline;
|
||||
}
|
||||
.md-separator {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
border-top: 1px solid white;
|
||||
margin: 4em 0 2em 0;
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
@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 {
|
||||
|
@ -22,12 +102,6 @@ body {
|
|||
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");
|
||||
|
@ -42,4 +116,79 @@ body {
|
|||
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");
|
||||
}
|
||||
|
||||
.anim {
|
||||
background: linear-gradient(-45deg, rgba(200, 178, 245, 0.8), rgba(238, 203, 192, 0.8), rgba(135, 169, 240, 0.8), rgba(202, 179, 245, 0.8), rgba(238, 203, 192, 0.8), rgba(184, 251, 246, 0.8));
|
||||
background-size: 400% 400%;
|
||||
animation: gradient-animation 30s ease infinite;
|
||||
}
|
||||
|
||||
@keyframes gradient-animation {
|
||||
0% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
|
||||
50% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
|
||||
100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.fadein{
|
||||
animation: pulsein 1s cubic-bezier(0.4, 0, 0.6, 1) 1;
|
||||
}
|
||||
|
||||
@keyframes pulsein {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
display: inline-block;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.icon.map {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-map'%3E%3Cpolygon points='1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6'%3E%3C/polygon%3E%3Cline x1='8' y1='2' x2='8' y2='18'%3E%3C/line%3E%3Cline x1='16' y1='6' x2='16' y2='22'%3E%3C/line%3E%3C/svg%3E");
|
||||
}
|
||||
.icon.book {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-book'%3E%3Cpath d='M4 19.5A2.5 2.5 0 0 1 6.5 17H20'%3E%3C/path%3E%3Cpath d='M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z'%3E%3C/path%3E%3C/svg%3E");
|
||||
}
|
||||
.icon.users {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-users'%3E%3Cpath d='M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='9' cy='7' r='4'%3E%3C/circle%3E%3Cpath d='M23 21v-2a4 4 0 0 0-3-3.87'%3E%3C/path%3E%3Cpath d='M16 3.13a4 4 0 0 1 0 7.75'%3E%3C/path%3E%3C/svg%3E");
|
||||
}
|
||||
.icon.coffee {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-coffee'%3E%3Cpath d='M18 8h1a4 4 0 0 1 0 8h-1'%3E%3C/path%3E%3Cpath d='M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z'%3E%3C/path%3E%3Cline x1='6' y1='1' x2='6' y2='4'%3E%3C/line%3E%3Cline x1='10' y1='1' x2='10' y2='4'%3E%3C/line%3E%3Cline x1='14' y1='1' x2='14' y2='4'%3E%3C/line%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.markdown a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.markdown a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.markdown li {
|
||||
display: list-item;
|
||||
}
|
||||
.markdown ul {
|
||||
display: block;
|
||||
list-style-type: disc;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1 em;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
padding-left: 40px;
|
||||
}
|
|
@ -3,33 +3,32 @@
|
|||
|
||||
<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>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@300;400;700&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- 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">
|
||||
<meta property="og:image" content="https://ethbrno.cz/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 property="twitter:url" content="https://ethbrno.cz/">
|
||||
<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">
|
||||
<meta name="twitter:image" content="https://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" />
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -1,9 +1,18 @@
|
|||
<script>
|
||||
import logo from '$lib/assets/logo_black.svg';
|
||||
import cityscape from '$lib/assets/cityscape2.png';
|
||||
import moment from 'moment';
|
||||
import cityscape from '$lib/assets/cityscape2.png';
|
||||
import { time } from '$lib/data.json';
|
||||
|
||||
export let data;
|
||||
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">
|
||||
|
@ -19,15 +28,18 @@
|
|||
</div>
|
||||
|
||||
<div class="md:inline-flex gap-10 sm:ml-auto sm:mt-0 mt-10 justify-center sm:justify-start">
|
||||
<div>
|
||||
<div class="flex justify-center">
|
||||
<a class="text-black" href="/code-of-conduct/">Code of Conduct </a>
|
||||
</div>
|
||||
<div class="flex justify-center">
|
||||
<a
|
||||
class="text-black external"
|
||||
href="https://docs.ethbrno.cz"
|
||||
href="https://docs.ethbrno.cz/events/2022"
|
||||
rel="noopener noreferrer"
|
||||
>Documentation
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<div class="flex justify-center">
|
||||
<a
|
||||
class="text-black external"
|
||||
href="https://twitter.com/ethbrno"
|
||||
|
@ -35,19 +47,19 @@
|
|||
>Twitter
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
/join
|
||||
<a
|
||||
class="text-black external"
|
||||
href="https://matrix.ethbrno.cz"
|
||||
rel="noopener noreferrer"
|
||||
<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">
|
||||
Built with <a href="https://kit.svelte.dev/" target="_blank" class="external">SvelteKit</a>
|
||||
- <a href="https://git.gwei.cz/ethbrno/eb2-website" target="_blank" class="external">Source code</a> - Generated @ {moment(new Date(data.time)).format("YYYY-MM-DD HH:mm:SS")} (UTC+2)</div>
|
||||
<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>
|
||||
|
|
|
@ -10,7 +10,11 @@
|
|||
<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)}>
|
||||
<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
|
||||
|
@ -22,15 +26,8 @@
|
|||
</button>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class={open ? 'block w-full' : 'xl:flex flex-grow items-center hidden'}
|
||||
id="navbar"
|
||||
>
|
||||
<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"
|
||||
|
@ -38,35 +35,55 @@
|
|||
<li>
|
||||
<a
|
||||
href="/"
|
||||
class="px-5 py-2 flex items-center leading-snug text-black hover:opacity-75" on:click={() => (open = false)}
|
||||
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="/manual"
|
||||
class="px-5 py-2 flex items-center leading-snug text-black hover:opacity-75"
|
||||
on:click={() => (open = false)}
|
||||
class:active={$page.url.pathname === '/manual/'}>Hacker Manual</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="/schedule"
|
||||
class="px-5 py-2 flex items-center leading-snug text-black hover:opacity-75"
|
||||
on:click={() => (open = false)}
|
||||
class:active={$page.url.pathname === '/schedule/'}>Schedule</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
|
||||
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/'}>Venue</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 === '/contributors/'}
|
||||
>Contributors</a
|
||||
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>
|
||||
|
||||
<li class="pl-0 xl:pl-5">
|
||||
<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
|
||||
class="px-5 py-2 flex items-center bg-black text-white leading-snug hover:opacity-75 external"
|
||||
>Chat</a
|
||||
>
|
||||
</li>
|
||||
<li class="pl-0 xl:pl-5">
|
||||
<!--li class="pl-0 xl:pl-5">
|
||||
<a
|
||||
href="https://join.ethbrno.cz"
|
||||
rel="noopener noreferrer"
|
||||
|
@ -75,7 +92,7 @@
|
|||
class="px-5 py-2 flex items-center bg-black text-white leading-snug hover:opacity-75 external"
|
||||
>Join</a
|
||||
>
|
||||
</li>
|
||||
</li-->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
function roundToNearestMinute(date = new Date()) {
|
||||
const timefraction = 1000 * 10;
|
||||
return Math.round(date.getTime() / timefraction) * timefraction;
|
||||
}
|
||||
const getDateIntArr = () => roundToNearestMinute().toString().split("").reverse().map(d => parseInt(d));
|
||||
|
||||
class MyRandom {
|
||||
constructor() {
|
||||
this.seed = getDateIntArr();
|
||||
}
|
||||
|
||||
generate() {
|
||||
const dateIntArr = getDateIntArr();
|
||||
|
||||
this.seed = dateIntArr.map((d, index) => {
|
||||
let newVal = d + this.seed[index];
|
||||
if (newVal > 9) {
|
||||
newVal = newVal % 10;
|
||||
}
|
||||
return 0.5 - (newVal / 10);
|
||||
});
|
||||
|
||||
this.seed.push(this.seed.shift());
|
||||
//console.log(this.seed);
|
||||
//console.log(roundToNearestMinute(), Date.now())
|
||||
|
||||
return this.seed;
|
||||
}
|
||||
};
|
||||
export const prng = new MyRandom().generate();
|
|
@ -0,0 +1,28 @@
|
|||
export const graphdata = async (tag) => {
|
||||
const docrequest = await fetch('https://arweave.net/graphql', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
'Connection': 'keep-alive',
|
||||
'DNT': '1',
|
||||
'Origin': 'https://arweave.net'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
'query': 'query getData($tag: String!) {\n transactions(\n tags: [\n { name: "AppName", values: "ETHBrno" }\n { name: "DataTag", values: [$tag] }\n ]\n first: 1\n ) {\n edges {\n node {\n id \n }\n }\n }\n}\n',
|
||||
'variables': {
|
||||
'tag': tag
|
||||
}
|
||||
})
|
||||
}).then(r => r.json());
|
||||
const {
|
||||
data: {
|
||||
transactions: { edges }
|
||||
}
|
||||
} = docrequest;
|
||||
if (edges.length < 0) return null;
|
||||
const response = await fetch(`https://arweave.net/${edges[0].node.id}`);
|
||||
return (tag === "json" ? await response.json() : await response.text());
|
||||
|
||||
};
|
|
@ -1,11 +1,2 @@
|
|||
/** @type {import('./$types').PageLoad} */
|
||||
export const prerender = true;
|
||||
|
||||
import data from '$lib/data.json';
|
||||
|
||||
export async function load() {
|
||||
return {
|
||||
...data,
|
||||
title: 'ETHBrno² 2022'
|
||||
}
|
||||
}
|
|
@ -2,10 +2,8 @@
|
|||
import '../app.css';
|
||||
import Navigation from '$lib/Navigation.svelte';
|
||||
import Footer from '$lib/Footer.svelte';
|
||||
|
||||
export let data;
|
||||
</script>
|
||||
|
||||
<Navigation open={false} />
|
||||
<slot />
|
||||
<Footer data={data} />
|
||||
<Footer />
|
|
@ -1,19 +1,12 @@
|
|||
<script>
|
||||
export let data;
|
||||
import { sponsors } from '$lib/data.json';
|
||||
|
||||
const tiers = [
|
||||
{
|
||||
id: 'schnorr',
|
||||
name: 'Schnorr'
|
||||
},
|
||||
|
||||
{
|
||||
id: 'ecdsa',
|
||||
name: 'ECDSA'
|
||||
},
|
||||
{
|
||||
id: 'aes',
|
||||
name: 'AES',
|
||||
},
|
||||
{
|
||||
id: '3des',
|
||||
name: '3DES'
|
||||
|
@ -22,54 +15,62 @@
|
|||
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-10 md:flex hidden justify-center h-[800px]">
|
||||
<img src="cam2.png" class="object-cover object-center" alt="cam" />
|
||||
<div class="md:w-5/12 md:mb-0 mb-4 md:flex justify-center md:h-[800px] bg-white md:bg-black">
|
||||
<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"
|
||||
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-[343px] h-[127px] md:w-[150px] " alt="logo" />
|
||||
<p class="text-3xl my-2">privacy {`&`} security edition</p>
|
||||
<p class="text-xl">NOVEMBER 11-13, 2022</p>
|
||||
<p class="text-xl">Brno, Czech republic</p>
|
||||
<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-lg font-light">
|
||||
<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
|
||||
#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-24 md:flex-row flex-col items-center">
|
||||
<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">
|
||||
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.
|
||||
<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 Gwei.cz community with the help of the UTXO Foundation.
|
||||
This year we are focusing on <strong>privacy and security</strong> topics.
|
||||
</p>
|
||||
|
||||
<p class="mb-8 leading-relaxed">This year we are focusing on privacy and security 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">
|
||||
<!--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"
|
||||
|
@ -82,16 +83,16 @@
|
|||
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>
|
||||
<div class="xl:max-w-lg xl:w-full md:w-1/2 w-full">
|
||||
<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-24 md:flex-row flex-col items-center">
|
||||
<div class="xl:max-w-lg xl:w-full md:w-1/2 w-full md:mb-0 mb-10 flex justify-center">
|
||||
<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] mt-10 md:mb-10 flex justify-center">
|
||||
<img class="object-cover object-center" alt="hero" src="lock.png" />
|
||||
</div>
|
||||
<div
|
||||
|
@ -117,13 +118,20 @@
|
|||
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 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"
|
||||
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}
|
||||
|
@ -133,16 +141,15 @@
|
|||
<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"
|
||||
class="flex flex-col md:flex-row items-center justify-center w-full gap-20 border-l border-white/30"
|
||||
>
|
||||
{#each data.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" />
|
||||
{#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-auto m-6 max-h-24 object-contain grayscale hover:grayscale-0"
|
||||
src="/photos/sponsors/{sponsor.id}.png"
|
||||
alt="{sponsor.name} Logo"
|
||||
/>
|
||||
</a>
|
||||
{/each}
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
/** @type {import('./$types').PageLoad} */
|
||||
import { base } from '$app/paths';
|
||||
import { marked } from 'marked';
|
||||
|
||||
marked.setOptions({ gfm: true });
|
||||
export async function load({ fetch }) {
|
||||
const response = await fetch(`${base}/code-of-conduct.md`).then((r) => r.text());
|
||||
|
||||
const compiledResponse = await marked.parse(response);
|
||||
return { content: compiledResponse };
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<script>
|
||||
import { onMount } from 'svelte';
|
||||
export let data = {
|
||||
content: ''
|
||||
};
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Code of Conduct | ETHBrno²</title>
|
||||
</svelte:head>
|
||||
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto flex flex-col xl:max-w-screen-xl px-8 md:px-3 ">
|
||||
<h1 class="pt-12 pb-6 xl:pt-20 xl:pb-10 text-4xl">Code of Conduct</h1>
|
||||
<article class="mb-12">
|
||||
<div
|
||||
class="[&_hr]:md-separator [&_p]:paragraph [&_a]:href [&_h1]:header [&_h2]:head2 [&_ul]:list [&_li]:sublist [&_h3]:head3 [&_h4]:head4 [&_h5]:head5 [&_img[src*='#left']]:hidden md:[&_img[src*='#left']]:flex md:[&_img[src*='#left']]:float-left [&_img[src*='#left']]:mt-12 [&_img[src*='#left']]:mr-5"
|
||||
>
|
||||
{@html data.content}
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
|
@ -1,75 +0,0 @@
|
|||
<script>
|
||||
export let data;
|
||||
|
||||
const categories = [
|
||||
{
|
||||
role: 'speaker',
|
||||
title: 'Speakers'
|
||||
},
|
||||
{
|
||||
role: 'mentor',
|
||||
title: 'Mentors',
|
||||
},
|
||||
{
|
||||
role: 'judge',
|
||||
title: 'Judges',
|
||||
},
|
||||
{
|
||||
role: 'team',
|
||||
title: 'Core team'
|
||||
}
|
||||
]
|
||||
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Contributors: {data.title}</title>
|
||||
</svelte:head>
|
||||
|
||||
<section class="text-gray-400 body-font bg-black py-12">
|
||||
{#each categories as cat}
|
||||
<div class=" px-5 py-12 mx-auto">
|
||||
<div class="flex flex-col text-center w-full mb-12">
|
||||
<h1 class="sm:text-4xl text-3xl font-medium title-font mb-2 text-white">{cat.title}</h1>
|
||||
|
||||
</div>
|
||||
<div class="flex flex-wrap justify-center">
|
||||
{#each Object.values(data.contributors).filter(x => x.roles.includes(cat.role)) as item}
|
||||
{#if item.name !== undefined}
|
||||
<div class="bg-black bg-opacity-40 p-6 h-full w-full md:w-1/3 lg:w-1/4">
|
||||
<a href="https://twitter.com/{item.twitter}" 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={`https://twitter.com/${item.twitter}`}
|
||||
target="_blank"
|
||||
>
|
||||
{item.name}
|
||||
{#if item.nickname}
|
||||
({item.nickname})
|
||||
{/if}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p class="leading-relaxed text-sm">{item.bio}</p>
|
||||
</div>
|
||||
{/if}
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
{/each}
|
||||
</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({ 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,90 @@
|
|||
<script>
|
||||
import { onMount } from 'svelte';
|
||||
import { browser, dev, prerendering } from '$app/environment';
|
||||
import { graphdata } from '$lib/graphdata';
|
||||
import { prng } from '$lib/dateprng.js';
|
||||
export let data;
|
||||
function wrapContributor(c) {
|
||||
if (c.twitter) {
|
||||
c.link = 'https://twitter.com/' + c.twitter;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
//disabling data reload because of random
|
||||
// onMount(async () => {
|
||||
// if (dev) return;
|
||||
// const result = await graphdata('json');
|
||||
// if (result) data.contributors = result.contributors;
|
||||
// });
|
||||
let innercount = 0;
|
||||
$: filteredContributors = data.contributors
|
||||
.filter((c) => data.type === 'all' || c.roles.includes(data.typeConfig.role))
|
||||
.sort((a, b) => {
|
||||
return 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 fadein">
|
||||
<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 gap-2"
|
||||
>
|
||||
{#each item.roles as role}
|
||||
<span class="underline">{role}</span>
|
||||
{/each}
|
||||
</h3>
|
||||
<div class="flex flex-row mb-2">
|
||||
<a
|
||||
class="text-lg flex justify-center text-white font-medium title-font"
|
||||
href={item.link}
|
||||
target="_blank"
|
||||
>
|
||||
{item.name}
|
||||
{#if item.nickname}
|
||||
({item.nickname})
|
||||
{/if}
|
||||
{#if item.remote}
|
||||
<span class="ordinal text-xs ml-2">remote</span>
|
||||
{/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,11 @@
|
|||
/** @type {import('./$types').PageLoad} */
|
||||
import { base } from '$app/paths';
|
||||
import { marked } from 'marked';
|
||||
|
||||
marked.setOptions({ gfm: true });
|
||||
export async function load({ fetch }) {
|
||||
const response = await fetch(`${base}/hacker-manual.md?${Date.now()}`).then((r) => r.text());
|
||||
|
||||
const compiledResponse = await marked.parse(response);
|
||||
return { content: compiledResponse };
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<script>
|
||||
import { onMount } from 'svelte';
|
||||
import { graphdata } from '$lib/graphdata';
|
||||
import { browser, dev, prerendering } from '$app/environment';
|
||||
|
||||
export let data = {
|
||||
content: ''
|
||||
};
|
||||
//abandoning this, not going to send 500kb on client just to render markdown
|
||||
/* onMount(async () => {
|
||||
if (dev) return;
|
||||
const result = await graphdata('markdown');
|
||||
if (result) data.content = await compile(result);
|
||||
//console.log(data.content);
|
||||
}); */
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Hacker Manual | ETHBrno²</title>
|
||||
</svelte:head>
|
||||
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto flex flex-col xl:max-w-screen-xl px-8 md:px-3 ">
|
||||
<h1 class="pt-12 pb-6 xl:pt-20 xl:pb-10 text-4xl">Hacker Manual</h1>
|
||||
<article class="mb-12 grayscale">
|
||||
<div
|
||||
class="[&_hr]:md-separator [&_p]:paragraph [&_a]:href [&_h1]:header [&_h2]:head2 [&_ul]:list [&_li]:sublist [&_h3]:head3 [&_h4]:head4 [&_h5]:head5 [&_img[src*='#left']]:hidden md:[&_img[src*='#left']]:flex md:[&_img[src*='#left']]:float-left [&_img[src*='#left']]:mt-12 [&_img[src*='#left']]:mr-5"
|
||||
>
|
||||
{@html data.content}
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
|
@ -0,0 +1,13 @@
|
|||
/** @type {import('./$types').PageLoad} */
|
||||
|
||||
import events from '$lib/events.json';
|
||||
import { contributorTypes, contributors } from '$lib/data.json';
|
||||
export const prerender = true;
|
||||
|
||||
export async function load() {
|
||||
events.sort(function (a, b) {
|
||||
return new Date(a.datetime) - new Date(b.datetime);
|
||||
});
|
||||
//console.log(sortedEvents)
|
||||
return { events, contributors };
|
||||
}
|
|
@ -0,0 +1,179 @@
|
|||
<script>
|
||||
import { marked } from 'marked';
|
||||
|
||||
export let data;
|
||||
let checked = true;
|
||||
|
||||
const today = new Date().getDay();
|
||||
let selectedDay = today === 5 || today === 6 || today === 0 ? today : 5;
|
||||
//let selectedDay = 6;
|
||||
$: filteredEvents = data.events?.filter((c) => {
|
||||
let evtDate = new Date(c.datetime).getDay();
|
||||
return evtDate === selectedDay;
|
||||
});
|
||||
|
||||
function addMinutes(numOfMinutes, dateOrig = new Date()) {
|
||||
const dateInstance = new Date(dateOrig);
|
||||
dateInstance.setMinutes(dateOrig.getMinutes() + numOfMinutes);
|
||||
return dateInstance;
|
||||
}
|
||||
function getTiming(date, duration) {
|
||||
const dateObj = new Date(date);
|
||||
const endObj = addMinutes(duration, dateObj);
|
||||
//console.log(dateObj, endObj);
|
||||
const minutes = [
|
||||
String(dateObj.getMinutes()).padStart(2, '0'),
|
||||
String(endObj.getMinutes()).padStart(2, '0')
|
||||
];
|
||||
return `${dateObj.getUTCHours() + 1}:${minutes[0]} - ${endObj.getUTCHours() + 1}:${minutes[1]}`;
|
||||
}
|
||||
|
||||
function contributorsData(arr) {
|
||||
return arr.map((contributor) => {
|
||||
const item = data.contributors.find((c) => c.pretalxId === contributor.id);
|
||||
return {
|
||||
id: item ? item.id : null,
|
||||
name: item ? item.name : contributor.name
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function isPast(date, duration) {
|
||||
const _date = new Date(date);
|
||||
const endTime = addMinutes(duration + 30, _date);
|
||||
|
||||
return new Date() > endTime;
|
||||
}
|
||||
//console.log(filteredEvents);
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Schedule | 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"
|
||||
>
|
||||
<button
|
||||
on:click={() => (selectedDay = 5)}
|
||||
class="px-3 py-2 md:px-5 md:py-2 border m-2 {selectedDay === 5
|
||||
? 'text-black bg-white'
|
||||
: 'hover:outline-none hover:bg-gray-600'}">Friday</button
|
||||
>
|
||||
<button
|
||||
on:click={() => (selectedDay = 6)}
|
||||
class="px-3 py-2 md:px-5 md:py-2 border m-2 {selectedDay === 6
|
||||
? 'text-black bg-white'
|
||||
: 'hover:outline-none hover:bg-gray-600'}">Saturday</button
|
||||
>
|
||||
<button
|
||||
on:click={() => (selectedDay = 0)}
|
||||
class="px-3 py-2 md:px-5 md:py-2 border m-2 {selectedDay === 0
|
||||
? 'text-black bg-white'
|
||||
: 'hover:outline-none hover:bg-gray-600'}">Sunday</button
|
||||
>
|
||||
</section>
|
||||
<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"
|
||||
>
|
||||
<label for="Toggle1" class="inline-flex items-center space-x-4 cursor-pointer text-gray-100">
|
||||
<span>Hide</span>
|
||||
<span class="relative">
|
||||
<input id="Toggle1" type="checkbox" class="hidden peer" bind:checked />
|
||||
<div class="w-10 h-6 rounded-full shadow-inner bg-gray-400 peer-checked:bg-gray-100" />
|
||||
<div
|
||||
class="absolute inset-y-0 left-0 w-4 h-4 m-1 rounded-full shadow peer-checked:right-0 peer-checked:left-auto bg-gray-800"
|
||||
/>
|
||||
</span>
|
||||
<span>Show past events</span>
|
||||
</label>
|
||||
</section>
|
||||
<section class="text-white bg-black body-font overflow-hidden">
|
||||
<div class="container px-5 pb-24 mx-auto">
|
||||
{#each filteredEvents as evt}
|
||||
<div
|
||||
class="py-8 divide-y-2 divide-gray-800 {isPast(evt.datetime, evt.duration) &&
|
||||
!checked &&
|
||||
'hidden'}"
|
||||
>
|
||||
<div class=" flex flex-wrap md:flex-nowrap">
|
||||
{#if evt.eventType === 'Catering' || evt.eventType === 'Experiences'}
|
||||
<div
|
||||
class="md:w-64 md:mb-0 mb-2 flex-shrink-0 flex flex-col border-l-4 border-white md:pl-2"
|
||||
>
|
||||
<span class="font-bold title-font px-2 ">{getTiming(evt.datetime, evt.duration)}</span
|
||||
>
|
||||
<a href="/venues" class="mt-1 text-white text-sm mb-1 hover:underline px-2"
|
||||
>🞋 {evt.stage}</a
|
||||
>
|
||||
</div>
|
||||
{:else}
|
||||
<div
|
||||
class="md:w-64 md:mb-0 mb-2 flex-shrink-0 flex flex-col border-l-4 border-gray-900 md:pl-2"
|
||||
>
|
||||
<span class="font-semibold title-font text-white px-2"
|
||||
>{getTiming(evt.datetime, evt.duration)}</span
|
||||
>
|
||||
<a href="/venues" class="mt-1 text-white text-sm mb-1 hover:underline px-2"
|
||||
>🞋 {evt.stage}</a
|
||||
>
|
||||
<span class="mt-1 text-gray-500 text-sm uppercase px-2">{evt.eventType}</span>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="md:flex-grow">
|
||||
<h2 class="text-2xl font-medium text-white title-font mb-2">
|
||||
{evt.name}
|
||||
</h2>
|
||||
{#if evt.description && !['TBD', 'TBA', 'TODO'].includes(evt.description)}
|
||||
<p class="leading-relaxed markdown">
|
||||
{@html marked(evt.description)}
|
||||
</p>
|
||||
{/if}
|
||||
{#if evt.speakers && evt.speakers.length > 0}
|
||||
<div class="col-start-2 row-start-1 row-end-3 mt-4 lg:mt-0 xl:mt-4">
|
||||
<dt class="sr-only">Speakers</dt>
|
||||
<dd class="flex justify-start -space-x-1.5 gap-6">
|
||||
{#each contributorsData(evt.speakers || []) as speaker}
|
||||
<div class="flex gap-4">
|
||||
{#if speaker.id}
|
||||
<img
|
||||
src={`/photos/contributors/${speaker.id}.jpg`}
|
||||
alt={speaker.name}
|
||||
class="w-6 h-6 rounded-full bg-slate-100 ring-2 ring-white grayscale"
|
||||
loading="lazy"
|
||||
/>
|
||||
{/if}
|
||||
<p>{speaker.name}</p>
|
||||
</div>
|
||||
{/each}
|
||||
</dd>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
</section>
|
||||
<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"
|
||||
>
|
||||
<div class="flex items-center p-6 space-x-4 text-gray-100">
|
||||
<div class="flex items-center self-stretch justify-center">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 20 20"
|
||||
fill="currentColor"
|
||||
class="w-10 h-10"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z"
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<span>Time is displayed in CET (UTC+1)</span>
|
||||
</div>
|
||||
</section>
|
|
@ -3,10 +3,12 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Venues: {data.title}</title>
|
||||
<title>Venue | ETHBrno²</title>
|
||||
</svelte:head>
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto flex py-24 md:flex-row flex-col items-center xl:max-w-screen-xl">
|
||||
<section class="text-white bg-black body-font hidden">
|
||||
<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"
|
||||
>
|
||||
|
@ -39,13 +41,6 @@
|
|||
>
|
||||
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">
|
||||
|
@ -59,53 +54,18 @@
|
|||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="text-white bg-black body-font">
|
||||
<div class="container mx-auto flex py-24 md:flex-row flex-col items-center xl:max-w-screen-xl">
|
||||
<div class="xl:max-w-lg xl:w-full md:w-1/2 w-5/6 md:mb-0 mt-10 md:mt-0">
|
||||
<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="mx-auto w-5/6 md:mb-0 mt-10 md:mt-0">
|
||||
<img
|
||||
class="object-cover object-center grayscale hover:grayscale-0"
|
||||
class="object-cover object-center invert"
|
||||
decoding="async"
|
||||
loading="lazy"
|
||||
src="/venues/cc1.png"
|
||||
src="/venues/floorplan.svg"
|
||||
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>
|
|
@ -0,0 +1,35 @@
|
|||
We are a collective and we want to bring people in the community together to exchange ideas, make new friends, and build things as an inclusive, welcoming, and safe community.
|
||||
|
||||
Therefore, any harmful or discriminating behavior by anyone (volunteers, organizers, project leads, contributors, hackers, or absolutely anyone involved in our community) will not be tolerated and results in the offending person(s) being excluded from the group.
|
||||
|
||||
Members should be judged by their actions, not criteria such as degrees, age, race, nationality, sex, sexual orientation, gender, gender identity or expression, disability, physical appearance, religion (or lack thereof), or position. We are a diverse community. Leave your egos at the door.
|
||||
|
||||
## Be Open
|
||||
We welcome one and all. We especially love to adopt newbies in the community. We foster decentralized, open communities, society, and technology, so we should be open to everyone and everything. We all bring different backgrounds and experiences. Great things can happen when we show up with an open mind and curiosities to explore. If you don't have an open mind, this group is not for you.
|
||||
|
||||
## Be Respectful
|
||||
Be exceptionally kind to others. Respect their work, time, and perspectives. Do not insult or troll others, unless it is for banter (covered in a later point). We all spend our time, resources, and energy to be part of this group. Respect each other, the projects, and the process.
|
||||
|
||||
## Be Daring
|
||||
Dare to create something nobody did before. If you get stuck, ask for help - people will help you when you ask. This is a community. We create things together.
|
||||
|
||||
## What We Create
|
||||
Promote Decentralization. Build what matters to you. You can organize events, build applications, or foster public discourse. You can create art and beauty on a computer. Most importantly, create, hack, and build together.
|
||||
|
||||
## Contributions in Other Ways
|
||||
Banter and memeing is encouraged as you see fit.
|
||||
|
||||
## Personal Responsibility
|
||||
Everyone in this community is responsible for their own tasks. If you have a project, it is your responsibility to manage it. We are not here to spoon feed you or do your work for you. Ain't nobody got time for that. But we are a community and here to support. Always reach out if you are having issues with completing a task.
|
||||
|
||||
## Unacceptable Behavior & Harassment
|
||||
Unacceptable behavior includes: intimidation, harassment, abuse, discrimination, derogatory or demeaning words or actions by any participant in our community online or in person. If you have disagreements with someone, communicate directly with each other and work on a solution.
|
||||
|
||||
Harassment includes: harmful or prejudicial verbal or written comments related to gender, sexual orientation, race, religion, disability; inappropriate use of nudity and/or sexual images (including presentation slides); inappropriate depictions of violence (including presentation slides); deliberate intimidation, stalking or following; harassing photography or recording; sustained disruption of talks or other events; inappropriate physical contact, and unwelcomed sexual attention.
|
||||
|
||||
## Notify Us
|
||||
If you are subject to or witness unacceptable behavior, or have any other concerns, you can always notify a project lead, event organizer, or member of the core group. Anytime. We will do everything to help and support you. If you can't find anyone in person, reach out via email: [utxo@utxo.foundation](mailto:utxo@utxo.foundation)
|
||||
|
||||
---
|
||||
|
||||
*Text taken from our friends at ETHBerlin - thank you!*
|
|
@ -1,44 +0,0 @@
|
|||
{
|
||||
"contributors": [
|
||||
{
|
||||
"id": "rachel-oleary",
|
||||
"name": "Rachel-Rose O'Leary",
|
||||
"twitter": "lunar_mining",
|
||||
"bio": "DarkFi core dev, writer",
|
||||
"roles": [
|
||||
"speaker"
|
||||
],
|
||||
"desc": "Rachel-Rose O’Leary is a core dev at lunarpunk layer 1, DarkFi. She is also co-editor of the philosophy journal Agorism in the 21st Century. As a writer she has published in egirlcapital, CoinDesk, Defiant, Wired and elsewhere under anonymous accounts. She believes privacy is necessary for communities to define their own destinies.\n"
|
||||
},
|
||||
{
|
||||
"id": "artem-vorotnikov",
|
||||
"name": "Artem Vorotnikov",
|
||||
"twitter": "vorot93",
|
||||
"bio": "Ethereum Core Developer, creator of Akula",
|
||||
"roles": [
|
||||
"speaker"
|
||||
],
|
||||
"remote": true
|
||||
},
|
||||
{
|
||||
"id": "pavol-luptak",
|
||||
"name": "Pavol Luptak",
|
||||
"nickname": "wilder",
|
||||
"twitter": "wilderco",
|
||||
"bio": "Nethemba, Hacktrophy, liberation.travel",
|
||||
"roles": [
|
||||
"speaker"
|
||||
],
|
||||
"remote": true
|
||||
},
|
||||
{
|
||||
"id": "tree",
|
||||
"name": "Tree",
|
||||
"twitter": "treecz",
|
||||
"bio": "Zakladatel Gwei.cz a BohemianDAO, organizátor UTXO.22",
|
||||
"roles": [
|
||||
"team"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
Za Šířka: | Výška: | Velikost: 71 KiB |
|
@ -0,0 +1,288 @@
|
|||
## TL;DR
|
||||
|
||||
* Join the conversation on Matrix - [#ethbrno:gwei.cz](https://matrix.to/#/#ethbrno:gwei.cz)
|
||||
* [Mint your unique SBT token](#hackathon-identity---soulbound-token-sbt)
|
||||
* Get test ETH on Goerli or Sepolia - [faucet.ethbrno.cz](https://faucet.ethbrno.cz/)
|
||||
* Submit your project before Sunday 11am - [devfolio.ethbrno.cz](https://ethbrno.devfolio.co/) ([read more](#submissions))
|
||||
* Take part in quadratic voting - [vote.ethbrno.cz](https://vote.ethbrno.cz/)
|
||||
|
||||
## Overview
|
||||
|
||||
* Travel and Accommodation
|
||||
* [Travelling to Brno](#travelling-to-brno)
|
||||
* [Brno Public transport](#brno-public-transport)
|
||||
* [Accomodation](#accomodation)
|
||||
* [Map and tips from locals](#map-and-tips-from-locals)
|
||||
* [Catering](#catering)
|
||||
* Hackathon
|
||||
* [Schedule overview](#schedule-overview)
|
||||
* [Hackathon identity - Soulbound Token (SBT)](#hackathon-identity---soulbound-token-sbt)
|
||||
* [Hacking Rules](#hacking-rules)
|
||||
* [Prizes and bounties](#prizes-and-bounties)
|
||||
* [Finding a Team / Project Idea](#finding-a-team--project-idea)
|
||||
* [Mentoring](#mentoring)
|
||||
* [Submissions](#submissions)
|
||||
* Experiences
|
||||
* [Massages](#massages)
|
||||
* [Sound-healing](#sound-healing)
|
||||
* [Board games](#board-games)
|
||||
* [Side-events](#side-events)
|
||||
* [Afterparty](#afterparty)
|
||||
|
||||
---
|
||||
|
||||
### Travelling to Brno
|
||||
|
||||
The best way to go to Brno from Vienna, Prague, Budapest, Bratislava or other bigger cities is by train. You can choose from more carriers and price levels, but all trains are safe, usualy equipped with wifi and plugs, usualy serving some snacks and coffee. You can find your connectin on [this link](https://idos.idnes.cz/en/vlakyautobusymhdvse/spojeni/). For example [here](https://idos.idnes.cz/en/vlakyautobusymhdvse/spojeni/vysledky/?date=04.11.2022&time=06:00&f=V%C3%ADde%C5%88%20leti%C5%A1t%C4%9B;%20Austria&fc=100003&t=Brno%20hl.n.&tc=100003) are some train connections from Vienna airport to Brno main station on Friday 4th.
|
||||
|
||||
We recommend you to use private carrier [RegioJet](https://regiojet.com/) which provides bus connection as well.
|
||||
|
||||
---
|
||||
|
||||
### Brno Public transport
|
||||
|
||||
It is safe to use public transport in Brno even in the night. Public transport in Brno and the rest of the South Moravian Region is provided by JMK (the South Moravian Integrated Public Transport System).
|
||||
|
||||
Tickets are valid for any form of public transport, so you only need to pay attention to how long you are traveling (tickets are valid for specific amounts of time) and which zones you are travelling through. If you’re travelling through the city, a ticket for zones 100 and 101 is probably all you’ll need.
|
||||
|
||||
You can buy tickets from any of the yellow ticket vending machines located at various stops throughout the city, or you can purchase them at information centres, stations, and newsagents. If you have a Czech phone number, you can buy tickets by sending a text message or using a mobile app. You can also pay contactless in the vehicles.
|
||||
|
||||
---
|
||||
|
||||
### Accomodation
|
||||
We do not provide or subsidize accomodation. Main venue is 24/7 though, so feel free to enjoy the hackathon in its purest form. If you don't feel like it, we do have following recommended facilities:
|
||||
|
||||
#### Budget - Most Unique Hostel in Brno – 10-Z Bunker Hostel.
|
||||
|
||||
Address: Husova 12, Brno, Czech Republic
|
||||
[Book](https://www.booking.com/hotel/cz/10-z-nuclear-fallout-shelter-under-spilberk-castle.cs.html?aid=910275&label=gog235jc-1FCAsoOkIyMTAtei1udWNsZWFyLWZhbGxvdXQtc2hlbHRlci11bmRlci1zcGlsYmVyay1jYXN0bGVICVgDaDqIAQGYAQm4AQfIAQzYAQHoAQH4AQaIAgGoAgO4AsGI6poGwAIB0gIkZWI2ZmY5ZmEtMTEzNi00YWI4LWIxN2ItNDlkY2E3MTAyZWRh2AIF4AIB&sid=456cddd34fabe31e28baf019d5e20a72&all_sr_blocks=177983219_224237506_0_1_0;checkin=2022-11-11;checkout=2022-11-13;dest_id=-542184;dest_type=city;dist=0;group_adults=1;group_children=0;hapos=1;highlighted_blocks=177983219_224237506_0_1_0;hpos=1;matching_block_id=177983219_224237506_0_1_0;no_rooms=1;req_adults=1;req_children=0;room1=A;sb_price_type=total;sr_order=popularity;sr_pri_blocks=177983219_224237506_0_1_0__5000;srepoch=1666876502;srpvid=db945d2a46ee02b1;type=total;ucfs=1&#hotelTmpl)
|
||||
price: 25eur incl. breakfast
|
||||
|
||||
If you’re looking for a fairly unique accommodation site which you’ll surely remember forever, then the 10-Z Bunker Hostel is the way to go. Housed in an actual nuclear shelter from the Cold War era, this hostel is not for the faint-hearted, but can provide a quirky and memorable experience to those up to it.
|
||||
The dorm rooms are decorated in period style and once you arrive to the accommodation, you’ll also get a complimentary tour of the place, which is also home to a history museum. Breakfast is free for all guests.
|
||||
|
||||
#### Budget & 5mins from the venue - Schrott Bed&Beer (20eur)
|
||||
|
||||
Address: Křenová 10, Brno, 602 00, Czech Republic
|
||||
[Book](https://www.booking.com/hotel/cz/schrott-bed-amp-beer.html?aid=910275&sid=456cddd34fabe31e28baf019d5e20a72&all_sr_blocks=630944704_246076413_1_0_0&checkin=2022-11-11&checkout=2022-11-13&dest_id=-542184&dest_type=city&group_adults=1&group_children=0&hapos=3&highlighted_blocks=630944704_246076413_1_0_0&hpos=3&lang=en-us&matching_block_id=630944704_246076413_1_0_0&no_rooms=1&req_adults=1&req_children=0&room1=A&sb_price_type=total&soz=1&sr_order=price&sr_pri_blocks=630944704_246076413_1_0_0__4000&srepoch=1666876026&srpvid=cc935c34723c0061&type=total&ucfs=1&lang_click=other&cdl=cs&lang_changed=1)
|
||||
price: 20eur
|
||||
|
||||
If you’re looking for a clean, cheap accommodation that is very close to the venue, this is the option. As a bonus, it has a unique, steam-punk/retro bar with good selection of beers on site :)
|
||||
|
||||
#### Mid-range, 6mins from the venue, suitable for teams - Euro Apartments Krenova
|
||||
|
||||
Address: Krenova 75, Brno, 602 00, Czech Republic
|
||||
[Book](https://www.booking.com/hotel/cz/euro-apartments-krenova-75-brno.html?aid=910275&sid=456cddd34fabe31e28baf019d5e20a72&all_sr_blocks=342399124_360281629_2_0_0&checkin=2022-11-11&checkout=2022-11-13&dest_id=-542184&dest_type=city&dist=0&group_adults=2&group_children=0&hapos=2&highlighted_blocks=342399124_360281629_2_0_0&hpos=2&lang=en-us&matching_block_id=342399124_360281629_2_0_0&no_rooms=1&req_adults=2&req_children=0&room1=A%2CA&sb_price_type=total&soz=1&sr_order=popularity&sr_pri_blocks=342399124_360281629_2_0_0__17850&srepoch=1666877159&srpvid=f7175e72048c0156&type=total&ucfs=1&lang_click=other&cdl=cs&lang_changed=1)
|
||||
price: 45eur
|
||||
|
||||
#### Mid-range-business - Grandhotel Brno
|
||||
|
||||
Address: Benesova 18, Brno, 602 00, Czech Republic
|
||||
[Book](https://www.booking.com/hotel/cz/grandhotelbrno.html?aid=910275&sid=456cddd34fabe31e28baf019d5e20a72&atlas_src=sr_iw_btn&checkin=2022-11-11&checkout=2022-11-13&dest_id=-542184&dest_type=city&dist=0&group_adults=2&group_children=0&highlighted_blocks=7707602_193926392_2_2_0&lang=en-us&no_rooms=1&room1=A%2CA&sb_price_type=total&soz=1&type=total&ucfs=1&lang_click=other&cdl=cs&lang_changed=1)
|
||||
price: 54eur
|
||||
|
||||
|
||||
Centrally located in the heart of Brno with 140 year-long tradition in hospitality is close to all major sights. It features the Garden Restaurant and a lobby bar. Cozy and stylish rooms, fully equipped with modern amenities including high-speed internet and air-con.
|
||||
|
||||
#### Business/Lux - Best Western International Hotel Brno
|
||||
|
||||
Address: Husova 16, Brno, 602 00, Czech Republic
|
||||
[Book](https://www.booking.com/hotel/cz/schrott-bed-amp-beer.html?aid=910275&sid=456cddd34fabe31e28baf019d5e20a72&all_sr_blocks=630944704_246076413_1_0_0&checkin=2022-11-11&checkout=2022-11-13&dest_id=-542184&dest_type=city&group_adults=1&group_children=0&hapos=3&highlighted_blocks=630944704_246076413_1_0_0&hpos=3&lang=en-us&matching_block_id=630944704_246076413_1_0_0&no_rooms=1&req_adults=1&req_children=0&room1=A&sb_price_type=total&soz=1&sr_order=price&sr_pri_blocks=630944704_246076413_1_0_0__4000&srepoch=1666876026&srpvid=cc935c34723c0061&type=total&ucfs=1&lang_click=other&cdl=cs&lang_changed=1)
|
||||
price: 70eur including excellent breakfast
|
||||
|
||||
Centrally located right below Spilberg Castle and 100m from the Main Square. Free access to the fitness centre, stable and strong wifi in the entire hotel.
|
||||
|
||||
#### Business/Lux - Grandezza Hotel Luxury Palace
|
||||
|
||||
Address: Zeleny trh 314/2, Brno, 602 00, Czech Republic
|
||||
[Book](https://www.booking.com/hotel/cz/grandezza.html?aid=910275&sid=456cddd34fabe31e28baf019d5e20a72&atlas_src=hp_iw_title&checkin=2022-11-11&checkout=2022-11-13&dist=0&group_adults=2&group_children=0&lang=en-us&no_rooms=1&room1=A%2CA&sb_price_type=total&soz=1&srepoch=1666878418&srpvid=2e79609d94de021d&type=total&lang_click=other&cdl=cs&lang_changed=1)
|
||||
price: 70eur
|
||||
|
||||
Spacious, air-conditioned rooms overlook the town square, the Cathedral of Saints Peter and Spilberk Castle, featuring a flat-screen satellite TV and a seating area. The bathrooms include bathrobes. It is 50 m to the nearest tram stop, and Brno Train Station is 400 m away. Airport shuttle service available.
|
||||
|
||||
---
|
||||
|
||||
### Map and tips from locals
|
||||
|
||||
[Here](https://www.use-it.travel/cities/map/2022_brno/) you can find a map of Brno with no-nonsense usefull tips. Made by local volunteers, non-commercial, free and up-to-date.
|
||||
|
||||
---
|
||||
|
||||
### Catering<i class='icon coffee'></i>
|
||||
|
||||
We will take care of your meals and drinks for the entire Hackathon, conference and coffee breaks. There will be vegetarian options provided. Just come with an open mind, a knowledge-thirsty brain and enthusiasm.
|
||||
|
||||
---
|
||||
|
||||
### Schedule overview
|
||||
|
||||
The full agenda is available on the [Schedule](/schedule/) page.
|
||||
|
||||
#### Friday - Nov 11
|
||||
|
||||
* **13:00** - Hackathon Registration Opens
|
||||
* **14:30 - 22:30** - Opening Talks and workshops
|
||||
* **18:00 - 19:30** - Dinner
|
||||
* **19:00 - 19:30** - Opening Ceremony
|
||||
* **19:30 - 20:30** - Ideas Showcase
|
||||
* **20:30 - 21:30** - Team Formation Workshop
|
||||
* **23:30** - Midnight Snack
|
||||
|
||||
#### Saturday - Nov 12
|
||||
|
||||
* **09:00 - 11:00** - Breakfast
|
||||
* **12:30 - 14:00** - Lunch
|
||||
* **11:00 - 16:00** - Talks and workshops
|
||||
* **16:00 - 23:30** - Remote talks and workshop
|
||||
* **18:00 - 19:30** - Dinner
|
||||
* **23:30** - Midnight Snack
|
||||
|
||||
#### Sunday - Nov 13
|
||||
|
||||
* **09:00 - 11:00** - Breakfast
|
||||
* **11:00** - Project Submission Deadline
|
||||
* **11:30 - 15:00** - Project Judging
|
||||
* **12:00 - 16:00** - Closing Talks
|
||||
* **12:30 - 14:00** - Lunch
|
||||
* **15:15** - Finalist Teams Notified on Matrix
|
||||
* **16:00 - 17:00** - Closing Ceremonies & Demos
|
||||
* **17:00** - The final toast & beer 🍻
|
||||
* **19:00** - Hackathon ends
|
||||
* **21:00** - [Afterparty](#afterparty)
|
||||
|
||||
---
|
||||
|
||||
### Hackathon identity - Soulbound Token (SBT)
|
||||
|
||||
Upon on-site registration, each visitor will receive a card with a one-time QR code to mint their unique ETHBrno² Soulbound Token on the Optimism network.
|
||||
|
||||
Possession of this token will entitle all visitors to:
|
||||
|
||||
- participate in the quadratic voting and help choose the winning projects
|
||||
- get test ETH on Goerli or Sepolia testnet (up to 200 ETH/person)
|
||||
|
||||
---
|
||||
|
||||
### Hacking Rules
|
||||
|
||||
- Maximum of 5 people per team
|
||||
- Projects must be related to the "Privacy & Security" topic
|
||||
- All code for projects must be written during the event
|
||||
- You cannot steal another team’s source code
|
||||
- Teams may have members joining remotely
|
||||
- Teams that have members joining remotely must have a member present on the venue for the judging
|
||||
- The decision of judges is final in terms of determining prizes and awards
|
||||
- Please respect our [Code of Conduct!](/code-of-conduct/)
|
||||
|
||||
---
|
||||
|
||||
### Prizes and bounties
|
||||
|
||||
ETHBrno is not a regular hackathon. Please study the following section carefully.
|
||||
|
||||
#### Open track - quadratic voting
|
||||
|
||||
You decide who wins! Every project is eligible, given they are aligned with the hackathon's theme and respecting [the rules](#hacking-rules). There will be no pitches and no judges. The open track will be judged by everyone attending using their [ETHBrno² Soulbound token](#hackathon-identity---soulbound-token-sbt) received upon registration.
|
||||
|
||||
- 1st place: **$2000**
|
||||
- 2nd place: **$1000**
|
||||
- 2nd place: **$500**
|
||||
|
||||
#### Meta Awards
|
||||
|
||||
Meta awards reward certain aspects of your project. All projects are eligible.
|
||||
|
||||
- **Innovation** - new and interesting applications of technology
|
||||
- **Best smart-contract** - smart contract code quality and documentation
|
||||
- **Design** - outstanding user interfaces, graphics and experience
|
||||
|
||||
The prize for each award is **$1000**.
|
||||
|
||||
#### Sponsor bounties
|
||||
|
||||
You can find sponsor bounties in [bounties repository](https://github.com/ethbrno/eb2-sponsor-bounties).
|
||||
|
||||
Available sponsor bounties:
|
||||
- [[#1] MetaMask Snaps Bounty](https://github.com/ethbrno/eb2-sponsor-bounties/issues/1) - extend the functionality of MetaMask ($800)
|
||||
- [[#2] Swarm Bounty](https://github.com/ethbrno/eb2-sponsor-bounties/issues/2) - Build an awesome (d)app using Swarm ($500)
|
||||
|
||||
---
|
||||
|
||||
### Finding a Team / Project Idea<i class='icon users'></i>
|
||||
|
||||
If you’re missing team-mates or ideas for projects we’ve got you covered. You can start by writing into the **Find-a-team** chat on our [Matrix](https://matrix.to/#/#ethbrno:gwei.cz). Introduce yourself, discuss ideas, see what others are up to… There will also be a **Team-building session**, which will take place after the opening ceremony of Friday night. No need to prepare anything, just turn up. This session will be followed by a short **Brainstorm**, that you can also attend. We will take you and your team through a couple of exercises, which should lead you to at least one solid project idea. Then you’ll have everything to start your weekend of hacking!
|
||||
|
||||
---
|
||||
|
||||
### Mentoring<i class='icon book'></i>
|
||||
|
||||
Our amazing mentors are here to discuss anything related to your project. Not just code, but also ideas, concepts, design and presentation. They will generally be hanging around a **Mentor Base**, where you can come find them in person. You can also reach them on Matrix, in the **Mentor-help** chat. It’s always better to ask for advice sooner rather than later, you will learn and build quicker that way.
|
||||
|
||||
---
|
||||
|
||||
### Submissions
|
||||
|
||||
You have to register and create your project at [ethbrno.devfolio.co](https://ethbrno.devfolio.co/) for submission before Sunday, 11am.
|
||||
|
||||
After the registration, your [dashboard](https://devfolio.co/ethbrno/dashboard) will become visible, that is the place where you submit and update your project.
|
||||
Make sure to provide a link to your open-source repository, a video or a demo, and if applicable, the contract address(es) of your deployed application, either on a testnet of your choice or mainnet of a platform of choice. All submitted projects will be eligible for the main hackathon prize.
|
||||
|
||||
Don't miss the deadline! Sunday 11am!
|
||||
|
||||
---
|
||||
|
||||
### Massages
|
||||
|
||||
Enjoy short relaxing massages from a local blind masseuse Pavel with many years of experience with IT specialists.
|
||||
|
||||
- Saturday [10:00 - 16:00] in a massage room next to the Chill lounge.
|
||||
|
||||
----
|
||||
|
||||
### Sound-healing
|
||||
|
||||
1hr long sound bath, deep relaxation, healing and self-discovery. The tones of these instruments heal and harmonize our body, mind and spirit. During Sound Healing you may feel physical and mental relaxation, various forms of emotions may appear, you may perceive visions, colours, images, scenes. You may feel a tingling, warmth, or tingling sensation on your body. At the same time you can sleep through the whole concert.
|
||||
|
||||
- Saturday [15:00 - 16:00] and [17:00 - 18:00] in the Chill lounge.
|
||||
|
||||
---
|
||||
|
||||
### Board-games
|
||||
|
||||
Need a change of perspective or just take a break from the monitor? Switch to offline play and have fun with a board game.
|
||||
|
||||
- Chess, Dominoes, Checkers, Dice, Backgammon, Cards and more available in and around the Chill lounge area
|
||||
- You will also have table football at your disposal :)
|
||||
|
||||
---
|
||||
|
||||
### Side-events
|
||||
|
||||
List of events taking place before or during the ETHBrno² hackathon:
|
||||
|
||||
#### Thursday - Nov 10
|
||||
- [11:00 - 20:00] [DOTBrno](https://www.eventbrite.com/e/dotbrno-polkadot-conference-in-brno-czech-republic-tickets-428553835057) - Polkadot conference (Industra - Lazaretní 925/9)
|
||||
|
||||
#### Sunday - Nov 13
|
||||
- [10:00 - 18:00] [ETHBrno² Proxy](http://proxy.ethbrno.cz/) - A sub-conference for a local Czech audience (ClubCo/Impact Hub)
|
||||
- [20:00 - 00:00] [ETHBrno² Afterparty](#afterparty) (Schrott - Křenová 291)
|
||||
|
||||
---
|
||||
|
||||
### Afterparty
|
||||
|
||||
What's next after three days of hacking? A party to squeeze out your last energy over good drinks, music and networking.
|
||||
|
||||
The afterparty will take place in the industrial bar [Schrott](https://www.schrott.cz/), located a 5-minute walk from the main venue ([OSM](https://www.openstreetmap.org/node/6617843585), [Google Maps](https://goo.gl/maps/pcehq6wFLwJADppT8)). We will start at 21:00 and end sometime during the night :)
|
||||
|
||||
The afterparty will be open to everyone, not just hackers, so feel free to invite your friends!
|
||||
|
||||
|
||||
---
|
||||
|
||||
### Nightlife in Brno
|
||||
|
||||
Brno has a selection of world-famous unique bars.
|
||||
Check out Super Panda Circuss, Ctyri pokoje or Bar, ktery neexistuje and let it surprise you. :)
|
||||
|
||||
---
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-home"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
|
Za Šířka: | Výška: | Velikost: 324 B |
binární
static/ogbrno.png
Před Šířka: | Výška: | Velikost: 84 KiB Za Šířka: | Výška: | Velikost: 119 KiB |
Před Šířka: | Výška: | Velikost: 16 KiB Za Šířka: | Výška: | Velikost: 37 KiB |
Za Šířka: | Výška: | Velikost: 33 KiB |
Za Šířka: | Výška: | Velikost: 80 KiB |
Za Šířka: | Výška: | Velikost: 29 KiB |
Za Šířka: | Výška: | Velikost: 29 KiB |
Za Šířka: | Výška: | Velikost: 140 KiB |
Za Šířka: | Výška: | Velikost: 60 KiB |
Před Šířka: | Výška: | Velikost: 47 KiB |
Za Šířka: | Výška: | Velikost: 53 KiB |
Za Šířka: | Výška: | Velikost: 59 KiB |
Za Šířka: | Výška: | Velikost: 27 KiB |
Za Šířka: | Výška: | Velikost: 52 KiB |
Za Šířka: | Výška: | Velikost: 50 KiB |
Za Šířka: | Výška: | Velikost: 18 KiB |
Za Šířka: | Výška: | Velikost: 41 KiB |
Za Šířka: | Výška: | Velikost: 20 KiB |
Za Šířka: | Výška: | Velikost: 31 KiB |
Za Šířka: | Výška: | Velikost: 48 KiB |
Za Šířka: | Výška: | Velikost: 209 KiB |
Za Šířka: | Výška: | Velikost: 39 KiB |
Za Šířka: | Výška: | Velikost: 96 KiB |
Za Šířka: | Výška: | Velikost: 20 KiB |
Za Šířka: | Výška: | Velikost: 84 KiB |
Za Šířka: | Výška: | Velikost: 24 KiB |
Za Šířka: | Výška: | Velikost: 42 KiB |
Za Šířka: | Výška: | Velikost: 15 KiB |
Za Šířka: | Výška: | Velikost: 37 KiB |
Před Šířka: | Výška: | Velikost: 171 KiB Za Šířka: | Výška: | Velikost: 110 KiB |
Za Šířka: | Výška: | Velikost: 11 KiB |
Za Šířka: | Výška: | Velikost: 36 KiB |
Za Šířka: | Výška: | Velikost: 32 KiB |
Za Šířka: | Výška: | Velikost: 86 KiB |
Za Šířka: | Výška: | Velikost: 16 KiB |
Za Šířka: | Výška: | Velikost: 38 KiB |
Za Šířka: | Výška: | Velikost: 55 KiB |
Za Šířka: | Výška: | Velikost: 1.8 KiB |
Za Šířka: | Výška: | Velikost: 9.6 KiB |
Za Šířka: | Výška: | Velikost: 3.5 KiB |
Za Šířka: | Výška: | Velikost: 17 KiB |
Za Šířka: | Výška: | Velikost: 7.9 KiB |
Před Šířka: | Výška: | Velikost: 1.8 KiB Za Šířka: | Výška: | Velikost: 4.9 KiB |
binární
static/photos/sponsors/ef.png
Před Šířka: | Výška: | Velikost: 9.6 KiB Za Šířka: | Výška: | Velikost: 12 KiB |
Před Šířka: | Výška: | Velikost: 3.5 KiB Za Šířka: | Výška: | Velikost: 5.9 KiB |
Za Šířka: | Výška: | Velikost: 224 KiB |
Za Šířka: | Výška: | Velikost: 5.6 KiB |
Před Šířka: | Výška: | Velikost: 17 KiB Za Šířka: | Výška: | Velikost: 24 KiB |
Před Šířka: | Výška: | Velikost: 7.9 KiB Za Šířka: | Výška: | Velikost: 9.5 KiB |
Za Šířka: | Výška: | Velikost: 4.3 KiB |
Za Šířka: | Výška: | Velikost: 32 KiB |
|
@ -10,10 +10,11 @@ const config = {
|
|||
pages: 'build',
|
||||
assets: 'build',
|
||||
fallback: null,
|
||||
precompress: false
|
||||
precompress: true
|
||||
}),
|
||||
trailingSlash: 'always',
|
||||
},
|
||||
extensions: ['.svelte'],
|
||||
preprocess: [
|
||||
preprocess({
|
||||
postcss: true,
|
||||
|
|
|
@ -1,6 +1,34 @@
|
|||
import { expect, test } from '@playwright/test';
|
||||
import { expect, test } from "@playwright/test";
|
||||
|
||||
test('index page has expected h1', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
expect(await page.textContent('h1')).toBe('Welcome to SvelteKit');
|
||||
test("index page have correct tags", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
const tags = page.getByTestId(
|
||||
"tags"
|
||||
);
|
||||
await expect(tags).toContainText("#freedom #anonymity #non-kyc #encryption #selfsovereignty #p2p #opensource #web3");
|
||||
});
|
||||
|
||||
test("can clickthrough to venues and venue link exist", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await page.getByRole("link", { name: "Venues" }).click();
|
||||
await expect(page).toHaveURL(/.*venues/);
|
||||
const venue = page.getByRole("link", { name: "Impact Hub Brno" });
|
||||
await expect(venue).toHaveAttribute("href", "https://www.hubbrno.cz/en/");
|
||||
});
|
||||
|
||||
test("can navigate to contributors and Tree is contributor", async ({ page }) => {
|
||||
await page.goto("/contributors");
|
||||
//this should probably test some test entry from json, will fix
|
||||
const tree = page.getByRole("link", { name: "Tree" });
|
||||
await expect(tree).toHaveAttribute("href", "https://twitter.com/treecz");
|
||||
});
|
||||
|
||||
test("can navigate to speakers", async ({ page }) => {
|
||||
await page.goto("/contributors/speakers");
|
||||
});
|
||||
|
||||
test("can clickthrough to team", async ({ page }) => {
|
||||
await page.goto("/contributors");
|
||||
await page.getByRole('link', { name: 'Core team' }).click();
|
||||
await expect(page).toHaveURL(/.*team/);
|
||||
});
|