├── .babelrc ├── .gitignore ├── LICENSE.txt ├── README.md ├── components ├── CorePrinciple.tsx ├── Description.tsx ├── Dots.tsx ├── EventCard.tsx ├── Events.tsx ├── Header.tsx ├── Members.tsx └── Section.tsx ├── lib ├── members.json └── mq.ts ├── next.config.js ├── out ├── 404 │ └── index.html ├── .nojekyll ├── CNAME ├── _next │ └── static │ │ ├── M5JAJV~qJn1IG6150hzXy │ │ └── pages │ │ │ ├── _app.js │ │ │ ├── _error.js │ │ │ └── index.js │ │ ├── MWZV9VKaCgw~6s0294Olf │ │ └── pages │ │ │ ├── _app.js │ │ │ ├── _error.js │ │ │ └── index.js │ │ ├── chunks │ │ └── commons.8f6215f5cc3146e31096.js │ │ ├── nL98ZtBEM1bVKaJI6k4ol │ │ └── pages │ │ │ ├── _app.js │ │ │ ├── _error.js │ │ │ └── index.js │ │ └── runtime │ │ ├── main-91754cbc66a26f000159.js │ │ └── webpack-42652fa8b82c329c0559.js ├── index.html ├── index │ └── index.html └── static │ ├── Aeonik-Bold.ttf │ ├── Aeonik-Regular.ttf │ ├── dots_dark.png │ ├── dots_light.png │ ├── events │ ├── defi-summit-prague.jpg │ └── defi-summit.jpg │ └── telegram.png ├── package.json ├── pages ├── _document.tsx └── index.tsx ├── static ├── Aeonik-Bold.ttf ├── Aeonik-Regular.ttf ├── dots_dark.png ├── dots_light.png ├── events │ ├── defi-summit-prague.jpg │ └── defi-summit.jpg └── telegram.png ├── tsconfig.json ├── typings └── emotion-normalize.d.ts └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["next/babel", "@zeit/next-typescript/babel"], 3 | "env": { 4 | "production": { 5 | "plugins": [["emotion", { "hoist": true }]] 6 | }, 7 | "development": { 8 | "plugins": [["emotion", { "sourceMap": true, "autoLabel": true }]] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/node 3 | 4 | ### Node ### 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | 24 | # nyc test coverage 25 | .nyc_output 26 | 27 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 28 | .grunt 29 | 30 | # Bower dependency directory (https://bower.io/) 31 | bower_components 32 | 33 | # node-waf configuration 34 | .lock-wscript 35 | 36 | # Compiled binary addons (https://nodejs.org/api/addons.html) 37 | build/Release 38 | 39 | # Dependency directories 40 | node_modules/ 41 | jspm_packages/ 42 | 43 | # Optional npm cache directory 44 | .npm 45 | 46 | # Optional eslint cache 47 | .eslintcache 48 | 49 | # Optional REPL history 50 | .node_repl_history 51 | 52 | # Output of 'npm pack' 53 | *.tgz 54 | 55 | # Yarn Integrity file 56 | .yarn-integrity 57 | 58 | # dotenv environment variables file 59 | .env 60 | 61 | # parcel-bundler cache (https://parceljs.org/) 62 | .cache 63 | 64 | # next.js build output 65 | .next 66 | 67 | # nuxt.js build output 68 | .nuxt 69 | 70 | # vuepress build output 71 | .vuepress/dist 72 | 73 | # Serverless directories 74 | .serverless 75 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2018 Ian Macalinao 3 | 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @defi/site 2 | 3 | The DeFi website. 4 | 5 | ## Running 6 | 7 | We use Next.js to build the website. 8 | 9 | ``` 10 | $ yarn 11 | $ yarn dev 12 | ``` 13 | 14 | ## Deploying 15 | 16 | First, ensure you have no uncommitted changes. Then: 17 | 18 | ``` 19 | $ yarn deploy 20 | ``` 21 | 22 | This will push the website to GitHub Pages, and the changes will be reflected shortly. 23 | 24 | ## License 25 | 26 | MIT -------------------------------------------------------------------------------- /components/CorePrinciple.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import styled from "react-emotion"; 3 | import mq from "../lib/mq"; 4 | import { css } from "emotion"; 5 | 6 | type Props = { 7 | id: string; 8 | className?: string; 9 | title: string; 10 | children: any; 11 | }; 12 | 13 | const CorePrinciple = ({ id, className, title, children }: Props) => ( 14 |
15 | 16 | {id} 17 |

{title}

18 |
19 | {children} 20 |
21 | ); 22 | 23 | const PrincipleTitle = styled.div` 24 | display: flex; 25 | h4 { 26 | margin-top: 26px; 27 | margin-bottom: 0; 28 | ${mq.medium(css` 29 | margin-top: 0; 30 | `)}; 31 | } 32 | margin-bottom: 25px; 33 | `; 34 | 35 | const PrincipleId = styled.div` 36 | width: 50px; 37 | color: #0734ff; 38 | font-size: 50px; 39 | font-weight: bold; 40 | letter-spacing: -1.52px; 41 | line-height: 60px; 42 | ${mq.medium(css` 43 | width: 38px; 44 | font-size: 25px; 45 | font-weight: bold; 46 | letter-spacing: -0.76px; 47 | line-height: 30px; 48 | `)}; 49 | `; 50 | 51 | export default styled(CorePrinciple)``; 52 | -------------------------------------------------------------------------------- /components/Description.tsx: -------------------------------------------------------------------------------- 1 | import styled from "react-emotion"; 2 | import Section from "./Section"; 3 | import CorePrinciple from "./CorePrinciple"; 4 | import { css } from "emotion"; 5 | import Dots from "./Dots"; 6 | import mq from "../lib/mq"; 7 | 8 | const Description = ({ className }: { className?: string }) => ( 9 |
10 |

DeFi is a Movement

11 |

12 | We saw an overlap in the problems that decentralized finance protocols 13 | were trying to solve and thought there would be no better way to tackle 14 | them then by forming an open community of like-minded projects. 15 |

16 | 17 | 18 |

Our Core Principles

19 | 26 |

27 | Members of DeFi take interoperability into account when building 28 | their projects. This helps strengthen the compounding effects of all 29 | our projects as a whole. Open sourcing helps us reach this goal by 30 | allowing us to collectively understand how all of our products can 31 | be woven together on a technical level. 32 |

33 |
34 | 41 |

42 | We strive to create a financial system that is accessible to anyone 43 | with an internet connection. We believe in a world where value flows 44 | freely, regardless of one’s geographic location. 45 |

46 |
47 | 48 |

49 | We believe that financial services should not be built in opaque 50 | silos, but rather that market-level information should be 51 | transparent to all participants while still preserving individual 52 | privacy. 53 |

54 |
55 |
56 | 57 |
58 |
59 | ); 60 | 61 | const FlexWrapper = styled.div` 62 | display: flex; 63 | ${Dots} { 64 | margin-top: 280px; 65 | margin-left: 125px; 66 | ${mq.medium(css` 67 | display: none; 68 | `)}; 69 | } 70 | `; 71 | 72 | const CorePrinciples = styled.div` 73 | max-width: 773px; 74 | `; 75 | 76 | export default styled(Description)``; 77 | -------------------------------------------------------------------------------- /components/Dots.tsx: -------------------------------------------------------------------------------- 1 | import styled from "react-emotion"; 2 | 3 | const Dots = styled.div` 4 | background: url(static/dots_${(props: { type: string }) => props.type}.png) 5 | no-repeat; 6 | height: 419px; 7 | width: 244px; 8 | `; 9 | 10 | export default Dots; 11 | -------------------------------------------------------------------------------- /components/EventCard.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import styled from "react-emotion"; 3 | import { css } from "emotion"; 4 | import mq from "../lib/mq"; 5 | 6 | type Props = { 7 | image: string; 8 | title: string; 9 | location: string; 10 | date: string; 11 | time: string; 12 | className?: string; 13 | }; 14 | 15 | const EventCard = ({ 16 | image, 17 | title, 18 | location, 19 | date, 20 | time, 21 | className 22 | }: Props) => { 23 | return ( 24 |
25 | 26 |
37 | 38 | {title} 39 | {location} 40 | 41 | 42 |
43 |
44 | ); 45 | }; 46 | 47 | const Info = styled.div` 48 | border-left: 5px solid #0734ff; 49 | padding-left: 20px; 50 | `; 51 | 52 | const EventTitle = styled.h4` 53 | color: #000d45; 54 | font-size: 28px; 55 | font-weight: bold; 56 | line-height: 34px; 57 | letter-spacing: normal; 58 | margin: 0; 59 | ${mq.medium(css` 60 | font-size: 18px; 61 | margin-top: -10px; 62 | margin-bottom: -10px; 63 | `)}; 64 | `; 65 | 66 | const EventLocation = styled.div` 67 | color: #69708d; 68 | font-size: 20px; 69 | line-height: 24px; 70 | margin-bottom: 16px; 71 | ${mq.medium(css` 72 | font-size: 14px; 73 | margin-bottom: 5px; 74 | `)}; 75 | `; 76 | 77 | const EventDateTime = ({ date, time }: { date: string; time: string }) => ( 78 |
104 | {date} 105 | 106 |
107 | ); 108 | 109 | const Date = styled.div` 110 | border-radius: 8px 0 0 8px; 111 | background-color: #0734ff; 112 | color: #ffffff; 113 | font-weight: bold; 114 | ${mq.medium(css` 115 | background-color: #fff; 116 | color: #000d45; 117 | `)}; 118 | `; 119 | 120 | const Time = styled.div` 121 | color: #000d45; 122 | background-color: #ecefff; 123 | border-radius: 0 8px 8px 0; 124 | ${mq.medium(css` 125 | background-color: #fff; 126 | font-weight: normal; 127 | `)}; 128 | `; 129 | 130 | const EventImage = styled.div` 131 | height: 100%; 132 | border-radius: 8px 0 0 8px; 133 | flex: 50%; 134 | background: url(${(props: { src: string }) => props.src}) no-repeat center 135 | center; 136 | background-size: cover; 137 | ${mq.medium(css` 138 | height: 115px; 139 | border-radius: 8px 8px 0 0; 140 | `)}; 141 | `; 142 | 143 | export default styled(EventCard)` 144 | height: 276px; 145 | max-width: 1142px; 146 | border: 1px solid #cbcfe2; 147 | border-radius: 8px; 148 | background-color: #ffffff; 149 | box-shadow: 0 10px 20px 0 #bec6eb; 150 | display: flex; 151 | 152 | ${mq.medium(css` 153 | flex-direction: column; 154 | `)}; 155 | `; 156 | -------------------------------------------------------------------------------- /components/Events.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | import styled from "react-emotion"; 4 | import Section from "./Section"; 5 | import EventCard from "./EventCard"; 6 | import mq from "../lib/mq"; 7 | import { css } from "emotion"; 8 | 9 | const Events = ({ className }: { className?: string }) => ( 10 |
11 |

Events

12 | 13 |

Upcoming

14 | 21 |
22 | 23 |

Previous

24 | 31 |
32 |
33 | ); 34 | 35 | const EventGroup = styled.div` 36 | :not(:last-child) { 37 | margin-bottom: 60px; 38 | } 39 | > h4 { 40 | margin-top: 0; 41 | margin-bottom: 17px; 42 | ${mq.medium(css` 43 | font-size: 14px; 44 | line-height: 17px; 45 | letter-spacing: normal; 46 | `)}; 47 | } 48 | `; 49 | 50 | export default styled(Events)` 51 | background-color: #fafbff; 52 | h2 { 53 | margin-bottom: 14px; 54 | } 55 | `; 56 | -------------------------------------------------------------------------------- /components/Header.tsx: -------------------------------------------------------------------------------- 1 | import styled from "react-emotion"; 2 | import Section from "./Section"; 3 | import Dots from "./Dots"; 4 | import mq from "../lib/mq"; 5 | import { css } from "emotion"; 6 | 7 | const Header = ({ className }: { className?: string }) => ( 8 |
9 | 10 |
11 | 12 | DeFi 13 | 14 | 15 | 16 | An Open Community of Decentralized Finance Platforms 17 | 18 | { 20 | if (typeof window !== "undefined") { 21 | window.open("https://t.me/de_fi", "_blank"); 22 | } 23 | }} 24 | > 25 | 26 | Join the Telegram 27 | 28 |
29 | 30 |
31 |
32 | ); 33 | 34 | const Content = styled.div` 35 | display: flex; 36 | ${Dots} { 37 | margin-top: 40px; 38 | ${mq.medium(css` 39 | display: none; 40 | `)}; 41 | } 42 | `; 43 | 44 | const Logo = styled.div` 45 | display: flex; 46 | align-items: center; 47 | `; 48 | 49 | const Main = styled.div` 50 | max-width: 861px; 51 | `; 52 | 53 | const Line = styled.div` 54 | margin-left: 51px; 55 | height: 44px; 56 | width: 356px; 57 | border-bottom: 2px solid #ffffff; 58 | ${mq.medium(css` 59 | display: none; 60 | `)}; 61 | `; 62 | 63 | const Title = styled.h1` 64 | color: #ffffff; 65 | font-size: 180px; 66 | font-weight: bold; 67 | letter-spacing: -5.47px; 68 | margin: 0; 69 | ${mq.medium(css` 70 | font-size: 90px; 71 | font-weight: bold; 72 | letter-spacing: -2.74px; 73 | line-height: 108px; 74 | `)}; 75 | `; 76 | 77 | const Subtitle = styled.p` 78 | color: #ffffff; 79 | font-size: 50px; 80 | font-weight: bold; 81 | line-height: 60px; 82 | margin-top: 20px; 83 | margin-bottom: 65px; 84 | ${mq.medium(css` 85 | font-size: 25px; 86 | line-height: 30px; 87 | `)}; 88 | `; 89 | 90 | const JoinTelegramButton = styled.div` 91 | cursor: pointer; 92 | height: 74px; 93 | width: 293px; 94 | border-radius: 8px; 95 | background-color: #ffffff; 96 | img { 97 | margin-right: 21px; 98 | } 99 | span { 100 | color: #0734ff; 101 | font-size: 20px; 102 | font-weight: bold; 103 | line-height: 24px; 104 | text-align: center; 105 | } 106 | display: flex; 107 | align-items: center; 108 | justify-content: center; 109 | 110 | ${mq.medium(css` 111 | width: 100%; 112 | `)}; 113 | 114 | :hover { 115 | background-color: #ccc; 116 | } 117 | `; 118 | 119 | export default styled(Header)` 120 | border: 1px solid #979797; 121 | background-color: #0734ff; 122 | padding-top: 159px; 123 | padding-bottom: 190px; 124 | `; 125 | -------------------------------------------------------------------------------- /components/Members.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | import styled from "react-emotion"; 4 | import mq from "../lib/mq"; 5 | import { css } from "emotion"; 6 | import Section from "./Section"; 7 | import memberData from "../lib/members.json"; 8 | 9 | const Category = ({ 10 | header, 11 | members, 12 | className 13 | }: { 14 | header: string; 15 | members: string[]; 16 | className?: string; 17 | }) => ( 18 |
19 |

{header}

20 | 32 |
33 | ); 34 | 35 | const StyledCategory = styled(Category)` 36 | h4 { 37 | color: #000d45; 38 | font-size: 28px; 39 | font-weight: bold; 40 | line-height: 34px; 41 | :after { 42 | display: block; 43 | content: ""; 44 | margin-top: 12px; 45 | height: 1px; 46 | width: 33px; 47 | border-bottom: 5px solid #0734ff; 48 | } 49 | margin-bottom: 27px; 50 | } 51 | ul { 52 | list-style: none; 53 | padding: 0; 54 | margin: 0; 55 | } 56 | a { 57 | text-decoration: none; 58 | color: #0734ff; 59 | font-size: 20px; 60 | line-height: 24px; 61 | :hover { 62 | color: #000d45; 63 | } 64 | } 65 | margin-bottom: 67px; 66 | `; 67 | 68 | const CategoryColumn = ({ categories }: { categories: any[] }) => ( 69 |
74 | {categories.map(([header, members]) => ( 75 | 76 | ))} 77 |
78 | ); 79 | 80 | const CategoryColumns = styled.div` 81 | display: flex; 82 | ${mq.medium(css` 83 | flex-direction: column; 84 | `)}; 85 | `; 86 | 87 | const Members = ({ className }: { className?: string }) => { 88 | const categories = Object.entries(memberData.categories).sort( 89 | (a, b) => (a < b ? -1 : 1) 90 | ); 91 | return ( 92 |
93 |

Members

94 | 95 | 96 | 97 | 98 |
99 | ); 100 | }; 101 | 102 | export default styled(Members)``; 103 | -------------------------------------------------------------------------------- /components/Section.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import styled from "react-emotion"; 3 | 4 | const ContentWrapper = styled.div` 5 | max-width: 1141px; 6 | margin: 0px auto; 7 | `; 8 | 9 | const Section = ({ 10 | className, 11 | children 12 | }: { 13 | className?: string; 14 | children: any; 15 | }) => ( 16 |
17 | {children} 18 |
19 | ); 20 | 21 | export default styled(Section)` 22 | padding: 90px 45px; 23 | `; 24 | -------------------------------------------------------------------------------- /lib/members.json: -------------------------------------------------------------------------------- 1 | { 2 | "categories": { 3 | "Apps": ["Coinbase Wallet"], 4 | "Baskets": ["Set"], 5 | "Derivatives": ["dY/dX", "Market Protocol", "bZx"], 6 | "Exchanges": ["0x", "Kyber Network"], 7 | "Insurance": ["CDx"], 8 | "Loans": ["Dharma"], 9 | "Payments": ["8x Protocol"], 10 | "Real World Assets": ["Centrifuge"], 11 | "Securities": ["Abacus"], 12 | "Stablecoins": ["Maker"], 13 | "Scaling": ["Connext","Matic Network"], 14 | "Security & Identity": ["Hydrogen", "TPL Protocol"] 15 | }, 16 | "members": { 17 | "Abacus": { 18 | "url": "https://abacusprotocol.com" 19 | }, 20 | "Coinbase Wallet": { 21 | "url": "https://wallet.coinbase.com/" 22 | }, 23 | "Set": { 24 | "url": "https://setprotocol.com/" 25 | }, 26 | "dY/dX": { 27 | "url": "https://dydx.exchange/" 28 | }, 29 | "Market Protocol": { 30 | "url": "https://marketprotocol.io/" 31 | }, 32 | "CDx": { 33 | "url": "https://cdxproject.com/" 34 | }, 35 | "Dharma": { 36 | "url": "https://dharma.io/" 37 | }, 38 | "8x Protocol": { 39 | "url": "https://8xprotocol.com/" 40 | }, 41 | "Connext": { 42 | "url": "https://connext.network/" 43 | }, 44 | "bZx": { 45 | "url": "https://b0x.network/" 46 | }, 47 | "Kyber Network": { 48 | "url": "https://kyber.network/" 49 | }, 50 | "0x": { 51 | "url": "https://0x.org/" 52 | }, 53 | "Maker": { 54 | "url": "https://makerdao.com/" 55 | }, 56 | "Centrifuge": { 57 | "url": "https://www.centrifuge.io/" 58 | }, 59 | "Hydrogen": { 60 | "url": "https://www.hydrogenplatform.com/" 61 | }, 62 | "TPL Protocol": { 63 | "url": "https://tplprotocol.org/" 64 | }, 65 | "Matic Network": { 66 | "url": "https://matic.network/" 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /lib/mq.ts: -------------------------------------------------------------------------------- 1 | import { css } from "emotion"; 2 | 3 | const breakpoints: { [key: string]: any } = { 4 | // Numerical values will result in a min-width query 5 | small: 576, 6 | medium: 768, 7 | large: 992, 8 | xLarge: 1200, 9 | // String values will be used as is 10 | tallPhone: "(max-width: 360px) and (min-height: 740px)" 11 | }; 12 | 13 | // @ts-ignore 14 | const mq: { 15 | small: any; 16 | medium: any; 17 | large: any; 18 | xLarge: any; 19 | tallPhone: any; 20 | } = Object.keys(breakpoints).reduce( 21 | (accumulator: { [key: string]: any }, label) => { 22 | let prefix = typeof breakpoints[label] === "string" ? "" : "max-width:"; 23 | let suffix = typeof breakpoints[label] === "string" ? "" : "px"; 24 | accumulator[label] = (cls: any) => 25 | css` 26 | @media (${prefix + breakpoints[label] + suffix}) { 27 | ${cls}; 28 | } 29 | `; 30 | return accumulator; 31 | }, 32 | {} 33 | ); 34 | 35 | export default mq; 36 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | const withTypescript = require("@zeit/next-typescript"); 2 | 3 | module.exports = withTypescript({ 4 | assetPrefix: process.env.NODE_ENV === "production" ? "" : "" 5 | }); 6 | -------------------------------------------------------------------------------- /out/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defi/site/c63b7053e9fa2709b9d6e0e9848f7aae1918e39c/out/.nojekyll -------------------------------------------------------------------------------- /out/404/index.html: -------------------------------------------------------------------------------- 1 | : An unexpected error has occurred

An unexpected error has occurred.

-------------------------------------------------------------------------------- /out/CNAME: -------------------------------------------------------------------------------- 1 | defi.network 2 | -------------------------------------------------------------------------------- /out/_next/static/M5JAJV~qJn1IG6150hzXy/pages/_app.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[4],{223:function(e,t,n){__NEXT_REGISTER_PAGE("/_app",function(){return e.exports=n(224),{page:e.exports.default}})},224:function(e,t,n){e.exports=n(225)},225:function(e,t,n){e.exports=n(226)},226:function(e,t,n){"use strict";var r=n(25),u=n(5);Object.defineProperty(t,"__esModule",{value:!0}),t.createUrl=x,t.Container=t.default=void 0;var a=u(n(43)),o=u(n(44)),i=u(n(227)),l=u(n(8)),c=u(n(9)),p=u(n(21)),s=u(n(22)),f=u(n(23)),d=u(n(16)),h=r(n(0)),v=u(n(24)),y=n(30),m=n(71),g=function(e){function t(){return(0,l.default)(this,t),(0,p.default)(this,(0,s.default)(t).apply(this,arguments))}var n;return(0,f.default)(t,e),(0,c.default)(t,[{key:"getChildContext",value:function(){return{headManager:this.props.headManager,router:(0,m.makePublicRouterInstance)(this.props.router)}}},{key:"componentDidCatch",value:function(e){throw e}},{key:"render",value:function(){var e=this.props,t=e.router,n=e.Component,r=e.pageProps,u=x(t);return h.default.createElement(k,null,h.default.createElement(n,(0,i.default)({},r,{url:u})))}}],[{key:"getInitialProps",value:(n=(0,o.default)(a.default.mark(function e(t){var n,r,u;return a.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.Component,t.router,r=t.ctx,e.next=3,(0,y.loadGetInitialProps)(n,r);case 3:return u=e.sent,e.abrupt("return",{pageProps:u});case 5:case"end":return e.stop()}},e,this)})),function(e){return n.apply(this,arguments)})}]),t}(h.Component);t.default=g,(0,d.default)(g,"childContextTypes",{headManager:v.default.object,router:v.default.object});var k=function(e){function t(){return(0,l.default)(this,t),(0,p.default)(this,(0,s.default)(t).apply(this,arguments))}return(0,f.default)(t,e),(0,c.default)(t,[{key:"componentDidMount",value:function(){this.scrollToHash()}},{key:"componentDidUpdate",value:function(){this.scrollToHash()}},{key:"scrollToHash",value:function(){var e=window.location.hash;if(e=!!e&&e.substring(1)){var t=document.getElementById(e);t&&setTimeout(function(){return t.scrollIntoView()},0)}}},{key:"render",value:function(){return this.props.children}}]),t}(h.Component);t.Container=k;var w=(0,y.execOnce)(function(){0});function x(e){var t=e.pathname,n=e.asPath,r=e.query;return{get query(){return w(),r},get pathname(){return w(),t},get asPath(){return w(),n},back:function(){w(),e.back()},push:function(t,n){return w(),e.push(t,n)},pushTo:function(t,n){w();var r=n?t:null,u=n||t;return e.push(r,u)},replace:function(t,n){return w(),e.replace(t,n)},replaceTo:function(t,n){w();var r=n?t:null,u=n||t;return e.replace(r,u)}}}},227:function(e,t,n){var r=n(75);function u(){return e.exports=u=r||function(e){for(var t=1;t=4;)t=1540483477*(65535&(t=255&e.charCodeAt(i)|(255&e.charCodeAt(++i))<<8|(255&e.charCodeAt(++i))<<16|(255&e.charCodeAt(++i))<<24))+((1540483477*(t>>>16)&65535)<<16),r=1540483477*(65535&r)+((1540483477*(r>>>16)&65535)<<16)^(t=1540483477*(65535&(t^=t>>>24))+((1540483477*(t>>>16)&65535)<<16)),n-=4,++i;switch(n){case 3:r^=(255&e.charCodeAt(i+2))<<16;case 2:r^=(255&e.charCodeAt(i+1))<<8;case 1:r=1540483477*(65535&(r^=255&e.charCodeAt(i)))+((1540483477*(r>>>16)&65535)<<16)}return r=1540483477*(65535&(r^=r>>>13))+((1540483477*(r>>>16)&65535)<<16),((r^=r>>>15)>>>0).toString(36)};var o=function(e){function t(e,t,r){var i=t.trim().split(h);t=i;var a=i.length,o=e.length;switch(o){case 0:case 1:var s=0;for(e=0===o?"":e[0]+" ";sr&&(r=(t=t.trim()).charCodeAt(0)),r){case 38:return t.replace(m,"$1"+e.trim());case 58:return e.trim()+t.replace(m,"$1"+e.trim());default:if(0<1*n&&0c.charCodeAt(8))break;case 115:o=o.replace(c,"-webkit-"+c)+";"+o;break;case 207:case 102:o=o.replace(c,"-webkit-"+(102s.charCodeAt(0)&&(s=s.trim()),s=[s],0f)&&(L=($=$.replace(" ",":")).length),01?i-1:0),s=1;s h4{margin-top:0;margin-bottom:17px;",j.medium(Object(s.css)("font-size:14px;line-height:17px;letter-spacing:normal;")),";}"),ne=w(ee,{target:"ewvgo0i1"})("background-color:#fafbff;h2{margin-bottom:14px;}"),re=n(77);function ie(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var ae=w(function(e){var t=e.header,n=e.members,i=e.className;return r.createElement("div",{className:i},r.createElement("h4",null,t),r.createElement("ul",null,n.map(function(e){var t=re.members[e];return r.createElement("li",{key:e},r.createElement("a",{href:t&&t.url||"#",target:"_blank"},e))})))},{target:"ebj7umv0"})('h4{color:#000d45;font-size:28px;font-weight:bold;line-height:34px;:after{display:block;content:"";margin-top:12px;height:1px;width:33px;border-bottom:5px solid #0734ff;}margin-bottom:27px;}ul{list-style:none;padding:0;margin:0;}a{text-decoration:none;color:#0734ff;font-size:20px;line-height:24px;:hover{color:#000d45;}}margin-bottom:67px;'),oe=function(e){var t=e.categories;return r.createElement("div",{className:Object(s.css)("flex:50%;")},t.map(function(e){var t=ie(e,2),n=t[0],i=t[1];return r.createElement(ae,{header:n,members:i})}))},se=w("div",{target:"ebj7umv1"})("display:flex;",j.medium(Object(s.css)("flex-direction:column;")),";"),ce=w(function(e){var t=e.className,n=Object.entries(re.categories).sort(function(e,t){return e=4;)t=1540483477*(65535&(t=255&e.charCodeAt(i)|(255&e.charCodeAt(++i))<<8|(255&e.charCodeAt(++i))<<16|(255&e.charCodeAt(++i))<<24))+((1540483477*(t>>>16)&65535)<<16),r=1540483477*(65535&r)+((1540483477*(r>>>16)&65535)<<16)^(t=1540483477*(65535&(t^=t>>>24))+((1540483477*(t>>>16)&65535)<<16)),n-=4,++i;switch(n){case 3:r^=(255&e.charCodeAt(i+2))<<16;case 2:r^=(255&e.charCodeAt(i+1))<<8;case 1:r=1540483477*(65535&(r^=255&e.charCodeAt(i)))+((1540483477*(r>>>16)&65535)<<16)}return r=1540483477*(65535&(r^=r>>>13))+((1540483477*(r>>>16)&65535)<<16),((r^=r>>>15)>>>0).toString(36)};var o=function(e){function t(e,t,r){var i=t.trim().split(h);t=i;var a=i.length,o=e.length;switch(o){case 0:case 1:var s=0;for(e=0===o?"":e[0]+" ";sr&&(r=(t=t.trim()).charCodeAt(0)),r){case 38:return t.replace(m,"$1"+e.trim());case 58:return e.trim()+t.replace(m,"$1"+e.trim());default:if(0<1*n&&0c.charCodeAt(8))break;case 115:o=o.replace(c,"-webkit-"+c)+";"+o;break;case 207:case 102:o=o.replace(c,"-webkit-"+(102s.charCodeAt(0)&&(s=s.trim()),s=[s],0f)&&(L=($=$.replace(" ",":")).length),01?i-1:0),s=1;s h4{margin-top:0;margin-bottom:17px;",j.medium(Object(s.css)("font-size:14px;line-height:17px;letter-spacing:normal;")),";}"),ne=w(ee,{target:"ewvgo0i1"})("background-color:#fafbff;h2{margin-bottom:14px;}"),re=n(77);function ie(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var ae=w(function(e){var t=e.header,n=e.members,i=e.className;return r.createElement("div",{className:i},r.createElement("h4",null,t),r.createElement("ul",null,n.map(function(e){var t=re.members[e];return r.createElement("li",{key:e},r.createElement("a",{href:t&&t.url||"#",target:"_blank"},e))})))},{target:"ebj7umv0"})('h4{color:#000d45;font-size:28px;font-weight:bold;line-height:34px;:after{display:block;content:"";margin-top:12px;height:1px;width:33px;border-bottom:5px solid #0734ff;}margin-bottom:27px;}ul{list-style:none;padding:0;margin:0;}a{text-decoration:none;color:#0734ff;font-size:20px;line-height:24px;:hover{color:#000d45;}}margin-bottom:67px;'),oe=function(e){var t=e.categories;return r.createElement("div",{className:Object(s.css)("flex:50%;")},t.map(function(e){var t=ie(e,2),n=t[0],i=t[1];return r.createElement(ae,{header:n,members:i})}))},se=w("div",{target:"ebj7umv1"})("display:flex;",j.medium(Object(s.css)("flex-direction:column;")),";"),ce=w(function(e){var t=e.className,n=Object.entries(re.categories).sort(function(e,t){return e0&&void 0!==o[0]?o[0]:{},n.webpackHMR,e.next=4,S.loadPage("/_error");case 4:return t.ErrorComponent=q=e.sent,e.next=7,S.loadPage("/_app");case 7:return j=e.sent,r=E,e.prev=9,e.next=12,S.loadPage(k);case 12:if("function"==typeof(L=e.sent)){e.next=15;break}throw new Error('The default export is not a React Component in page: "'.concat(k,'"'));case 15:e.next=20;break;case 17:e.prev=17,e.t0=e.catch(9),r=e.t0;case 20:return e.next=22,_.default.preloadReady(R||[]);case 22:return t.router=I=(0,p.createRouter)(k,C,O,{initialProps:x,pageLoader:S,App:j,Component:L,ErrorComponent:q,err:r}),I.subscribe(function(e){X({App:e.App,Component:e.Component,props:e.props,err:e.err,emitter:H})}),X({App:j,Component:L,props:x,err:r,emitter:H}),e.abrupt("return",H);case 26:case"end":return e.stop()}},e,this,[[9,17]])}));function X(e){return z.apply(this,arguments)}function z(){return(z=(0,i.default)(u.default.mark(function e(t){return u.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.err){e.next=4;break}return e.next=3,U(t);case 3:return e.abrupt("return");case 4:return e.prev=4,e.next=7,J(t);case 7:e.next=13;break;case 9:return e.prev=9,e.t0=e.catch(4),e.next=13,U((0,a.default)({},t,{err:e.t0}));case 13:case"end":return e.stop()}},e,this,[[4,9]])}))).apply(this,arguments)}function U(e){return W.apply(this,arguments)}function W(){return(W=(0,i.default)(u.default.mark(function e(t){var n,r,o;return u.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n=t.App,r=t.err,e.next=3;break;case 3:if(console.error(r),!t.props){e.next=8;break}e.t0=t.props,e.next=11;break;case 8:return e.next=10,(0,m.loadGetInitialProps)(n,{Component:q,router:I,ctx:{err:r,pathname:k,query:C,asPath:O}});case 10:e.t0=e.sent;case 11:return o=e.t0,e.next=14,J((0,a.default)({},t,{err:r,Component:q,props:o}));case 14:case"end":return e.stop()}},e,this)}))).apply(this,arguments)}t.default=F;var B=!0;function J(e){return $.apply(this,arguments)}function $(){return($=(0,i.default)(u.default.mark(function e(t){var n,r,o,l,s,f,p,h,v,y,g,_;return u.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.App,r=t.Component,o=t.props,l=t.err,s=t.emitter,f=void 0===s?H:s,o||!r||r===q||D.Component!==q){e.next=6;break}return h=(p=I).pathname,v=p.query,y=p.asPath,e.next=5,(0,m.loadGetInitialProps)(n,{Component:r,router:I,ctx:{err:l,pathname:h,query:v,asPath:y}});case 5:o=e.sent;case 6:r=r||D.Component,o=o||D.props,g=(0,a.default)({Component:r,err:l,router:I,headManager:N},o),D=g,f.emit("before-reactdom-render",{Component:r,ErrorComponent:q,appProps:g}),_=function(){var e=(0,i.default)(u.default.mark(function e(t){return u.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,U({App:n,err:t});case 3:e.next=8;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("Error while rendering error page: ",e.t0);case 8:case"end":return e.stop()}},e,this,[[0,5]])}));return function(t){return e.apply(this,arguments)}}(),b=c.default.createElement(w.default,{onError:_},c.default.createElement(n,g)),x=G,B&&"function"==typeof d.default.hydrate?(d.default.hydrate(b,x),B=!1):d.default.render(b,x),f.emit("after-reactdom-render",{Component:r,ErrorComponent:q,appProps:g});case 13:case"end":return e.stop()}var b,x},e,this)}))).apply(this,arguments)}},151:function(e,t,n){"use strict";e.exports=n(152)},152:function(e,t,n){"use strict"; 2 | /** @license React v16.5.2 3 | * schedule.production.min.js 4 | * 5 | * Copyright (c) Facebook, Inc. and its affiliates. 6 | * 7 | * This source code is licensed under the MIT license found in the 8 | * LICENSE file in the root directory of this source tree. 9 | */Object.defineProperty(t,"__esModule",{value:!0});var r=null,o=!1,a=!1,u="object"==typeof performance&&"function"==typeof performance.now,i={timeRemaining:u?function(){var e=m()-performance.now();return 0=T-n){if(!(-1!==A&&A<=n))return void(M||(M=!0,b(I)));e=!0}if(A=-1,n=C,C=null,null!==n){R=!0;try{n(e)}finally{R=!1}}}},!1);var I=function(e){M=!1;var t=e-T+S;tt&&(t=8),S=tn){o=a;break}a=a.next}while(a!==r);null===o?o=r:o===r&&(r=e,l()),(n=o.previous).next=o.previous=e,e.next=o,e.previous=n}return e},t.unstable_cancelScheduledWork=function(e){var t=e.next;if(null!==t){if(t===e)r=null;else{e===r&&(r=t);var n=e.previous;n.next=t,t.previous=n}e.next=e.previous=null}}},153:function(e,t,n){"use strict";var r=n(5);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n(27)),a=r(n(8)),u=r(n(9)),i={acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},l=function(){function e(){(0,a.default)(this,e),this.updatePromise=null}return(0,u.default)(e,[{key:"updateHead",value:function(e){var t=this,n=this.updatePromise=o.default.resolve().then(function(){n===t.updatePromise&&(t.updatePromise=null,t.doUpdateHead(e))})}},{key:"doUpdateHead",value:function(e){var t=this,n={};e.forEach(function(e){var t=n[e.type]||[];t.push(e),n[e.type]=t}),this.updateTitle(n.title?n.title[0]:null);["meta","base","link","style","script"].forEach(function(e){t.updateElements(e,n[e]||[])})}},{key:"updateTitle",value:function(e){var t;if(e){var n=e.props.children;t="string"==typeof n?n:n.join("")}else t="";t!==document.title&&(document.title=t)}},{key:"updateElements",value:function(e,t){var n=document.getElementsByTagName("head")[0],r=Array.prototype.slice.call(n.querySelectorAll(e+".next-head")),o=t.map(s).filter(function(e){for(var t=0,n=r.length;t0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(o(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(o(this,"Map"),0===e?0:e,t)}},r,!0)},207:function(e,t,n){var r=n(3);r(r.P+r.R,"Map",{toJSON:n(103)("Map")})},208:function(e,t,n){n(104)("Map")},209:function(e,t,n){n(105)("Map")}},[[113,1,0]]]); -------------------------------------------------------------------------------- /out/_next/static/runtime/webpack-42652fa8b82c329c0559.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(r){for(var n,l,f=r[0],i=r[1],a=r[2],c=0,s=[];cDeFi | Decentralizing Finance

An Open Community of Decentralized Finance Platforms

Join the Telegram

DeFi is a Movement

We saw an overlap in the problems that decentralized finance protocols were trying to solve and thought there would be no better way to tackle them then by forming an open community of like-minded projects.

Our Core Principles

1

Interoperability and Open Source

Members of DeFi take interoperability into account when building their projects. This helps strengthen the compounding effects of all our projects as a whole. Open sourcing helps us reach this goal by allowing us to collectively understand how all of our products can be woven together on a technical level.

2

Accessibility and Financial Inclusion

We strive to create a financial system that is accessible to anyone with an internet connection. We believe in a world where value flows freely, regardless of one’s geographic location.

3

Financial Transparency

We believe that financial services should not be built in opaque silos, but rather that market-level information should be transparent to all participants while still preserving individual privacy.

-------------------------------------------------------------------------------- /out/index/index.html: -------------------------------------------------------------------------------- 1 | DeFi | Decentralizing Finance

An Open Community of Decentralized Finance Platforms

Join the Telegram

DeFi is a Movement

We saw an overlap in the problems that decentralized finance protocols were trying to solve and thought there would be no better way to tackle them then by forming an open community of like-minded projects.

Our Core Principles

1

Interoperability and Open Source

Members of DeFi take interoperability into account when building their projects. This helps strengthen the compounding effects of all our projects as a whole. Open sourcing helps us reach this goal by allowing us to collectively understand how all of our products can be woven together on a technical level.

2

Accessibility and Financial Inclusion

We strive to create a financial system that is accessible to anyone with an internet connection. We believe in a world where value flows freely, regardless of one’s geographic location.

3

Financial Transparency

We believe that financial services should not be built in opaque silos, but rather that market-level information should be transparent to all participants while still preserving individual privacy.

-------------------------------------------------------------------------------- /out/static/Aeonik-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defi/site/c63b7053e9fa2709b9d6e0e9848f7aae1918e39c/out/static/Aeonik-Bold.ttf -------------------------------------------------------------------------------- /out/static/Aeonik-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defi/site/c63b7053e9fa2709b9d6e0e9848f7aae1918e39c/out/static/Aeonik-Regular.ttf -------------------------------------------------------------------------------- /out/static/dots_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defi/site/c63b7053e9fa2709b9d6e0e9848f7aae1918e39c/out/static/dots_dark.png -------------------------------------------------------------------------------- /out/static/dots_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defi/site/c63b7053e9fa2709b9d6e0e9848f7aae1918e39c/out/static/dots_light.png -------------------------------------------------------------------------------- /out/static/events/defi-summit-prague.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defi/site/c63b7053e9fa2709b9d6e0e9848f7aae1918e39c/out/static/events/defi-summit-prague.jpg -------------------------------------------------------------------------------- /out/static/events/defi-summit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defi/site/c63b7053e9fa2709b9d6e0e9848f7aae1918e39c/out/static/events/defi-summit.jpg -------------------------------------------------------------------------------- /out/static/telegram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defi/site/c63b7053e9fa2709b9d6e0e9848f7aae1918e39c/out/static/telegram.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@defi/site", 3 | "version": "0.1.0", 4 | "description": "DeFi community website", 5 | "main": "index.js", 6 | "repository": "https://github.com/defi/defi.github.io", 7 | "author": "DeFi Team", 8 | "license": "MIT", 9 | "dependencies": { 10 | "@zeit/next-typescript": "^1.1.1", 11 | "emotion": "^9.2.12", 12 | "emotion-normalize": "^8.0.0", 13 | "emotion-server": "^9.2.12", 14 | "next": "^7.0.2", 15 | "react": "^16.5.2", 16 | "react-dom": "^16.5.2", 17 | "react-emotion": "^9.2.12" 18 | }, 19 | "scripts": { 20 | "dev": "next", 21 | "build": "next build", 22 | "start": "next start", 23 | "deploy": "NODE_ENV=production rm -rf node_modules/.cache && next build && next export && touch out/.nojekyll && echo 'defi.network' > out/CNAME && git add out/ && git commit -m \"Deploy Next.js to gh-pages\" && git subtree push --prefix out origin gh-pages && git push origin master" 24 | }, 25 | "devDependencies": { 26 | "@types/next": "^7.0.3", 27 | "@types/react": "^16.4.18", 28 | "babel-plugin-emotion": "^9.2.11" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import Document, { Head, Main, NextScript } from "next/document"; 3 | import { extractCritical } from "emotion-server"; 4 | 5 | type Props = { 6 | styleTags: any; 7 | css: any; 8 | }; 9 | 10 | export default class MyDocument extends Document { 11 | static getInitialProps({ renderPage }: { renderPage: any }) { 12 | const page = renderPage((App: any) => (props: any) => ); 13 | const styles = extractCritical(page.html); 14 | return { ...page, ...styles }; 15 | } 16 | render() { 17 | return ( 18 | 19 | 20 | 24 | 25 | {this.props.styleTags} 26 |