Staging (#67)
* init commit * Update config.json * Update README.md * add image assets * adjust images src format * fix image links * Add files via upload * add cc footer * add video media * fix(staging): content changes and fixes * cleanup math included pages * Add principles * fixing date formats to ISO * minor updates * enabling data endpoints * add author profile ascii for test * add hanno ascii * editorial adj * add team * init Co-authored-by: amirhouieh <amir@status.im> Co-authored-by: Hanno Cornelius <hanno@status.im>
24
.github/workflows/add-action-project.yml
vendored
@ -1,24 +0,0 @@
|
||||
name: Add new issues and PRs to vac-research PM Board
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
pull_request:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
add-new-issue-to-new-column:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: alex-page/github-project-automation-plus@v0.6.0
|
||||
with:
|
||||
project: vac-research
|
||||
column: New
|
||||
repo-token: ${{ secrets.GH_ACTION_PROJECT_MGMT }}
|
||||
- name: Add pull request to column "Review/QA"
|
||||
if: ${{ !!github.event.pull_request }}
|
||||
uses: alex-page/github-project-automation-plus@v0.6.0
|
||||
with:
|
||||
project: vac-research
|
||||
column: Review/QA
|
||||
repo-token: ${{ secrets.GH_ACTION_PROJECT_MGMT }}
|
13
.github/workflows/deployment-production.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
name: Vercel webhook
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
jobs:
|
||||
deployment:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Calling webhook
|
||||
uses: fjogeleit/http-request-action@v1
|
||||
with:
|
||||
url: ${{ secrets.VERCEL_WEBHOOK_PRODUCTION }}
|
||||
method: 'POST'
|
13
.github/workflows/deployment-staging.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
name: Vercel webhook
|
||||
on:
|
||||
push:
|
||||
branches: [staging]
|
||||
jobs:
|
||||
deployment:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Calling webhook
|
||||
uses: fjogeleit/http-request-action@v1
|
||||
with:
|
||||
url: ${{ secrets.VERCEL_WEBHOOK_STAGING }}
|
||||
method: 'POST'
|
5
.gitignore
vendored
@ -1,9 +1,6 @@
|
||||
_site
|
||||
.sass-cache
|
||||
.jekyll-cache
|
||||
.jekyll-metadata
|
||||
vendor/
|
||||
.bundle/
|
||||
.DS_Store
|
||||
node_modules
|
||||
.vscode
|
||||
.idea
|
@ -1 +0,0 @@
|
||||
2.7.4
|
13
404.html
@ -1,13 +0,0 @@
|
||||
---
|
||||
permalink: /404.html
|
||||
layout: default
|
||||
---
|
||||
|
||||
<div class="container text-center m-auto sm:my-8 flex flex-col items-center">
|
||||
<h1 class="text-xxl">404</h1>
|
||||
|
||||
<p class="section__text text-base lg:text-xxl mb-6 l:mb-16 font-bold">
|
||||
Page not found :(
|
||||
</p>
|
||||
<p>The requested page could not be found.</p>
|
||||
</div>
|
33
Gemfile
@ -1,33 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
# Hello! This is where you manage which Jekyll version is used to run.
|
||||
# When you want to use a different version, change it below, save the
|
||||
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
|
||||
#
|
||||
# bundle exec jekyll serve
|
||||
#
|
||||
# This will help ensure the proper Jekyll version is running.
|
||||
# Happy Jekylling!
|
||||
gem "jekyll", "~> 4.0.0"
|
||||
gem "jekyll-sitemap", "~> 1.4.0"
|
||||
|
||||
# This is the default theme for new Jekyll sites. You may change this to anything you like.
|
||||
gem "minima", "~> 2.5"
|
||||
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
|
||||
# uncomment the line below. To upgrade, run `bundle update github-pages`.
|
||||
# gem "github-pages", group: :jekyll_plugins
|
||||
# If you have any plugins, put them here!
|
||||
group :jekyll_plugins do
|
||||
gem "jekyll-feed", "~> 0.12"
|
||||
end
|
||||
|
||||
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
# and associated library.
|
||||
install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do
|
||||
gem "tzinfo", "~> 1.2"
|
||||
gem "tzinfo-data"
|
||||
end
|
||||
|
||||
# Performance-booster for watching directories on Windows
|
||||
gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform?
|
||||
|
||||
gem "webrick", "~> 1.7"
|
92
Gemfile.lock
@ -1,92 +0,0 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.1.9)
|
||||
em-websocket (0.5.2)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
eventmachine (1.2.7)
|
||||
ffi (1.15.4)
|
||||
forwardable-extended (2.6.0)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (1.8.10)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (4.0.1)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (>= 0.9.5, < 2)
|
||||
jekyll-sass-converter (~> 2.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 2.1)
|
||||
kramdown-parser-gfm (~> 1.0)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 3.0)
|
||||
safe_yaml (~> 1.0)
|
||||
terminal-table (~> 1.8)
|
||||
jekyll-feed (0.15.1)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-sass-converter (2.1.0)
|
||||
sassc (> 2.0.1, < 3.0)
|
||||
jekyll-seo-tag (2.7.1)
|
||||
jekyll (>= 3.8, < 5.0)
|
||||
jekyll-sitemap (1.4.0)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
kramdown (2.3.1)
|
||||
rexml
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.3)
|
||||
listen (3.7.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.3.6)
|
||||
minima (2.5.1)
|
||||
jekyll (>= 3.5, < 5.0)
|
||||
jekyll-feed (~> 0.9)
|
||||
jekyll-seo-tag (~> 2.1)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (4.0.6)
|
||||
rb-fsevent (0.11.0)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.2.5)
|
||||
rouge (3.26.1)
|
||||
safe_yaml (1.0.5)
|
||||
sassc (2.4.0)
|
||||
ffi (~> 1.9)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.9)
|
||||
thread_safe (~> 0.1)
|
||||
tzinfo-data (1.2021.4)
|
||||
tzinfo (>= 1.0.0)
|
||||
unicode-display_width (1.8.0)
|
||||
wdm (0.1.1)
|
||||
webrick (1.7.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
x86_64-darwin-20
|
||||
|
||||
DEPENDENCIES
|
||||
jekyll (~> 4.0.0)
|
||||
jekyll-feed (~> 0.12)
|
||||
jekyll-sitemap (~> 1.4.0)
|
||||
minima (~> 2.5)
|
||||
tzinfo (~> 1.2)
|
||||
tzinfo-data
|
||||
wdm (~> 0.1.1)
|
||||
webrick (~> 1.7)
|
||||
|
||||
BUNDLED WITH
|
||||
2.2.29
|
67
Jenkinsfile
vendored
@ -1,67 +0,0 @@
|
||||
pipeline {
|
||||
agent { label 'linux' }
|
||||
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
/* manage how many builds we keep */
|
||||
buildDiscarder(logRotator(
|
||||
numToKeepStr: '20',
|
||||
daysToKeepStr: '30',
|
||||
))
|
||||
}
|
||||
|
||||
environment {
|
||||
GH_USER = 'status-im-auto'
|
||||
GH_MAIL = 'auto@status.im'
|
||||
/* Dev site deployment. */
|
||||
DEV_SITE = 'dev.vac.dev'
|
||||
DEV_HOST = 'jenkins@node-01.do-ams3.sites.misc.statusim.net'
|
||||
SCP_OPTS = 'StrictHostKeyChecking=no'
|
||||
/* Avoid need for sudo when using bundler. */
|
||||
GEM_HOME = "${env.HOME}/.gem"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Git Prep') {
|
||||
steps {
|
||||
sh "git config user.name ${env.GH_USER}"
|
||||
sh "git config user.email ${env.GH_MAIL}"
|
||||
sh 'yarn run clean'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Install Deps') {
|
||||
steps {
|
||||
sh 'yarn install'
|
||||
sh 'bundle install'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build') {
|
||||
steps {
|
||||
sh 'yarn run build:production'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Publish Prod') {
|
||||
when { expression { env.GIT_BRANCH ==~ /.*master/ } }
|
||||
steps {
|
||||
sshagent(credentials: ['status-im-auto-ssh']) {
|
||||
sh 'yarn run deploy'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Publish Devel') {
|
||||
when { expression { !(env.GIT_BRANCH ==~ /.*master/) } }
|
||||
steps {
|
||||
sshagent(credentials: ['jenkins-ssh']) {
|
||||
sh """
|
||||
rsync -e 'ssh -o ${SCP_OPTS}' -r --delete _site/. \
|
||||
${env.DEV_HOST}:/var/www/${env.DEV_SITE}/
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
42
README.md
@ -1,43 +1 @@
|
||||
# Vac.dev Website
|
||||
|
||||
Originally created by [EthWorks](https://ethworks.io/).
|
||||
|
||||
# Development
|
||||
|
||||
- Install Depndencies:
|
||||
```
|
||||
yarn install
|
||||
bundle install
|
||||
```
|
||||
- Build Website
|
||||
```
|
||||
yarn run build
|
||||
```
|
||||
- For development or server:
|
||||
```
|
||||
yarn run dev
|
||||
yarn run start
|
||||
```
|
||||
|
||||
# Continuous Integration
|
||||
|
||||
- `develop` branch is pushed to [dev.vac.dev](https://dev.vac.dev) via [this CI Job](https://ci.status.im/job/website/job/dev.vac.dev/)
|
||||
- `master` branch is pushed to [vac.dev](https://vac.dev) via [this CI Job](https://ci.status.im/job/website/job/vac.dev/)
|
||||
|
||||
# Change Process
|
||||
|
||||
1. Create a new working branch from `develop`: `git checkout develop; git checkout -b my-changes`,
|
||||
2. Proceed with changes, push to `origin` and open a Pull Request against `develop`,
|
||||
3. Once approved, merge pull request, check changes on [dev.vac.dev](https://dev.vac.dev),
|
||||
4. Once ready to promote to live website, rebase master on develop: `git checkout master; git pull master; git rebase origin/develop; git push`.
|
||||
|
||||
|
||||
# Known Issues
|
||||
|
||||
### Bundler and Jekyll on Apple M1 (with Ruby `x86_64`)
|
||||
|
||||
```sh
|
||||
arch -x86_64 gem install --user-install bundler jekyll
|
||||
echo 'export PATH="~/.gem/ruby/2.6.0/bin:$PATH"' >> ~/.zshrc
|
||||
bundle update
|
||||
```
|
||||
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: author
|
||||
short_name: hanno
|
||||
name: Hanno Cornelius
|
||||
twitter: 4aelius
|
||||
github: jm-clius
|
||||
---
|
46
_config.yml
@ -1,46 +0,0 @@
|
||||
name: Vac
|
||||
title: Vac
|
||||
title_image: '/assets/img/vac.jpg'
|
||||
description: >- # this means to ignore newlines until "baseurl:"
|
||||
Vac is a modular peer-to-peer messaging stack, with a focus on secure messaging.
|
||||
baseurl: '' # the subpath of your site, e.g. /blog
|
||||
url: 'https://vac.dev' # the base hostname & protocol for your site, e.g. http://example.com
|
||||
twitter_username: vacp2p
|
||||
github_username: vacp2p
|
||||
|
||||
simple_analytics: true
|
||||
|
||||
# Build settings
|
||||
plugins:
|
||||
- jekyll-feed
|
||||
- jekyll-sitemap
|
||||
|
||||
exclude:
|
||||
- Gemfile
|
||||
- Gemfile.lock
|
||||
- gulpfile.babel.js
|
||||
- LICENSE.md
|
||||
- node_modules
|
||||
- package.json
|
||||
- package-lock.json
|
||||
- README.md
|
||||
- src
|
||||
- assets
|
||||
- tailwind.config.js
|
||||
- netlify.toml
|
||||
- vendor
|
||||
|
||||
collections:
|
||||
authors:
|
||||
output: true
|
||||
|
||||
defaults:
|
||||
- scope:
|
||||
path: 'assets/img'
|
||||
values:
|
||||
image: true
|
||||
- scope:
|
||||
path: ''
|
||||
type: 'authors'
|
||||
values:
|
||||
layout: 'author'
|
55
_data/authors/hanno.md
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
layout: author
|
||||
short_name: hanno
|
||||
name: Hanno Cornelius
|
||||
twitter: 4aelius
|
||||
github: jm-clius
|
||||
---
|
||||
```ascii
|
||||
%%%%%#***++++++++-........::-===----:::::::--:::-%%%%%%%%%+++++++++++++**#%%%%%%%%%%%#####
|
||||
%%%%%#**+++++++++:.........:::----:::::::---:::.-%%%%%%%%%*+++++++++++++*#%%%%%%%%%%%#####
|
||||
%%%%%#**+++++++++-............:-:::::::---:::::.-%%%%%%%%%++++++++++++++*%%%%%%%%%%%%#####
|
||||
#%@@%#**+++++++++-:...........:::::::---:::::::.-%%%%%%%%%+++++++++++++**%%%%%%%%%%%%#####
|
||||
#%@@%#**+++++++++-:...........::::::::::::::::::=**#%%%%%%++++++++++++++*%%%%%%%%%%%%#####
|
||||
#%%%%#****+++++++-.............::---::::::::=*****+++*#%%%+++++++++++++**%%%%%%%%%%%%#####
|
||||
#%%#**+++++++++++-:...........:---:::::::-*##%%%%##*++**##+++++++++++++**%%%%%%%%%%%%#####
|
||||
#%+-----::::::----:::.........:::::::::=*%%%%@@%%%##*##**#*+++++++++++++*%%%%%%%%%%%%#####
|
||||
*#*+=---------------:.........:::::::-*%%%###**#***######*#*+++++********%%%%%%%%%%%%#####
|
||||
:-**+-::::::------:............:::::=%%#**++====-----=+*#%#%#*+**********%%%%%%%%%%%%#####
|
||||
-=***=::::::::::::.............::::=%%##*++====-----:::--+###**##########%%%%%%%%%%%%#####
|
||||
*+++*+-::::::::::..............::-*%%###**++====-----:::---****++++******%%%%%%%%%%%%#####
|
||||
-++===--------:-::............::-=%%%##***++====----:::::--=**#*+++++****%%%%%%%%%%%%#####
|
||||
.:===**++++++===:..............:-*%%###*+++===-=----:::::--=****+********%%%%%%%%%%%%#####
|
||||
..-==+#*++++++++-::............-+%%%###**###*++====+++=-----*#***********%%%%%%%%%%%%#####
|
||||
..-==*#*++++++++=--:......:-:::-+%%%###*****##*=-=***+==----#%%#*********%%%%%%%%%%%%#####
|
||||
..:*#%%#++++++++-:::......:::::=#%%%#**#*****#*-:-+***++=---###**********%%%%%%%%%%%%#####
|
||||
..:**#%*+====+++:..............-+%%%#*++=+++##*-:--=+=---:--**#+*********%%%%%%%%%%%%#####
|
||||
..:#*#%#+=-----=-:.............:=#####+==-=*#*+-::-==--:::--*==+*********%%%%%%%%%%%%#####
|
||||
..:###%#+++========-:.....:=-::::+####*+=+###%#++=-+*+--::--=--**********%%%%%%%%%%%%#####
|
||||
..:#*#%#++++++++=:::......:-:::::=*###*+*##%%#**++==*#+=------+**********%%%%%%%%%%%%#####
|
||||
..:###%*++++++++-:.............:::-+##*+*#%##*+====**#*=---==+***********%%%%%%%%%%%%#####
|
||||
.:-#*#%+========-:.............:::-=*##*+*#****+==-++#+---=**************%%%%%%%%%%%%#####
|
||||
.:-#*#%+===========-:.....:--:::-----*###**#*+==----=+=--=##*********++++%%%%%%%%%%%%#####
|
||||
.:-#*#%+==---====-::......::::::-----+####*****+=---=--==####**********+*%%%%%%%%%%%%#####
|
||||
::=#*#%+==--=-==-:.............:---::+##%%#*+====-----==+%###############%%%%%%%%%%%%#####
|
||||
::=#*#%+==--:-==-:.............::::::*##%%%##*++=======-*%#**************%%%%%%%%%%%%#####
|
||||
::+#*#%+=========-:::::..:::::::::::-####%%%%%##***+==--*%#**************%%%%%%%%%%%%%###%
|
||||
::+#*#%+==----====-===-:::=+=---::--=#####%%%%##**+=----#%#**************%%%%%%%%%%%%%##%%
|
||||
::+##%%+==----===-:-==-:.:==-----==-*#######**++=-------#%#********+++++*%%%%%%%%%%%%%##%%
|
||||
::+##%%+==--=====-::--:..:----------###**###*++=--------*%#********+++++*%%%%%%%%%%%%%#%%%
|
||||
::+%#%%+==--=====-:.:::...:::::=+**####***##***=---------=+******+++++++*%%%%%%%%%%%%%#%%%
|
||||
::*###%*=++=--====::--:..:-==*%%@@%##*********+=----------=***#**+++++++*%%%%%%%%%%%%%%%%%
|
||||
:-*#*#%*=++=--===+=+*###*#%%%@@@@@@@%##*****++===------=+*####%%%#*+++++*%%%%%%%%%%%%%%%%%
|
||||
:-*#*%%*===++=++*%%%%%%%%%%@@@@@@@@@@@@@%%#***++++++**########%%%%%%##**#%%%%%%%%%%%%%%%%%
|
||||
:-*#*#%*==---*%%%%@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%################%#%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
--#%##%*===+%@@%%%%%%@@@@@@@@@@@@@@@@@@%%@@@@@%%%%%%################%%%%%%%%%%@@@@@@@%%%%%
|
||||
-=%%##%*==#@@@@@%%%%%%@%@@@@@@@@@@@@@@%%%%%%%%%%%%%#######################%##%%%@@@@@%%%%%
|
||||
-=%%*#%*=#@@@@%%%@@%%%%%@@@@@%%%%@@%@@@%%########%%%%%%%########################%@@@@%%%%%
|
||||
-=#%*#%*#@@@@@@%%%%@%%@@@@@@%%%%%%@%%%%%%%%################%%%%%%%%%############%%@@@%%%%%
|
||||
-=##**%#@@@@@@@@%%%%%@@@@%%%%%%%%%%%%%%%%%%###***********#######%%%%%%%####%%#%%%%@@@%%%%%
|
||||
-=##**#@@@@@@@@@%%%@@@%%%%%%%%%%%%%%%%%%%%%%##*****************#####%%%%##%%%%%%%%@@@%%%%%
|
||||
-=##**%@@@@@@@@@%%@@@@%@%%%%%%%%%%%%%%%%%%%%%##***************+++*###%@%#%%%%%%%%%%@@%%%%%
|
||||
-=##*#@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%@%#%%%%###****++++*****#*++=+*##%%#%%%%%%%%%%@@%%%%%
|
||||
-=##*@@@@@@@@@@@@@@@@@@@%%%%%%%#%%%%%%%%##%%%%###***+++++*******#*+++#%%#@%%%%%%%%%@@%%%%%
|
||||
|
||||
```
|
@ -1,27 +0,0 @@
|
||||
---
|
||||
- title: "Researching All Layers"
|
||||
text: "Concerned with all layers in the stack including underlying
|
||||
transports, p2p overlays and routing, initial trust establishment, and
|
||||
semantics for things like group chat."
|
||||
|
||||
- title: "Peer-to-Peer"
|
||||
text: "The protocols we work on are pure peer-to-peer, and aim to minimize
|
||||
centralization. This too is in opposition to many initiatives in the
|
||||
secure messaging space."
|
||||
|
||||
- title: "Security, Privacy, Censorship Resistance"
|
||||
text: "Assumes the basics such as end-to-end encryption, forward secrecy,
|
||||
avoiding MITM-attacks. Vac also places a premium on privacy and
|
||||
censorship resistance from port blocking, traffic analysis, and
|
||||
similar."
|
||||
|
||||
- title: "Modular System"
|
||||
text: "Provide options at each layer in the stack, instead of having a
|
||||
tightly coupled set of protocols. Allowing developers to choose what
|
||||
they use and ensure they know each choice comes with different
|
||||
trade-offs."
|
||||
|
||||
- title: "Generalized Messaging"
|
||||
text: " This includes both human to human communication, as well as machine to
|
||||
machine communication. Texting, data transfer, financial transactions,
|
||||
state channels and more."
|
@ -1,6 +0,0 @@
|
||||
---
|
||||
- title: "Waku"
|
||||
link: https://wakunetwork.com/
|
||||
|
||||
- title: "Waku Connect"
|
||||
link: https://wakuconnect.dev/
|
@ -1,6 +0,0 @@
|
||||
---
|
||||
- title: "Log"
|
||||
link: "/research-log"
|
||||
|
||||
- title: "Specs"
|
||||
link: "https://rfc.vac.dev/"
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
- title: "Twitter"
|
||||
link: https://twitter.com/vacp2p
|
||||
|
||||
- title: "Discord"
|
||||
link: https://discord.gg/PQFdubGt6d
|
||||
|
||||
- title: "Telegram"
|
||||
link: https://t.me/vacp2p
|
@ -1,21 +0,0 @@
|
||||
---
|
||||
- link: https://jobs.status.im/?search=Vac
|
||||
src: /assets/img/logo.svg
|
||||
title: "Join the team"
|
||||
text: "We are a remote team of researchers dedicated to building a fair
|
||||
internet."
|
||||
linkText: "View open roles"
|
||||
|
||||
- link: https://discord.gg/PQFdubGt6d
|
||||
src: /assets/img/discord.svg
|
||||
title: "Join the convo"
|
||||
text: "Ask questions or speak with us about our work as we research new
|
||||
means of communication."
|
||||
linkText: "Join our Discord"
|
||||
|
||||
- link: https://github.com/vacp2p
|
||||
src: /assets/img/github.svg
|
||||
title: "Contribute on Github"
|
||||
text: "Our work is open source and free for anyone to contribute to, use,
|
||||
and modify for their needs."
|
||||
linkText: "Contribute"
|
@ -1,30 +0,0 @@
|
||||
---
|
||||
- title: "Vac, Waku v2 and Ethereum Messaging"
|
||||
date: 2021-08-06 12:00:00 +0800
|
||||
link: https://www.youtube.com/watch?v=s0ATpQ4_XFc&ab_channel=OsakaThorp
|
||||
image: https://i3.ytimg.com/vi/s0ATpQ4_XFc/maxresdefault.jpg
|
||||
|
||||
- title: "ZKPodcast: ZKPs for Spam Protection & Decentralized Messaging with Status"
|
||||
date: 2021-07-23 12:00:00 +0800
|
||||
link: https://www.youtube.com/watch?v=S782Ppzvkd0&ab_channel=ZeroKnowledge
|
||||
image: https://img.youtube.com/vi/S782Ppzvkd0/mqdefault.jpg
|
||||
|
||||
- title: "Franck Royer : DappConnect: Enabling decentralised communications using Waku"
|
||||
date: 2021-07-21 12:00:00 +0800
|
||||
link: https://www.youtube.com/watch?v=rQOp3qoDF0g&ab_channel=AmphiPoissy
|
||||
image: https://i3.ytimg.com/vi/rQOp3qoDF0g/maxresdefault.jpg
|
||||
|
||||
- title: "Oskar Thoren | Vac, Waku v2 and Ethereum Messaging"
|
||||
date: 2020-11-09 12:00:00 +0800
|
||||
link: https://www.youtube.com/watch?v=lUDy1MoeYnI&ab_channel=TaipeiEthereumMeetup
|
||||
image: https://i3.ytimg.com/vi/lUDy1MoeYnI/maxresdefault.jpg
|
||||
|
||||
- title: "Dean Eigenman & Oskar Thoren: From Whisper to Waku"
|
||||
date: 2020-03-03 12:00:00 +0800
|
||||
link: https://www.youtube.com/watch?v=6lLT33tsJjs&ab_channel=AmphiStGermain
|
||||
image: https://i3.ytimg.com/vi/6lLT33tsJjs/maxresdefault.jpg
|
||||
|
||||
- title: "Private and Reliable Data Sync for Messaging Over Whisper by Dean Eigenmann & Oskar Thoren (Devcon5)"
|
||||
date: 2019-08-12 12:00:00 +0800
|
||||
link: https://www.youtube.com/watch?v=zxN-PqYkZ1M&ab_channel=EthereumFoundation
|
||||
image: https://i3.ytimg.com/vi/zxN-PqYkZ1M/maxresdefault.jpg
|
@ -1,28 +0,0 @@
|
||||
---
|
||||
- title: "Work"
|
||||
link: "/#work"
|
||||
type: local
|
||||
|
||||
- title: "About"
|
||||
link: "/#about"
|
||||
type: local
|
||||
|
||||
- title: "Join Vac"
|
||||
link: "/#join"
|
||||
type: local
|
||||
|
||||
- title: "Research log"
|
||||
link: "/research-log"
|
||||
type: local
|
||||
|
||||
- title: "Media"
|
||||
link: "/media"
|
||||
type: local
|
||||
|
||||
- title: "Specs"
|
||||
link: "https://rfc.vac.dev/"
|
||||
type: external
|
||||
|
||||
- title: "Forum"
|
||||
link: "https://forum.vac.dev/"
|
||||
type: external
|
@ -1,50 +0,0 @@
|
||||
<footer class="footer bg-black flex flex-shrink-0 justify-center">
|
||||
<div class="container max-w-screen-xl flex sl:justify-between lm:justify-start p-5 md:px-12 md:pt-5 lg:py-10">
|
||||
<div class="logo mr-10 sm:mr-0 sm:w-2/12 lg:w-3/12">
|
||||
<a href="/"><img src="{{ '/assets/img/logo.png' | relative_url }}" alt="Vac logo" class="w-9 h-11" /></a>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col xm:flex-row xm:justify-between sm:w-10/12 lg:w-9/12">
|
||||
<p class="hidden sl:inline-block sl:mr-10 text-xxs lg:text-base text-white opacity-75">Vac researches peer-to-peer, private, censorship resistant communication</p>
|
||||
<nav class="flex max-w-xs mr-0 xm:mr-5 l:mr-32 mb-5 sm:mb-0">
|
||||
<div class="flex">
|
||||
<div class="flex flex-col mr-5 sm:mr-10 sl:mr-14">
|
||||
<p class="text-xxs lg:text-base text-white opacity-75 mb-5 lg:mb-8">Research</p>
|
||||
<ul>
|
||||
{% for nav in site.data.footer-research %} {% include nav-item-footer.html %} {% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="flex flex-col sl:mr-14">
|
||||
<p class="text-xxs lg:text-base text-white opacity-75 mb-5 lg:mb-8">Socials</p>
|
||||
<ul>
|
||||
{% for nav in site.data.footer-socials %} {% include nav-item-footer.html %} {% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{%- comment -%}
|
||||
<div>
|
||||
<div class="flex flex-col sl:mr-5">
|
||||
<p class="text-base text-white mb-5 lg:mb-4">Projects</p>
|
||||
<ul>
|
||||
{% for nav in site.data.footer-projects %} {% include nav-item-footer.html %} {% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{%- endcomment -%}
|
||||
</nav>
|
||||
|
||||
{%- comment -%}
|
||||
<div class="flex flex-col w-52">
|
||||
<h3 class="text-base text-white mb-5">Signup for updates</h3>
|
||||
<form action="" class="footer__form">
|
||||
<div class="flex items-center w-full">
|
||||
<input class="text-xs text-white w-full bg-black border-b border-white rounded-none mr-2 focus:outline-none placeholder-white placeholder-opacity-50" type="email" placeholder="your email" required />
|
||||
<button class="h-10 w-10 bg-arrowWhite bg-auto bg-no-repeat bg-left focus:outline-none hover:opacity-50" type="submit"></button>
|
||||
</div>
|
||||
</form>
|
||||
<p class="footer__confirm text-base italic text-white opacity-75 hidden">You signed up! Check your e-mail</p>
|
||||
</div>
|
||||
{%- endcomment -%}
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
@ -1,58 +0,0 @@
|
||||
<head>
|
||||
{% if page.title %}
|
||||
<title>{{ site.title }} - {{ page.title }}</title>
|
||||
{% else %}
|
||||
<title>{{ site.title }}</title>
|
||||
{% endif %}
|
||||
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<title>Vac</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<script async defer src="https://cdn.simpleanalytics.io/hello.js"></script>
|
||||
<noscript><img src="https://api.simpleanalytics.io/hello.gif" alt="" /></noscript>
|
||||
|
||||
<!-- Fathom - simple website analytics - https://github.com/usefathom/fathom -->
|
||||
<script>
|
||||
(function (f, a, t, h, o, m) {
|
||||
a[h] =
|
||||
a[h] ||
|
||||
function () {
|
||||
(a[h].q = a[h].q || []).push(arguments);
|
||||
};
|
||||
(o = f.createElement("script")), (m = f.getElementsByTagName("script")[0]);
|
||||
o.async = 1;
|
||||
o.src = t;
|
||||
o.id = "fathom-script";
|
||||
m.parentNode.insertBefore(o, m);
|
||||
})(document, window, "//fathom.status.im/tracker.js", "fathom");
|
||||
fathom("set", "siteId", "YELIA");
|
||||
fathom("trackPageview");
|
||||
</script>
|
||||
<!-- / Fathom -->
|
||||
|
||||
<!-- Twitter cards -->
|
||||
<meta name="twitter:site" content="@{{ site.twitter_username }}" />
|
||||
<meta name="twitter:creator" content="@{{ page.author }}" />
|
||||
<meta name="twitter:title" content="{{ page.title }}" />
|
||||
|
||||
{% if page.summary %}
|
||||
<meta name="twitter:description" content="{{ page.summary }}" />
|
||||
{% else %}
|
||||
<meta name="twitter:description" content="{{ site.description }}" />
|
||||
{% endif %} {% if page.image %}
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:image" content="{{ site.url }}{{ site.baseurl }}{{ page.image }}" />
|
||||
{% else %}
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:image" content="{{ site.url }}/assets/img/vac.png" />
|
||||
{% endif %}
|
||||
<!-- end of Twitter cards -->
|
||||
|
||||
<link rel="shortcut icon" href="{{ '/assets/img/favicon.png' | relative_url }}" type="image/png" />
|
||||
<link rel="preload" href="/fonts/OpenSans-Regular.woff2" as="font" type="font/woff2" crossorigin />
|
||||
<link rel="preload" href="/fonts/OpenSans-SemiBold.woff2" as="font" type="font/woff2" crossorigin />
|
||||
<link rel="preload" href="/fonts/OpenSans-SemiBoldItalic.woff2" as="font" type="font/woff2" crossorigin />
|
||||
<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/style.css" />
|
||||
</head>
|
@ -1,40 +0,0 @@
|
||||
<header class="sm:sticky sm:top-0 bg-white z-50">
|
||||
<div class="container max-w-screen-xl sm:border-b">
|
||||
<div class="nav-section flex justify-between items-center py-3 md:py-5 lg:py-10">
|
||||
<div class="logo md:pr-8 l:p-0">
|
||||
<a href="/"><img src="{{ '/assets/img/logo.png' | relative_url }}" alt="Vac logo" class="w-9 h-11" /></a>
|
||||
</div>
|
||||
<div class="flex justify-between items-center w-9/12">
|
||||
<div class="burger block sm:hidden z-50">
|
||||
<button class="burger__button burger__button--open fixed top-2 right-5 w-12 h-12" type="button" aria-label="Mobile menu button">
|
||||
<img class="burger__icon" src="{{ '/assets/img/burger.svg' | relative_url }}" alt="Open menu button" />
|
||||
</button>
|
||||
<button class="burger__button burger__button--close hidden fixed top-2 right-5 w-12 h-12" type="button" aria-label="Close mobile menu button">
|
||||
<img class="burger__icon burger__icon--close" src="{{ '/assets/img/close.svg' | relative_url }}" alt="Close menu button" />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<nav class="nav max-w-screen-xm md:max-w-screen-sl container">
|
||||
<ul class="nav__list hidden sm:flex justify-between container text-xs font-semibold md:pr-8 l:p-0">
|
||||
{% for nav in site.data.navigation %} {% include nav-item.html %} {% endfor %}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<ul class="social items-center hidden md:flex">
|
||||
{% include social.html %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="overlay container max-w-screen-sm w-full hidden sm:hidden fixed top-0 right-0 h-screen bg-black bg-opacity-40 z-30">
|
||||
<nav class="nav-mobile hidden fixed top-0 right-0 flex flex-col justify-between items-center pt-14 px-12 pb-5 bg-white w-9/12 h-3/4 z-40">
|
||||
<ul class="nav__list flex flex-col flex-1 justify-between items-center container box-content w-32 h-auto max-h-nav text-xs font-normal">
|
||||
{% for nav in site.data.navigation %} {% include nav-item.html %} {% endfor %}
|
||||
</ul>
|
||||
<ul class="social items-center flex mt-8">
|
||||
{% include social.html %}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
@ -1,4 +0,0 @@
|
||||
<li class="flex flex-col w-full sm:w-1/2 lm:max-w-screen-xs mb-5 lg:mb-8">
|
||||
<time class="text-xxs opacity-75">{{ mediapost.date | date: '%B %d, %Y' }}</time>
|
||||
<a href="{{ mediapost.link }}" class="text-xs lg:text-base font-semibold hover:underline">{{ mediapost.title }}</a>
|
||||
</li>
|
@ -1,3 +0,0 @@
|
||||
<li class="text-xxs lg:text-base text-white hover:opacity-50 mb-5">
|
||||
<a href="{{ nav.link }}" target="_blank" rel="noopener noreferrer">{{ nav.title }}</a>
|
||||
</li>
|
@ -1,7 +0,0 @@
|
||||
<li class="hover:opacity-50">
|
||||
{% if nav.type == "local" %}
|
||||
<a class="nav__link" href="{{ nav.link }}">{{ nav.title }}</a>
|
||||
{% elsif nav.type == "external" %}
|
||||
<a href="{{ nav.link }}" target="_blank" rel="noopener noreferrer">{{ nav.title }}</a>
|
||||
{% endif %}
|
||||
</li>
|
@ -1,4 +0,0 @@
|
||||
<li class="flex flex-col w-full sm:w-1/2 lm:max-w-screen-xs mb-5 lg:mb-8">
|
||||
<time class="text-xxs opacity-75">{{ post.date | date: '%B %d, %Y' }}</time>
|
||||
<a href="{{ site.baseurl }}{{ post.url }}" class="text-xs lg:text-base font-semibold hover:underline">{{ post.title }}</a>
|
||||
</li>
|
@ -1,2 +0,0 @@
|
||||
<script src="{{ '/assets/js/main.min.js' | relative_url }}"></script>
|
||||
<script src="{{ '/assets/js/smooth-scroll.min.js' | relative_url }}"></script>
|
@ -1,30 +0,0 @@
|
||||
<li class="pr-5">
|
||||
<a href="https://twitter.com/vacp2p" target="_blank" rel="noopener noreferrer">
|
||||
<svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||||
<path
|
||||
d="M24.8872 3.04499C23.9872 3.43499 23.0572 3.70498 22.0672 3.82499C23.0872 3.22498 23.8672 2.26499 24.2272 1.09499C23.2672 1.66499 22.2172 2.05499 21.1072 2.29499C20.2072 1.33499 18.9172 0.734985 17.5072 0.734985C14.7772 0.734985 12.5872 2.95499 12.5872 5.65499C12.5872 6.04499 12.6172 6.40498 12.7072 6.76498C8.62721 6.58498 5.02721 4.60498 2.59721 1.63499C0.857207 4.75498 2.80721 7.33499 4.09721 8.20499C3.31721 8.20499 2.53721 7.96499 1.87721 7.60499C1.87721 10.035 3.58721 12.045 5.80721 12.495C5.32721 12.645 4.24721 12.735 3.58721 12.585C4.21721 14.535 6.04721 15.975 8.17721 16.005C6.49721 17.325 4.03721 18.375 0.887207 18.045C3.07721 19.455 5.65721 20.265 8.44721 20.265C17.5072 20.265 22.4272 12.765 22.4272 6.28499C22.4272 6.07499 22.4272 5.86499 22.3972 5.65499C23.4172 4.90499 24.2572 4.03499 24.8872 3.04499Z"
|
||||
fill="#151512"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li class="pr-5">
|
||||
<a href="https://github.com/vacp2p" target="_blank" rel="noopener noreferrer">
|
||||
<svg width="26" height="25" viewBox="0 0 26 25" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||||
<path
|
||||
d="M12.8857 0.856567C6.26021 0.856567 0.915339 6.20154 0.950043 12.7951C0.9778 18.0687 4.43935 22.5427 9.21766 24.1227C9.81824 24.2327 10.0353 23.864 10.0336 23.5474C10.0321 23.2635 10.0177 22.5129 10.0065 21.5171C6.67274 22.238 5.95552 19.9163 5.95552 19.9163C5.40376 18.5369 4.61433 18.1698 4.61433 18.1698C3.51994 17.4296 4.69151 17.4444 4.69151 17.4444C5.89646 17.5291 6.53549 18.6751 6.53549 18.6751C7.61609 20.4989 9.35182 19.9727 10.0342 19.6665C10.1382 18.8951 10.4459 18.3689 10.7878 18.0702C8.12222 17.7684 5.31483 16.7443 5.29076 12.1708C5.2839 10.8672 5.74629 9.80152 6.50989 8.96619C6.3838 8.66445 5.96641 7.45009 6.61027 5.80766C6.61027 5.80766 7.61658 5.4866 9.9167 7.03094C10.8723 6.76636 11.8976 6.63408 12.9191 6.62962C13.9376 6.63556 14.9658 6.76636 15.9257 7.03242C18.2081 5.48809 19.2163 5.80914 19.2163 5.80914C19.8789 7.45306 19.4743 8.66594 19.3529 8.96767C20.1268 9.80301 20.5959 10.8687 20.6028 12.1723C20.6269 16.7577 17.8272 17.767 15.1558 18.0628C15.5882 18.4314 15.976 19.1597 15.9819 20.273C15.9903 21.8693 15.9821 23.1565 15.9841 23.5474C15.9858 23.867 16.2038 24.2386 16.8122 24.1212C21.5663 22.5397 24.9778 18.0672 24.95 12.7951C24.9153 6.20154 19.5142 0.856567 12.8857 0.856567Z"
|
||||
fill="#151512"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://discord.gg/PQFdubGt6d" target="_blank" rel="noopener noreferrer">
|
||||
<svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||||
<path
|
||||
d="M22.7861 9.04256C21.8482 5.74455 20.7799 4.04048 20.7627 4.00991C20.7017 3.93459 19.189 2.104 15.5271 0.75L15.0353 2.0764C16.7774 2.72057 18.0116 3.50643 18.6899 4.01419C16.6599 3.40408 14.2431 3.03041 12.1008 3.03041C9.95851 3.03041 7.53775 3.40408 5.50128 4.01419C6.18496 3.50648 7.42744 2.72057 9.17631 2.0764L8.69846 0.75C5.02238 2.104 3.49044 3.93459 3.42863 4.00991C3.41108 4.04048 2.32479 5.74455 1.35221 9.04256C0.414855 12.2208 0.0415214 16.7045 0.027872 16.8843C0.109225 17.0131 1.97891 20.25 7.12077 20.25L8.43406 18.3536C6.97595 17.964 5.58693 17.3357 4.31689 16.4832L5.10228 15.3069C7.15122 16.6822 9.54509 17.4092 12.0251 17.4092C14.5051 17.4092 16.9067 16.6822 18.9701 15.3069L19.7431 16.4832C18.4641 17.3357 17.0684 17.964 15.6062 18.3536L16.8995 20.25C22.0414 20.25 23.9452 17.0131 24.0279 16.8843C24.0161 16.7045 23.69 12.2208 22.7861 9.04256ZM8.79853 12.7392H7.39228L7.40468 10.3841H8.81093L8.79853 12.7392ZM16.7071 12.7392H15.3008L15.3132 10.3841H16.7195L16.7071 12.7392Z"
|
||||
fill="#151512"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
@ -1,39 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<section class="container max-w-screen-xl flex flex-col sm:flex-row pt-10 pb-0 md:pb-10 lg:pb-0">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12 flex lg:justify-center items-start pb-3 sm:pb-0">
|
||||
<a class="link link--back" href="/research-log/">Back</a>
|
||||
</div>
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<div class="post mb-10">
|
||||
<h1 class="text-xl md:text-xxl mb-4 sm:max-w-md lg:max-w-2xl">{{ page.name }}</h1>
|
||||
<div class="flex items-center mb-8 lg:mb-10">
|
||||
<a href="https://twitter.com/{{ page.twitter }}" target="_blank" rel="noopener noreferrer" class="mr-8"
|
||||
><svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||||
<path
|
||||
d="M24.8872 3.04499C23.9872 3.43499 23.0572 3.70498 22.0672 3.82499C23.0872 3.22498 23.8672 2.26499 24.2272 1.09499C23.2672 1.66499 22.2172 2.05499 21.1072 2.29499C20.2072 1.33499 18.9172 0.734985 17.5072 0.734985C14.7772 0.734985 12.5872 2.95499 12.5872 5.65499C12.5872 6.04499 12.6172 6.40498 12.7072 6.76498C8.62721 6.58498 5.02721 4.60498 2.59721 1.63499C0.857207 4.75498 2.80721 7.33499 4.09721 8.20499C3.31721 8.20499 2.53721 7.96499 1.87721 7.60499C1.87721 10.035 3.58721 12.045 5.80721 12.495C5.32721 12.645 4.24721 12.735 3.58721 12.585C4.21721 14.535 6.04721 15.975 8.17721 16.005C6.49721 17.325 4.03721 18.375 0.887207 18.045C3.07721 19.455 5.65721 20.265 8.44721 20.265C17.5072 20.265 22.4272 12.765 22.4272 6.28499C22.4272 6.07499 22.4272 5.86499 22.3972 5.65499C23.4172 4.90499 24.2572 4.03499 24.8872 3.04499Z"
|
||||
fill="#151512"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/{{ page.github }}" target="_blank" rel="noopener noreferrer"
|
||||
><svg width="26" height="25" viewBox="0 0 26 25" fill="none" xmlns="http://www.w3.org/2000/svg" class="hover:opacity-50">
|
||||
<path
|
||||
d="M12.8857 0.856567C6.26021 0.856567 0.915339 6.20154 0.950043 12.7951C0.9778 18.0687 4.43935 22.5427 9.21766 24.1227C9.81824 24.2327 10.0353 23.864 10.0336 23.5474C10.0321 23.2635 10.0177 22.5129 10.0065 21.5171C6.67274 22.238 5.95552 19.9163 5.95552 19.9163C5.40376 18.5369 4.61433 18.1698 4.61433 18.1698C3.51994 17.4296 4.69151 17.4444 4.69151 17.4444C5.89646 17.5291 6.53549 18.6751 6.53549 18.6751C7.61609 20.4989 9.35182 19.9727 10.0342 19.6665C10.1382 18.8951 10.4459 18.3689 10.7878 18.0702C8.12222 17.7684 5.31483 16.7443 5.29076 12.1708C5.2839 10.8672 5.74629 9.80152 6.50989 8.96619C6.3838 8.66445 5.96641 7.45009 6.61027 5.80766C6.61027 5.80766 7.61658 5.4866 9.9167 7.03094C10.8723 6.76636 11.8976 6.63408 12.9191 6.62962C13.9376 6.63556 14.9658 6.76636 15.9257 7.03242C18.2081 5.48809 19.2163 5.80914 19.2163 5.80914C19.8789 7.45306 19.4743 8.66594 19.3529 8.96767C20.1268 9.80301 20.5959 10.8687 20.6028 12.1723C20.6269 16.7577 17.8272 17.767 15.1558 18.0628C15.5882 18.4314 15.976 19.1597 15.9819 20.273C15.9903 21.8693 15.9821 23.1565 15.9841 23.5474C15.9858 23.867 16.2038 24.2386 16.8122 24.1212C21.5663 22.5397 24.9778 18.0672 24.95 12.7951C24.9153 6.20154 19.5142 0.856567 12.8857 0.856567Z"
|
||||
fill="#151512"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<ul class="container s:mx-auto flex flex-row flex-wrap">
|
||||
{% assign filtered_posts = site.posts | where: 'author', page.short_name %} {% for post in filtered_posts %} {% include post-preview.html %} {% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post__content">{{ content }}</div>
|
||||
</div>
|
||||
</section>
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="h-full" lang="en-US">
|
||||
{% include head.html %}
|
||||
<body class="h-full flex flex-col font-body">
|
||||
<div class="flex-grow container max-w-screen-xl mx-auto px-5 md:px-12 lg:pt-6">
|
||||
{% include header.html %}
|
||||
|
||||
<main class="bg-white text-black flex flex-col">{{ content }}</main>
|
||||
</div>
|
||||
{% include footer.html %} {% include scripts.html %}
|
||||
</body>
|
||||
</html>
|
@ -1,211 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<section class="intro container max-w-screen-xl flex flex-col sm:flex-row pt-10 pb-8 lg:py-10 border-b">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12"></div>
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<h1 class="text-xl md:text-xxl mb-10 sm:max-w-md lg:max-w-xl">Vac researches peer-to-peer, private, censorship resistant communication.</h1>
|
||||
<a class="link link--external" href="https://jobs.status.im/?search=Vac" target="_blank" rel="noopener noreferrer">See Vac openings</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="work" class="work container max-w-screen-xl flex flex-col sm:flex-row py-10 border-b l:pb-16">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12">
|
||||
<h2 class="text-sm font-semibold mb-6 s:text-center lg:text-center">Work</h2>
|
||||
</div>
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<p class="section__text text-s lg:text-base italic mb-6 l:max-w-md l:mb-16">
|
||||
Building protocols and products at all layers of the stack including underlying transports, p2p overlays and routing, initial trust establishment, and semantics for things like group chat.
|
||||
</p>
|
||||
<div class="work__cards container s:mx-auto flex flex-col items-center sm:flex-row sm:items-stretch">
|
||||
<a class="flex" href="https://wakunetwork.com/" target="_blank" rel="noopener noreferrer">
|
||||
<div class="work__card group flex flex-col justify-between items-center max-w-280 max-h-280 lg:max-w-436 lg:max-h-436 border pt-5 p-4 lg:p-8 lg:pb-10 mb-8 sm:mr-5 sm:mb-0 hover:bg-black transition duration-500">
|
||||
<svg width="65" height="64" viewBox="0 0 65 64" fill="none" xmlns="http://www.w3.org/2000/svg" class="mb-2 lg:mb-8 mt-4 l:mt-20 w-16 h-16 fill-current group-hover:text-white">
|
||||
<g clip-path="url(#clip0)">
|
||||
<path
|
||||
d="M4.40096 46.0099C3.92982 46.0099 3.45868 45.7658 3.19484 45.3338C2.79908 44.6578 3.00638 43.7939 3.68482 43.3996C3.77905 43.3432 11.9769 38.4043 18.4975 32.0569C11.7131 25.4465 3.81674 20.6953 3.72252 20.639C3.04407 20.2446 2.83677 19.3808 3.23253 18.7047C3.62829 18.0287 4.49519 17.8221 5.17364 18.2165C5.5317 18.4418 14.2573 23.6625 21.5129 31.0615C22.0405 31.6061 22.0405 32.4888 21.5129 33.0334C14.5965 40.1132 5.5317 45.578 5.13594 45.8221C4.9098 45.9348 4.6648 46.0099 4.40096 46.0099Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M60.6366 46.0096C60.3916 46.0096 60.1466 45.9533 59.9016 45.803C59.5247 45.5777 50.441 40.1129 43.5247 33.0143C42.997 32.4697 42.997 31.5871 43.5247 31.0425C50.7614 23.6434 59.487 18.4227 59.8639 18.1974C60.5423 17.803 61.4092 18.0096 61.805 18.6856C62.2008 19.3617 61.9935 20.2256 61.315 20.6199C61.2396 20.6763 53.3244 25.4086 46.54 32.0378C53.0606 38.3852 61.2773 43.3429 61.3527 43.3805C62.0123 43.7748 62.2385 44.6387 61.8427 45.3148C61.5789 45.7655 61.1077 46.0096 60.6366 46.0096Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M32.481 21.4464C32.123 21.4464 31.7649 21.3149 31.501 21.052C24.3962 14.16 18.9121 5.12714 18.6671 4.73278C18.2714 4.05672 18.4975 3.19287 19.1571 2.79851C19.8167 2.40414 20.6836 2.61071 21.0982 3.28677C21.1548 3.38067 26.1112 11.5497 32.481 18.0473C39.1147 11.2868 43.8827 3.41822 43.9392 3.32433C44.335 2.64827 45.2019 2.4417 45.8803 2.83607C46.5399 3.23043 46.7661 4.09428 46.3703 4.77034C46.1442 5.14592 40.9051 13.822 33.4798 21.052C33.1972 21.2962 32.8391 21.4464 32.481 21.4464Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M19.8921 61.4275C19.6471 61.4275 19.4021 61.3711 19.1571 61.2209C18.4975 60.8265 18.2714 59.9627 18.6671 59.2866C18.8933 58.911 24.3962 49.8594 31.501 42.9674C32.0476 42.4416 32.9333 42.4416 33.4798 42.9674C40.9051 50.1787 46.1442 58.8735 46.3703 59.2491C46.7661 59.9251 46.5588 60.789 45.8803 61.1833C45.2207 61.5777 44.335 61.3711 43.9392 60.6951C43.8827 60.62 39.1336 52.7326 32.481 45.9721C26.1112 52.4697 21.1359 60.6575 21.0982 60.7326C20.8344 61.1833 20.3632 61.4275 19.8921 61.4275Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M63.0302 29.765C62.1256 29.765 52.2128 29.7087 42.4507 27.1735C41.7158 26.9857 41.2635 26.2345 41.4331 25.4834C43.6757 15.8683 48.6133 6.49744 48.8394 6.12186C49.1975 5.42702 50.0644 5.18289 50.7428 5.5397C51.4401 5.89651 51.704 6.76035 51.3271 7.43641C51.2894 7.53031 46.8229 15.981 44.5238 24.7885C53.7393 26.9669 62.8983 26.9481 63.0868 26.9669C63.8594 26.9669 64.5002 27.5866 64.5002 28.3754C64.5002 29.1641 63.8783 29.7838 63.0868 29.7838C63.0679 29.765 63.0491 29.765 63.0302 29.765Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M14.9923 58.648C14.7662 58.648 14.54 58.5917 14.3327 58.479C13.6355 58.1222 13.3905 57.2584 13.7485 56.5823C13.7862 56.5072 18.1019 48.357 20.4953 39.2114C11.6567 37.1457 2.10188 37.1081 1.93227 37.1081C1.14075 37.1081 0.5 36.4696 0.5 35.6997C0.5 34.9297 1.12191 34.2912 1.91343 34.2912C2.38457 34.2349 12.9759 34.2912 22.5683 36.8077C23.3033 36.9955 23.7556 37.7466 23.586 38.4978C21.2114 48.5635 16.4623 57.5213 16.255 57.8969C15.9912 58.3663 15.5012 58.648 14.9923 58.648Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M38.5309 23.0422C37.909 23.0422 37.3437 22.6291 37.174 22.0093C34.498 12.507 34.3095 1.93422 34.3095 1.48352C34.2907 0.713564 34.9126 0.0750666 35.7041 0.0562873H35.7229C36.4956 0.0562873 37.1175 0.676006 37.1364 1.44596C37.1364 1.53986 37.306 11.0985 39.5486 19.9061C48.6888 17.3896 56.7924 12.9577 56.8678 12.9014C57.5462 12.5258 58.4131 12.7699 58.7901 13.446C59.167 14.122 58.922 14.9859 58.2435 15.3615C57.8666 15.568 48.9526 20.4507 38.889 22.9859C38.7571 23.0234 38.644 23.0422 38.5309 23.0422Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M29.3526 63.9246C28.5799 63.9246 27.958 63.3049 27.9392 62.5349C27.9392 62.441 27.7884 53.2392 25.4515 44.0748C16.6506 46.5162 8.24541 51.0983 8.17003 51.1359C7.49158 51.5115 6.62468 51.2673 6.24777 50.5913C5.87085 49.9152 6.11585 49.0514 6.79429 48.6758C7.19005 48.4692 16.4998 43.38 26.1111 40.995C26.865 40.8072 27.6188 41.2579 27.8072 41.9903C30.5776 51.9434 30.7472 62.0842 30.7472 62.5162C30.766 63.2673 30.1441 63.9058 29.3526 63.9246Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M26.6957 22.9112C26.5638 22.9112 26.4507 22.8924 26.3188 22.8548C16.764 20.2257 7.5673 14.9487 7.19039 14.7234C6.51194 14.329 6.2858 13.4652 6.68156 12.7891C7.05847 12.1318 7.92537 11.8877 8.60382 12.2821C8.69805 12.3384 16.9902 17.1084 25.7157 19.7562C28.2599 10.6483 28.618 1.46517 28.6368 1.35249C28.6745 0.582537 29.3529 -0.0559611 30.1068 0.000376935C30.8794 0.0191563 31.5013 0.676433 31.4637 1.46517C31.4448 1.87831 31.049 12.0192 28.0337 21.9159C27.8641 22.5168 27.2988 22.9112 26.6957 22.9112Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M34.9878 63.9998C34.969 63.9998 34.9501 63.9998 34.9313 63.9998C34.1586 63.9623 33.5367 63.3238 33.5744 62.5351C33.5932 62.0843 34.0267 51.5304 36.9289 42.0843C37.1551 41.3519 37.9277 40.9388 38.6627 41.1454C48.6509 43.9059 57.4519 48.9951 57.8288 49.2205C58.5072 49.6149 58.7334 50.4787 58.3376 51.1548C57.9419 51.8308 57.075 52.0562 56.3965 51.6618C56.3211 51.6055 48.3306 47.0045 39.2469 44.2627C36.8158 53.0139 36.4201 62.5726 36.4012 62.6665C36.3824 63.3989 35.7416 63.9998 34.9878 63.9998Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M1.96996 29.6335C1.93227 29.6335 1.91343 29.6335 1.89458 29.6335C1.12191 29.6335 0.5 28.995 0.5 28.2251C0.5 27.4551 1.12191 26.8542 1.91343 26.8166C1.93227 26.8166 11.6001 26.8166 20.4953 24.7697C18.1396 15.6053 13.8428 7.45512 13.8051 7.38C13.4281 6.68516 13.692 5.84009 14.3893 5.46451C15.0866 5.1077 15.9346 5.37061 16.2927 6.04667C16.5 6.42225 21.2303 15.3988 23.5671 25.4645C23.7367 26.2157 23.2844 26.9481 22.5495 27.1546C13.2585 29.5772 2.98763 29.6335 1.96996 29.6335Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
<path
|
||||
d="M49.9891 58.6857C49.4803 58.6857 48.9903 58.404 48.7453 57.9345C48.538 57.5402 43.6193 48.1693 41.3955 38.5542C41.2259 37.8031 41.6782 37.0707 42.4131 36.8829C52.4579 34.3101 62.6534 34.3477 63.0492 34.3289C63.8218 34.3289 64.4626 34.9674 64.4626 35.7373C64.4626 36.5073 63.8218 37.1458 63.0492 37.1458C63.0492 37.1458 63.0492 37.1458 63.0115 37.1458C62.4084 37.1458 53.4379 37.1834 44.4673 39.2679C46.7476 48.0566 51.1952 56.5449 51.2329 56.62C51.591 57.3148 51.3272 58.1599 50.6487 58.5167C50.4414 58.6294 50.2153 58.6857 49.9891 58.6857Z"
|
||||
class="text-black group-hover:text-white"
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0">
|
||||
<rect width="64" height="64" fill="white" transform="translate(0.5)" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
<p class="work__heading lg:uppercase font-semibold text-s lg:text-base group-hover:text-white">Waku</p>
|
||||
<p class="work__text text-s lg:text-base mt-4 lg:mt-2.5 opacity-75 text-left max-w-screen-xxs group-hover:text-white">
|
||||
A gossip based messaging protocol for private, secure, p2p messaging with implementations written in go, nim, java script.
|
||||
</p>
|
||||
|
||||
<div class="work__link container flex justify-start mt-3 lg:mt-6">
|
||||
<p class="link link--external group-hover:text-white">Visit Waku</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="flex" href="https://wakuconnect.dev/" target="_blank" rel="noopener noreferrer">
|
||||
<div class="work__card group flex flex-col justify-between items-center max-w-280 max-h-280 lg:max-w-436 lg:max-h-436 border pt-5 p-4 lg:p-8 lg:pb-10 hover:bg-black transition duration-500">
|
||||
<svg width="62" height="64" viewBox="0 0 62 64" fill="none" xmlns="http://www.w3.org/2000/svg" class="mb-2 lg:mb-8 mt-4 l:mt-20 w-16 h-16 fill-current group-hover:text-peach">
|
||||
<g clip-path="url(#clip0)">
|
||||
<path
|
||||
d="M48.1706 9.25283C42.8204 6.21844 37.6207 3.26952 32.421 0.320607C31.5401 -0.170879 30.6806 -0.085403 29.8212 0.406083C20.3241 5.8338 10.8271 11.2401 1.35162 16.6679C1.05081 16.8388 0.771486 17.3303 0.771486 17.6722C0.75 28.5062 0.728514 39.3189 0.792973 50.1316C0.792973 50.8368 1.33013 51.8411 1.91027 52.183C7.02404 55.1961 12.2023 58.0809 17.3805 61.0084C17.4235 61.0298 17.5094 61.0084 17.7458 61.0084C17.7458 60.6024 17.7458 60.175 17.7458 59.769C17.7458 49.1273 17.7673 38.5069 17.7243 27.8652C17.7243 26.8608 18.0896 26.3907 18.906 25.942C28.4245 20.557 37.9215 15.1507 47.4185 9.74431C47.6119 9.63747 47.8268 9.48788 48.1706 9.25283Z"
|
||||
class="text-black group-hover:text-peach"
|
||||
/>
|
||||
<path
|
||||
d="M39.7046 64.0005C39.7046 63.509 39.7046 63.103 39.7046 62.7183C39.7046 55.282 39.7261 47.8456 39.6831 40.3878C39.6831 39.4262 39.9624 38.9133 40.8219 38.4432C47.4397 34.7464 54.0146 30.9855 60.6109 27.2459C60.9332 27.0749 61.234 26.8826 61.6208 26.6476C61.4489 26.498 61.3414 26.3698 61.191 26.2843C56.8937 23.8269 52.575 21.3908 48.2992 18.8906C47.0315 18.1427 45.9357 18.1214 44.625 18.8693C38.222 22.5661 31.7761 26.1988 25.3302 29.8315C24.6211 30.2162 24.4062 30.6649 24.4062 31.4556C24.4277 38.8706 24.4277 46.2643 24.4062 53.6793C24.4062 54.7905 24.75 55.6666 25.7384 56.2222C30.1861 58.7437 34.6123 61.2439 39.06 63.7654C39.2104 63.8509 39.4038 63.8936 39.7046 64.0005Z"
|
||||
class="text-black group-hover:text-peach"
|
||||
/>
|
||||
<path d="M61.7495 51.5856C56.5713 48.6367 51.5864 45.816 46.4727 42.9098C46.4727 48.7435 46.4727 54.3849 46.4727 60.2614C51.5435 57.3766 56.5283 54.5559 61.7495 51.5856Z" class="text-black group-hover:text-peach" />
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0">
|
||||
<rect width="61" height="64" fill="white" transform="translate(0.75)" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<p class="work__heading lg:uppercase font-semibold text-s lg:text-base group-hover:text-peach">Waku Connect</p>
|
||||
<p class="work__text text-s lg:text-base mt-4 lg:mt-2.5 opacity-75 text-left max-w-screen-xxs group-hover:text-peach">Empower your dApp with decentralized communication. Use Waku Connect to integrate Waku in your project.</p>
|
||||
|
||||
<div class="work__link container flex justify-start mt-3 lg:mt-6">
|
||||
<p class="link link--external link--dapp group-hover:text-peach">Visit Waku Connect</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="about" class="about container max-w-screen-xl flex flex-col sm:flex-row pt-10 pb-5 lg:pb-2 border-b">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12">
|
||||
<h2 class="text-sm font-semibold mb-5 s:text-center lg:text-center">About</h2>
|
||||
</div>
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<p class="section__text text-s lg:text-base italic mb-5 l:max-w-md l:mb-8">Our research is designed to remove centralized third parties from our communication. We believe in the right to privacy, security, and autonomy of the individual.</p>
|
||||
<div class="about__cards container s:mx-auto flex flex-col flex-wrap sm:flex-row">
|
||||
{% for card in site.data.cards %}
|
||||
<div class="about__card flex flex-col w-full sm:w-1/2 lm:max-w-screen-xscard mb-6 lg:mb-10 lm:mr-5">
|
||||
<p class="about__heading mb-4 font-semibold text-s lg:text-sm text-left">{{ card.title }}</p>
|
||||
<p class="about__text text-s lg:text-base opacity-75 md:mr-5 lg:mr-0">{{ card.text }}</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="research-log" class="log container max-w-screen-xl flex flex-col sm:flex-row py-10 border-b">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12">
|
||||
<h2 class="text-sm font-semibold mb-5 s:text-center lg:text-center">Research log</h2>
|
||||
</div>
|
||||
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<div class="flex flex-col">
|
||||
<ul class="container s:mx-auto flex-row hidden flex-wrap sm:flex">
|
||||
{% for post in site.posts limit:8 %} {% include post-preview.html %} {% endfor %}
|
||||
</ul>
|
||||
<ul class="container s:mx-auto flex flex-col sm:hidden">
|
||||
{% for post in site.posts limit:4 %} {% include post-preview.html %} {% endfor %}
|
||||
</ul>
|
||||
|
||||
<div class="log__link container flex justify-start">
|
||||
<a class="link link--external" href="/research-log/">View all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="media" class="media container max-w-screen-xl flex flex-col sm:flex-row py-10 border-b">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12">
|
||||
<h2 class="text-sm font-semibold mb-5 s:text-center lg:text-center">Media</h2>
|
||||
</div>
|
||||
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<div class="flex flex-col">
|
||||
<ul class="container s:mx-auto flex-row hidden flex-wrap sm:flex">
|
||||
{% for mediapost in site.data.media limit:8 %} {% include media-preview.html %} {% endfor %}
|
||||
</ul>
|
||||
<ul class="container s:mx-auto flex flex-col sm:hidden">
|
||||
{% for mediapost in site.data.media limit:4 %} {% include media-preview.html %} {% endfor %}
|
||||
</ul>
|
||||
|
||||
<div class="media__link container flex justify-start">
|
||||
<a class="link link--external" href="/media/">View all media</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="join" class="join container max-w-screen-xl flex flex-col sm:flex-row pt-10 sl:py-10">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12">
|
||||
<h2 class="text-sm font-semibold mb-5 s:text-center lg:text-center">Join</h2>
|
||||
</div>
|
||||
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<div class="flex flex-col sl:gap-1 sl:flex-row sl:justify-between lg:max-w-screen-ml">
|
||||
{% for card in site.data.join %}
|
||||
<div class="join__option w-full sl:max-w-210 sl:w-4/12 flex sl:flex-col mb-10 sl:mb-0">
|
||||
<div class="flex h-8 mr-6 sl:mr-0 mb-5 lg:mb-8">
|
||||
<a href="{{ card.link }}" target="_blank" rel="noopener noreferrer" class="hover:opacity-50">
|
||||
<img src="{{ card.src }}" alt="Join option logo" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex flex-col justify-between flex-1">
|
||||
<div>
|
||||
<h2 class="text-xs lg:text-sm font-semibold mb-3 lg:mb-8 text-left">{{ card.title }}</h2>
|
||||
<p class="w-full text-s lg:text-sm mb-3 text-left">{{ card.text }}</p>
|
||||
</div>
|
||||
<div class="media__link container flex justify-start">
|
||||
<a class="link link--external" href="{{ card.link }}" target="_blank" rel="noopener noreferrer">{{ card.linkText }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -1,22 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<section class="media container max-w-screen-xl flex flex-col items-center pt-10 pb-8 lg:py-10">
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<h1 class="text-xl md:text-xxl mb-5 lg:mb-16 sm:max-w-md lg:max-w-xl">Media</h1>
|
||||
<div class="media__cards container mx-auto lg:mx-0 flex flex-col flex-wrap sm:flex-row sl:justify-between">
|
||||
{% for mediapost in site.data.media %}
|
||||
<div class="media__card flex flex-col w-full sl:max-w-48 mb-5 sm:mb-0 group">
|
||||
<a href="{{ mediapost.link }}" target="_blank" rel="noopener noreferrer">
|
||||
<img src="{{ mediapost.image }}" class="w-full mb-2 group-hover:opacity-75" alt="Media preview image" />
|
||||
<li class="flex flex-col w-full mb-5 lg:mb-8">
|
||||
<time class="text-xxs opacity-75">{{ mediapost.date | date: '%B %d, %Y' }}</time>
|
||||
<p class="text-xs lg:text-base font-semibold group-hover:underline">{{ mediapost.title }}</p>
|
||||
</li>
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -1,16 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<section class="container max-w-screen-xl flex flex-col items-center pt-10 pb-0 md:pb-10 lg:pb-0">
|
||||
<div class="info-block max-w-680 pb-5 sm:pb-10 overflow-hidden">
|
||||
<div class="post mb-10">
|
||||
<h1 class="text-xl md:text-xxl mb-5 sm:max-w-md lg:max-w-2xl">{{page.title}}</h1>
|
||||
<div>
|
||||
<span class="text-s lg:text-base"> {{ page.date | date_to_string }} • by </span>
|
||||
<a href="/authors/{{ page.author }}" class="text-s lg:text-base font-bold hover:underline">{{ page.author }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post__content">{{ content }}</div>
|
||||
</div>
|
||||
</section>
|
@ -1,39 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<section class="container max-w-screen-xl flex flex-col sm:flex-row pt-10 pb-8 lg:py-10 border-b">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12 flex lg:justify-center items-start pb-3 sm:pb-0">
|
||||
<a class="link link--back" href="/">Back</a>
|
||||
</div>
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<h1 class="text-xl md:text-xxl mb-5 lg:mb-10 sm:max-w-md lg:max-w-xl">Research log</h1>
|
||||
<p class="section__text text-s lg:text-base italic l:max-w-md">We take inspiration from core internet architecture, existing survey work and other efforts that have been done to decompose the problem into orthogonal pieces.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{%- comment -%}
|
||||
<section class="container max-w-screen-xl flex flex-col sm:flex-row pt-10 pb-3 sm:pb-8 border-b">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12 pr-2 ml:pr-0">
|
||||
<h2 class="text-sm font-semibold mb-5 text-center">Open problems</h2>
|
||||
</div>
|
||||
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<ul class="container s:mx-auto flex flex-col flex-wrap sm:flex-row">
|
||||
{% for post in site.posts %} {% if post.categories contains "problem" %} {% include post-preview.html %} {% endif %} {% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
{%- endcomment -%}
|
||||
|
||||
<section class="container max-w-screen-xl flex flex-col sm:flex-row pt-10 pb-3 sm:pb-8">
|
||||
<div class="heading-block w-full sm:w-2/12 lg:w-3/12 pr-2 ml:pr-0">
|
||||
<h2 class="text-sm font-semibold mb-5 text-center">Research entries</h2>
|
||||
</div>
|
||||
|
||||
<div class="info-block w-full sm:w-10/12 lg:w-9/12">
|
||||
<ul class="container s:mx-auto flex flex-col flex-wrap sm:flex-row">
|
||||
{% for post in site.posts %} {% include post-preview.html %} {% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
14
about/get-in-touch.md
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Get in touch
|
||||
---
|
||||
## Join the team
|
||||
We are a remote team of researchers dedicated to building a fair internet.
|
||||
[View open roles](https://jobs.status.im/?search=Vac)
|
||||
|
||||
## Join the convo
|
||||
Ask questions or speak with us about our work as we research new means of communication.
|
||||
[Join our Discord](https://discord.gg/PQFdubGt6d)
|
||||
|
||||
## Contribute on Github
|
||||
Our work is open source and free for anyone to contribute to, use, and modify for their needs.
|
||||
[Contribute](https://github.com/vacp2p)
|
13
about/media.md
Normal file
@ -0,0 +1,13 @@
|
||||
[Waku: Enabling a New Dimension for dApps](https://www.youtube.com/watch?v=GXU5Fd6gMVw&t=21692s)
|
||||
|
||||
[Vac, Waku v2 and Ethereum Messaging](https://www.youtube.com/watch?v=s0ATpQ4_XFc&ab_channel=OsakaThorp)
|
||||
|
||||
[ZKPodcast: ZKPs for Spam Protection & Decentralized Messaging with Status](https://www.youtube.com/watch?v=S782Ppzvkd0&ab_channel=ZeroKnowledge)
|
||||
|
||||
[Franck Royer : DappConnect: Enabling decentralised communications using Waku](https://www.youtube.com/watch?v=rQOp3qoDF0g&ab_channel=AmphiPoissy)
|
||||
|
||||
[Oskar Thoren | Vac, Waku v2 and Ethereum Messaging](https://www.youtube.com/watch?v=lUDy1MoeYnI&ab_channel=TaipeiEthereumMeetup)
|
||||
|
||||
[Dean Eigenman & Oskar Thoren: From Whisper to Waku](https://www.youtube.com/watch?v=6lLT33tsJjs&ab_channel=AmphiStGermain)
|
||||
|
||||
[Private and Reliable Data Sync for Messaging Over Whisper by Dean Eigenmann & Oskar Thoren (Devcon5)](https://www.youtube.com/watch?v=zxN-PqYkZ1M&ab_channel=EthereumFoundation)
|
4
about/team.md
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
title: team
|
||||
injects: [authors]
|
||||
---
|
@ -1 +0,0 @@
|
||||
vac.dev
|
@ -1,137 +0,0 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@font-face {
|
||||
font-family: "Open Sans";
|
||||
src: url("../../fonts/OpenSans-Regular.woff2") format("woff2"), url("../../fonts/OpenSans-Regular.woff") format("woff");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Open Sans";
|
||||
src: url("../../fonts/OpenSans-SemiBold.woff2") format("woff2"), url("../../fonts/OpenSans-SemiBold.woff") format("woff");
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Open Sans";
|
||||
src: url("../../fonts/OpenSans-Italic.woff2") format("woff2"), url("../../fonts/OpenSans-Italic.woff") format("woff");
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Open Sans";
|
||||
src: url("../../fonts/OpenSans-SemiBoldItalic.woff2") format("woff2"), url("../../fonts/OpenSans-SemiBoldItalic.woff") format("woff");
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
.link--external,
|
||||
.link--back {
|
||||
@apply relative italic font-semibold text-xs pl-3 transition-all duration-300;
|
||||
}
|
||||
|
||||
.link--external {
|
||||
@apply before:absolute before:top-1/2 before:left-0 before:transform before:-translate-y-1/2 before:w-2 before:h-2 before:bg-arrow before:bg-no-repeat before:bg-contain group-hover:before:bg-arrowWhite;
|
||||
}
|
||||
|
||||
.link--back {
|
||||
@apply before:absolute before:top-1/2 before:left-0 before:transform before:-translate-y-1/2 before:rotate-180 before:w-2 before:h-2 before:bg-arrow before:bg-no-repeat before:bg-contain;
|
||||
}
|
||||
|
||||
.link--external,
|
||||
.link--back {
|
||||
@apply after:absolute after:left-0 after:bottom-0 after:w-full after:h-px hover:after:bg-black;
|
||||
}
|
||||
|
||||
.link--dapp {
|
||||
@apply group-hover:before:bg-arrowPeach;
|
||||
}
|
||||
|
||||
.post__content div {
|
||||
@apply mb-10 lg:mb-14 last:mb-0;
|
||||
}
|
||||
|
||||
.post__content h1 {
|
||||
@apply text-xl font-semibold mb-5;
|
||||
}
|
||||
|
||||
.post__content h2,
|
||||
.post__content h3 {
|
||||
@apply text-h font-semibold mb-5;
|
||||
}
|
||||
|
||||
.post__content p {
|
||||
@apply text-s lg:text-base mb-5 last:mb-0 text-left;
|
||||
}
|
||||
|
||||
.post__content a {
|
||||
@apply text-s lg:text-base underline hover:opacity-50 break-words;
|
||||
}
|
||||
|
||||
.post__content ul,
|
||||
.post__content ol {
|
||||
@apply list-inside mb-5;
|
||||
}
|
||||
|
||||
.post__content ul {
|
||||
@apply list-disc;
|
||||
}
|
||||
|
||||
.post__content ol {
|
||||
@apply list-decimal;
|
||||
}
|
||||
|
||||
.post__content li {
|
||||
@apply text-s lg:text-base;
|
||||
}
|
||||
|
||||
.post__content li p {
|
||||
@apply inline;
|
||||
}
|
||||
|
||||
.post__content .highlight {
|
||||
@apply w-full bg-black px-2 overflow-x-auto;
|
||||
}
|
||||
|
||||
.post__content .highlight::-webkit-scrollbar {
|
||||
@apply bg-black;
|
||||
}
|
||||
|
||||
.post__content code {
|
||||
@apply font-code text-white text-s lg:text-base;
|
||||
}
|
||||
|
||||
.post__content p code,
|
||||
.post__content a code {
|
||||
@apply font-code text-white text-s lg:text-base bg-black;
|
||||
}
|
||||
|
||||
.post__content img {
|
||||
@apply w-full ml:max-w-80 mx-auto mb-3;
|
||||
}
|
||||
|
||||
.post__content table {
|
||||
@apply w-full mb-4 border-collapse;
|
||||
}
|
||||
|
||||
.post__content thead th {
|
||||
@apply align-bottom border-solid border-2 border-black border-opacity-20 border-l-0 border-r-0 text-left;
|
||||
}
|
||||
|
||||
.post__content th,
|
||||
.post__content td {
|
||||
@apply p-3 align-top border border-solid border-black border-opacity-20 border-l-0 border-r-0;
|
||||
}
|
||||
|
||||
.post__content hr {
|
||||
@apply m-12;
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
<svg width="6" height="8" viewBox="0 0 6 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 0L0 8L6 4L0 0Z" fill="#D1A69D"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 144 B |
@ -1,3 +0,0 @@
|
||||
<svg width="6" height="8" viewBox="0 0 6 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 0L0 8L6 4L0 0Z" fill="white"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 142 B |
@ -1,3 +0,0 @@
|
||||
<svg width="6" height="8" viewBox="0 0 6 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 0L0 8L6 4L0 0Z" fill="#151512"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 144 B |
@ -1,6 +0,0 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="48" height="48" fill="white"/>
|
||||
<rect x="12" y="15" width="24" height="2" fill="black"/>
|
||||
<rect x="12" y="23" width="24" height="2" fill="black"/>
|
||||
<rect x="12" y="31" width="24" height="2" fill="black"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 318 B |
@ -1,5 +0,0 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="48" height="47.0204" fill="white"/>
|
||||
<path d="M16.2217 15L34 33.3848L31.778 33.3848L14 15H16.2217Z" fill="black"/>
|
||||
<path d="M14 33.414L31.7783 15.0294L34.0001 14.9999L16.2219 33.4141L14 33.414Z" fill="black"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 325 B |
@ -1,12 +0,0 @@
|
||||
<svg width="62" height="64" viewBox="0 0 62 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0)">
|
||||
<path d="M48.1706 9.25283C42.8204 6.21844 37.6207 3.26952 32.421 0.320607C31.5401 -0.170879 30.6806 -0.085403 29.8212 0.406083C20.3241 5.8338 10.8271 11.2401 1.35162 16.6679C1.05081 16.8388 0.771486 17.3303 0.771486 17.6722C0.75 28.5062 0.728514 39.3189 0.792973 50.1316C0.792973 50.8368 1.33013 51.8411 1.91027 52.183C7.02404 55.1961 12.2023 58.0809 17.3805 61.0084C17.4235 61.0298 17.5094 61.0084 17.7458 61.0084C17.7458 60.6024 17.7458 60.175 17.7458 59.769C17.7458 49.1273 17.7673 38.5069 17.7243 27.8652C17.7243 26.8608 18.0896 26.3907 18.906 25.942C28.4245 20.557 37.9215 15.1507 47.4185 9.74431C47.6119 9.63747 47.8268 9.48788 48.1706 9.25283Z" fill="#151512"/>
|
||||
<path d="M39.7046 64.0005C39.7046 63.509 39.7046 63.103 39.7046 62.7183C39.7046 55.282 39.7261 47.8456 39.6831 40.3878C39.6831 39.4262 39.9624 38.9133 40.8219 38.4432C47.4397 34.7464 54.0146 30.9855 60.6109 27.2459C60.9332 27.0749 61.234 26.8826 61.6208 26.6476C61.4489 26.498 61.3414 26.3698 61.191 26.2843C56.8937 23.8269 52.575 21.3908 48.2992 18.8906C47.0315 18.1427 45.9357 18.1214 44.625 18.8693C38.222 22.5661 31.7761 26.1988 25.3302 29.8315C24.6211 30.2162 24.4062 30.6649 24.4062 31.4556C24.4277 38.8706 24.4277 46.2643 24.4062 53.6793C24.4062 54.7905 24.75 55.6666 25.7384 56.2222C30.1861 58.7437 34.6123 61.2439 39.06 63.7654C39.2104 63.8509 39.4038 63.8936 39.7046 64.0005Z" fill="#151512"/>
|
||||
<path d="M61.7495 51.5856C56.5713 48.6367 51.5864 45.816 46.4727 42.9098C46.4727 48.7435 46.4727 54.3849 46.4727 60.2614C51.5435 57.3766 56.5283 54.5559 61.7495 51.5856Z" fill="#151512"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0">
|
||||
<rect width="61" height="64" fill="white" transform="translate(0.75)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.8 KiB |
@ -1,3 +0,0 @@
|
||||
<svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22.7861 9.04256C21.8482 5.74455 20.7799 4.04048 20.7627 4.00991C20.7017 3.93459 19.189 2.104 15.5271 0.75L15.0353 2.0764C16.7774 2.72057 18.0116 3.50643 18.6899 4.01419C16.6599 3.40408 14.2431 3.03041 12.1008 3.03041C9.95851 3.03041 7.53775 3.40408 5.50128 4.01419C6.18496 3.50648 7.42744 2.72057 9.17631 2.0764L8.69846 0.75C5.02238 2.104 3.49044 3.93459 3.42863 4.00991C3.41108 4.04048 2.32479 5.74455 1.35221 9.04256C0.414855 12.2208 0.0415214 16.7045 0.027872 16.8843C0.109225 17.0131 1.97891 20.25 7.12077 20.25L8.43406 18.3536C6.97595 17.964 5.58693 17.3357 4.31689 16.4832L5.10228 15.3069C7.15122 16.6822 9.54509 17.4092 12.0251 17.4092C14.5051 17.4092 16.9067 16.6822 18.9701 15.3069L19.7431 16.4832C18.4641 17.3357 17.0684 17.964 15.6062 18.3536L16.8995 20.25C22.0414 20.25 23.9452 17.0131 24.0279 16.8843C24.0161 16.7045 23.69 12.2208 22.7861 9.04256ZM8.79853 12.7392H7.39228L7.40468 10.3841H8.81093L8.79853 12.7392ZM16.7071 12.7392H15.3008L15.3132 10.3841H16.7195L16.7071 12.7392Z" fill="#151512"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 707 B |
@ -1,3 +0,0 @@
|
||||
<svg width="26" height="25" viewBox="0 0 26 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12.8857 0.856567C6.26021 0.856567 0.915339 6.20154 0.950043 12.7951C0.9778 18.0687 4.43935 22.5427 9.21766 24.1227C9.81824 24.2327 10.0353 23.864 10.0336 23.5474C10.0321 23.2635 10.0177 22.5129 10.0065 21.5171C6.67274 22.238 5.95552 19.9163 5.95552 19.9163C5.40376 18.5369 4.61433 18.1698 4.61433 18.1698C3.51994 17.4296 4.69151 17.4444 4.69151 17.4444C5.89646 17.5291 6.53549 18.6751 6.53549 18.6751C7.61609 20.4989 9.35182 19.9727 10.0342 19.6665C10.1382 18.8951 10.4459 18.3689 10.7878 18.0702C8.12222 17.7684 5.31483 16.7443 5.29076 12.1708C5.2839 10.8672 5.74629 9.80152 6.50989 8.96619C6.3838 8.66445 5.96641 7.45009 6.61027 5.80766C6.61027 5.80766 7.61658 5.4866 9.9167 7.03094C10.8723 6.76636 11.8976 6.63408 12.9191 6.62962C13.9376 6.63556 14.9658 6.76636 15.9257 7.03242C18.2081 5.48809 19.2163 5.80914 19.2163 5.80914C19.8789 7.45306 19.4743 8.66594 19.3529 8.96767C20.1268 9.80301 20.5959 10.8687 20.6028 12.1723C20.6269 16.7577 17.8272 17.767 15.1558 18.0628C15.5882 18.4314 15.976 19.1597 15.9819 20.273C15.9903 21.8693 15.9821 23.1565 15.9841 23.5474C15.9858 23.867 16.2038 24.2386 16.8122 24.1212C21.5663 22.5397 24.9778 18.0672 24.95 12.7951C24.9153 6.20154 19.5142 0.856567 12.8857 0.856567Z" fill="#151512"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB |
@ -1,15 +0,0 @@
|
||||
<svg width="28" height="32" viewBox="0 0 28 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0)">
|
||||
<path d="M19.5182 11.0373C19.4653 8.40252 18.4029 5.87248 17.0234 3.62007C17.7793 3.15911 18.6408 2.90244 19.5129 3.07006C20.385 3.23768 21.1831 3.80864 21.5583 4.60485C21.8807 5.30152 21.8649 6.09772 21.812 6.8625C21.7856 7.20298 21.7539 7.5487 21.6429 7.87347C21.5689 8.08299 21.4685 8.2768 21.3522 8.46014C21.2042 8.7011 21.0351 8.92634 20.8659 9.15158C20.4167 9.76444 19.9674 10.4245 19.5182 11.0373Z" fill="#999999"/>
|
||||
<path d="M13.4133 5.63666C12.6152 4.47379 12.1078 3.61996 10.612 2.81328C9.11621 2.00661 9.11621 2.01184 9.11621 2.01184C9.11621 2.01184 10.8498 -0.581051 13.0274 0.126102C15.205 0.833256 14.5126 5.51618 14.0686 7.3024" fill="#4D4D4D"/>
|
||||
<path d="M6.07715 0.942742C6.07715 0.942742 8.42916 0.869408 11.0771 2.81801C12.4831 3.85517 14.1374 6.02377 14.0687 7.30188C14 8.58 10.9767 14.7768 10.7706 18.3335C10.5645 21.8902 10.7812 26.4055 11.9175 27.4846C13.0539 28.5636 13.9418 30.0879 16.1036 30.9889C19.0158 32.2042 17.1289 32.0313 13.9154 30.8213C12.6945 30.3603 12.4038 30.5698 10.6702 28.8989C5.9873 24.3993 7.43021 22.5869 7.45136 16.2644C7.46721 11.6758 7.69448 6.42187 7.84248 4.65661C7.99047 2.95944 8.22831 2.7342 7.19766 1.87514C6.07715 0.942742 6.07715 0.942742 6.07715 0.942742Z" fill="#1A1A1A"/>
|
||||
<path d="M14.359 5.26469C14.1846 7.15567 13.3865 8.90522 12.6677 10.6391C11.9383 12.4043 11.1984 14.2534 10.6962 16.0972C9.92458 18.9258 9.84001 21.9116 10.173 24.8293C10.2893 25.8298 10.4584 26.8564 10.9922 27.7155C11.4521 28.4541 12.1392 29.0198 12.8316 29.5541C14.3273 30.7065 15.9711 31.8222 17.858 32.0056C15.913 30.4917 14.5229 28.3336 13.8622 25.9817C13.1381 23.4045 13.3337 20.9268 14.6075 18.5592C14.951 17.9254 15.3421 17.3177 15.7385 16.7153C16.8908 14.9501 18.043 13.1848 19.1899 11.4195C19.3485 11.1786 19.5123 10.9272 19.5757 10.6443C19.6445 10.3457 19.5969 10.0367 19.544 9.73285C19.0683 7.07709 17.9214 4.54706 16.2406 2.43084C15.2523 1.17891 13.9098 0.000322679 12.3136 0.000322679C13.043 -0.0153918 13.6349 0.545093 13.9573 1.19463C14.2798 1.84416 14.3379 2.58798 14.3696 3.31085C14.4013 3.96038 14.4225 4.61515 14.359 5.26469Z" fill="#808080"/>
|
||||
<path d="M26.9758 16.1599C26.8278 15.8142 26.6428 15.4842 26.4156 15.1804C26.2887 15.0075 26.1513 14.8451 26.0191 14.6775C25.6967 14.2532 25.591 13.6927 25.1893 13.347C24.7771 12.9961 24.6397 12.3675 24.8564 11.8698C24.9462 11.6656 25.0942 11.4875 25.1841 11.2884C25.4483 10.7174 25.2686 10.047 25.0149 9.47077C24.6608 8.66409 24.1693 7.9255 23.6513 7.20787C22.9483 6.22834 22.1978 5.28547 21.405 4.37402C21.5477 5.15975 21.479 5.91928 21.2887 6.69977C21.183 7.1293 21.035 7.54836 20.8447 7.9517C20.6122 8.44408 20.3162 8.91028 20.0202 9.37124C18.2866 12.0689 16.5001 14.7351 14.6608 17.3647C13.609 18.868 13.2443 20.8481 13.1227 22.671C13.0012 24.4938 13.3553 26.3691 14.2644 27.9615C14.7929 28.8887 15.5012 29.7058 16.22 30.502C16.6745 31.0049 17.2031 31.7801 17.8532 32.0001C17.9378 31.2301 18.0752 30.193 18.1809 29.4282C18.3606 28.1815 18.7676 26.961 19.386 25.861C19.8035 25.1119 20.369 24.3734 21.1883 24.101C21.7433 23.9176 22.3669 23.991 22.9536 24.0434C23.2813 24.0172 23.6143 24.0643 23.942 24.0643C24.2697 24.0643 24.6185 24.0172 24.8828 23.8286C25.1788 23.6191 25.3373 23.2681 25.3902 22.9119C25.443 22.5557 25.4008 22.1838 25.3796 21.8276C25.3638 21.5919 25.3532 21.3457 25.4642 21.1362C25.665 20.7485 26.2359 20.5652 26.2676 20.1304C26.2834 19.9314 26.1724 19.7481 26.0931 19.5595C26.0139 19.3709 25.9769 19.1404 26.1143 18.9885C26.183 18.9152 26.2781 18.8785 26.3416 18.8052C26.4737 18.648 26.3997 18.4123 26.2834 18.2447C26.1671 18.0771 26.0086 17.9252 25.9769 17.7261C25.9399 17.5323 26.035 17.3333 26.1724 17.1866C26.3098 17.0399 26.4843 16.9404 26.6587 16.8356C26.8225 16.7361 26.9969 16.6052 27.0128 16.4166C27.0181 16.3328 26.9917 16.249 26.9652 16.1704C26.8542 15.8666 26.701 15.5785 26.5054 15.3166" fill="#CCCCCC"/>
|
||||
<path d="M14.5393 31.0468C14.1271 30.8529 2.68417 28.8886 1.03512 11.896C0.585859 7.27069 2.86916 2.93348 2.86916 2.93348C2.86916 2.93348 4.58692 0.387729 6.78036 1.04774C9.36493 1.82299 7.82687 12.0165 7.73174 13.8551C7.73174 13.8551 7.15563 18.8418 8.51398 24.8762C9.50235 29.2448 14.5393 31.0468 14.5393 31.0468Z" fill="#151512"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0">
|
||||
<rect width="26.0465" height="32" fill="white" transform="translate(0.976562)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.3 KiB |
@ -1,3 +0,0 @@
|
||||
<svg width="25" height="21" viewBox="0 0 25 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M24.8872 3.04499C23.9872 3.43499 23.0572 3.70498 22.0672 3.82499C23.0872 3.22498 23.8672 2.26499 24.2272 1.09499C23.2672 1.66499 22.2172 2.05499 21.1072 2.29499C20.2072 1.33499 18.9172 0.734985 17.5072 0.734985C14.7772 0.734985 12.5872 2.95499 12.5872 5.65499C12.5872 6.04499 12.6172 6.40498 12.7072 6.76498C8.62721 6.58498 5.02721 4.60498 2.59721 1.63499C0.857207 4.75498 2.80721 7.33499 4.09721 8.20499C3.31721 8.20499 2.53721 7.96499 1.87721 7.60499C1.87721 10.035 3.58721 12.045 5.80721 12.495C5.32721 12.645 4.24721 12.735 3.58721 12.585C4.21721 14.535 6.04721 15.975 8.17721 16.005C6.49721 17.325 4.03721 18.375 0.887207 18.045C3.07721 19.455 5.65721 20.265 8.44721 20.265C17.5072 20.265 22.4272 12.765 22.4272 6.28499C22.4272 6.07499 22.4272 5.86499 22.3972 5.65499C23.4172 4.90499 24.2572 4.03499 24.8872 3.04499Z" fill="#151512"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 952 B |
Before Width: | Height: | Size: 3.0 KiB |
@ -1,21 +0,0 @@
|
||||
<svg width="65" height="64" viewBox="0 0 65 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0)">
|
||||
<path d="M4.40096 46.0099C3.92982 46.0099 3.45868 45.7658 3.19484 45.3338C2.79908 44.6578 3.00638 43.7939 3.68482 43.3996C3.77905 43.3432 11.9769 38.4043 18.4975 32.0569C11.7131 25.4465 3.81674 20.6953 3.72252 20.639C3.04407 20.2446 2.83677 19.3808 3.23253 18.7047C3.62829 18.0287 4.49519 17.8221 5.17364 18.2165C5.5317 18.4418 14.2573 23.6625 21.5129 31.0615C22.0405 31.6061 22.0405 32.4888 21.5129 33.0334C14.5965 40.1132 5.5317 45.578 5.13594 45.8221C4.9098 45.9348 4.6648 46.0099 4.40096 46.0099Z" fill="#151512"/>
|
||||
<path d="M60.6366 46.0096C60.3916 46.0096 60.1466 45.9533 59.9016 45.803C59.5247 45.5777 50.441 40.1129 43.5247 33.0143C42.997 32.4697 42.997 31.5871 43.5247 31.0425C50.7614 23.6434 59.487 18.4227 59.8639 18.1974C60.5423 17.803 61.4092 18.0096 61.805 18.6856C62.2008 19.3617 61.9935 20.2256 61.315 20.6199C61.2396 20.6763 53.3244 25.4086 46.54 32.0378C53.0606 38.3852 61.2773 43.3429 61.3527 43.3805C62.0123 43.7748 62.2385 44.6387 61.8427 45.3148C61.5789 45.7655 61.1077 46.0096 60.6366 46.0096Z" fill="#151512"/>
|
||||
<path d="M32.481 21.4464C32.123 21.4464 31.7649 21.3149 31.501 21.052C24.3962 14.16 18.9121 5.12714 18.6671 4.73278C18.2714 4.05672 18.4975 3.19287 19.1571 2.79851C19.8167 2.40414 20.6836 2.61071 21.0982 3.28677C21.1548 3.38067 26.1112 11.5497 32.481 18.0473C39.1147 11.2868 43.8827 3.41822 43.9392 3.32433C44.335 2.64827 45.2019 2.4417 45.8803 2.83607C46.5399 3.23043 46.7661 4.09428 46.3703 4.77034C46.1442 5.14592 40.9051 13.822 33.4798 21.052C33.1972 21.2962 32.8391 21.4464 32.481 21.4464Z" fill="#151512"/>
|
||||
<path d="M19.8921 61.4275C19.6471 61.4275 19.4021 61.3711 19.1571 61.2209C18.4975 60.8265 18.2714 59.9627 18.6671 59.2866C18.8933 58.911 24.3962 49.8594 31.501 42.9674C32.0476 42.4416 32.9333 42.4416 33.4798 42.9674C40.9051 50.1787 46.1442 58.8735 46.3703 59.2491C46.7661 59.9251 46.5588 60.789 45.8803 61.1833C45.2207 61.5777 44.335 61.3711 43.9392 60.6951C43.8827 60.62 39.1336 52.7326 32.481 45.9721C26.1112 52.4697 21.1359 60.6575 21.0982 60.7326C20.8344 61.1833 20.3632 61.4275 19.8921 61.4275Z" fill="#151512"/>
|
||||
<path d="M63.0302 29.765C62.1256 29.765 52.2128 29.7087 42.4507 27.1735C41.7158 26.9857 41.2635 26.2345 41.4331 25.4834C43.6757 15.8683 48.6133 6.49744 48.8394 6.12186C49.1975 5.42702 50.0644 5.18289 50.7428 5.5397C51.4401 5.89651 51.704 6.76035 51.3271 7.43641C51.2894 7.53031 46.8229 15.981 44.5238 24.7885C53.7393 26.9669 62.8983 26.9481 63.0868 26.9669C63.8594 26.9669 64.5002 27.5866 64.5002 28.3754C64.5002 29.1641 63.8783 29.7838 63.0868 29.7838C63.0679 29.765 63.0491 29.765 63.0302 29.765Z" fill="#151512"/>
|
||||
<path d="M14.9923 58.648C14.7662 58.648 14.54 58.5917 14.3327 58.479C13.6355 58.1222 13.3905 57.2584 13.7485 56.5823C13.7862 56.5072 18.1019 48.357 20.4953 39.2114C11.6567 37.1457 2.10188 37.1081 1.93227 37.1081C1.14075 37.1081 0.5 36.4696 0.5 35.6997C0.5 34.9297 1.12191 34.2912 1.91343 34.2912C2.38457 34.2349 12.9759 34.2912 22.5683 36.8077C23.3033 36.9955 23.7556 37.7466 23.586 38.4978C21.2114 48.5635 16.4623 57.5213 16.255 57.8969C15.9912 58.3663 15.5012 58.648 14.9923 58.648Z" fill="#151512"/>
|
||||
<path d="M38.5309 23.0422C37.909 23.0422 37.3437 22.6291 37.174 22.0093C34.498 12.507 34.3095 1.93422 34.3095 1.48352C34.2907 0.713564 34.9126 0.0750666 35.7041 0.0562873H35.7229C36.4956 0.0562873 37.1175 0.676006 37.1364 1.44596C37.1364 1.53986 37.306 11.0985 39.5486 19.9061C48.6888 17.3896 56.7924 12.9577 56.8678 12.9014C57.5462 12.5258 58.4131 12.7699 58.7901 13.446C59.167 14.122 58.922 14.9859 58.2435 15.3615C57.8666 15.568 48.9526 20.4507 38.889 22.9859C38.7571 23.0234 38.644 23.0422 38.5309 23.0422Z" fill="#151512"/>
|
||||
<path d="M29.3526 63.9246C28.5799 63.9246 27.958 63.3049 27.9392 62.5349C27.9392 62.441 27.7884 53.2392 25.4515 44.0748C16.6506 46.5162 8.24541 51.0983 8.17003 51.1359C7.49158 51.5115 6.62468 51.2673 6.24777 50.5913C5.87085 49.9152 6.11585 49.0514 6.79429 48.6758C7.19005 48.4692 16.4998 43.38 26.1111 40.995C26.865 40.8072 27.6188 41.2579 27.8072 41.9903C30.5776 51.9434 30.7472 62.0842 30.7472 62.5162C30.766 63.2673 30.1441 63.9058 29.3526 63.9246Z" fill="#151512"/>
|
||||
<path d="M26.6957 22.9112C26.5638 22.9112 26.4507 22.8924 26.3188 22.8548C16.764 20.2257 7.5673 14.9487 7.19039 14.7234C6.51194 14.329 6.2858 13.4652 6.68156 12.7891C7.05847 12.1318 7.92537 11.8877 8.60382 12.2821C8.69805 12.3384 16.9902 17.1084 25.7157 19.7562C28.2599 10.6483 28.618 1.46517 28.6368 1.35249C28.6745 0.582537 29.3529 -0.0559611 30.1068 0.000376935C30.8794 0.0191563 31.5013 0.676433 31.4637 1.46517C31.4448 1.87831 31.049 12.0192 28.0337 21.9159C27.8641 22.5168 27.2988 22.9112 26.6957 22.9112Z" fill="#151512"/>
|
||||
<path d="M34.9878 63.9998C34.969 63.9998 34.9501 63.9998 34.9313 63.9998C34.1586 63.9623 33.5367 63.3238 33.5744 62.5351C33.5932 62.0843 34.0267 51.5304 36.9289 42.0843C37.1551 41.3519 37.9277 40.9388 38.6627 41.1454C48.6509 43.9059 57.4519 48.9951 57.8288 49.2205C58.5072 49.6149 58.7334 50.4787 58.3376 51.1548C57.9419 51.8308 57.075 52.0562 56.3965 51.6618C56.3211 51.6055 48.3306 47.0045 39.2469 44.2627C36.8158 53.0139 36.4201 62.5726 36.4012 62.6665C36.3824 63.3989 35.7416 63.9998 34.9878 63.9998Z" fill="#151512"/>
|
||||
<path d="M1.96996 29.6335C1.93227 29.6335 1.91343 29.6335 1.89458 29.6335C1.12191 29.6335 0.5 28.995 0.5 28.2251C0.5 27.4551 1.12191 26.8542 1.91343 26.8166C1.93227 26.8166 11.6001 26.8166 20.4953 24.7697C18.1396 15.6053 13.8428 7.45512 13.8051 7.38C13.4281 6.68516 13.692 5.84009 14.3893 5.46451C15.0866 5.1077 15.9346 5.37061 16.2927 6.04667C16.5 6.42225 21.2303 15.3988 23.5671 25.4645C23.7367 26.2157 23.2844 26.9481 22.5495 27.1546C13.2585 29.5772 2.98763 29.6335 1.96996 29.6335Z" fill="#151512"/>
|
||||
<path d="M49.9891 58.6857C49.4803 58.6857 48.9903 58.404 48.7453 57.9345C48.538 57.5402 43.6193 48.1693 41.3955 38.5542C41.2259 37.8031 41.6782 37.0707 42.4131 36.8829C52.4579 34.3101 62.6534 34.3477 63.0492 34.3289C63.8218 34.3289 64.4626 34.9674 64.4626 35.7373C64.4626 36.5073 63.8218 37.1458 63.0492 37.1458C63.0492 37.1458 63.0492 37.1458 63.0115 37.1458C62.4084 37.1458 53.4379 37.1834 44.4673 39.2679C46.7476 48.0566 51.1952 56.5449 51.2329 56.62C51.591 57.3148 51.3272 58.1599 50.6487 58.5167C50.4414 58.6294 50.2153 58.6857 49.9891 58.6857Z" fill="#151512"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0">
|
||||
<rect width="64" height="64" fill="white" transform="translate(0.5)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 6.3 KiB |
@ -1,31 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
const burger = document.querySelector(".burger");
|
||||
const burgerOpen = document.querySelector(".burger__button--open");
|
||||
const burgerClose = document.querySelector(".burger__button--close");
|
||||
const menuMobile = document.querySelector(".nav-mobile");
|
||||
const menuLinks = document.querySelectorAll(".nav__link");
|
||||
const overlay = document.querySelector(".overlay");
|
||||
const form = document.querySelector(".footer__form");
|
||||
const confirmation = document.querySelector(".footer__confirm");
|
||||
|
||||
const closeMobileMenu = () => {
|
||||
burgerOpen.classList.toggle("hidden");
|
||||
burgerClose.classList.toggle("hidden");
|
||||
menuMobile.classList.toggle("hidden");
|
||||
overlay.classList.toggle("hidden");
|
||||
};
|
||||
|
||||
burger.addEventListener("click", closeMobileMenu);
|
||||
overlay.addEventListener("click", closeMobileMenu);
|
||||
menuLinks.forEach(link => {
|
||||
link.addEventListener("click", () => {
|
||||
closeMobileMenu;
|
||||
});
|
||||
});
|
||||
|
||||
// form.addEventListener('submit', (e) => {
|
||||
// e.preventDefault();
|
||||
// form.classList.toggle('hidden');
|
||||
// confirmation.classList.toggle('hidden');
|
||||
// });
|
@ -1,667 +0,0 @@
|
||||
/*!
|
||||
* smooth-scroll v12.1.5: Animate scrolling to anchor links
|
||||
* (c) 2017 Chris Ferdinandi
|
||||
* MIT License
|
||||
* http://github.com/cferdinandi/smooth-scroll
|
||||
*/
|
||||
|
||||
/**
|
||||
* closest() polyfill
|
||||
* @link https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill
|
||||
*/
|
||||
if (window.Element && !Element.prototype.closest) {
|
||||
Element.prototype.closest = function (s) {
|
||||
var matches = (this.document || this.ownerDocument).querySelectorAll(s),
|
||||
i,
|
||||
el = this;
|
||||
do {
|
||||
i = matches.length;
|
||||
while (--i >= 0 && matches.item(i) !== el) {}
|
||||
} while (i < 0 && (el = el.parentElement));
|
||||
return el;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* requestAnimationFrame() polyfill
|
||||
* By Erik Möller. Fixes from Paul Irish and Tino Zijdel.
|
||||
* @link http://paulirish.com/2011/requestanimationframe-for-smart-animating/
|
||||
* @link http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
|
||||
* @license MIT
|
||||
*/
|
||||
(function () {
|
||||
var lastTime = 0;
|
||||
var vendors = ["ms", "moz", "webkit", "o"];
|
||||
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
||||
window.requestAnimationFrame = window[vendors[x] + "RequestAnimationFrame"];
|
||||
window.cancelAnimationFrame =
|
||||
window[vendors[x] + "CancelAnimationFrame"] ||
|
||||
window[vendors[x] + "CancelRequestAnimationFrame"];
|
||||
}
|
||||
|
||||
if (!window.requestAnimationFrame) {
|
||||
window.requestAnimationFrame = function (callback, element) {
|
||||
var currTime = new Date().getTime();
|
||||
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
||||
var id = window.setTimeout(function () {
|
||||
callback(currTime + timeToCall);
|
||||
}, timeToCall);
|
||||
lastTime = currTime + timeToCall;
|
||||
return id;
|
||||
};
|
||||
}
|
||||
|
||||
if (!window.cancelAnimationFrame) {
|
||||
window.cancelAnimationFrame = function (id) {
|
||||
clearTimeout(id);
|
||||
};
|
||||
}
|
||||
})();
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define([], function () {
|
||||
return factory(root);
|
||||
});
|
||||
} else if (typeof exports === "object") {
|
||||
module.exports = factory(root);
|
||||
} else {
|
||||
root.SmoothScroll = factory(root);
|
||||
}
|
||||
})(
|
||||
typeof global !== "undefined"
|
||||
? global
|
||||
: typeof window !== "undefined"
|
||||
? window
|
||||
: this,
|
||||
function (window) {
|
||||
"use strict";
|
||||
|
||||
//
|
||||
// Feature Test
|
||||
//
|
||||
|
||||
var supports =
|
||||
"querySelector" in document &&
|
||||
"addEventListener" in window &&
|
||||
"requestAnimationFrame" in window &&
|
||||
"closest" in window.Element.prototype;
|
||||
|
||||
//
|
||||
// Default settings
|
||||
//
|
||||
|
||||
var defaults = {
|
||||
// Selectors
|
||||
ignore: "[data-scroll-ignore]",
|
||||
header: null,
|
||||
|
||||
// Speed & Easing
|
||||
speed: 600,
|
||||
offset: 50,
|
||||
easing: "easeInOutQuart",
|
||||
customEasing: null,
|
||||
|
||||
// Callback API
|
||||
before: function () {},
|
||||
after: function () {},
|
||||
};
|
||||
|
||||
//
|
||||
// Utility Methods
|
||||
//
|
||||
|
||||
/**
|
||||
* Merge two or more objects. Returns a new object.
|
||||
* @param {Object} objects The objects to merge together
|
||||
* @returns {Object} Merged values of defaults and options
|
||||
*/
|
||||
var extend = function () {
|
||||
// Variables
|
||||
var extended = {};
|
||||
var deep = false;
|
||||
var i = 0;
|
||||
var length = arguments.length;
|
||||
|
||||
// Merge the object into the extended object
|
||||
var merge = function (obj) {
|
||||
for (var prop in obj) {
|
||||
if (obj.hasOwnProperty(prop)) {
|
||||
extended[prop] = obj[prop];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Loop through each object and conduct a merge
|
||||
for (; i < length; i++) {
|
||||
var obj = arguments[i];
|
||||
merge(obj);
|
||||
}
|
||||
|
||||
return extended;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the height of an element.
|
||||
* @param {Node} elem The element to get the height of
|
||||
* @return {Number} The element's height in pixels
|
||||
*/
|
||||
var getHeight = function (elem) {
|
||||
return parseInt(window.getComputedStyle(elem).height, 10);
|
||||
};
|
||||
|
||||
/**
|
||||
* Escape special characters for use with querySelector
|
||||
* @param {String} id The anchor ID to escape
|
||||
* @author Mathias Bynens
|
||||
* @link https://github.com/mathiasbynens/CSS.escape
|
||||
*/
|
||||
var escapeCharacters = function (id) {
|
||||
// Remove leading hash
|
||||
if (id.charAt(0) === "#") {
|
||||
id = id.substr(1);
|
||||
}
|
||||
|
||||
var string = String(id);
|
||||
var length = string.length;
|
||||
var index = -1;
|
||||
var codeUnit;
|
||||
var result = "";
|
||||
var firstCodeUnit = string.charCodeAt(0);
|
||||
while (++index < length) {
|
||||
codeUnit = string.charCodeAt(index);
|
||||
// Note: there’s no need to special-case astral symbols, surrogate
|
||||
// pairs, or lone surrogates.
|
||||
|
||||
// If the character is NULL (U+0000), then throw an
|
||||
// `InvalidCharacterError` exception and terminate these steps.
|
||||
if (codeUnit === 0x0000) {
|
||||
throw new InvalidCharacterError(
|
||||
"Invalid character: the input contains U+0000."
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
// If the character is in the range [\1-\1F] (U+0001 to U+001F) or is
|
||||
// U+007F, […]
|
||||
(codeUnit >= 0x0001 && codeUnit <= 0x001f) ||
|
||||
codeUnit == 0x007f ||
|
||||
// If the character is the first character and is in the range [0-9]
|
||||
// (U+0030 to U+0039), […]
|
||||
(index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
|
||||
// If the character is the second character and is in the range [0-9]
|
||||
// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]
|
||||
(index === 1 &&
|
||||
codeUnit >= 0x0030 &&
|
||||
codeUnit <= 0x0039 &&
|
||||
firstCodeUnit === 0x002d)
|
||||
) {
|
||||
// http://dev.w3.org/csswg/cssom/#escape-a-character-as-code-point
|
||||
result += "\\" + codeUnit.toString(16) + " ";
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the character is not handled by one of the above rules and is
|
||||
// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or
|
||||
// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to
|
||||
// U+005A), or [a-z] (U+0061 to U+007A), […]
|
||||
if (
|
||||
codeUnit >= 0x0080 ||
|
||||
codeUnit === 0x002d ||
|
||||
codeUnit === 0x005f ||
|
||||
(codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
|
||||
(codeUnit >= 0x0041 && codeUnit <= 0x005a) ||
|
||||
(codeUnit >= 0x0061 && codeUnit <= 0x007a)
|
||||
) {
|
||||
// the character itself
|
||||
result += string.charAt(index);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Otherwise, the escaped character.
|
||||
// http://dev.w3.org/csswg/cssom/#escape-a-character
|
||||
result += "\\" + string.charAt(index);
|
||||
}
|
||||
|
||||
return "#" + result;
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate the easing pattern
|
||||
* @link https://gist.github.com/gre/1650294
|
||||
* @param {String} type Easing pattern
|
||||
* @param {Number} time Time animation should take to complete
|
||||
* @returns {Number}
|
||||
*/
|
||||
var easingPattern = function (settings, time) {
|
||||
var pattern;
|
||||
|
||||
// Default Easing Patterns
|
||||
if (settings.easing === "easeInQuad") pattern = time * time; // accelerating from zero velocity
|
||||
if (settings.easing === "easeOutQuad") pattern = time * (2 - time); // decelerating to zero velocity
|
||||
if (settings.easing === "easeInOutQuad")
|
||||
pattern = time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration
|
||||
if (settings.easing === "easeInCubic") pattern = time * time * time; // accelerating from zero velocity
|
||||
if (settings.easing === "easeOutCubic")
|
||||
pattern = --time * time * time + 1; // decelerating to zero velocity
|
||||
if (settings.easing === "easeInOutCubic")
|
||||
pattern =
|
||||
time < 0.5
|
||||
? 4 * time * time * time
|
||||
: (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration
|
||||
if (settings.easing === "easeInQuart")
|
||||
pattern = time * time * time * time; // accelerating from zero velocity
|
||||
if (settings.easing === "easeOutQuart")
|
||||
pattern = 1 - --time * time * time * time; // decelerating to zero velocity
|
||||
if (settings.easing === "easeInOutQuart")
|
||||
pattern =
|
||||
time < 0.5
|
||||
? 8 * time * time * time * time
|
||||
: 1 - 8 * --time * time * time * time; // acceleration until halfway, then deceleration
|
||||
if (settings.easing === "easeInQuint")
|
||||
pattern = time * time * time * time * time; // accelerating from zero velocity
|
||||
if (settings.easing === "easeOutQuint")
|
||||
pattern = 1 + --time * time * time * time * time; // decelerating to zero velocity
|
||||
if (settings.easing === "easeInOutQuint")
|
||||
pattern =
|
||||
time < 0.5
|
||||
? 16 * time * time * time * time * time
|
||||
: 1 + 16 * --time * time * time * time * time; // acceleration until halfway, then deceleration
|
||||
|
||||
// Custom Easing Patterns
|
||||
if (!!settings.customEasing) pattern = settings.customEasing(time);
|
||||
|
||||
return pattern || time; // no easing, no acceleration
|
||||
};
|
||||
|
||||
/**
|
||||
* Determine the document's height
|
||||
* @returns {Number}
|
||||
*/
|
||||
var getDocumentHeight = function () {
|
||||
return Math.max(
|
||||
document.body.scrollHeight,
|
||||
document.documentElement.scrollHeight,
|
||||
document.body.offsetHeight,
|
||||
document.documentElement.offsetHeight,
|
||||
document.body.clientHeight,
|
||||
document.documentElement.clientHeight
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate how far to scroll
|
||||
* @param {Element} anchor The anchor element to scroll to
|
||||
* @param {Number} headerHeight Height of a fixed header, if any
|
||||
* @param {Number} offset Number of pixels by which to offset scroll
|
||||
* @returns {Number}
|
||||
*/
|
||||
var getEndLocation = function (anchor, headerHeight, offset) {
|
||||
var location = 0;
|
||||
if (anchor.offsetParent) {
|
||||
do {
|
||||
location += anchor.offsetTop;
|
||||
anchor = anchor.offsetParent;
|
||||
} while (anchor);
|
||||
}
|
||||
location = Math.max(location - headerHeight - offset, 0);
|
||||
return location;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the height of the fixed header
|
||||
* @param {Node} header The header
|
||||
* @return {Number} The height of the header
|
||||
*/
|
||||
var getHeaderHeight = function (header) {
|
||||
return !header ? 0 : getHeight(header) + header.offsetTop;
|
||||
};
|
||||
|
||||
/**
|
||||
* Bring the anchored element into focus
|
||||
* @param {Node} anchor The anchor element
|
||||
* @param {Number} endLocation The end location to scroll to
|
||||
* @param {Boolean} isNum If true, scroll is to a position rather than an element
|
||||
*/
|
||||
var adjustFocus = function (anchor, endLocation, isNum) {
|
||||
// Don't run if scrolling to a number on the page
|
||||
if (isNum) return;
|
||||
|
||||
// Otherwise, bring anchor element into focus
|
||||
anchor.focus();
|
||||
if (document.activeElement.id !== anchor.id) {
|
||||
anchor.setAttribute("tabindex", "-1");
|
||||
anchor.focus();
|
||||
anchor.style.outline = "none";
|
||||
}
|
||||
window.scrollTo(0, endLocation);
|
||||
};
|
||||
|
||||
/**
|
||||
* Check to see if user prefers reduced motion
|
||||
* @param {Object} settings Script settings
|
||||
*/
|
||||
var reduceMotion = function (settings) {
|
||||
if (
|
||||
"matchMedia" in window &&
|
||||
window.matchMedia("(prefers-reduced-motion)").matches
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
//
|
||||
// SmoothScroll Constructor
|
||||
//
|
||||
|
||||
var SmoothScroll = function (selector, options) {
|
||||
//
|
||||
// Variables
|
||||
//
|
||||
|
||||
var smoothScroll = {}; // Object for public APIs
|
||||
var settings,
|
||||
anchor,
|
||||
toggle,
|
||||
fixedHeader,
|
||||
headerHeight,
|
||||
eventTimeout,
|
||||
animationInterval;
|
||||
|
||||
//
|
||||
// Methods
|
||||
//
|
||||
|
||||
/**
|
||||
* Cancel a scroll-in-progress
|
||||
*/
|
||||
smoothScroll.cancelScroll = function () {
|
||||
// clearInterval(animationInterval);
|
||||
cancelAnimationFrame(animationInterval);
|
||||
};
|
||||
|
||||
/**
|
||||
* Start/stop the scrolling animation
|
||||
* @param {Node|Number} anchor The element or position to scroll to
|
||||
* @param {Element} toggle The element that toggled the scroll event
|
||||
* @param {Object} options
|
||||
*/
|
||||
smoothScroll.animateScroll = function (anchor, toggle, options) {
|
||||
// Local settings
|
||||
var animateSettings = extend(settings || defaults, options || {}); // Merge user options with defaults
|
||||
|
||||
// Selectors and variables
|
||||
var isNum =
|
||||
Object.prototype.toString.call(anchor) === "[object Number]"
|
||||
? true
|
||||
: false;
|
||||
var anchorElem = isNum || !anchor.tagName ? null : anchor;
|
||||
if (!isNum && !anchorElem) return;
|
||||
var startLocation = window.pageYOffset; // Current location on the page
|
||||
if (animateSettings.header && !fixedHeader) {
|
||||
// Get the fixed header if not already set
|
||||
fixedHeader = document.querySelector(animateSettings.header);
|
||||
}
|
||||
if (!headerHeight) {
|
||||
// Get the height of a fixed header if one exists and not already set
|
||||
headerHeight = getHeaderHeight(fixedHeader);
|
||||
}
|
||||
var endLocation = isNum
|
||||
? anchor
|
||||
: getEndLocation(
|
||||
anchorElem,
|
||||
headerHeight,
|
||||
parseInt(
|
||||
typeof animateSettings.offset === "function"
|
||||
? animateSettings.offset()
|
||||
: animateSettings.offset,
|
||||
10
|
||||
)
|
||||
); // Location to scroll to
|
||||
var distance = endLocation - startLocation; // distance to travel
|
||||
var documentHeight = getDocumentHeight();
|
||||
var timeLapsed = 0;
|
||||
var start, percentage, position;
|
||||
|
||||
/**
|
||||
* Stop the scroll animation when it reaches its target (or the bottom/top of page)
|
||||
* @param {Number} position Current position on the page
|
||||
* @param {Number} endLocation Scroll to location
|
||||
* @param {Number} animationInterval How much to scroll on this loop
|
||||
*/
|
||||
var stopAnimateScroll = function (position, endLocation) {
|
||||
// Get the current location
|
||||
var currentLocation = window.pageYOffset;
|
||||
|
||||
// Check if the end location has been reached yet (or we've hit the end of the document)
|
||||
if (
|
||||
position == endLocation ||
|
||||
currentLocation == endLocation ||
|
||||
(startLocation < endLocation &&
|
||||
window.innerHeight + currentLocation) >= documentHeight
|
||||
) {
|
||||
// Clear the animation timer
|
||||
smoothScroll.cancelScroll();
|
||||
|
||||
// Bring the anchored element into focus
|
||||
adjustFocus(anchor, endLocation, isNum);
|
||||
|
||||
// Run callback after animation complete
|
||||
animateSettings.after(anchor, toggle);
|
||||
|
||||
// Reset start
|
||||
start = null;
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Loop scrolling animation
|
||||
*/
|
||||
var loopAnimateScroll = function (timestamp) {
|
||||
if (!start) {
|
||||
start = timestamp;
|
||||
}
|
||||
timeLapsed += timestamp - start;
|
||||
percentage = timeLapsed / parseInt(animateSettings.speed, 10);
|
||||
percentage = percentage > 1 ? 1 : percentage;
|
||||
position =
|
||||
startLocation +
|
||||
distance * easingPattern(animateSettings, percentage);
|
||||
window.scrollTo(0, Math.floor(position));
|
||||
if (!stopAnimateScroll(position, endLocation)) {
|
||||
window.requestAnimationFrame(loopAnimateScroll);
|
||||
start = timestamp;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset position to fix weird iOS bug
|
||||
* @link https://github.com/cferdinandi/smooth-scroll/issues/45
|
||||
*/
|
||||
if (window.pageYOffset === 0) {
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
// Run callback before animation starts
|
||||
animateSettings.before(anchor, toggle);
|
||||
|
||||
// Start scrolling animation
|
||||
smoothScroll.cancelScroll();
|
||||
window.requestAnimationFrame(loopAnimateScroll);
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle has change event
|
||||
*/
|
||||
var hashChangeHandler = function (event) {
|
||||
// Only run if there's an anchor element to scroll to
|
||||
if (!anchor) return;
|
||||
|
||||
// Reset the anchor element's ID
|
||||
anchor.id = anchor.getAttribute("data-scroll-id");
|
||||
|
||||
// Scroll to the anchored content
|
||||
smoothScroll.animateScroll(anchor, toggle);
|
||||
|
||||
// Reset anchor and toggle
|
||||
anchor = null;
|
||||
toggle = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* If smooth scroll element clicked, animate scroll
|
||||
*/
|
||||
var clickHandler = function (event) {
|
||||
// Don't run if the user prefers reduced motion
|
||||
if (reduceMotion(settings)) return;
|
||||
|
||||
// Don't run if right-click or command/control + click
|
||||
if (event.button !== 0 || event.metaKey || event.ctrlKey) return;
|
||||
|
||||
// Check if a smooth scroll link was clicked
|
||||
toggle = event.target.closest(selector);
|
||||
if (
|
||||
!toggle ||
|
||||
toggle.tagName.toLowerCase() !== "a" ||
|
||||
event.target.closest(settings.ignore)
|
||||
)
|
||||
return;
|
||||
|
||||
// Only run if link is an anchor and points to the current page
|
||||
if (
|
||||
toggle.hostname !== window.location.hostname ||
|
||||
toggle.pathname !== window.location.pathname ||
|
||||
!/#/.test(toggle.href)
|
||||
)
|
||||
return;
|
||||
|
||||
// Get the sanitized hash
|
||||
var hash;
|
||||
try {
|
||||
hash = escapeCharacters(decodeURIComponent(toggle.hash));
|
||||
} catch (e) {
|
||||
hash = escapeCharacters(toggle.hash);
|
||||
}
|
||||
|
||||
// If the hash is empty, scroll to the top of the page
|
||||
if (hash === "#") {
|
||||
// Prevent default link behavior
|
||||
event.preventDefault();
|
||||
|
||||
// Set the anchored element
|
||||
anchor = document.body;
|
||||
|
||||
// Save or create the ID as a data attribute and remove it (prevents scroll jump)
|
||||
var id = anchor.id ? anchor.id : "smooth-scroll-top";
|
||||
anchor.setAttribute("data-scroll-id", id);
|
||||
anchor.id = "";
|
||||
|
||||
// If no hash change event will happen, fire manually
|
||||
// Otherwise, update the hash
|
||||
if (window.location.hash.substring(1) === id) {
|
||||
hashChangeHandler();
|
||||
} else {
|
||||
window.location.hash = id;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the anchored element
|
||||
anchor = document.querySelector(hash);
|
||||
|
||||
// If anchored element exists, save the ID as a data attribute and remove it (prevents scroll jump)
|
||||
if (!anchor) return;
|
||||
anchor.setAttribute("data-scroll-id", anchor.id);
|
||||
anchor.id = "";
|
||||
|
||||
// If no hash change event will happen, fire manually
|
||||
if (toggle.hash === window.location.hash) {
|
||||
event.preventDefault();
|
||||
hashChangeHandler();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* On window scroll and resize, only run events at a rate of 15fps for better performance
|
||||
*/
|
||||
var resizeThrottler = function (event) {
|
||||
if (!eventTimeout) {
|
||||
eventTimeout = setTimeout(function () {
|
||||
eventTimeout = null; // Reset timeout
|
||||
headerHeight = getHeaderHeight(fixedHeader); // Get the height of a fixed header if one exists
|
||||
}, 66);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroy the current initialization.
|
||||
*/
|
||||
smoothScroll.destroy = function () {
|
||||
// If plugin isn't already initialized, stop
|
||||
if (!settings) return;
|
||||
|
||||
// Remove event listeners
|
||||
document.removeEventListener("click", clickHandler, false);
|
||||
window.removeEventListener("resize", resizeThrottler, false);
|
||||
|
||||
// Cancel any scrolls-in-progress
|
||||
smoothScroll.cancelScroll();
|
||||
|
||||
// Reset variables
|
||||
settings = null;
|
||||
anchor = null;
|
||||
toggle = null;
|
||||
fixedHeader = null;
|
||||
headerHeight = null;
|
||||
eventTimeout = null;
|
||||
animationInterval = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize Smooth Scroll
|
||||
* @param {Object} options User settings
|
||||
*/
|
||||
smoothScroll.init = function (options) {
|
||||
// feature test
|
||||
if (!supports) return;
|
||||
|
||||
// Destroy any existing initializations
|
||||
smoothScroll.destroy();
|
||||
|
||||
// Selectors and variables
|
||||
settings = extend(defaults, options || {}); // Merge user options with defaults
|
||||
fixedHeader = settings.header
|
||||
? document.querySelector(settings.header)
|
||||
: null; // Get the fixed header
|
||||
headerHeight = getHeaderHeight(fixedHeader);
|
||||
|
||||
// When a toggle is clicked, run the click handler
|
||||
document.addEventListener("click", clickHandler, false);
|
||||
|
||||
// Listen for hash changes
|
||||
window.addEventListener("hashchange", hashChangeHandler, false);
|
||||
|
||||
// If window is resized and there's a fixed header, recalculate its size
|
||||
if (fixedHeader) {
|
||||
window.addEventListener("resize", resizeThrottler, false);
|
||||
}
|
||||
};
|
||||
//
|
||||
// Initialize plugin
|
||||
//
|
||||
smoothScroll.init(options);
|
||||
//
|
||||
// Public APIs
|
||||
//
|
||||
|
||||
return smoothScroll;
|
||||
};
|
||||
|
||||
return SmoothScroll;
|
||||
}
|
||||
);
|
||||
var scroll = new SmoothScroll('a[href*="#"]');
|
79
config.json
Normal file
@ -0,0 +1,79 @@
|
||||
{
|
||||
"theme":{
|
||||
"palettes":{
|
||||
"dark":{
|
||||
"background":"#FFFFFF",
|
||||
"text":"#000000",
|
||||
"accentActive":"#7187ff",
|
||||
"accentMute":"#F7F7F7"
|
||||
},
|
||||
"light":{
|
||||
"background":"#000000",
|
||||
"text":"#FFFFFF",
|
||||
"accentActive":"#7187ff",
|
||||
"accentMute":"#30363d"
|
||||
}
|
||||
},
|
||||
"fontFamily":"sans-serif",
|
||||
"codeTheme":"prism/duotone-dark"
|
||||
},
|
||||
"template": "academia",
|
||||
"static_assets_folder": "static-assets",
|
||||
"external_sources": [],
|
||||
"navigation":{
|
||||
"home":"vac.md",
|
||||
"fileOrdersInSidenav": [
|
||||
"vac.md",
|
||||
"research-areas.md",
|
||||
"projects.md"
|
||||
],
|
||||
"folderOrdersInSidenav": [
|
||||
"research",
|
||||
"about"
|
||||
],
|
||||
"external_links": [
|
||||
{
|
||||
"text": "Research & experimentation",
|
||||
"url": "https://github.com/vacp2p/research/",
|
||||
"category": "Resources"
|
||||
},
|
||||
{
|
||||
"text": "Vac RFCs/Specs",
|
||||
"url": "https://rfc.vac.dev/",
|
||||
"category": "Resources"
|
||||
},
|
||||
{
|
||||
"text": "Vac Forum",
|
||||
"url": "https://forum.vac.dev/",
|
||||
"category": "Resources"
|
||||
},
|
||||
{
|
||||
"text": "Waku v2 training session",
|
||||
"url": "https://drive.google.com/file/d/19P3oDNXGBDClfcS6Sgp0t9LYr3UbIFGt/view",
|
||||
"category": "Resources"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ds_id": "vac",
|
||||
"seo": {
|
||||
"title": "Vac",
|
||||
"description": "Vac is an R&D org creating modular p2p protocols for private, secure, censorship-resistant communication.",
|
||||
"cc": "Vac researches peer-to-peer, private, censorship-resistant communication",
|
||||
"image": "vac-site-preview-image.png",
|
||||
"url": "https://staging.vac.dev",
|
||||
"social_media": [
|
||||
{
|
||||
"provider": "twitter",
|
||||
"handler": "vacp2p"
|
||||
},
|
||||
{
|
||||
"provider": "discord",
|
||||
"handler": "PQFdubGt6d"
|
||||
},
|
||||
{
|
||||
"provider": "github",
|
||||
"handler": "vacp2p"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,100 +0,0 @@
|
||||
import { dest, series, parallel, src, watch as gwatch } from 'gulp'
|
||||
import autoprefixer from 'autoprefixer'
|
||||
import browserSync from 'browser-sync'
|
||||
import spawn from 'cross-spawn'
|
||||
import cssnano from 'cssnano'
|
||||
import postcss from 'gulp-postcss'
|
||||
import atimport from 'postcss-import'
|
||||
import imagemin from 'gulp-imagemin'
|
||||
import minify from 'gulp-minify'
|
||||
import tailwindcss from 'tailwindcss'
|
||||
|
||||
const SITE_ROOT = './_site'
|
||||
const POST_BUILD_STYLESHEET = `${SITE_ROOT}/assets/css/`
|
||||
const PRE_BUILD_STYLESHEET = './assets/css/style.css'
|
||||
const IMAGES = './assets/img/**/*'
|
||||
const IMAGES_MINIMIZED = `${SITE_ROOT}/assets/img/`
|
||||
const TAILWIND_CONFIG = './tailwind.config.js'
|
||||
|
||||
// Fix for Windows compatibility
|
||||
const jekyll = process.platform === 'win32' ? 'jekyll.bat' : 'jekyll'
|
||||
|
||||
const isDevelopmentBuild = process.env.NODE_ENV === 'development'
|
||||
|
||||
const content = () => {
|
||||
browserSync.notify('Building Jekyll site...')
|
||||
|
||||
const args = ['exec', jekyll, 'build']
|
||||
if (isDevelopmentBuild) {
|
||||
args.push('--incremental')
|
||||
args.push('--future')
|
||||
}
|
||||
|
||||
return spawn('bundle', args, { stdio: 'inherit' })
|
||||
}
|
||||
|
||||
const scripts = () =>
|
||||
src('./assets/js/*')
|
||||
.pipe(minify({ext:{min:'.min.js' }, mangle: true}))
|
||||
.pipe(dest(`${SITE_ROOT}/assets/js/`))
|
||||
.pipe(browserSync.stream())
|
||||
|
||||
const styles = () =>
|
||||
src(PRE_BUILD_STYLESHEET)
|
||||
.pipe(
|
||||
postcss([
|
||||
atimport(),
|
||||
tailwindcss(TAILWIND_CONFIG),
|
||||
...(isDevelopmentBuild ? [] : [autoprefixer(), cssnano()]),
|
||||
])
|
||||
)
|
||||
.pipe(dest(POST_BUILD_STYLESHEET))
|
||||
.pipe(browserSync.stream())
|
||||
|
||||
const cname = () =>
|
||||
src('assets/CNAME').pipe(dest(SITE_ROOT))
|
||||
|
||||
const images = () =>
|
||||
src(IMAGES)
|
||||
.pipe(imagemin([
|
||||
imagemin.gifsicle({ interlaced: true }),
|
||||
imagemin.optipng({ optimizationLevel: 3 }),
|
||||
imagemin.svgo(),
|
||||
]))
|
||||
.pipe(dest(IMAGES_MINIMIZED))
|
||||
.pipe(browserSync.stream())
|
||||
|
||||
const server = () =>
|
||||
browserSync.init({
|
||||
files: [SITE_ROOT + '/**'],
|
||||
open: 'local',
|
||||
port: 4000,
|
||||
server: {
|
||||
baseDir: SITE_ROOT,
|
||||
serveStaticOptions: {
|
||||
extensions: ['html'],
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const watch = () => {
|
||||
gwatch(['_authors/*', '_data/*', '_posts/*', '_layouts/*', '_includes/*'], content)
|
||||
gwatch('**/*.js', scripts)
|
||||
gwatch(PRE_BUILD_STYLESHEET, styles)
|
||||
gwatch(IMAGES, images)
|
||||
//'!_site/**/*',
|
||||
//'!node_modules/**/*',
|
||||
}
|
||||
|
||||
const build = series(content, scripts, styles, images, cname)
|
||||
|
||||
exports.content = content
|
||||
exports.scripts = scripts
|
||||
exports.styles = styles
|
||||
exports.images = images
|
||||
exports.cname = cname
|
||||
exports.watch = watch
|
||||
exports.server = server
|
||||
exports.build = build
|
||||
exports.devel = series(build, parallel(server, watch))
|
||||
exports.default = exports.build
|
34
package.json
@ -1,34 +0,0 @@
|
||||
{
|
||||
"name": "vac.dev",
|
||||
"version": "1.0.0",
|
||||
"license": "Apache-2.0",
|
||||
"main": "gulpfile.babel.js",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.16.5",
|
||||
"autoprefixer": "10.3.1",
|
||||
"babel-preset-env": "1.7.0",
|
||||
"babel-register": "^6.26.0",
|
||||
"browser-sync": "2.27.5",
|
||||
"cross-env": "7.0.3",
|
||||
"cross-spawn": "7.0.3",
|
||||
"cssnano": "5.0.7",
|
||||
"gh-pages": "^3.2.3",
|
||||
"gulp": "4.0.2",
|
||||
"gulp-imagemin": "^7.1.0",
|
||||
"gulp-minify": "^3.1.0",
|
||||
"gulp-postcss": "9.0.0",
|
||||
"postcss": "8.3.6",
|
||||
"postcss-import": "14.0.2",
|
||||
"tailwindcss": "^2.2.7"
|
||||
},
|
||||
"scripts": {
|
||||
"build:production": "cross-env NODE_ENV=production gulp build",
|
||||
"build:dev": "cross-env NODE_ENV=development gulp build",
|
||||
"build": "yarn run build:production",
|
||||
"devel": "cross-env NODE_ENV=development gulp devel",
|
||||
"dev": "yarn run devel",
|
||||
"start": "yarn run devel",
|
||||
"clean": "git clean -fdx",
|
||||
"deploy": "node scripts/deploy.js"
|
||||
}
|
||||
}
|
18
projects.md
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
title: Projects
|
||||
---
|
||||
|
||||
# Vac projects
|
||||
|
||||
There are several projects under Vac.
|
||||
These are largely independent and can be seen as specific bets.
|
||||
|
||||
## Waku Research
|
||||
|
||||
Basically what Vac is primarily focused on today.
|
||||
Serves Waku Product, and aims to make Waku a self-sustained robust network with strong and modular privacy guarantees.
|
||||
This also includes secure messaging research and things like p2p/networking.
|
||||
|
||||
## Other projects
|
||||
|
||||
More projects will be added here soon.
|
29
research-areas.md
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
title: Research areas
|
||||
---
|
||||
# Overview
|
||||
Vac has several research areas it is interested in and has or is developing expertise in. Here’s an overview of some of these areas along with motivation and what type of topics are included. Note that a lot of areas are overlapping in terms of specific projects.
|
||||
|
||||
## Incentivization
|
||||
In a open p2p network, nodes have to be incentivized for services provided to the network. Additionally, these should be privacy-preserving and as trust-minimized as possible. This research areas includes things such as: RLN, service credentials, peer reputation, and protocol revenue.
|
||||
|
||||
## Applied ZK
|
||||
Applied ZK opens up the door to many new constructs, especially related to privacy. This research area includes things like RLN, Unirep and similar novel constructs, but also things like R&D related to ZKs in general such as Circom, proves on mobile, different proof systems such as Halo 2, etc. Done in close collaboration with other teams in the space.
|
||||
|
||||
## Privacy/Anonymity
|
||||
Specifically metadata privacy. This includes anonymity studies and providing a modular suite of protocols with clear trade-offs and threat models.
|
||||
|
||||
## Scalability
|
||||
Making the network scalable in terms of number of nodes, messages supported, discovering of nodes, caching of historical messages etc. Largely focused on Waku right now, but things like scalable group chats also relevant here.
|
||||
|
||||
## Data synchronization
|
||||
End to end data application synchronization protocols, FT Store, interfacing with long term storage, message bus guarantees, possibly CRDTs etc. Guiding principle is to provide additional guarantees for users of Waku (etc) in terms of user experience.
|
||||
|
||||
## P2P/Networking
|
||||
Things related to P2P protocols and networking, including usage of WebRTC, Discovery for resource restricted devices, new p2p protocols with different trade-offs etc.
|
||||
|
||||
## Censorship resistance
|
||||
Censorship resistance at all layers of the stack, including obfuscated transports, running in hostile environments, etc.
|
||||
|
||||
## Identity/Trust
|
||||
Identity and key management required for non-trivial secure messaging. Multi device management, group management, trust, reputation etc. Especially in a private and secure fashion.
|
@ -1,5 +0,0 @@
|
||||
---
|
||||
layout: research-log
|
||||
permalink: /research-log/
|
||||
title: Research log
|
||||
---
|
@ -1,14 +1,12 @@
|
||||
---
|
||||
layout: post
|
||||
name: "P2P Data Sync for Mobile"
|
||||
title: "P2P Data Sync for Mobile"
|
||||
date: 2019-07-19 12:00:00 +0800
|
||||
date: 2019-07-19 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /p2p-data-sync-for-mobile
|
||||
categories: research
|
||||
summary: A research log. Reliable and decentralized, pick two.
|
||||
image: /assets/img/mvds_interactive.png
|
||||
image: /img/mvds_interactive.png
|
||||
---
|
||||
|
||||
Together with decanus, I've been working on the problem of data sync lately.
|
||||
@ -66,10 +64,10 @@ The spec is fairly minimal. You have nodes that exchange records over some secur
|
||||
There are two different modes of syncing, interactive and batch mode. See sequence diagrams below.
|
||||
|
||||
Interactive mode:
|
||||
<img src="{{site.baseurl}}/assets/img/mvds_interactive.png">
|
||||

|
||||
|
||||
Batch mode:
|
||||
<img src="{{site.baseurl}}/assets/img/mvds_batch.png">
|
||||

|
||||
|
||||
Which mode should you choose? It's a tradeoff of latency and bandwidth. If you want to minimize latency, batch mode is better. If you care about preserving bandwidth interactive mode is better. The choice is up to each node.
|
||||
|
@ -2,7 +2,7 @@
|
||||
layout: post
|
||||
name: "Vac - A Rough Overview"
|
||||
title: "Vac - A Rough Overview"
|
||||
date: 2019-08-02 12:00:00 +0800
|
||||
date: 2019-08-02 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /vac-overview
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "P2P Data Sync with a Remote Log"
|
||||
title: "P2P Data Sync with a Remote Log"
|
||||
date: 2019-10-04 12:00:00 +0800
|
||||
date: 2019-10-04 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /remote-log
|
||||
categories: research
|
||||
summary: A research log. Asynchronous P2P messaging? Remote logs to the rescue!
|
||||
image: /assets/img/remote-log.png
|
||||
image: /img/remote-log.png
|
||||
---
|
||||
|
||||
A big problem when doing end-to-end data sync between mobile nodes is that most devices are offline most of the time. With a naive approach, you quickly run into issues of 'ping-pong' behavior, where messages have to be constantly retransmitted. We saw some basic calculations of what this bandwidth multiplier looks like in a [previous post](https://vac.dev/p2p-data-sync-for-mobile).
|
||||
@ -56,13 +56,7 @@ The *remote log* is the data format of what is stored in the name system.
|
||||
|
||||
### Flow
|
||||
|
||||
<!-- diagram -->
|
||||
|
||||
<p align="center">
|
||||
<img src="{{site.baseurl}}/assets/img/remote-log.png">
|
||||
<br />
|
||||
Figure 1: Remote log data synchronization.
|
||||
</p>
|
||||

|
||||
|
||||
### Data format
|
||||
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "Feasibility Study: Semaphore rate limiting through zkSNARKs"
|
||||
title: "Feasibility Study: Semaphore rate limiting through zkSNARKs"
|
||||
date: 2019-11-08 12:00:00 +0800
|
||||
date: 2019-11-08 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /feasibility-semaphore-rate-limiting-zksnarks
|
||||
categories: research
|
||||
summary: A research log. Zero knowledge signaling as a rate limiting mechanism to prevent spam in p2p networks.
|
||||
image: /assets/img/peacock-signaling.jpg
|
||||
image: /img/peacock-signaling.jpg
|
||||
discuss: https://forum.vac.dev/t/discussion-feasibility-study-semaphore-rate-limiting-through-zksnarks/21
|
||||
---
|
||||
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "Fixing Whisper with Waku"
|
||||
title: "Fixing Whisper with Waku"
|
||||
date: 2019-12-03 12:00:00 +0800
|
||||
date: 2019-12-03 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /fixing-whisper-with-waku
|
||||
categories: research
|
||||
summary: A research log. Why Whisper doesn't scale and how to fix it.
|
||||
image: /assets/img/whisper_scalability.png
|
||||
image: /img/whisper_scalability.png
|
||||
discuss: https://forum.vac.dev/t/discussion-fixing-whisper-with-waku/27
|
||||
---
|
||||
|
||||
@ -231,7 +231,7 @@ for more detail on the model and its assumptions.
|
||||
3. Waku mode (case 8) is an additional capability that doesn’t require other nodes to change, for nodes that put a premium on performance.
|
||||
4. The next bottleneck after this is the partitioned topics (app/network specific), which either needs to gracefully (and potentially quickly) grow, or an alternative way of consuming those messages needs to be deviced.
|
||||
|
||||

|
||||

|
||||
|
||||
The results are summarized in the graph above. Notice the log-log scale. The
|
||||
colored backgrounds correspond to the following bandwidth usage:
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "Waku Update"
|
||||
title: "Waku Update"
|
||||
date: 2020-02-14 12:00:00 +0800
|
||||
date: 2020-02-14 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /waku-update
|
||||
categories: research
|
||||
summary: A research log. What's the current state of Waku? How many users does it support? What are the bottlenecks? What's next?
|
||||
image: /assets/img/waku_infrastructure_sky.jpg
|
||||
image: /img/waku_infrastructure_sky.jpg
|
||||
discuss: https://forum.vac.dev/t/waku-update-where-are-we-at/34
|
||||
---
|
||||
|
||||
@ -72,7 +72,7 @@ For more details on these bottlenecks, see [Scalability estimate: How many users
|
||||
|
||||
The ultimate test is real-world usage. Until then, we have a simulation thanks to Kim De Mey from the Nimbus team!
|
||||
|
||||

|
||||

|
||||
|
||||
We have two network topologies, Star and full mesh. Both networks have 6 full nodes, one traditional light node with bloom filter, and one Waku light node.
|
||||
|
@ -2,7 +2,7 @@
|
||||
layout: post
|
||||
name: "DNS Based Discovery"
|
||||
title: "DNS Based Discovery"
|
||||
date: 2020-02-7 12:00:00 +0100
|
||||
date: 2020-02-7 12:00:00
|
||||
author: dean
|
||||
published: true
|
||||
permalink: /dns-based-discovery
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "What Would a WeChat Replacement Need?"
|
||||
title: "What Would a WeChat Replacement Need?"
|
||||
date: 2020-04-16 12:00:00 +0800
|
||||
date: 2020-04-16 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /wechat-replacement-need
|
||||
categories: research
|
||||
summary: What would a self-sovereign, private, censorship-resistant and open alternative to WeChat look like?
|
||||
image: /assets/img/tianstatue.jpg
|
||||
image: /img/tianstatue.jpg
|
||||
discuss: https://forum.vac.dev/t/discussion-what-would-a-wechat-replacement-need/42
|
||||
---
|
||||
|
@ -2,7 +2,7 @@
|
||||
layout: post
|
||||
name: "Feasibility Study: Discv5"
|
||||
title: "Feasibility Study: Discv5"
|
||||
date: 2020-04-27 12:00:00 +0800
|
||||
date: 2020-04-27 12:00:00
|
||||
author: dean
|
||||
published: true
|
||||
permalink: /feasibility-discv5
|
@ -2,7 +2,7 @@
|
||||
layout: post
|
||||
name: "From Kademlia to Discv5"
|
||||
title: "From Kademlia to Discv5"
|
||||
date: 2020-04-9 16:00:00 +0100
|
||||
date: 2020-04-9 16:00:00
|
||||
author: dean
|
||||
published: true
|
||||
permalink: /kademlia-to-discv5
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "What's the Plan for Waku v2?"
|
||||
title: "What's the Plan for Waku v2?"
|
||||
date: 2020-07-01 12:00:00 +0800
|
||||
date: 2020-07-01 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /waku-v2-plan
|
||||
categories: research
|
||||
summary: Read about our plans for Waku v2, moving to libp2p, better routing, adaptive nodes and accounting!
|
||||
image: /assets/img/status_scaling_model_fig4.png
|
||||
image: /img/status_scaling_model_fig4.png
|
||||
discuss: https://forum.vac.dev/t/waku-version-2-pitch/52
|
||||
---
|
||||
|
||||
@ -35,11 +35,11 @@ the primary bottleneck for full nodes, and the bottleneck is still bandwidth. To
|
||||
|
||||
Figure 1-5:
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
See <https://colab.research.google.com/drive/1Fz-oxRxxAFPpM1Cowpnb0nT52V1-yeRu#scrollTo=Yc3417FUJJ_0> for the full report.
|
||||
|
||||
@ -80,7 +80,7 @@ Let's first look at the baseline, and then go into some of the tracks and their
|
||||
Here's where we are at now. In reality, the amplification factor are likely even worse than this (15 in the graph below), up to 20-30. Especially with an open network, where we can't easily control connectivity and availability of nodes. Left unchecked, with a full mesh, it could even go as high x100, though this is likely excessive and can be dialed down. See scaling model for more details.
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
## Track 1 - Move to libp2p
|
||||
|
||||
@ -98,7 +98,7 @@ One difference that is worth noting is that the app topics would **not** be the
|
||||
|
||||
Why can't we use Waku topics for routing directly? PubSub over libp2p isn't built for rare and ephemeral topics, and nodes have to explicitly subscribe to a topic. See topic sharding section for more on this.
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
Moving to FloodSub over libp2p would also be an opportunity to clean up and simplify some components that are no longer needed in the Waku v1 protocol, see point below.
|
||||
@ -141,12 +141,12 @@ This is a subprotocol of FloodSub in the libp2p world. Moving to GossipSub would
|
||||
|
||||
Explaining how GossipSub works is out of scope of this document. It is implemented in nim-libp2p and used by Nimbus as part of Eth2. You can read the specs here in more detail if you are interested: <https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.0.md> and <https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md>
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
While we technically could implement this over existing Waku, we'd have to re-implement it, and we'd lose out on all the other benefits libp2p would provide, as well as the ecosystem of people and projects working on improving the scalability and security of these protocols.
|
||||
|
||||
@ -154,10 +154,10 @@ While we technically could implement this over existing Waku, we'd have to re-im
|
||||
|
||||
This one is slightly more speculative in terms of its ultimate impact. The basic idea is to split the application topic into N shards, say 10, and then each full node can choose which shards to listen to. This can reduce amplification factors by another factor of 10.
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
Note that this means a light node that listens to several topics would have to be connected to more full nodes to get connectivity. For a more exotic version of this, see <https://forum.vac.dev/t/rfc-topic-propagation-extension-to-libp2p-pubsub/47>
|
||||
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "Waku v2 Update"
|
||||
title: "Waku v2 Update"
|
||||
date: 2020-09-28 12:00:00 +0800
|
||||
date: 2020-09-28 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /waku-v2-update
|
||||
categories: research
|
||||
summary: A research log. Read on to find out what is going on with Waku v2, a messaging protocol. What has been happening? What is coming up next?
|
||||
image: /assets/img/vac.png
|
||||
image: /img/vac.png
|
||||
discuss: https://forum.vac.dev/t/discussion-waku-v2-update/56
|
||||
---
|
||||
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "[Talk] Vac, Waku v2 and Ethereum Messaging"
|
||||
title: "[Talk] Vac, Waku v2 and Ethereum Messaging"
|
||||
date: 2020-11-10 12:00:00 +0800
|
||||
date: 2020-11-10 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /waku-v2-ethereum-messaging
|
||||
categories: research
|
||||
summary: Talk from Taipei Ethereum Meetup. Read on to find out about our journey from Whisper to Waku v2, as well as how Waku v2 can be useful for Etherum Messaging.
|
||||
image: /assets/img/taipei_ethereum_meetup_slide.png
|
||||
image: /img/taipei_ethereum_meetup_slide.png
|
||||
discuss: https://forum.vac.dev/t/discussion-talk-vac-waku-v2-and-ethereum-messaging/60
|
||||
---
|
||||
|
@ -2,24 +2,20 @@
|
||||
layout: post
|
||||
name: "Privacy-preserving p2p economic spam protection in Waku v2"
|
||||
title: "Privacy-preserving p2p economic spam protection in Waku v2"
|
||||
date: 2021-03-05 12:00:00 +0800
|
||||
date: 2021-03-05 12:00:00
|
||||
author: sanaztaheri
|
||||
published: true
|
||||
permalink: /rln-relay
|
||||
categories: research
|
||||
summary: This post is going to give you an overview of how spam protection can be achieved in Waku Relay through rate-limiting nullifiers. We will cover a summary of spam-protection methods in centralized and p2p systems, and the solution overview and details of the economic spam-protection method. The open issues and future steps are discussed in the end.
|
||||
image: /assets/img/rain.png
|
||||
image: /img/rain.png
|
||||
discuss: https://forum.vac.dev/t/privacy-preserving-p2p-economic-spam-protection-in-waku-v2-with-rate-limiting-nullfiers/66
|
||||
---
|
||||
# Introduction
|
||||
This post is going to give you an overview of how spam protection can be achieved in Waku Relay protocol[^2] through Rate-Limiting Nullifiers[^3] [^4] or RLN for short.
|
||||
|
||||
Let me give a little background about Waku(v2)[^1]. Waku is a privacy-preserving peer-to-peer (p2p) messaging protocol for resource-restricted devices. Being p2p means that Waku relies on **No** central server. Instead, peers collaboratively deliver messages in the network. Waku uses GossipSub[^16] as the underlying routing protocol (as of the writeup of this post). At a high level, GossipSub is based on publisher-subscriber architecture. That is, *peers, congregate around topics they are interested in and can send messages to topics. Each message gets delivered to all peers subscribed to the topic*. In GossipSub, a peer has a constant number of direct connections/neighbors. In order to publish a message, the author forwards its message to a subset of neighbors. The neighbors proceed similarly till the message gets propagated in the network of the subscribed peers. The message publishing and routing procedures are part of the Waku Relay[^17] protocol.
|
||||
<p align="center">
|
||||
<img src="../assets/img/rln-relay/rln-relay-overview.png" width="200%" />
|
||||
<br />
|
||||
Figure 1: An overview of privacy-preserving p2p economic spam protection in Waku v2 RLN-Relay protocol.
|
||||
</p>
|
||||

|
||||
|
||||
## What do we mean by spamming?
|
||||
In centralized messaging systems, a spammer usually indicates an entity that uses the messaging system to send an unsolicited message (spam) to large numbers of recipients. However, in Waku with a p2p architecture, spam messages not only affect the recipients but also all the other peers involved in the routing process as they have to spend their computational power/bandwidth/storage capacity on processing spam messages. As such, we define a spammer as an entity that uses the messaging system to publish a large number of messages in a short amount of time. The messages issued in this way are called spam. In this definition, we disregard the intention of the spammer as well as the content of the message and the number of recipients.
|
||||
@ -98,11 +94,7 @@ A peer willing to publish a message is required to register. Registration is mod
|
||||
|
||||
For the registration, a peer creates a transaction that sends x amount of Ether to the contract. The peer who has the "private key" `sk` associated with that deposit would be able to withdraw x Ether by providing valid proof. Note that `sk` is initially only known by the owning peer however it may get exposed to other peers in case the owner attempts spamming the system i.e., sending more than one message per epoch.
|
||||
The following relation holds between the `sk` and `pk` i.e., `pk = H(sk)` where `H` denotes a hash function.
|
||||
<p align="center">
|
||||
<img src="../assets/img/rln-relay/rln-relay.png" />
|
||||
<br />
|
||||
Figure 2: Registration.
|
||||
</p>
|
||||

|
||||
|
||||
## Maintaining the membership Merkle Tree
|
||||
The ZKP of membership that we mentioned before relies on the representation of the entire group as a [Merkle Tree](). The tree construction and maintenance is delegated to the peers (the initial idea was to keep the tree on the chain as part of the contract, however, the cost associated with member deletion and insertion was high and unreasonable, please see [Feasibility and Open Issues](#Feasibility-and-Open-Issues) for more details). As such, each peer needs to build the tree locally and sync itself with the contract updates (peer insertion and deletion) to mirror them on its tree.
|
||||
@ -140,13 +132,7 @@ In order to enable local spam detection and slashing, routing peers MUST record
|
||||
+ b) If none found, then the message gets relayed.
|
||||
|
||||
An overview of the slashing procedure is provided in Figure 3.
|
||||
|
||||
<p align="center">
|
||||
<img src="../assets/img/rln-relay/rln-message-verification.png" />
|
||||
<br />
|
||||
Figure 3: Publishing, Routing and Slashing workflow.
|
||||
</p>
|
||||
|
||||

|
||||
|
||||
# Feasibility and Open Issues
|
||||
We've come a long way since a year ago, blockers resolved, now we have implemented it end-to-end. We learned lot and could identify further issues and unknowns some of which are blocking getting to production. The summary of the identified issues are presented below.
|
@ -2,13 +2,13 @@
|
||||
layout: post
|
||||
name: "Presenting JS-Waku: Waku v2 in the Browser"
|
||||
title: "Presenting JS-Waku: Waku v2 in the Browser"
|
||||
date: 2021-06-04 12:00:00 +0800
|
||||
date: 2021-06-04 12:00:00
|
||||
author: franck
|
||||
published: true
|
||||
permalink: /presenting-js-waku
|
||||
categories: platform
|
||||
summary: "JS-Waku is bringing Waku v2 to the browser. Learn what we achieved so far and what is next in our pipeline!"
|
||||
image: /assets/img/js-waku-gist.png
|
||||
image: /img/js-waku-gist.png
|
||||
discuss: https://forum.vac.dev/t/discussion-presenting-js-waku-waku-v2-in-the-browser/81
|
||||
---
|
||||
|
@ -2,17 +2,19 @@
|
||||
layout: post
|
||||
name: "[Talk at COSCUP] Vac, Waku v2 and Ethereum Messaging"
|
||||
title: "[Talk at COSCUP] Vac, Waku v2 and Ethereum Messaging"
|
||||
date: 2021-08-06 12:00:00 +0800
|
||||
date: 2021-08-06 12:00:00
|
||||
author: oskarth
|
||||
published: true
|
||||
permalink: /waku-v2-ethereum-coscup
|
||||
categories: research
|
||||
summary: Learn more about Waku v2, its origins, goals, protocols, implementation and ongoing research. Understand how it is used and how it can be useful for messaging in Ethereum.
|
||||
image: /assets/img/coscup-waku/talk.png
|
||||
image: /img/coscup-waku/talk.png
|
||||
discuss: https://forum.vac.dev/t/discussion-talk-at-coscup-vac-waku-v2-and-ethereum-messaging/95
|
||||
---
|
||||
|
||||
*This is the English version of a talk originally given in Chinese at COSCUP in Taipei. There is a [video recording](https://www.youtube.com/watch?v=s0ATpQ4_XFc) with Chinese and English subtitles.*
|
||||
*This is the English version of a talk originally given in Chinese at COSCUP in Taipei.*
|
||||
|
||||
[video recording with Chinese and English subtitles.](https://www.youtube.com/watch?v=s0ATpQ4_XFc)
|
||||
|
||||
---
|
||||
|
||||
@ -115,7 +117,7 @@ different contexts.
|
||||
In order to test the protocol we have setup a testnet across all implementations
|
||||
called Huilong. Yes, that's the Taipei subway station!
|
||||
|
||||

|
||||

|
||||
|
||||
Among us core devs we have disabled the main #waku Discord channel used for
|
||||
development, and people run their own node connected to this toy chat application.
|
||||
@ -201,7 +203,7 @@ WalletConnect is an open protocol for connecting dapps to wallets with a QR
|
||||
code. Version 2 is using Waku v2 as a communication channel to do so in a
|
||||
decentralized and private fashion.
|
||||
|
||||

|
||||

|
||||
|
||||
See for more: https://docs.walletconnect.org/v/2.0/tech-spec
|
||||
|