├── .gitignore ├── .nvmrc ├── README.md ├── babel.config.js ├── docs ├── community-proposals.md ├── contact.md ├── contracts.md ├── fnd-subgraph.mdx ├── fnd.js.md ├── intro.md ├── nfte.md ├── queries │ ├── auctionsCountingDown │ │ ├── query.mdx │ │ └── result.mdx │ ├── auctionsWithNoBid │ │ ├── query.mdx │ │ └── result.mdx │ ├── example │ │ ├── query.mdx │ │ └── result.mdx │ └── nftsAndAuctionsByCreator │ │ ├── query.mdx │ │ └── result.mdx └── subgraph-examples.mdx ├── docusaurus.config.js ├── package.json ├── sidebars.js ├── src ├── components │ ├── BlockLink.js │ ├── ExternalLink.js │ ├── HomeFeatures.js │ ├── HomeFooter.js │ ├── HomeHeader.js │ ├── HomeHero.js │ ├── HomeProjects.js │ └── HomeQuestions.js ├── css │ └── custom.css ├── pages │ └── index.js └── utils │ └── theme.js ├── static ├── .nojekyll ├── fonts │ ├── FormularMono.woff │ ├── FormularMono.woff2 │ ├── Formular_Light.otf │ ├── Formular_Medium.otf │ ├── Formular_Mono.otf │ ├── Formular_Regular.otf │ ├── Foundation-Display.otf │ ├── Foundation-Display.woff │ ├── Foundation-Display.woff2 │ ├── NeuePixelGrotesk_Regular.woff │ ├── Roobert-Medium.woff │ ├── Roobert-Medium.woff2 │ ├── Roobert-MediumItalic.woff │ ├── Roobert-MediumItalic.woff2 │ ├── Roobert-SemiBold.woff │ └── Roobert-SemiBold.woff2 └── img │ ├── circle.svg │ ├── composability.svg │ ├── favicon.ico │ ├── fnd-dev-logo.svg │ ├── fnd.svg │ ├── interoperability.svg │ ├── logo.svg │ ├── nfte.jpg │ ├── schema.png │ ├── showtime.jpg │ ├── square.svg │ ├── terminal.jpg │ ├── triangle.svg │ ├── undraw_docusaurus_mountain.svg │ ├── undraw_docusaurus_react.svg │ └── undraw_docusaurus_tree.svg ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 12.18.3 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![FND Github-Docs](https://user-images.githubusercontent.com/14855515/161173790-970fe580-fe58-4a6d-8934-2d501e2b1299.png) 2 | 3 | # Website 4 | 5 | This website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website generator. 6 | 7 | ## Installation 8 | 9 | ```console 10 | yarn install 11 | ``` 12 | 13 | ## Local Development 14 | 15 | ```console 16 | yarn start 17 | ``` 18 | 19 | This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server. 20 | 21 | ## Build 22 | 23 | ```console 24 | yarn build 25 | ``` 26 | 27 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 28 | 29 | ## Deployment 30 | 31 | ```console 32 | GIT_USER= USE_SSH=true yarn deploy 33 | ``` 34 | 35 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. 36 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /docs/community-proposals.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: community-proposals 3 | title: Community proposals 4 | sidebar_label: Community proposals 5 | slug: /community-proposals 6 | --- 7 | 8 | ## tokenCreator 9 | 10 | We support the `tokenCreator` method to help ensure more secondary marketplaces honor creator fees, and we would like to encourage other NFT projects to do the same. 11 | 12 | `tokenCreator` would be needed both for secondary markets but also for terminal and other platforms trying to reliably get the of creator 13 | 14 | We're thinking of proposing a new EIP with this change. Let us know your thoughts in the [Discord](http://discord.foundation.app)! 15 | 16 | ```solidity 17 | function tokenCreator(uint256 tokenId) public view returns (address payable); 18 | ``` 19 | 20 | ## Fees 21 | 22 | The Foundation contracts follow the OpenSea spec, which means in their next version that honors fees onchain, it guarantees those fees go to creators. 23 | 24 | `HasSecondarySaleFees` is: 25 | 26 | ```solidity 27 | function getFeeRecipients(uint256 id) public view virtual returns (address payable[] memory); 28 | 29 | function getFeeBps(uint256 id) public view virtual returns (uint256[] memory); 30 | ``` 31 | 32 | and the interface is registered with `ERC165`. 33 | 34 | 35 | We have some ideas though for an EIP that would make for a more efficient solution, and we're thinking of trying to make this an NFT community standard. What do you think? Feel free to join the conversation in the [Discord](http://discord.foundation.app). -------------------------------------------------------------------------------- /docs/contact.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: contact 3 | title: Contact 4 | sidebar_label: Contact 5 | slug: /contact 6 | --- 7 | 8 | [Join the Discord](https://discord.foundation.app/) if you have any questions or suggestions. We are always looking to make 3rd-party applications even easier to build! 9 | -------------------------------------------------------------------------------- /docs/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: contracts 3 | title: Contracts 4 | sidebar_label: Contracts 5 | slug: /contracts 6 | --- 7 | 8 | Verification coming soon. Open sourcing coming soon. 9 | 10 | ### **NFT** 11 | 12 | ``` 13 | 0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405 14 | ``` 15 | 16 | Here's a link to the [Foundation NFT contract](https://etherscan.io/token/0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405) on Etherscan. 17 | 18 | Our contract implements the ERC721 standard. More info [here](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/). 19 | 20 | Our NFT contract also includes an extra method that lets you (a person, a bot, or a contract) get the creator of the NFT. This means that the creators can be paid automatically when sales are made using the Foundation market contract. 21 | 22 | ### **Market** 23 | 24 | ``` 25 | 0xcDA72070E455bb31C7690a170224Ce43623d0B6f 26 | ``` 27 | 28 | Here's a link to the [Foundation market contract](https://etherscan.io/address/0xcDA72070E455bb31C7690a170224Ce43623d0B6f) on Etherscan. 29 | 30 | This contract implements on-chain reserve auction functionality. 31 | 32 | Foundation NFTs can be bought and sold using this market contract or any NFT market contract on Ethereum. 33 | 34 | Using this market contract, both NFTs minted through Foundation and NFTs minted elsewhere can be bought and sold in a permissionless way. -------------------------------------------------------------------------------- /docs/fnd-subgraph.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | id: fnd-subgraph 3 | title: FND Subgraph 4 | sidebar_label: FND Subgraph 5 | slug: /fnd-subgraph 6 | --- 7 | 8 | import Tabs from '@theme/Tabs'; 9 | import TabItem from '@theme/TabItem'; 10 | 11 | All of the data from the Foundation protocol is public and free to use. 12 | 13 | You can build your own UI with whatever features you would like using the same data. 14 | 15 | There are "subgraphs" for Foundation data on the Ethereum mainnet and the Goerli testnet. 16 | 17 | These were built using [The Graph](https://thegraph.com/). The Graph uses [GraphQL](https://graphql.org/), a query language for data. 18 | 19 | ### 🌐 [mainnet subgraph](https://thegraph.com/explorer/subgraph/f8n/fnd) 🌐 20 | 21 | Our mainnet subgraph contains all the info you can find on [foundation.app](https://foundation.app). (We use it too!) 22 | 23 | ### 🚧 [goerli subgraph](https://thegraph.com/explorer/subgraph/f8n/fnd-goerli) 🚧 24 | 25 | Our goerli subgraph points to the Goerli testnet - the data you'll find there contains a lot of junk, but it serves as a good testing ground. 26 | 27 | ## Getting started 28 | 29 | Here's an example query using the Foundation subgraph: 30 | 31 | import ExampleQuery from './queries/example/query.mdx'; 32 | import ExampleResult from './queries/example/result.mdx'; 33 | 34 | 40 | 41 | 42 | 43 | 44 | :::tip 45 | If you learn best by checking out examples, we recommend jumping ahead to the [examples](subgraph-examples) section. If you learn better by starting with the fundamentals and building from there, please read on below. 46 | ::: 47 | 48 | ## Table structure 49 | 50 | Each of the fields in the Foundation subgraph includes a brief comment you can see on the dashboard to explain the data it holds. We aim to cross-link between entities where possible. e.g.: 51 | 52 | Subgraph schema 53 | 54 | If there's data you need that's not easily accessible or queryable, just let us know! 55 | 56 | At a high level here is the data we store today: 57 | 58 | ### User-related info 59 | 60 | #### **Account** 61 | 62 | Every address that interacts with Foundation has an associated `Account` entity. 63 | 64 | #### **Creator** 65 | 66 | Creators includes any account that has minted an NFT on the Foundation platform. 67 | 68 | ### NFT-related info 69 | 70 | #### **NftContract** 71 | 72 | This entity holds any information that's common to all NFTs minted on Foundation. 73 | 74 | #### **Nft** 75 | 76 | Each individual NFT minted on Foundation. Note that NFT metadata such as name and description are not currently supported on the Foundation subgraph—in order to read this information you can read the metadata JSON from `https://ipfs.io/ipfs/${nft.tokenIPFSPath}`. 77 | 78 | For example, 79 | 80 | https://ipfs.io/ipfs/QmcsepfMDFh2udUQWtvcnZeARNFFCPA1n2WRWUH1ysWv4W/metadata.json 81 | 82 | ...returns: 83 | 84 | ```json 85 | { 86 | "name":"Ancient Future", 87 | "description":"Here at the nexus of infinity, we inscribe ourselves upon the sacred discs. For We are the Ancients of a Future Civilization. \n\nSingle Edition VHS Text Art by Sarah Zucker, 2020. Created in studio with Hi8 Camcorder Title Feedback, digital animation and analog processing on VHS. Filmed in 4K from vintage CRT TV screen.\n", 88 | "image":"ipfs://ipfs/QmXRmfvvenqr4eJ62vjxvYqc5eWp6i2MjpkTh9VZcLiuTi/nft.mp4" 89 | } 90 | ``` 91 | 92 | And the image for this NFT can be retrieved from here, using the data contained in the value for the `image` key above: 93 | 94 | https://ipfs.io/ipfs/QmXRmfvvenqr4eJ62vjxvYqc5eWp6i2MjpkTh9VZcLiuTi/nft.mp4 95 | 96 | Even if it's a video, the key to use is `image`. 97 | 98 | #### **NftTransfer** 99 | 100 | Data about every transfer event for NFTs minted on Foundation. 101 | 102 | ### Market-related info 103 | 104 | #### **NftAccountApproval** 105 | 106 | Tracks account-level approvals granted. For token specific approvals, see `nft.approvedSpender`. 107 | 108 | #### **NftMarketContract** 109 | 110 | Configuration that applies to all auctions listed on Foundation. 111 | 112 | #### **NftMarketAuction** 113 | 114 | Each individual auction listed on Foundation. If an auction is re-listed (after a sale or after unlisting by the seller), it will appear as a new unique auction. 115 | 116 | #### **NftMarketBid** 117 | 118 | All individual bids placed on Foundation. 119 | 120 | ## The auction lifecycle 121 | 122 | Currently the only auction model we support is Reserve Auctions. More will be added in the future. 123 | 124 | ### Initially listed 125 | 126 | When an NFT is initially listed, its state in the Foundation subgraph will be `nftMarketAuction.status=Open` with `nftMarketAuction.highestBid=null`. 127 | 128 | ### Reserve price met 129 | Once the reserve price is met, `nftMarketAuction.highestBid!=null`. 130 | 131 | ### End time 132 | Anyone can place bids on auctions until the end time has passed. So `nftMarketAuction.status=Open and nftMarketAuction.dateEnding>nowInSeconds` means an auction is accepting bids and `nftMarketAuction.status=Open and nftMarketAuction.dateEnding<=nowInSeconds` indicates that the auction countdown has completed and bids are no longer being accepted. 133 | 134 | Note that the end time for an auction may change, because placing a bit in the last 15 minutes resets the remaining time to 15 minutes to prevent sniping. 135 | 136 | ### NFT claimed 137 | Since Ethereum requires a user-initiated transaction in order to react to the changing of time, users must claim their NFT after an auction has closed. Technically anyone can do this, but through the foundation.app UI we encourage the bidder to do so (and the foundation.app UI will allow sellers to complete the process as well). But it's on Ethereum, so anyone is free to do it if they please. 138 | 139 | Once the NFT has been claimed, the auction status changes to `nftMarketAuction.status=Finalized`. `Finalized` indicates that the NFT has been transferred to the auction winner and the seller has received funds from the sale. -------------------------------------------------------------------------------- /docs/fnd.js.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: fnd.js 3 | title: fnd.js 4 | sidebar_label: fnd.js 5 | slug: /fnd.js 6 | --- 7 | 8 | _Coming soon_ -------------------------------------------------------------------------------- /docs/intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: intro 3 | title: Intro 4 | sidebar_label: Intro 5 | slug: / 6 | --- 7 | 8 | 9 | It's simple to get started building new experiences using the Foundation building blocks. 10 | 11 | Foundation's tech is open, decentralized, and permissionless. 12 | 13 | You could make an Instagram-like experience with NFTs. Or you could make more of a financial app for those trading NFTs. Really pretty much anything - people are actively reimagining the internet collabortively as you read this. 14 | 15 | No need to ask anyone's permission or pay us to get an API key or anything—the data is all free and publicly available. You can build an app on the Foundation contracts and subgraph today, your app will live on no matter what. NFTs live on a blockchain, always available via Ethereum. Subgraph data is managed by The Graph's community and does not depend on Foundation in any way. It works because other people are supporting it. 16 | 17 | Don't like a feature of the Foundation app? You can create your own. 18 | 19 | Let's start by walking through Foundation's subgraphs. 20 | 21 | You can use the data from the Foundation subgraphs via GraphQL to build a UI that displays Foundation NFTs, tracks the onchain activity in the Foundation market contract, etc. -------------------------------------------------------------------------------- /docs/nfte.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: nfte 3 | title: Embedding NFTs 4 | sidebar_label: Embedding NFTs 5 | slug: /embedding 6 | --- 7 | 8 | :::info 9 | This page contains info about a 3rd-party library that works equally well with Foundation NFTs and those from other NFT platforms. More info here: [nfte.app](https://nfte.app/) 10 | ::: 11 | 12 | ## npm package 13 | 14 | _(For websites and apps built with React)_ 15 | 16 | Install with `npm i @nfte/react` or `yarn add @nfte/react` 17 | 18 | ```typescript 19 | import { NFTE } from '@nfte/react'; 20 | 21 | 22 | ``` 23 | 24 | --- 25 | 26 | ## HTML / JS snippet 27 | 28 | ```html 29 |
30 | 34 | ``` 35 | -------------------------------------------------------------------------------- /docs/queries/auctionsCountingDown/query.mdx: -------------------------------------------------------------------------------- 1 | ```graphql 2 | query getAuctionsInProgress($nowInSeconds: BigInt!) { 3 | nftMarketAuctions( 4 | where: {status: Open, dateEnding_gt: $nowInSeconds} 5 | ) { 6 | nft { 7 | tokenId 8 | tokenIPFSPath 9 | } 10 | reservePriceInETH 11 | } 12 | } 13 | ``` -------------------------------------------------------------------------------- /docs/queries/auctionsCountingDown/result.mdx: -------------------------------------------------------------------------------- 1 | ```json 2 | { 3 | "data": { 4 | "nftMarketAuctions": [ 5 | { 6 | "nft": { 7 | "tokenIPFSPath": "QmSBo9HxsRKHmQGQ71uCJithwY8JWULUfUveYnH1gDW8ft/metadata.json", 8 | "tokenId": "118" 9 | }, 10 | "reservePriceInETH": "0.5" 11 | }, 12 | { 13 | "nft": { 14 | "tokenIPFSPath": "QmVpQHP1Csq5J7fhvGyC559kSCnCiV2f1RoUAgdr5z3bCo/metadata.json", 15 | "tokenId": "165" 16 | }, 17 | "reservePriceInETH": "0.37" 18 | }, 19 | // ... 20 | ] 21 | } 22 | } 23 | ``` -------------------------------------------------------------------------------- /docs/queries/auctionsWithNoBid/query.mdx: -------------------------------------------------------------------------------- 1 | ```graphql 2 | query getAuctionsWithoutABid { 3 | nftMarketAuctions( 4 | where: {status: Open, highestBid: null} 5 | ) { 6 | nft { 7 | tokenId 8 | tokenIPFSPath 9 | } 10 | reservePriceInETH 11 | } 12 | } 13 | ``` -------------------------------------------------------------------------------- /docs/queries/auctionsWithNoBid/result.mdx: -------------------------------------------------------------------------------- 1 | ```json 2 | { 3 | "data": { 4 | "nftMarketAuctions": [ 5 | { 6 | "nft": { 7 | "tokenIPFSPath": "Qmc3AhjGiqVdbw69MxMLQXb7Wcdjmkaeqz4NcZzWbmvxBo/metadata.json", 8 | "tokenId": "113" 9 | }, 10 | "reservePriceInETH": "1" 11 | }, 12 | { 13 | "nft": { 14 | "tokenIPFSPath": "QmWJkAhWwYnJ6yupJFobYKEMneZr1iR8UvMzQ1HpN1ygG9/metadata.json", 15 | "tokenId": "114" 16 | }, 17 | "reservePriceInETH": "0.2" 18 | }, 19 | // ... 20 | ] 21 | } 22 | } 23 | ``` -------------------------------------------------------------------------------- /docs/queries/example/query.mdx: -------------------------------------------------------------------------------- 1 | ```graphql 2 | { 3 | nfts(where: {tokenId: "1" }) { 4 | owner { 5 | id 6 | } 7 | } 8 | } 9 | ``` -------------------------------------------------------------------------------- /docs/queries/example/result.mdx: -------------------------------------------------------------------------------- 1 | ```json 2 | { 3 | "data": { 4 | "nfts": [ 5 | { 6 | "owner": { 7 | "id": "0xcf0949bf6d2adf8032260fd08039c879cf71c128" 8 | } 9 | } 10 | ] 11 | } 12 | } 13 | ``` -------------------------------------------------------------------------------- /docs/queries/nftsAndAuctionsByCreator/query.mdx: -------------------------------------------------------------------------------- 1 | ```graphql 2 | query getNftsByCreator($creator: String!) { 3 | creator(id: $creator) { 4 | nfts { 5 | tokenId 6 | mostRecentAuction { 7 | status 8 | dateEnding 9 | reservePriceInETH 10 | highestBid { 11 | amountInETH 12 | } 13 | } 14 | } 15 | } 16 | } 17 | ``` -------------------------------------------------------------------------------- /docs/queries/nftsAndAuctionsByCreator/result.mdx: -------------------------------------------------------------------------------- 1 | ```json 2 | { 3 | "data": { 4 | "creator": { 5 | "nfts": [ 6 | { 7 | "mostRecentAuction": { 8 | "dateEnding": "1612462892", 9 | "highestBid": { 10 | "amountInETH": "0.5" 11 | }, 12 | "reservePriceInETH": "0.37305", 13 | "status": "Finalized" 14 | }, 15 | "tokenId": "11" 16 | }, 17 | { 18 | "mostRecentAuction": { 19 | "dateEnding": null, 20 | "highestBid": null, 21 | "reservePriceInETH": "1", 22 | "status": "Open" 23 | }, 24 | "tokenId": "120" 25 | }, 26 | // ... 27 | ] 28 | } 29 | } 30 | } 31 | ``` 32 | -------------------------------------------------------------------------------- /docs/subgraph-examples.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | id: subgraph-examples 3 | title: Subgraph Examples 4 | sidebar_label: Subgraph Examples 5 | slug: /subgraph-examples 6 | --- 7 | 8 | import Tabs from '@theme/Tabs'; 9 | import TabItem from '@theme/TabItem'; 10 | 11 | We recommend using [Insomnia](https://insomnia.rest/) or The Graph's website for testing queries. 12 | 13 | When using Insomnia, you can `POST` a `GraphQL` request to `https://api.thegraph.com/subgraphs/name/f8n/fnd`. 14 | 15 | ## Auctions that have not received a bid 16 | 17 | import AuctionsWithNoBidQuery from './queries/auctionsWithNoBid/query.mdx'; 18 | import AuctionsWithNoBidResult from './queries/auctionsWithNoBid/result.mdx'; 19 | 20 | 26 | 27 | 28 | 29 | 30 | ## Auctions that are currently counting down 31 | 32 | import AuctionsCountingDownQuery from './queries/auctionsCountingDown/query.mdx'; 33 | import AuctionsCountingDownResult from './queries/auctionsCountingDown/result.mdx'; 34 | 35 | 41 | 42 | 43 | 44 | 45 | 46 | ## NFTs and their auctions by a specific creator 47 | 48 | import NFTsAndAuctionsCountingDownQuery from './queries/nftsAndAuctionsByCreator/query.mdx'; 49 | import NFTsAndAuctionsCountingDownResult from './queries/nftsAndAuctionsByCreator/result.mdx'; 50 | 51 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /docusaurus.config.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | 3 | module.exports = { 4 | title: "Foundation", 5 | tagline: 6 | "Our Ethereum infrastructure is open, permissionless, and transparent because our future is collective.", 7 | url: "https://fnd.dev", 8 | baseUrl: "/", 9 | onBrokenLinks: "throw", 10 | onBrokenMarkdownLinks: "warn", 11 | favicon: "img/fnd.svg", 12 | organizationName: "f8n", // Your GitHub org name. 13 | projectName: "f8n-contracts", // Your repo name. 14 | themeConfig: { 15 | navbar: { 16 | logo: { 17 | alt: "Foundation Logo", 18 | src: "img/fnd.svg", 19 | }, 20 | items: [ 21 | { 22 | to: "docs/", 23 | activeBasePath: "docs", 24 | label: "Docs", 25 | position: "left", 26 | }, 27 | { 28 | to: "https://discord.foundation.app", 29 | label: "Discord", 30 | position: "left", 31 | }, 32 | { 33 | href: "https://github.com/f8n", 34 | label: "GitHub", 35 | position: "right", 36 | }, 37 | ], 38 | }, 39 | footer: { 40 | // links: [ 41 | // { 42 | // title: 'Foundation', 43 | // items: [ 44 | // { 45 | // label: 'Docs', 46 | // to: 'docs/', 47 | // }, 48 | // ], 49 | // }, 50 | // { 51 | // title: 'Connect', 52 | // items: [ 53 | // { 54 | // label: 'Twitter', 55 | // href: 'https://twitter.com/withFND', 56 | // }, 57 | // { 58 | // label: 'Discord', 59 | // href: 'https://discord.foundation.app', 60 | // }, 61 | // { 62 | // label: 'Instagram', 63 | // href: 'https://www.instagram.com/withfoundation/', 64 | // }, 65 | // ], 66 | // }, 67 | // { 68 | // title: 'More', 69 | // items: [ 70 | // { 71 | // label: 'Blog', 72 | // to: 'https://foundation.app/blog', 73 | // }, 74 | // { 75 | // label: 'GitHub', 76 | // href: 'https://github.com/f8n', 77 | // }, 78 | // ], 79 | // }, 80 | // ], 81 | copyright: `foundation.app`, 82 | }, 83 | }, 84 | presets: [ 85 | [ 86 | "@docusaurus/preset-classic", 87 | { 88 | docs: { 89 | sidebarPath: require.resolve("./sidebars.js"), 90 | // Please change this to your repo. 91 | editUrl: "https://github.com/f8n/f8n-docs/edit/main/", 92 | }, 93 | theme: { 94 | customCss: require.resolve("./src/css/custom.css"), 95 | }, 96 | }, 97 | ], 98 | ], 99 | }; 100 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@f8n/f8n-docs", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "docusaurus": "docusaurus", 7 | "start": "docusaurus start", 8 | "build": "docusaurus build", 9 | "swizzle": "docusaurus swizzle", 10 | "deploy": "docusaurus deploy", 11 | "serve": "docusaurus serve", 12 | "clear": "docusaurus clear" 13 | }, 14 | "dependencies": { 15 | "@docusaurus/core": "2.0.0-alpha.70", 16 | "@docusaurus/preset-classic": "2.0.0-alpha.70", 17 | "@emotion/react": "^11.1.5", 18 | "@mdx-js/react": "^1.6.21", 19 | "clsx": "^1.1.1", 20 | "minireset.css": "^0.0.7", 21 | "react": "^16.8.4", 22 | "react-dom": "^16.8.4", 23 | "theme-ui": "^0.3.5" 24 | }, 25 | "browserslist": { 26 | "production": [ 27 | ">0.5%", 28 | "not dead", 29 | "not op_mini all" 30 | ], 31 | "development": [ 32 | "last 1 chrome version", 33 | "last 1 firefox version", 34 | "last 1 safari version" 35 | ] 36 | }, 37 | "devDependencies": { 38 | "@docusaurus/module-type-aliases": "^2.0.0-alpha.70", 39 | "@tsconfig/docusaurus": "^1.0.2", 40 | "@types/react": "^17.0.1", 41 | "@types/react-helmet": "^6.1.0", 42 | "@types/react-router-dom": "^5.1.7", 43 | "file-loader": "^6.2.0", 44 | "typescript": "^4.1.3" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /sidebars.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | someSidebar: { 3 | Foundation: ['intro', 'fnd-subgraph', 'subgraph-examples', 'contracts', 'fnd.js', 'nfte', 'community-proposals'], 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /src/components/BlockLink.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx } from "theme-ui"; 3 | 4 | import Link from "@docusaurus/Link"; 5 | 6 | import useBaseUrl from "@docusaurus/useBaseUrl"; 7 | import { transitions } from "../utils/theme"; 8 | 9 | export default function BlockLink(props) { 10 | const { children, linkUrl, externalUrl, className } = props; 11 | 12 | const sx = { 13 | borderColor: "#666 !important", 14 | border: "solid 1px", 15 | color: "white.100", 16 | display: "block", 17 | borderRadius: 10, 18 | transition: transitions.smooth.fast, 19 | willChange: "transform", 20 | "&:hover": { 21 | color: "white.100", 22 | textDecoration: "none", 23 | }, 24 | "@media (hover: hover)": { 25 | "&:hover": { 26 | backgroundColor: "black.90", 27 | transform: "translateY(-7px) scale(1.008)", 28 | borderColor: "#fff !important", 29 | }, 30 | "&:active": { 31 | transform: "translateY(0)", 32 | }, 33 | }, 34 | }; 35 | 36 | if (externalUrl) { 37 | return ( 38 | 39 | {children} 40 | 41 | ); 42 | } 43 | 44 | return ( 45 | 46 | {children} 47 | 48 | ); 49 | } 50 | -------------------------------------------------------------------------------- /src/components/ExternalLink.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx } from "theme-ui"; 3 | 4 | export default function ExternalLink(props) { 5 | const { children, href, className } = props; 6 | return ( 7 | 20 | {children} 21 | 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /src/components/HomeFeatures.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx, Grid, Flex, Box, Text, Heading } from "theme-ui"; 3 | import React from "react"; 4 | 5 | import BlockLink from "./BlockLink"; 6 | 7 | const features = [ 8 | { 9 | title: "subgraphs", 10 | imageUrl: "/img/triangle.svg", 11 | description: ( 12 | <> 13 | An index of all Foundation market data and information that is easily 14 | accessible via a GraphQL API. 15 | 16 | ), 17 | linkUrl: "docs/fnd-subgraph", 18 | }, 19 | { 20 | title: "contracts", 21 | imageUrl: "/img/circle.svg", 22 | description: <>Foundation’s smart contracts on the Ethereum blockchain., 23 | // TODO: comment me back in to enable the link 24 | // linkUrl: "docs/contracts", 25 | }, 26 | { 27 | title: "fnd.js", 28 | imageUrl: "/img/square.svg", 29 | description: ( 30 | <> 31 | A lightweight package giving you everything you need to start building 32 | experiences on top of Foundation. 33 | 34 | ), 35 | // TODO: comment me back in to enable the link 36 | // linkUrl: "docs/fnd.js", 37 | }, 38 | ]; 39 | 40 | export default function HomeFeatures() { 41 | return ( 42 | 43 | {features.map((feature) => ( 44 | 51 | {!feature.linkUrl && } 52 | 61 | 62 | {feature.imageUrl && ( 63 | 64 | {feature.title} 69 | 70 | )} 71 | 72 | 80 | {feature.title} 81 | 82 | 83 | {feature.description} 84 | 85 | 86 | 87 | 88 | 89 | ))} 90 | 91 | ); 92 | } 93 | 94 | function ComingSoonTag() { 95 | return ( 96 | 109 | coming soon 110 | 111 | ); 112 | } 113 | -------------------------------------------------------------------------------- /src/components/HomeFooter.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx, Flex } from "theme-ui"; 3 | import ExternalLink from "./ExternalLink"; 4 | 5 | export default function HomeFooter() { 6 | return ( 7 | 11 | github 12 | twitter 13 | 14 | discord 15 | 16 | 20 | foundation.app 21 | 22 | 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /src/components/HomeHeader.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx, Box } from "theme-ui"; 3 | 4 | export default function HomeHeader() { 5 | return ( 6 | 7 | 8 | 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /src/components/HomeHero.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx, Grid, Box, Heading, Text, Button } from "theme-ui"; 3 | 4 | import Link from "@docusaurus/Link"; 5 | import useBaseUrl from "@docusaurus/useBaseUrl"; 6 | 7 | export default function HomeHero() { 8 | return ( 9 | 10 | 11 | Our community is creating the building blocks of the new creative 12 | economy. 13 | 14 | 15 | 16 | Our Ethereum infrastructure is open, permissionless, and transparent because our future is collective. 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /src/components/HomeProjects.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx, Box, Heading, Text, Grid, Flex } from "theme-ui"; 3 | import BlockLink from "./BlockLink"; 4 | 5 | const projects = [ 6 | { 7 | title: "Terminal_", 8 | description: 9 | "A third party explorer of Foundation’s data. Culture’s bloomberg terminal.", 10 | imageUrl: "/img/terminal.jpg", 11 | externalUrl: "https://fnd.info", 12 | label: "fnd.info ↗", 13 | }, 14 | { 15 | title: "Showtime", 16 | description: 17 | "Showcase your Foundation NFTs alongside other NFT collections.", 18 | imageUrl: "/img/showtime.jpg", 19 | externalUrl: "https://tryshowtime.com/c/fnd", 20 | label: "tryshowtime.com ↗", 21 | }, 22 | { 23 | title: "NFTE", 24 | description: "Easily embed Foundation NFTs on a website via HTML or React.", 25 | imageUrl: "/img/nfte.jpg", 26 | externalUrl: "https://nfte.app", 27 | label: "nfte.app ↗", 28 | }, 29 | ]; 30 | 31 | export default function HomeProjects() { 32 | return ( 33 | 34 | Projects already integrating Foundation 35 | 36 | {projects.map((project) => ( 37 | 47 | 48 | 52 | 53 | 54 | 55 | {project.title} 56 | {project.description} 57 | 58 | 59 | 66 | {project.label} 67 | 68 | 69 | ))} 70 | 71 | 72 | ); 73 | } 74 | -------------------------------------------------------------------------------- /src/components/HomeQuestions.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx, Box, Heading, Text, Grid, Button } from "theme-ui"; 3 | import Link from "@docusaurus/Link"; 4 | import useBaseUrl from "@docusaurus/useBaseUrl"; 5 | import ExternalLink from "./ExternalLink"; 6 | 7 | export default function HomeQuestions() { 8 | return ( 9 | 10 | 11 | Any questions? 12 | 13 | If you’re looking to build something on Foundation, make sure you join 14 | the Discord and check out the devs section. 15 | 16 | 17 | 18 | 19 | 20 | 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /src/css/custom.css: -------------------------------------------------------------------------------- 1 | /* stylelint-disable docusaurus/copyright-header */ 2 | /** 3 | * Any CSS included here will be global. The classic template 4 | * bundles Infima by default. Infima is a CSS framework designed to 5 | * work well for content-centric websites. 6 | */ 7 | 8 | /* You can override the default Infima variables here. */ 9 | :root { 10 | --ifm-color-primary: #ec0864; 11 | --ifm-color-primary-dark: #d4075a; 12 | --ifm-color-primary-darker: #c90755; 13 | --ifm-color-primary-darkest: #a50646; 14 | --ifm-color-primary-light: #f71570; 15 | --ifm-color-primary-lighter: #f72178; 16 | --ifm-color-primary-lightest: #f9458d; 17 | --ifm-code-font-size: 95%; 18 | /* --ifm-background-color: #000000; 19 | --ifm-background-surface-color: #000000; 20 | --collapse-button-bg-color-dark: #000000; 21 | --ifm-hero-background-color: #18191a; */ 22 | } 23 | 24 | .docusaurus-highlight-code-line { 25 | background-color: rgb(77, 119, 246); 26 | display: block; 27 | margin: 0 calc(-1 * var(--ifm-pre-padding)); 28 | padding: 0 var(--ifm-pre-padding); 29 | } 30 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx, ThemeProvider, Box, Grid } from "theme-ui"; 3 | import { Global, css } from "@emotion/react"; 4 | import React from "react"; 5 | 6 | import Layout from "@theme/Layout"; 7 | 8 | import theme from "../utils/theme"; 9 | import "minireset.css"; 10 | 11 | import HomeHero from "../components/HomeHero"; 12 | import HomeHeader from "../components/HomeHeader"; 13 | import HomeFeatures from "../components/HomeFeatures"; 14 | import HomeQuestions from "../components/HomeQuestions"; 15 | import HomeProjects from "../components/HomeProjects"; 16 | import HomeFooter from "../components/HomeFooter"; 17 | 18 | function Home() { 19 | return ( 20 | <> 21 | 22 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | ); 63 | } 64 | 65 | export default Home; 66 | -------------------------------------------------------------------------------- /src/utils/theme.js: -------------------------------------------------------------------------------- 1 | const roobertFontStack = `"Roobert", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"`; 2 | 3 | const formularFontStack = `"Formular Mono", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace`; 4 | 5 | export const easing = { 6 | bouncy: { 7 | string: "cubic-bezier(0.68, -0.55, 0.265, 1.55)", 8 | array: [0.68, -0.55, 0.265, 1.55], 9 | }, 10 | smooth: { 11 | string: "cubic-bezier(0.23, 1, 0.32, 1)", 12 | array: [0.23, 1, 0.32, 1], 13 | }, 14 | }; 15 | 16 | export const transitions = { 17 | smooth: { 18 | fast: `all 300ms ${easing.smooth.string}`, 19 | medium: `all 600ms ${easing.smooth.string}`, 20 | slow: `all 900ms ${easing.smooth.string}`, 21 | snail: `all 1200ms ${easing.smooth.string}`, 22 | }, 23 | }; 24 | 25 | export default { 26 | buttons: { 27 | primary: { 28 | backgroundColor: "transparent", 29 | fontFamily: formularFontStack, 30 | borderColor: "#666 !important", 31 | border: "solid 1px", 32 | color: "white.100", 33 | borderRadius: 999, 34 | minHeight: 60, 35 | paddingX: 40, 36 | textAlign: "center", 37 | fontSize: [1, null, 2], 38 | letterSpacing: 1.44, 39 | transition: transitions.smooth.fast, 40 | willChange: "borderColor, transform", 41 | cursor: "pointer", 42 | "@media (hover: hover)": { 43 | "&:hover": { 44 | transform: "translateY(-4px)", 45 | borderColor: "#fff !important", 46 | }, 47 | }, 48 | }, 49 | }, 50 | text: { 51 | heading: { 52 | fontSize: [20, null, 24], 53 | fontFamily: "monospace", 54 | fontWeight: "body", 55 | letterSpacing: 1.44, 56 | lineHeight: [1.6, null, 1.9], 57 | }, 58 | display: { 59 | fontSize: [36, 48, 64, 86], 60 | letterSpacing: [-0.5, null, null, -2], 61 | lineHeight: [1, null, 0.95], 62 | maxWidth: 1080, 63 | }, 64 | }, 65 | colors: { 66 | text: "#000", 67 | background: "#fff", 68 | primary: "#07c", 69 | black: { 70 | 100: "#000000", 71 | 95: "#0D0D0D", 72 | 90: "#1A1A1A", 73 | 80: "#333333", 74 | 70: "#4D4D4D", 75 | 60: "#666666", 76 | 50: "#7F7F7F", 77 | 40: "#999999", 78 | 30: "#B3B3B3", 79 | 20: "#CCCCCC", 80 | 10: "#E6E6E6", 81 | 5: "#F2F2F2", 82 | }, 83 | white: { 84 | 100: "#FFFFFF", 85 | }, 86 | }, 87 | fonts: { 88 | body: roobertFontStack, 89 | monospace: formularFontStack, 90 | heading: roobertFontStack, 91 | }, 92 | fontSizes: [12, 14, 16, 20, 24, 32, 48, 64], 93 | fontWeights: { 94 | body: 400, 95 | heading: 600, 96 | bold: 600, 97 | }, 98 | lineHeights: { 99 | body: [1.7, null, 1.9], 100 | heading: 1.125, 101 | }, 102 | letterSpacings: { 103 | body: "normal", 104 | caps: "0.2em", 105 | }, 106 | styles: { 107 | root: { 108 | fontFamily: "monospace", 109 | fontWeight: "body", 110 | backgroundColor: "black.100", 111 | fontSize: [1, null, 2], 112 | lineHeight: [1.7, null, 1.9], 113 | color: "white.100", 114 | }, 115 | }, 116 | }; 117 | -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/.nojekyll -------------------------------------------------------------------------------- /static/fonts/FormularMono.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/FormularMono.woff -------------------------------------------------------------------------------- /static/fonts/FormularMono.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/FormularMono.woff2 -------------------------------------------------------------------------------- /static/fonts/Formular_Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Formular_Light.otf -------------------------------------------------------------------------------- /static/fonts/Formular_Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Formular_Medium.otf -------------------------------------------------------------------------------- /static/fonts/Formular_Mono.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Formular_Mono.otf -------------------------------------------------------------------------------- /static/fonts/Formular_Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Formular_Regular.otf -------------------------------------------------------------------------------- /static/fonts/Foundation-Display.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Foundation-Display.otf -------------------------------------------------------------------------------- /static/fonts/Foundation-Display.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Foundation-Display.woff -------------------------------------------------------------------------------- /static/fonts/Foundation-Display.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Foundation-Display.woff2 -------------------------------------------------------------------------------- /static/fonts/NeuePixelGrotesk_Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/NeuePixelGrotesk_Regular.woff -------------------------------------------------------------------------------- /static/fonts/Roobert-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Roobert-Medium.woff -------------------------------------------------------------------------------- /static/fonts/Roobert-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Roobert-Medium.woff2 -------------------------------------------------------------------------------- /static/fonts/Roobert-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Roobert-MediumItalic.woff -------------------------------------------------------------------------------- /static/fonts/Roobert-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Roobert-MediumItalic.woff2 -------------------------------------------------------------------------------- /static/fonts/Roobert-SemiBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Roobert-SemiBold.woff -------------------------------------------------------------------------------- /static/fonts/Roobert-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/fonts/Roobert-SemiBold.woff2 -------------------------------------------------------------------------------- /static/img/circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/img/composability.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/img/favicon.ico -------------------------------------------------------------------------------- /static/img/fnd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/img/interoperability.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /static/img/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/img/nfte.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/img/nfte.jpg -------------------------------------------------------------------------------- /static/img/schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/img/schema.png -------------------------------------------------------------------------------- /static/img/showtime.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/img/showtime.jpg -------------------------------------------------------------------------------- /static/img/square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/img/terminal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f8n/fnd-docs/e7059a9c0c7c4ff41a6501ea965a372461475507/static/img/terminal.jpg -------------------------------------------------------------------------------- /static/img/triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/img/undraw_docusaurus_mountain.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | -------------------------------------------------------------------------------- /static/img/undraw_docusaurus_react.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /static/img/undraw_docusaurus_tree.svg: -------------------------------------------------------------------------------- 1 | docu_tree -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/docusaurus/tsconfig.json", 3 | "include": ["src/"] 4 | } --------------------------------------------------------------------------------