Commit 44db9b52 authored by Mark Harding's avatar Mark Harding

Initial docs site

parents
No related merge requests found
Pipeline #69462299 passed with stages
in 2 minutes and 2 seconds
node_modules
.DS_Store
.idea
lib/core/metadata.js
lib/core/MetadataBlog.js
website/translated_docs
website/build/
website/community-repos.json
website/yarn.lock
website/node_modules
website/i18n/*
!website/i18n/en.json
.nvmrc
stages:
- build
- deploy
build:
stage: build
image: circleci/node:8-browsers
script:
- cd website
- yarn
- yarn build
artifacts:
paths:
- website/build
only:
- master
pages:
stage: deploy
script:
- mv website/build/"Minds OSS" public
artifacts:
paths:
- public
dependencies:
- build
only:
- master
\ No newline at end of file
# Minds Docs
View these docs at [https://oss.minds.com/](https://oss.minds.io).
These docs were created with [Docusaurus](https://docusaurus.io/).
# Get Started in 5 Minutes
1. Make sure all the dependencies for the website are installed:
```sh
# Install dependencies
$ yarn
```
2. Run your dev server:
```sh
# Start the site
$ yarn start
```
# Editing Content
## Editing an existing docs page
Edit docs by navigating to `docs/` and editing the corresponding document:
`docs/doc-to-be-edited.md`
```markdown
---
id: page-needs-edit
title: This Doc Needs To Be Edited
---
Edit me...
```
For more information about docs, click [here](https://docusaurus.io/docs/en/navigation)
## Editing an existing blog post
Edit blog posts by navigating to `website/blog` and editing the corresponding post:
`website/blog/post-to-be-edited.md`
```markdown
---
id: post-needs-edit
title: This Blog Post Needs To Be Edited
---
Edit me...
```
For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog)
# Adding Content
## Adding a new docs page to an existing sidebar
1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`:
```md
---
id: newly-created-doc
title: This Doc Needs To Be Edited
---
My new content here..
```
1. Refer to that doc's ID in an existing sidebar in `website/sidebar.json`:
```javascript
// Add newly-created-doc to the Getting Started category of docs
{
"docs": {
"Getting Started": [
"quick-start",
"newly-created-doc" // new doc here
],
...
},
...
}
```
For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation)
## Adding a new blog post
1. Make sure there is a header link to your blog in `website/siteConfig.js`:
`website/siteConfig.js`
```javascript
headerLinks: [
...
{ blog: true, label: 'Blog' },
...
]
```
2. Create the blog post with the format `YYYY-MM-DD-My-Blog-Post-Title.md` in `website/blog`:
`website/blog/2018-05-21-New-Blog-Post.md`
```markdown
---
author: Frank Li
authorURL: https://twitter.com/foobarbaz
authorFBID: 503283835
title: New Blog Post
---
Lorem Ipsum...
```
For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog)
## Adding items to your site's top navigation bar
1. Add links to docs, custom pages or external links by editing the headerLinks field of `website/siteConfig.js`:
`website/siteConfig.js`
```javascript
{
headerLinks: [
...
/* you can add docs */
{ doc: 'my-examples', label: 'Examples' },
/* you can add custom pages */
{ page: 'help', label: 'Help' },
/* you can add external links */
{ href: 'https://github.com/facebook/Docusaurus', label: 'GitHub' },
...
],
...
}
```
For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation)
## Adding custom pages
1. Docusaurus uses React components to build pages. The components are saved as .js files in `website/pages/en`:
1. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element:
`website/siteConfig.js`
```javascript
{
headerLinks: [
...
{ page: 'my-new-custom-page', label: 'My New Custom Page' },
...
],
...
}
```
For more information about custom pages, click [here](https://docusaurus.io/docs/en/custom-pages).
# Full Documentation
Full documentation can be found on the [website](https://docusaurus.io/).
---
id: contributing
title: Contributing
---
You can contribute to Minds with [Gitlab](https://gitlab.com/minds). Please follow the instructions below.
## Creating an issue
### Feature or Bug?
As a rule of thumb, log as a feature request if it does not already exist in the system and log as a bug if something has gone wrong in the system.
### Logging a Bug
For all bugs, it is important that you use the bug template when creating an issue and fill it out with as much information as possible. Try not to leave anything missing, especially platform details, and steps to reproduce - else we may have trouble replicating the issue on our end.
### Logging a feature request
For feature requests, until we have a template in place, you should simply try your best to be as descriptive as possible. If its a visual feature, we welcome mock-ups and even rough sketches in notebooks if they help illustrate your idea.
### Bug Life Cycle
Bugs generally start off in the bug triage system. The bug triage system allows us to identify and properly document incoming bugs. This means that when they are escalated from (T - Triage) to (T - Bug) label, they should contain the information necessary for a developer to complete the task.
### Labelling
If you have the required permissions, you can label a bug or feature yourself. If this is not possible, please tag a member of staff and we will tag it for you as quickly as possible. If your entry has fallen between the cracks, please post in Help and Support and we will take care of it as soon as we possibly can.
## Priorities
| Label | |
| ----- | ----- |
| **`Priority::0 - Urgent`** | These issues will be assigned to the currently running sprint and resolved as soon possible. |
| **`Priority::1 - High`** | To be assigned to the closest appropriate sprint or epic. |
| **`Priority::2 - Normal`** | To be allocated an epic where possible |
| **`Priority::3 - Nice to have`** | a low priority task or issue, potentially good for the community to tackle. |
| **`Priority::4 - Trivial`** | Generally for bugs or minor changes. |
## Progress
| Label | |
| ----- | ----- |
| **`Status::InProgress`** | |
| **`Status::Review`** | awaiting peer review before being made live. |
| **`Status::Follow Up`** | additional information or conversations are needed before progress can be made. |
## Submitting your Merge Request (MR)
This diff is collapsed.
---
id: installation
title: Installation
---
## Repositories
Minds is split into multiple repositories:
- [Engine](https://github.com/Minds/engine) - Backend code & APIs
- [Front](https://github.com/Minds/front) - Client side Angular2 web app
- [Sockets](https://github.com/Minds/sockets) - WebSocket server for real-time communication
- [Mobile](https://github.com/Minds/mobile-native) - React Native mobile apps
## Development System Requirements
- > 10GB RAM (be sure to set it in your docker settings)
- > 100GB Disk space
- [Docker Compose](https://docs.docker.com/compose/)
## Development Installation
### Setting up elasticsearch
> **Linux users:**
> To get ElasticSearch 6 to run, you must make a settings change on the host machine.
> - Run ```sudo sysctl -w vm.max_map_count=262144```
> - To make it permanent, modify the variable in `/etc/sysctl.conf`
#### Build the elasticsearch indexes
1. Make sure nothing is running: `docker-compose down`
2. Run the legacy provisioner: `docker-compose up elasticsearch-legacy-provisioner`
3. Run the legacy provisioner: `docker-compose up elasticsearch-provisioner`
### Running the stack the first time
1. Run `sh init.sh` in order to install the front and engine repositories
2. Run `docker-compose up -d nginx`
3. Run `docker-compose up installer` (one time only.. initial username: minds / password: Pa$$w0rd)
4. Run `docker-compose up front-build`
5. Navigate to `http://localhost:8080`
## Troubleshooting
### Minds is already installed
- Ensure engine/settings.php does not exist and re-run `docker-compose up installer`
### Cassandra will not boot
- Ensure thrift is enabled
- Cassandra requires at least 4GB of memory to operate. You can start Cassandra manually by running `docker-compose up cassandra`
### Nuclear Option
With dockerized enviroments, it's sometimes best to start from scratch. If you want to delete your data, these steps will completely **delete** your data. You will be starting fresh.
```
#Remove your settings file
rm engine/settings.php
#Stop your stack
docker-compose down
#Delete your data cache
rm -rf .data
#Purge all volumes
docker volume prune
```
That will remove all of your locally cached data. You can either rebuild the containers manually by using ```docker-compose up --build``` or delete everything to start fresh.
```
# Delete all containers
docker rm $(docker ps -a -q)
```
## Production System Requirements
At this time it is not advisable to run Minds in production, however it is possible so long as you are aware of the risks.
- 3 Cassandra Nodes (Min 30gb RAM, 1TB SSD, 8 CPU)
- 1 ElasticSearch Node (Min 16GB RAM, 250GB SSD, 8 CPU) #2 nodes are recommended for failover
- 1 Docker Machine (Min 60gb RAM, 50GB SSD, 32 CPU)
\ No newline at end of file
---
id: introduction
title: Welcome to the Minds Stack
sidebar_label: Introduction
---
Minds is a free & open-source, encrypted and reward-based social networking platform. Our [Roadmap](https://gitlab.com/groups/minds/-/roadmap), [Code](https://gitlab.com/minds/minds), [Project Management System](https://gitlab.com/groups/minds/-/boards/904772?milestone_title=sprint%3A%20Interesting%20Iguana&) and more all reside in [Gitlab](https://gitlab.com/minds).
## Security reports
Please report all security issues to [security@minds.com](mailto:security@minds.com).
## License
[AGPLv3](https://www.minds.org/docs/license.html). Please see the license file of each repository.
___Copyright Minds 2012 - 2019___
Copyright for portions of Minds are held by [Elgg](http://elgg.org), 2013 as part of the [Elgg](http://elgg.org) project. All other copyright for Minds is held by Minds, Inc.
---
id: architecture
title: Architecture
---
> TODO
\ No newline at end of file
---
id: backend
title: Backend
---
> This guide assumes that you have already installed your stack as described [here](getting-started/installation.md)
The source code can be found [here](https://gitlab.com/minds/engine).
## Structure
The backend is split into two main areas, **Core** and **Controllers**.
**Core** is where all the heavy lifting modules and internal apis exist.
**Controllers** support both *CLI* and *REST* api's. These are publically exposed as are the pulbic interfaces for the **Core** modules/managers.
```
engine
└───Core
│ │
└───Controllers
│ └───Cli
│ │ └───
│ └───api
│ │ └───v1
│ │ └───v2
└───Common
└───Traits
```
## Modules
Modules reside under the `Core` folder and must be registered in `Core\Minds.php`.
### Creating your modules
For this example, we will create a module call VideoChat that makes use of Dependency Injection Proviers.
#### Core/VideoChat/Modules.php
```php
<?php
namespace Minds\Core\VideoChat;
use Minds\Interfaces\ModuleInterface;
class Module implements ModuleInterface
{
public function onInit()
{
$provider = new Provider();
$provider->register();
}
}
```
#### Core/VideoChat/Provider.php
```php
<?php
namespace Minds\Core\VideoChat;
use Minds\Core\Di\Provider as DiProvider;
class Provider extends DiProvider
{
public function register()
{
$this->di->bind('VideoChat\Manager', function ($di) {
return new Manager();
}, ['useFactory' => true]);
}
}
```
#### Core/VideoChat/Manager.php
```php
<?php
namespace Minds\Core\VideoChat;
class Manager
{
}
```
### Registering your module
```php
private $modules = [
...
VideoChat\Module::class,
];
```
## Manager / Repository / Delegates
Minds follows an abstraction design pattern. Managers should be interface with Repositories. Repositories should **only ever** be referenced by their respective managers.
Delegates are small, stateless functions that are executed by Managers.
Managers, Repositories and Delegates should have 100% test coverage.
### Manager.php
```php
<?php
class Manager
{
/** @var Repository $repository */
private $repository;
/** @var NotificationDelegate $notificationDelegate */
private $notificationDelegate;
public function __construct($repository = null, $notificationDelegate = null)
{
$this->repository = $repository ?: Di::_('Repository');
$this->notificationDelegate = $notificationDelegate ?: new Delegates/NotificationDelegate;
}
/**
* Add a model
* @param Model $model
* @return void
*/
public function add(Model $model)
{
$this->repository->add($model);
$this->notificationDelegate->onAdd($model);
}
```
Note how we are able to switch out repositories here without impacting the wider codebase to could be interacting with our Manager. During migrations, a double writing pattern could be added with a few lines.
### Repository.php
```php
<?php
class Repository
{
/** @var Client $db */
private $db
public function __construct($db = null)
{
$this->db = $db ?: Di::_()->get('Database\Cassandra\Cql');
}
public function add(Model $model)
{
...
}
...
```
### Delegates/NotificationDelegate.php
(You can give your delegate any name you wish, we are using NotificationDelegate as an example).
```php
<?php
class NotificationDelegate
{
public function onAdd(Model $model)
{
...
}
...
```
## Spec tests
### Executing
`bin/phpspec run`
\ No newline at end of file
---
id: deployment
title: Deployment
---
Minds deploys with **[Gitlab](https://gitlab.com/minds)**, making use of Docker & Kubernetes.
## Docker Containers
### FPM
```
docker build -t minds/fpm:latest -f containers/php-fpm/Dockerfile .
```
### Runners
```
docker build -t minds/runners:latest -f containers/php-runners/Dockerfile .
```
## Review Apps
The review apps make use of [Helm](https://helm.sh) and [Kubernetes](https://kubernetes.io/). Our helm charts can be found [here](https://gitlab.com/minds/helm-charts) and you can inspect the review app auto deployment in our [.gitlab-ci.yml file](https://gitlab.com/minds/engine/blob/master/.gitlab-ci.yml#L52).
A kubernetes environment can be created by running:
```
helm upgrade \
--install \
--reuse-values \
--set cassandra.deploy=true \
--set elasticsearch.deploy=true \
--set redis.deploy=true \
--wait \
my-minds-stack \
./helm-charts/minds
```
If you wish to use shared databases, due to resource constaints, first deploy your services and then set `deploy=false` like so:
```
helm upgrade \
--install \
--reuse-values \
--set cassandra.deploy=false \
--set elasticsearch.deploy=false \
--set redis.deploy=false \
--wait \
my-mini-minds-stack \
./helm-charts/minds
```
## Production
The Minds production environment is deployed directly from the CI flow found [here](https://gitlab.com/minds/engine/blob/master/.gitlab-ci.yml#L97). Minds currently uses Docker/ECS, but plans to move to Kubernetes as soon as possible.
\ No newline at end of file
---
id: frontend
title: Frontend
---
> This guide assumes that you have already installed your stack as described [here](getting-started/installation.md)
Minds uses [Angular 8](https://angular.io) for the frontend. Work is currently underway to introduce server side rendering with Angular Universal.
The source code can be found [here](https://gitlab.com/minds/front).
## Building
### Development
`npm run build-dev`
### Production
> Production build can take up 30 minutes to complete
```gulp build.sass && sh build/base-locale.sh dist```
## Structure
```
front
└───dist
│ │ (build outputs here)
└───src
└───common
│ └───
└───modules
```
## Component names
Minds follows the [BEM](http://getbem.com/naming/) naming conventions for elements and class names, with the `m-` prefix.
eg:
```html
<m-comments__tree>
...
</m-comments__tree>
```
```html
<div class="m-comment__ownerBlock m-comment__ownerBlock--disabled">
<div class="m-commentOwnerBlock__name">
</div>
</div>
```
## Components
Components should have `.ts`, `.html` and `.scss` files with the same names.
Eg:
```
my-cool-module
└───list.component.ts
└───list.component.html
└───list.component.scss
```
## Spec tests
### Executing
`ng test`
\ No newline at end of file
---
id: git
title: Git / Gitlab
---
> **NOTE:** This guide is mainly intended for the Minds development team. Please see our [contributions guide](contributing/contributing.md) for open source contributors.
## Branches vs Forks
**Branches** are preferred over forks, as they integrate with the **Review/Sandbox** environments.
Branch names should be no more that **20 characters** long and include the following prefixes:
- **fix/** *(also include the issue number)*
- **chore/** *(also include the issue number)*
- **feat/**
- **refactor/**
- **epic/** *(also include the epic number)*
## Merge Requests
Ensure that you clearly explain the purpose of the merge request, and reference the original issue.
\ No newline at end of file
---
id: kubernetes
title: Kubernetes
---
Minds uses the AGPLv3 License
\ No newline at end of file
---
id: mobile
title: Mobile
---
Minds uses [React Native](https://reactnative.com) to power both the Android and iOS applications. The source code can be found [here](https://gitlab.com/minds/mobile-native).
## Building
```yarn install```
```react-native run-ios or react-native run-android```
## Spec tests
### Executing
`yarn test`
\ No newline at end of file
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const React = require('react');
class Footer extends React.Component {
docUrl(doc, language) {
const baseUrl = this.props.config.baseUrl;
const docsUrl = this.props.config.docsUrl;
const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`;
const langPart = `${language ? `${language}/` : ''}`;
return `${baseUrl}${docsPart}${doc}`;
}
pageUrl(doc, language) {
const baseUrl = this.props.config.baseUrl;
return baseUrl + (language ? `${language}/` : '') + doc;
}
render() {
return (
<footer className="nav-footer" id="footer">
<section className="sitemap">
<a href={this.props.config.baseUrl} className="nav-home">
{this.props.config.footerIcon && (
<img
src={this.props.config.baseUrl + this.props.config.footerIcon}
alt={this.props.config.title}
width="66"
height="58"
/>
)}
</a>
<div>
<h5>Docs</h5>
<a href={this.docUrl('getting-started/introduction', this.props.language)}>
Getting Started
</a>
<a href={this.docUrl('guides/deployment', this.props.language)}>
Guides
</a>
<a href={this.docUrl('contributing/contributing', this.props.language)}>
Contributing
</a>
</div>
<div>
<h5>Community</h5>
<a href="https://www.minds.com/groups/profile/365903183068794880/feed">Open Source Community Group</a>
<a
href="https://stackoverflow.com/questions/tagged/"
target="_blank"
rel="noreferrer noopener">
Stack Overflow
</a>
</div>
<div>
<h5>More</h5>
<a href="https://gitlab.com/minds">Gitlab</a>
<span></span>
<a className="github-button"
href="https://github.com/minds/minds"
data-icon="octicon-star"
data-size="large"
data-show-count="true"
aria-label="Star minds/minds on GitHub">
Star
</a>
</div>
</section>
<section className="copyright">{this.props.config.copyright}</section>
</footer>
);
}
}
module.exports = Footer;
{
"_comment": "This file is auto-generated by write-translations.js",
"localized-strings": {
"next": "Next",
"previous": "Previous",
"tagline": "A website for testing",
"docs": {
"contributing/contributing": {
"title": "Contributing"
},
"contributing/license": {
"title": "License"
},
"getting-started/installation": {
"title": "Installation"
},
"getting-started/introduction": {
"title": "Welcome to the Minds Stack",
"sidebar_label": "Introduction"
},
"guides/architecture": {
"title": "Architecture"
},
"guides/backend": {
"title": "Backend"
},
"guides/deployment": {
"title": "Deployment"
},
"guides/frontend": {
"title": "Frontend"
},
"guides/git": {
"title": "Git / Gitlab"
},
"guides/kubernetes": {
"title": "Kubernetes"
},
"guides/mobile": {
"title": "Mobile"
}
},
"links": {
"Docs": "Docs",
"Code": "Code",
"Minds.com": "Minds.com"
},
"categories": {
"Getting Started": "Getting Started",
"Guides": "Guides",
"Contributing": "Contributing"
}
},
"pages-strings": {
"Help Translate|recruit community translators for your project": "Help Translate",
"Edit this Doc|recruitment message asking to edit the doc source": "Edit",
"Translate this Doc|recruitment message asking to translate the docs": "Translate"
}
}
{
"scripts": {
"examples": "docusaurus-examples",
"start": "docusaurus-start",
"build": "docusaurus-build",
"publish-gh-pages": "docusaurus-publish",
"write-translations": "docusaurus-write-translations",
"version": "docusaurus-version",
"rename-version": "docusaurus-rename-version"
},
"devDependencies": {
"docusaurus": "^1.11.1"
}
}
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const React = require('react');
const CompLibrary = require('../../core/CompLibrary.js');
const Container = CompLibrary.Container;
const GridBlock = CompLibrary.GridBlock;
function Help(props) {
const {config: siteConfig, language = ''} = props;
const {baseUrl, docsUrl} = siteConfig;
const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`;
const langPart = `${language ? `${language}/` : ''}`;
const docUrl = doc => `${baseUrl}${docsPart}${langPart}${doc}`;
const supportLinks = [
{
content: `Learn more using the [documentation on this site.](${docUrl(
'doc1.html',
)})`,
title: 'Browse Docs',
},
{
content: 'Ask questions about the documentation and project',
title: 'Join the community',
},
{
content: "Find out what's new with this project",
title: 'Stay up to date',
},
];
return (
<div className="docMainWrapper wrapper">
<Container className="mainContainer documentContainer postContainer">
<div className="post">
<header className="postHeader">
<h1>Need help?</h1>
</header>
<p>This project is maintained by a dedicated group of people.</p>
<GridBlock contents={supportLinks} layout="threeColumn" />
</div>
</Container>
</div>
);
}
module.exports = Help;
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const React = require('react');
const CompLibrary = require('../../core/CompLibrary.js');
const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
const Container = CompLibrary.Container;
const GridBlock = CompLibrary.GridBlock;
class HomeSplash extends React.Component {
render() {
const {siteConfig, language = ''} = this.props;
const {baseUrl, docsUrl} = siteConfig;
const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`;
const langPart = `${language ? `${language}/` : ''}`;
const docUrl = doc => `${baseUrl}${docsPart}${langPart}${doc}`;
const SplashContainer = props => (
<div className="homeContainer">
<div className="homeSplashFade">
<div className="wrapper homeWrapper">{props.children}</div>
</div>
</div>
);
const Logo = props => (
<div className="projectLogo">
<img src={props.img_src} alt="Project Logo" />
</div>
);
const ProjectTitle = () => (
<h2 className="projectTitle">
Free & Open Source
<small>The Minds.com Stack</small>
</h2>
);
const PromoSection = props => (
<div className="section promoSection">
<div className="promoRow">
<div className="pluginRowBlock">{props.children}</div>
</div>
</div>
);
const Button = props => (
<div className="pluginWrapper buttonWrapper">
<a className="button" href={props.href} target={props.target}>
{props.children}
</a>
</div>
);
return (
<SplashContainer>
<Logo img_src={`${baseUrl}img/undraw_monitor.svg`} />
<div className="inner">
<ProjectTitle siteConfig={siteConfig} />
<PromoSection>
<Button href="https://gitlab.com/minds">View the code</Button>
<Button href="docs/getting-started/introduction">Read the Docs</Button>
</PromoSection>
</div>
</SplashContainer>
);
}
}
class Index extends React.Component {
render() {
const {config: siteConfig, language = ''} = this.props;
const {baseUrl} = siteConfig;
const Block = props => (
<Container
padding={['bottom', 'top']}
id={props.id}
background={props.background}>
<GridBlock
align="center"
contents={props.children}
layout={props.layout}
/>
</Container>
);
const TryOut = () => (
<Block id="try">
{[
{
content:
'Kubernetes & Docker keep everyone on the same page ' +
'and allow for seamless scalability, along with high performance NoSQL ' +
'databases; Cassandra & ElasticSearch.',
image: `${baseUrl}img/undraw_code_review.svg`,
imageAlign: 'left',
title: 'A modern stack, designed to scale.',
},
]}
</Block>
);
const LearnHow = () => (
<Block background="light">
{[
{
content: 'Newsfeeds, images, videos, groups, blockchain based rewards system' +
' video chat, notifications and more!',
image: `${baseUrl}img/undraw_youtube_tutorial.svg`,
imageAlign: 'right',
title: 'We have a full set of features',
},
]}
</Block>
);
return (
<div>
<HomeSplash siteConfig={siteConfig} language={language} />
<div className="mainContainer">
<LearnHow />
<TryOut />
</div>
</div>
);
}
}
module.exports = Index;
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const React = require('react');
const CompLibrary = require('../../core/CompLibrary.js');
const Container = CompLibrary.Container;
class Users extends React.Component {
render() {
const {config: siteConfig} = this.props;
if ((siteConfig.users || []).length === 0) {
return null;
}
const editUrl = `${siteConfig.repoUrl}/edit/master/website/siteConfig.js`;
const showcase = siteConfig.users.map(user => (
<a href={user.infoLink} key={user.infoLink}>
<img src={user.image} alt={user.caption} title={user.caption} />
</a>
));
return (
<div className="mainContainer">
<Container padding={['bottom', 'top']}>
<div className="showcaseSection">
<div className="prose">
<h1>Who is Using This?</h1>
<p>This project is used by many folks</p>
</div>
<div className="logos">{showcase}</div>
<p>Are you using this project?</p>
<a href={editUrl} className="button">
Add your company
</a>
</div>
</Container>
</div>
);
}
}
module.exports = Users;
{
"docs": {
"Getting Started": [
"getting-started/introduction",
"getting-started/installation"
],
"Guides": [
"guides/architecture",
"guides/frontend",
"guides/backend",
"guides/mobile",
"guides/kubenetes",
"guides/deployment",
"guides/git"
],
"Contributing": [
"contributing/contributing",
"contributing/license"
]
}
}
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
// See https://docusaurus.io/docs/site-config for all the possible
// site configuration options.
// List of projects/orgs using your project for the users page.
const users = [
{
caption: 'Minds.com',
// You will need to prepend the image path with your baseUrl
// if it is not '/', like: '/test-site/img/image.jpg'.
image: '/img/bulb.svg',
infoLink: 'https://www.minds.com',
pinned: true,
},
];
const siteConfig = {
title: 'Minds OSS', // Title for your website.
tagline: 'A website for testing',
url: 'https://docs.minds.io', // Your website URL
baseUrl: '/', // Base URL for your project */
// Used for publishing and more
projectName: 'Minds OSS',
organizationName: 'Minds',
// For no header links in the top nav bar -> headerLinks: [],
headerLinks: [
{doc: 'getting-started/introduction', label: 'Docs'},
//{doc: 'doc4', label: 'API'},
{
label: 'Code',
href: "https://gitlab.com/minds",
},
{
label: 'Minds.com',
href: "https://minds.com/",
},
],
// If you have users set above, you add it here:
users,
/* path to images for header/footer */
headerIcon: 'img/bulb.svg',
footerIcon: 'img/bulb.svg',
favicon: 'img/bulb.svg',
/* Colors for website */
colors: {
primaryColor: '#FFF',
secondaryColor: '#CCC',
},
/* Custom fonts for website */
/*
fonts: {
myFont: [
"Times New Roman",
"Serif"
],
myOtherFont: [
"-apple-system",
"system-ui"
]
},
*/
// This copyright info is used in /core/Footer.js and blog RSS/Atom feeds.
copyright: `Copyright © ${new Date().getFullYear()} Minds Inc.`,
highlight: {
// Highlight.js theme to use for syntax highlighting in code blocks.
theme: 'default',
},
// Add custom scripts here that would be placed in <script> tags.
scripts: ['https://buttons.github.io/buttons.js'],
// On page navigation for the current documentation page.
onPageNav: 'separate',
// No .html extensions for paths.
cleanUrl: true,
// Open Graph and Twitter card images.
ogImage: 'img/undraw_online.svg',
twitterImage: 'img/undraw_tweetstorm.svg',
// Show documentation's last contributor's name.
// enableUpdateBy: true,
// Show documentation's last update time.
// enableUpdateTime: true,
// You may provide arbitrary config keys to be used as needed by your
// template. For example, if you need your repo's URL...
// repoUrl: 'https://github.com/facebook/test-site',
customDocsPath: './docs',
};
module.exports = siteConfig;
/* your custom css */
a, a:hover, .button {
color: #4690df;
border-color: #4690df;
border-radius: 24px;
}
.fixedHeaderContainer a,
.navigationSlider .slidingNav ul li a,
.slidingNav ul li.siteNavItemActive a {
color: #555;
}
.toc .toggleNav ul li.navListItemActive a,
.navigationSlider .slidingNav ul li.siteNavGroupActive a {
color: #4690df;
}
.navigationSlider .slidingNav ul li a:hover,
.toc .toggleNav ul li a:hover,
.button:hover {
color: #4690df;
}
.fixedHeaderContainer {
border-bottom: 1px solid #e8e8e8;
}
.navWrapper {
border-right: 1px solid #e8e8e8;
}
.projectTitle {
text-align: left;
color: #444;
}
.promoSection {
align-items: flex-start;
}
.container .wrapper .imageAlignSide p {
text-align: left;
}
@media only screen and (min-device-width: 360px) and (max-device-width: 736px) {
}
@media only screen and (min-width: 1024px) {
}
@media only screen and (max-width: 1023px) {
}
@media only screen and (min-width: 1400px) {
}
@media only screen and (min-width: 1500px) {
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="212px" height="345px" viewBox="0 0 212 345" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
<title>Slice 11</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="bulb" transform="translate(-51.000000, -27.000000)">
<g id="Group-5" transform="translate(107.000000, 290.000000)">
<path d="M24.7524752,43 L22.7722772,72 L24.7524752,43 Z" id="Triangle-3" fill="#656565"></path>
<polygon id="Triangle-3" fill="#656565" points="0 62 25 41 50 82"></polygon>
<polygon id="Triangle-3" fill="#787778" points="0 0 0 62 25 41"></polygon>
<polygon id="Triangle-3" fill="#5C5C5C" points="75 41 50 82 100 62"></polygon>
<polygon id="Triangle-3" fill="#787778" points="100 62 75 41 100 0"></polygon>
<polygon id="Triangle-3" fill="#4A4A4A" points="0 0 100 0 50 82"></polygon>
</g>
<g id="Group" transform="translate(6.000000, 1.000000)">
<polygon id="Triangle-3" fill="#FED12F" points="111 100 217 144 141 205"></polygon>
<polygon id="Triangle-3" fill="#FED12F" points="191 26 251 88 217 144"></polygon>
<polygon id="Triangle-3" fill="#FED12F" points="101 289 211 257 201 289"></polygon>
<polygon id="Triangle-3" fill="#FED12F" points="91 257 141 205 101 289"></polygon>
<polygon id="Triangle-3" fill="#FED12F" points="51 88 111 26 111 100"></polygon>
<polygon id="Triangle-3" fill="#FFF3CB" points="141 205 211 257 217 144"></polygon>
<polygon id="Triangle-3" fill="#FFF3CB" transform="translate(91.982123, 202.376609) rotate(140.000000) translate(-91.982123, -202.376609) " points="56.1185344 168.858891 118.731412 243.589257 127.845712 161.163961"></polygon>
<polygon id="Triangle-3" fill="#FFDD63" transform="translate(187.648863, 90.616899) rotate(-53.000000) translate(-187.648863, -90.616899) " points="134.026748 35.0492865 241.270978 54.4058156 162.679178 146.184512"></polygon>
<polygon id="Triangle-3" fill="#FFEDAC" transform="translate(112.700659, 170.148822) rotate(-53.000000) translate(-112.700659, -170.148822) " points="57.7008005 126.823779 167.700517 126.574001 101.898239 213.723643"></polygon>
<polygon id="Triangle-3" fill="#FFDD63" transform="translate(148.569878, 267.401001) rotate(-53.000000) translate(-148.569878, -267.401001) " points="102.691884 242.40861 193.849867 223.801568 194.447872 311.000435"></polygon>
<polygon id="Triangle-3" fill="#FFDD63" transform="translate(214.000000, 200.500000) rotate(-53.000000) translate(-214.000000, -200.500000) " points="167.071649 232.106642 260.928351 168.893358 249.86099 227.318639"></polygon>
<polygon id="Triangle-3" fill="#FFDD63" transform="translate(55.981655, 127.407987) rotate(-53.000000) translate(-55.981655, -127.407987) " points="0.981796369 155.102831 84.4562375 99.713142 110.981513 154.853053"></polygon>
<polygon id="Triangle-3" fill="#FEE382" transform="translate(254.000000, 138.000000) rotate(-53.000000) translate(-254.000000, -138.000000) " points="226.941031 112.061376 292.12633 105.513342 215.87367 170.486658"></polygon>
<polygon id="Triangle-3" fill="#FEF1C0" transform="translate(146.320889, 50.144248) rotate(160.000000) translate(-146.320889, -50.144248) " points="96.0784387 57.5512633 196.563339 15.3756208 171.253848 84.9128748"></polygon>
</g>
</g>
</g>
</svg>
\ No newline at end of file
website/static/img/favicon.ico

766 Bytes

website/static/img/oss_logo.png

4.27 KB

This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<svg id="5315dcf4-9ab7-45f5-a3d8-2e76525705db" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="813.15" height="752" viewBox="0 0 813.15 752"><title>tweetstorm</title><polygon points="559.73 403.7 347.86 352.67 347.86 752 559.73 696.54 559.73 403.7" fill="#e0e0e0"/><polygon points="559.73 403.7 347.86 352.67 347.86 752 559.73 696.54 559.73 403.7" opacity="0.1"/><polygon points="135.99 403.7 347.86 352.67 347.86 752 135.99 697.65 135.99 403.7" fill="#e0e0e0"/><polygon points="135.99 401.93 347.86 350.91 347.86 752 135.99 697.65 135.99 401.93" opacity="0.17"/><polygon points="346.09 354.44 457.68 261.71 669.54 316.07 557.96 405.46 346.09 354.44" fill="#e0e0e0"/><polygon points="29.05 318.94 137.76 405.46 349.62 354.44 242.03 263.48 29.05 318.94" fill="#e0e0e0"/><polygon points="27.29 317.18 138.64 405.46 350.51 354.44 240.26 261.71 27.29 317.18" opacity="0.05"/><polygon points="135.99 403.7 135.99 697.65 347.86 752 350.72 460.27 135.99 403.7" fill="#e0e0e0"/><polygon points="559.73 696.54 347.86 752 347.86 460.27 559.73 403.7 559.73 696.54" fill="#e0e0e0"/><polygon points="559.73 696.54 347.86 752 347.86 460.27 559.73 403.7 559.73 696.54" opacity="0.07"/><polygon points="475.42 598.92 475.42 695.43 559.73 672.13 559.73 575.63 475.42 598.92" opacity="0.07"/><polygon points="133.22 556.22 251.91 586.17 347.31 508.52 347.31 460.82 135.44 407.58 133.22 556.22" opacity="0.1"/><polygon points="561.39 556.22 442.7 586.17 347.31 508.52 347.31 460.82 559.17 407.58 561.39 556.22" opacity="0.1"/><path d="M452.66,473.1l8.21-1.64s-6.9,7.72-8.21,8.21h0a33.05,33.05,0,0,0,0,4.93c-15.77,67.69-73.93,37.79-73.93,37.79,21.19.49,23-8.21,23-8.21-12.32-1.81-14.79-9.86-14.79-9.86a5.08,5.08,0,0,0,6.57-1.64c-13.31-3.45-11.5-16.43-11.5-16.43,2.3,2,5.91,2.79,8.05,3.12-1.48-1.81-14-16.76-6.41-24.48,0,0,9.2,16.43,33.35,17.91l1.64-.33a12.89,12.89,0,0,1-.33-3.61,17.25,17.25,0,0,1,17.25-17.25c11.5,0,14,6.57,14,6.57l8.21-4.93C457.59,463.24,456.77,471.46,452.66,473.1Z" transform="translate(-193.43 -74)" fill="#00aced"/><polygon points="135.99 403.7 27.29 493.55 239.15 546.79 347.86 460.27 135.99 403.7" fill="#e0e0e0"/><path d="M618.25,470.91l4.06-5.65s.18,8.6-.34,9.65h0a27.47,27.47,0,0,0,2.79,3c28.77,50.08-23.53,64.86-23.53,64.86,13.16-11.71,9.33-18,9.33-18C602,530.62,596,527.12,596,527.12a4.22,4.22,0,0,0,3.06-4.72c-10,5.44-16.3-3.47-16.3-3.47,2.52-.1,5.18-1.65,6.66-2.66-1.92-.26-18-2.27-17.77-11.25,0,0,14.9,4.77,30.42-8l.81-1.13a10.71,10.71,0,0,1-2.25-2,14.33,14.33,0,0,1,.71-20.26c7-6.52,12.21-3.92,12.21-3.92l2.2-7.65C615.66,462.13,619.81,467.58,618.25,470.91Z" transform="translate(-193.43 -74)" fill="#9a0f61"/><polygon points="559.73 403.7 669.54 493.55 458.78 546.79 347.86 460.27 559.73 403.7" fill="#e0e0e0"/><polygon points="559.73 403.7 669.54 493.55 458.78 546.79 347.86 460.27 559.73 403.7" opacity="0.07"/><path d="M610.52,196.35l7.51-3.61s-4.74,9.15-5.89,9.95h0a32.88,32.88,0,0,0,1.22,4.75c1.53,69.12-61.9,54.68-61.9,54.68,20.54-4.76,20.13-13.6,20.13-13.6-12.32,1.3-16.68-5.84-16.68-5.84a5,5,0,0,0,5.93-3.21c-13.68,0-15.14-13-15.14-13,2.7,1.33,6.39,1.23,8.53,1-1.87-1.38-17.6-12.7-12.22-22,0,0,12.93,13.56,36.56,9l1.5-.72a12.82,12.82,0,0,1-1.21-3.4,17.16,17.16,0,0,1,12.36-20.89c11.08-2.84,15.08,2.88,15.08,2.88l6.7-6.78C612.83,185.63,614.07,193.75,610.52,196.35Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M267,249l8.17-1.63s-6.86,7.68-8.17,8.17h0a32.88,32.88,0,0,0,0,4.9c-15.69,67.33-73.54,37.59-73.54,37.59,21.08.49,22.88-8.17,22.88-8.17-12.26-1.8-14.71-9.81-14.71-9.81a5,5,0,0,0,6.54-1.63C194.9,275,196.7,262.12,196.7,262.12c2.29,2,5.88,2.78,8,3.11-1.47-1.8-13.89-16.67-6.37-24.35,0,0,9.15,16.34,33.18,17.81l1.63-.33a12.82,12.82,0,0,1-.33-3.6A17.16,17.16,0,0,1,250,237.61c11.44,0,13.89,6.54,13.89,6.54l8.17-4.9C271.87,239.24,271.06,247.41,267,249Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M993.24,103.71l13.33-2.67s-11.2,12.53-13.33,13.33h0a53.64,53.64,0,0,0,0,8c-25.6,109.85-120,61.32-120,61.32,34.39.8,37.33-13.33,37.33-13.33-20-2.93-24-16-24-16a8.24,8.24,0,0,0,10.66-2.67c-21.6-5.6-18.66-26.66-18.66-26.66,3.73,3.2,9.6,4.53,13.06,5.07-2.4-2.93-22.66-27.2-10.4-39.73,0,0,14.93,26.66,54.12,29.06l2.67-.53a20.92,20.92,0,0,1-.53-5.87,28,28,0,0,1,28-28c18.66,0,22.66,10.66,22.66,10.66l13.33-8C1001.24,87.71,999.91,101,993.24,103.71Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M775.38,81.73l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43A11.59,11.59,0,0,1,763.9,74c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C778.69,75.1,778.14,80.63,775.38,81.73Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M524.71,302.58l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C528,296,527.47,301.48,524.71,302.58Z" transform="translate(-193.43 -74)" fill="#535461" opacity="0.3"/><path d="M740,199.89l5.52-1.1S740.93,204,740,204.3h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C743.36,193.26,742.8,198.78,740,199.89Z" transform="translate(-193.43 -74)" fill="#00aced" opacity="0.3"/><path d="M635.8,384.76l11.48-2.3s-9.65,10.8-11.48,11.48h0a46.21,46.21,0,0,0,0,6.89c-22.05,94.63-103.36,52.83-103.36,52.83,29.63.69,32.16-11.48,32.16-11.48-17.23-2.53-20.67-13.78-20.67-13.78a7.1,7.1,0,0,0,9.19-2.3c-18.6-4.82-16.08-23-16.08-23,3.22,2.76,8.27,3.9,11.25,4.36-2.07-2.53-19.52-23.43-9-34.22,0,0,12.86,23,46.63,25l2.3-.46a18,18,0,0,1-.46-5.05,24.11,24.11,0,0,1,24.12-24.12c16.08,0,19.52,9.19,19.52,9.19L642.92,371C642.69,371,641.54,382.47,635.8,384.76Z" transform="translate(-193.43 -74)" fill="#9a0f61"/><path d="M554.52,100.5,560,99.4s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43A11.59,11.59,0,0,1,543,92.77c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C557.84,93.88,557.29,99.4,554.52,100.5Z" transform="translate(-193.43 -74)" fill="#9a0f61"/><path d="M385.57,223.08l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C388.88,216.45,388.33,222,385.57,223.08Z" transform="translate(-193.43 -74)" fill="#9a0f61"/><path d="M339.19,143.57l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C342.5,136.94,342,142.47,339.19,143.57Z" transform="translate(-193.43 -74)" fill="#9a0f61" opacity="0.3"/><path d="M533.54,480.37l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C536.86,473.75,536.3,479.27,533.54,480.37Z" transform="translate(-193.43 -74)" fill="#535461"/><path d="M855.77,240.7,867,238.45s-9.46,10.59-11.26,11.26h0a45.32,45.32,0,0,0,0,6.76c-21.63,92.81-101.37,51.81-101.37,51.81C783.46,309,785.94,297,785.94,297c-16.9-2.48-20.27-13.52-20.27-13.52a7,7,0,0,0,9-2.25c-18.25-4.73-15.77-22.53-15.77-22.53,3.15,2.7,8.11,3.83,11,4.28-2-2.48-19.15-23-8.79-33.57,0,0,12.62,22.53,45.73,24.55l2.25-.45a17.67,17.67,0,0,1-.45-5,23.65,23.65,0,0,1,23.65-23.65c15.77,0,19.15,9,19.15,9l11.26-6.76C862.53,227.18,861.4,238.45,855.77,240.7Z" transform="translate(-193.43 -74)" fill="#535461"/><path d="M408.54,331.25,419.8,329s-9.46,10.59-11.26,11.26h0a45.32,45.32,0,0,0,0,6.76c-21.63,92.81-101.37,51.81-101.37,51.81,29.06.68,31.54-11.26,31.54-11.26-16.9-2.48-20.27-13.52-20.27-13.52a7,7,0,0,0,9-2.25c-18.25-4.73-15.77-22.53-15.77-22.53,3.15,2.7,8.11,3.83,11,4.28-2-2.48-19.15-23-8.79-33.57,0,0,12.62,22.53,45.73,24.55l2.25-.45a17.67,17.67,0,0,1-.45-5,23.65,23.65,0,0,1,23.65-23.65c15.77,0,19.15,9,19.15,9l11.26-6.76C415.3,317.73,414.17,329,408.54,331.25Z" transform="translate(-193.43 -74)" fill="#535461"/></svg>
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment