blog and blog posts

This commit is contained in:
amirhouieh
2022-10-10 15:37:31 +02:00
parent ebc88e24a0
commit 5ba0a6588b
18 changed files with 193 additions and 154 deletions
+1
View File
@@ -10,6 +10,7 @@
# Misc
.DS_Store
.env
.env.local
.env.development.local
.env.test.local
-12
View File
@@ -1,12 +0,0 @@
---
slug: first-blog-post
title: First Blog Post
authors:
name: Gao Wei
title: Docusaurus Core Team
url: https://github.com/wgao19
image_url: https://github.com/wgao19.png
tags: [hola, docusaurus]
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-44
View File
@@ -1,44 +0,0 @@
---
slug: long-blog-post
title: Long Blog Post
authors: endi
tags: [hello, docusaurus]
---
This is the summary of a very long blog post,
Use a `<!--` `truncate` `-->` comment to limit blog post size in the list view.
<!--truncate-->
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-20
View File
@@ -1,20 +0,0 @@
---
slug: mdx-blog-post
title: MDX Blog Post
authors: [slorber]
tags: [docusaurus]
---
Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).
:::tip
Use the power of React to create interactive blog posts.
```js
<button onClick={() => alert("button clicked!")}>Click me!</button>
```
<button onClick={() => alert("button clicked!")}>Click me!</button>
:::
Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

-25
View File
@@ -1,25 +0,0 @@
---
slug: welcome
title: Welcome
authors: [slorber, yangshun]
tags: [facebook, hello, docusaurus]
---
[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).
Simply add Markdown files (or folders) to the `blog` directory.
Regular blog authors can be added to `authors.yml`.
The blog post date can be extracted from filenames, such as:
- `2019-05-30-welcome.md`
- `2019-05-30-welcome/index.md`
A blog post folder can be convenient to co-locate blog post images:
![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg)
The blog supports tags as well!
**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config.
-17
View File
@@ -1,17 +0,0 @@
endi:
name: Endilie Yacop Sucipto
title: Maintainer of Docusaurus
url: https://github.com/endiliey
image_url: https://github.com/endiliey.png
yangshun:
name: Yangshun Tay
title: Front End Engineer @ Facebook
url: https://github.com/yangshun
image_url: https://github.com/yangshun.png
slorber:
name: Sébastien Lorber
title: Docusaurus maintainer
url: https://sebastienlorber.com
image_url: https://github.com/slorber.png
+8
View File
@@ -0,0 +1,8 @@
---
sidebar_position: 4
title: Blog
---
import {BlogPosts} from '@site/src/components/mdx/BlogPosts';
# Recent Blog Posts
<BlogPosts/>
-1
View File
@@ -14,7 +14,6 @@ sidebar_position: 2
[![Codecov](https://codecov.io/gh/status-im/nim-codex/branch/main/graph/badge.svg?token=XFmCyPSNzW)](https://codecov.io/gh/status-im/nim-codex)
[![Discord](https://img.shields.io/discord/895609329053474826)](https://discord.gg/CaJTh24ddQ)
## Build and Run
For detailed instructions on preparing to build nim-codex see [*Building Codex*](BUILDING.md).
+10 -5
View File
@@ -8,20 +8,19 @@ import {FeatureCard} from '@site/src/components/mdx/FeatureCard';
import {Quote} from '@site/src/components/mdx/Quote';
import {ExternalReferenceCard} from '@site/src/components/mdx/ExternalReferenceCard';
import {TeamList} from '@site/src/components/mdx/TeamList';
import {BlogPosts} from '@site/src/components/mdx/BlogPosts';
<Hero title={"Codex"}
subtitle={"Codex is building a Decentralized Durability Engine"}
linkText={"PoC0"}
linkText={"PoC Dagger"}
label={"Introduction"}
linkUrl={"https://github.com/status-im/codex-research"}/>
linkUrl={"https://github.com/status-im/nim-codex"}/>
## What is Codex?
<Quote>
<ul>
<li>Codex is aiming to solve the fundamental issues of data durability in decentralized systems.</li>
<br/>
<li>Codex is a research group working in all areas of decentralized storage.</li>
<br/>
<li>Codex is a decentralized storage protocol for durable information.</li>
</ul>
</Quote>
@@ -31,14 +30,20 @@ import {TeamList} from '@site/src/components/mdx/TeamList';
<FeatureCard title={"Fast erasure coding"}
index={0}
text={"Codex uses high-performance Reed-Solomon encoding to guarantee the durability of the datasets."}/>
<FeatureCard title={"SNARK-based proof of retrivability"}
<FeatureCard title={"SNARK-based proof of retrievability"}
index={1}
text={"To implement space-efficient data retrievability, Codex leverages state-of-the-art SNARK-based proofs."}/>
<FeatureCard title={"Low-overhead lazy repair"}
index={2}
text={"Data repairs in Codex are grouped through lazy repair to decrease network bandwidth overhead."}/>
<FeatureCard title={"Low-overhead lazy repair"}
index={2}
text={"Data repairs in Codex are grouped through lazy repair to decrease network bandwidth overhead."}/>
</FeatureList>
## Blog Posts
<BlogPosts/>
## Resources
<ExternalReferenceCard linkUrl={"http://Linktowhitepaper"}
linkText={"White-paper"}
+6 -1
View File
@@ -1,5 +1,6 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
require('dotenv').config()
const lightCodeTheme = require('prism-react-renderer/themes/github')
const darkCodeTheme = require('prism-react-renderer/themes/dracula')
@@ -14,6 +15,10 @@ const config = {
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
customFields: {
ghostAPiKey: process.env.GHOST_API_KEY,
},
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: 'status-im', // Usually your GitHub org/user name.
@@ -70,7 +75,7 @@ const config = {
},
items: [
{
href: 'https://blog.codex.storage/',
to: 'blog',
label: 'Blog',
},
{
+2
View File
@@ -22,8 +22,10 @@
"@docusaurus/core": "2.1.0",
"@docusaurus/preset-classic": "2.1.0",
"@mdx-js/react": "^1.6.22",
"@tryghost/content-api": "^1.11.4",
"clsx": "^1.2.1",
"copy-to-clipboard": "^3.3.2",
"dotenv": "^16.0.3",
"lodash": "^4.17.21",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
+22
View File
@@ -0,0 +1,22 @@
import Link from '@docusaurus/Link'
import React, { HTMLProps } from 'react'
import { Button } from './Button'
import { ButtonWithIcon } from './ButtonWithIcon'
import styles from './style.module.scss'
type TProps = {
children: React.ReactNode
linkProps: HTMLProps<HTMLAnchorElement>
}
export const LinkButton = ({
children,
linkProps,
...rest
}: TProps & HTMLProps<HTMLButtonElement>): JSX.Element => {
return (
<Link {...linkProps}>
<Button {...rest}>{children}</Button>
</Link>
)
}
+85 -14
View File
@@ -1,38 +1,109 @@
import React from 'react'
import React, { useEffect, useState } from 'react'
import clsx from 'clsx'
import styles from './style.module.scss'
import { Button } from '@site/src/components/Button'
import useDocusaurusContext from '@docusaurus/useDocusaurusContext'
import GhostContentAPI from '@tryghost/content-api'
import { LinkButton } from '@site/src/components/Button/LinkButton'
type TProps = {
children: React.ReactNode
}
const BlogPost = () => (
interface IGhostAuthor {
url: string
name: string
}
interface IGhostBlogPost {
title: string
excerpt: string
url: string
html: string
updated_at: string
authors: IGhostAuthor[]
}
const useGhostBlogPosts = (limit: number = 10) => {
const {
siteConfig: {
customFields: { ghostAPiKey },
},
} = useDocusaurusContext()
const [posts, setPosts] = useState<IGhostBlogPost[]>([])
useEffect(() => {
const api = new GhostContentAPI({
url: 'https://blog.codex.storage',
key: ghostAPiKey,
version: 'v2.0',
})
api.posts
.browse({ limit, include: 'tags,authors' })
.then((_posts: IGhostBlogPost[]) => {
setPosts(_posts)
})
.catch((err) => {
console.error(err)
})
}, [])
return posts
}
type TBlogPostProps = {
post: IGhostBlogPost
}
const BlogPost = ({ post }: TBlogPostProps) => (
<div className={clsx('card', styles.blogpost)}>
<h3 className={'sans'}>Decentralizing Storage for Web3</h3>
<p className={''}>
Throughout the Web 2.0 era of the Internet, the distributed systems
architecture adopted by large multinational technology corporations has
led to the centralization of control over user-generated content.
</p>
<h3 className={'sans'}>{post.title}</h3>
<p
className={''}
dangerouslySetInnerHTML={{
__html: `${post.html.split(' ').slice(0, 23).join(' ')}...`,
}}
/>
<div className={styles.blogpostMeta}>
<small className={'sans'}>by Leonardo Bautista-Gomez</small>
<small className={'sans'}>
by{' '}
{post.authors.map((a, i) => (
<a href={a.url} key={`a-${i}`}>
{a.name}
</a>
))}
</small>
<small>
<time> - Jul 5, 2022</time>
<time> - {formatDate(post.updated_at)}</time>
</small>
</div>
<a>
<Button className={'button--secondary'}>Learn More</Button>
<LinkButton
className={'button--secondary'}
linkProps={{ href: post.url }}
>
Learn More
</LinkButton>
</a>
</div>
)
const formatDate = (dateString: string): string => {
const date = new Date(dateString)
const m = date.toLocaleString('default', { month: 'short' })
const d = date.getDay()
const y = date.getFullYear()
return `${m} ${d}, ${y}`
}
export const BlogPosts = ({ children }: TProps): JSX.Element => {
const posts = useGhostBlogPosts()
return (
<section className={styles.blogpostsWrapper}>
<div className={styles.blogposts}>
<BlogPost />
<BlogPost />
{posts.map((post, i) => (
<BlogPost key={`p-${i}`} post={post} />
))}
</div>
</section>
)
-1
View File
@@ -16,7 +16,6 @@ type TProps = {
export const TeamList = (props: TProps): JSX.Element => {
const team = useTeam('codex' as ELogosTeamNames)
console.log(team)
const hiddenSidebar = globalStore.useSelector(selectHiddenSidebar)
return (
+10 -11
View File
@@ -1,22 +1,23 @@
.TeamList {
.TeamListContainer {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 10px;
grid-column-gap: calc(0.7 * var(--ifm-global-spacing));
grid-row-gap: calc(0.6 * var(--ifm-global-spacing));
&.withSidebarHide {
grid-template-columns: repeat(3, 1fr);
grid-template-columns: repeat(4, 1fr);
.memberCard {
grid-template-rows: 320px 60px;
grid-template-rows: 220px 60px;
}
}
.memberCard {
box-shadow: none;
display: grid;
grid-template-rows: 400px 60px;
//grid-template-rows: 400px 60px;
grid-template-rows: 270px 110px !important;
grid-column-gap: calc(0.7 * var(--ifm-global-spacing));
grid-row-gap: calc(0.6 * var(--ifm-global-spacing));
@@ -30,10 +31,9 @@
}
.memberCardCaption {
flex-direction: column;
gap: 10px !important;
border-radius: 8px;
flex-direction: row;
justify-content: space-between;
gap: 40px;
h5 {
margin: 0;
@@ -41,11 +41,11 @@
.memberEmail {
color: var(--ifm-color-gray-500);
}
.memberSocials {
display: flex;
align-items: center;
opacity: 0.3;
height: 20px;
gap: calc(var(--ifm-spacing-horizontal) * 0.5);
}
}
@@ -67,11 +67,10 @@
}
.memberCardCaption {
flex-direction: column !important;
gap: 10px !important;
.memberSocials {
height: 30px;
gap: 16px !important;
//height: 30px;
//gap: 16px !important;
opacity: 0.5 !important;
a {
width: 25px;
+1 -1
View File
@@ -50,7 +50,7 @@
"contact": {
"email": "leo@status.im",
"status": null,
"github": null,
"github": "leobago",
"discord": "leobago#8071",
"gscholar": "vt5qgWoAAAAJ"
}
+48 -2
View File
@@ -2002,6 +2002,13 @@
dependencies:
defer-to-connect "^1.0.1"
"@tryghost/content-api@^1.11.4":
version "1.11.4"
resolved "https://registry.yarnpkg.com/@tryghost/content-api/-/content-api-1.11.4.tgz#4a1afa6a7580eb414d82ce6bd3ca712126927fbc"
integrity sha512-1ShIj8i37rR/9gaenRiaGvPNAU3jAuvViD64mmVxE1cedXJjpqbaOLM8lFWaVuGUafDQrfo5tv57FN6ac51QeQ==
dependencies:
axios "^0.27.0"
"@trysound/sax@0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
@@ -2629,6 +2636,11 @@ asap@~2.0.3:
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
at-least-node@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
@@ -2653,6 +2665,14 @@ axios@^0.25.0:
dependencies:
follow-redirects "^1.14.7"
axios@^0.27.0:
version "0.27.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
dependencies:
follow-redirects "^1.14.9"
form-data "^4.0.0"
babel-loader@^8.2.5:
version "8.2.5"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e"
@@ -3095,6 +3115,13 @@ combine-promises@^1.1.0:
resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71"
integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
comma-separated-tokens@^1.0.0:
version "1.0.8"
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
@@ -3517,6 +3544,11 @@ del@^6.1.1:
rimraf "^3.0.2"
slash "^3.0.0"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
depd@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@@ -3663,6 +3695,11 @@ dot-prop@^5.2.0:
dependencies:
is-obj "^2.0.0"
dotenv@^16.0.3:
version "16.0.3"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
duplexer3@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e"
@@ -4081,7 +4118,7 @@ flux@^4.0.1:
fbemitter "^3.0.0"
fbjs "^3.0.1"
follow-redirects@^1.0.0, follow-redirects@^1.14.7:
follow-redirects@^1.0.0, follow-redirects@^1.14.7, follow-redirects@^1.14.9:
version "1.15.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
@@ -4105,6 +4142,15 @@ fork-ts-checker-webpack-plugin@^6.5.0:
semver "^7.3.2"
tapable "^1.0.0"
form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -5317,7 +5363,7 @@ mime-types@2.1.18:
dependencies:
mime-db "~1.33.0"
mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==