diff --git a/.gitignore b/.gitignore
index 2284795af..8500abdfd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -89,3 +89,9 @@ packages/*/lib/
packages/@textlint/*/lib/
packages/**/yarn.lock
test/**/yarn.lock
+
+# Docusaurus
+website/translated_docs
+website/build
+website/i18n/*
+!website/i18n/en.json
diff --git a/website/.gitignore b/website/.gitignore
new file mode 100644
index 000000000..aeedda9bf
--- /dev/null
+++ b/website/.gitignore
@@ -0,0 +1,11 @@
+node_modules
+.DS_Store
+lib/core/metadata.js
+lib/core/MetadataBlog.js
+website/translated_docs
+website/build/
+website/yarn.lock
+website/node_modules
+
+website/i18n/*
+!website/i18n/en.json
diff --git a/website/blog/2018-01-13-renewing-1.0.0.md b/website/blog/2018-01-13-renewing-1.0.0.md
new file mode 100644
index 000000000..b06627ff9
--- /dev/null
+++ b/website/blog/2018-01-13-renewing-1.0.0.md
@@ -0,0 +1,7 @@
+---
+title: Renewing
+author: 0x6b
+authorURL: http://github.com/0x6b
+---
+
+We're renewing our website to be able to give you better experience.
diff --git a/website/core/Footer.js b/website/core/Footer.js
new file mode 100644
index 000000000..fc30bd3f6
--- /dev/null
+++ b/website/core/Footer.js
@@ -0,0 +1,70 @@
+/**
+ * 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;
+ return baseUrl + "docs/" + (language ? language + "/" : "") + doc;
+ }
+
+ pageUrl(doc, language) {
+ const baseUrl = this.props.config.baseUrl;
+ return baseUrl + (language ? language + "/" : "") + doc;
+ }
+
+ render() {
+ const currentYear = new Date().getFullYear();
+ return (
+
+ );
+ }
+}
+
+module.exports = Footer;
diff --git a/website/package.json b/website/package.json
new file mode 100644
index 000000000..ec2e7d746
--- /dev/null
+++ b/website/package.json
@@ -0,0 +1,14 @@
+{
+ "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.0.5"
+ }
+}
diff --git a/website/pages/en/help.js b/website/pages/en/help.js
new file mode 100755
index 000000000..696baa3d3
--- /dev/null
+++ b/website/pages/en/help.js
@@ -0,0 +1,46 @@
+/**
+ * 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;
+
+const siteConfig = require(process.cwd() + "/siteConfig.js");
+
+class Help extends React.Component {
+ render() {
+ const supportLinks = [
+ {
+ content: "Learn more using the [documentation on this site.](/docs/README.html)",
+ title: "Browse Docs"
+ },
+ {
+ content:
+ "For bugs and feature requests, please [open an issue](https://github.com/textlint/textlint/issues).",
+ title: "Join the community"
+ }
+ ];
+
+ return (
+
+
+
+
+
This project is maintained by a dedicated group of people.
+
+
+
+
+ );
+ }
+}
+
+module.exports = Help;
diff --git a/website/pages/en/index.js b/website/pages/en/index.js
new file mode 100755
index 000000000..e6342b3bc
--- /dev/null
+++ b/website/pages/en/index.js
@@ -0,0 +1,217 @@
+/**
+ * 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;
+
+const siteConfig = require(process.cwd() + "/siteConfig.js");
+
+function imgUrl(img) {
+ return siteConfig.baseUrl + "img/" + img;
+}
+
+function docUrl(doc, language) {
+ return siteConfig.baseUrl + "docs/" + (language ? language + "/" : "") + doc;
+}
+
+function pageUrl(page, language) {
+ return siteConfig.baseUrl + (language ? language + "/" : "") + page;
+}
+
+class Button extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+Button.defaultProps = {
+ target: "_self"
+};
+
+const SplashContainer = props => (
+
+);
+
+const Logo = props => (
+
+
+
+);
+
+const ProjectTitle = props => (
+
+ {siteConfig.title}
+ {siteConfig.tagline}
+
+);
+
+const PromoSection = props => (
+
+);
+
+class HomeSplash extends React.Component {
+ render() {
+ let language = this.props.language || "";
+ return (
+
+
+
+
+
+ Try It Out
+ GitHub
+
+
+
+ );
+ }
+}
+
+const Block = props => (
+
+
+
+);
+
+const Features = props => (
+
+ {[
+ {
+ content: "This is the content of my feature",
+ image: imgUrl("docusaurus.svg"),
+ imageAlign: "top",
+ title: "Feature One"
+ },
+ {
+ content: "The content of my second feature",
+ image: imgUrl("docusaurus.svg"),
+ imageAlign: "top",
+ title: "Feature Two"
+ }
+ ]}
+
+);
+
+const FeatureCallout = props => (
+
+
What is textlint?
+
+ textlint is an open source text linting utility written in JavaScript. It is hard to lint natural language
+ texts, but we try to resolve this issue by pluggable approach.
+
+
+);
+
+const LearnHow = props => (
+
+ {[
+ {
+ content: "Talk about learning how to use this",
+ image: imgUrl("docusaurus.svg"),
+ imageAlign: "right",
+ title: "Learn How"
+ }
+ ]}
+
+);
+
+const TryOut = props => (
+
+ {[
+ {
+ content: "Talk about trying this out",
+ image: imgUrl("docusaurus.svg"),
+ imageAlign: "left",
+ title: "Try it Out"
+ }
+ ]}
+
+);
+
+const Description = props => (
+
+ {[
+ {
+ content: "This is another description of how this project is useful",
+ image: imgUrl("docusaurus.svg"),
+ imageAlign: "right",
+ title: "Description"
+ }
+ ]}
+
+);
+
+const Showcase = props => {
+ if ((siteConfig.users || []).length === 0) {
+ return null;
+ }
+ const showcase = siteConfig.users
+ .filter(user => {
+ return user.pinned;
+ })
+ .map((user, i) => {
+ return (
+
+
+
+ );
+ });
+
+ return (
+
+
{"Who's Using This?"}
+
This project is used by all these people
+
{showcase}
+
+
+ );
+};
+
+class Index extends React.Component {
+ render() {
+ let language = this.props.language || "";
+
+ return (
+
+
+
+ {/* */}
+
+ {/* */}
+ {/* */}
+ {/* */}
+
+
+
+ );
+ }
+}
+
+module.exports = Index;
diff --git a/website/pages/en/users.js b/website/pages/en/users.js
new file mode 100644
index 000000000..09bbd8c6a
--- /dev/null
+++ b/website/pages/en/users.js
@@ -0,0 +1,48 @@
+/**
+ * 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 siteConfig = require(process.cwd() + "/siteConfig.js");
+
+class Users extends React.Component {
+ render() {
+ const showcase = siteConfig.users.map((user, i) => {
+ return (
+
+
+
+ );
+ });
+
+ return (
+
+
+
+
+
Who's Using This?
+
This project is used by many folks
+
+
{showcase}
+
Are you using this project?
+
+ Add your company
+
+
+
+
+ );
+ }
+}
+
+module.exports = Users;
diff --git a/website/sidebars.json b/website/sidebars.json
new file mode 100644
index 000000000..7a1d05401
--- /dev/null
+++ b/website/sidebars.json
@@ -0,0 +1,10 @@
+{
+ "docs": {
+ "Docusaurus": ["doc1"],
+ "First Category": ["doc2"],
+ "Second Category": ["doc3"]
+ },
+ "docs-other": {
+ "First Category": ["doc4", "doc5"]
+ }
+}
diff --git a/website/siteConfig.js b/website/siteConfig.js
new file mode 100644
index 000000000..482a846a1
--- /dev/null
+++ b/website/siteConfig.js
@@ -0,0 +1,57 @@
+const users = [
+ {
+ caption: "SURVIVEJS - WEBPACK",
+ image: "https://www.gravatar.com/avatar/b26ec3c2769168c2cbc64cc3df9cdd9c?s=200",
+ infoLink: "https://survivejs.com/webpack/",
+ pinned: true
+ },
+ {
+ caption: "Hoodie",
+ image: "http://hoodiehq.github.io/hoodie-css/src/content_img/animals/low-profile-dog-3.png",
+ infoLink: "http://hood.ie/",
+ pinned: true
+ },
+ {
+ caption: "JavaScriptの入門書",
+ image: "http://78.media.tumblr.com/avatar_c63524fcb991_128.pnj",
+ infoLink: "https://asciidwango.github.io/js-primer/ ",
+ pinned: true
+ },
+ {
+ caption: "jp.vuejs.org",
+ image: "https://avatars3.githubusercontent.com/u/11144750?s=200&v=4",
+ infoLink: "https://github.com/vuejs-jp/jp.vuejs.org",
+ pinned: true
+ }
+];
+
+const siteConfig = {
+ title: "textlint" /* title for your website */,
+ tagline: "The pluggable linting tool for text and markdown",
+ url: "https://textlint.github.io" /* your website url */,
+ baseUrl: "/" /* base url for your project */,
+ organizationName: "textlint", // or set an env variable ORGANIZATION_NAME
+ projectName: "textlint",
+ headerLinks: [{ doc: "README", label: "Docs" }, { page: "help", label: "Help" }, { blog: true, label: "Blog" }],
+ users,
+ /* path to images for header/footer */
+ headerIcon: "img/textlint-icon_256x256.png",
+ footerIcon: "img/textlint-icon_256x256.png",
+ favicon: "img/textlint-icon_256x256.png",
+ /* colors for website */
+ colors: {
+ primaryColor: "#5acbe3",
+ secondaryColor: "#f9f2f4"
+ },
+ // This copyright info is used in /core/Footer.js and blog rss/atom feeds.
+ copyright: "Copyright © " + new Date().getFullYear() + "textlint organization",
+ highlight: {
+ // Highlight.js theme to use for syntax highlighting in code blocks
+ theme: "default"
+ },
+ scripts: ["https://buttons.github.io/buttons.js"],
+ // You may provide arbitrary config keys to be used as needed by your template.
+ repoUrl: "https://github.com/textlint/textlint"
+};
+
+module.exports = siteConfig;
diff --git a/website/static/css/custom.css b/website/static/css/custom.css
new file mode 100644
index 000000000..da029f78e
--- /dev/null
+++ b/website/static/css/custom.css
@@ -0,0 +1,16 @@
+/* your custom css */
+
+@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) {
+}
diff --git a/website/static/img/textlint-icon_256x256.png b/website/static/img/textlint-icon_256x256.png
new file mode 100644
index 000000000..9463bc769
Binary files /dev/null and b/website/static/img/textlint-icon_256x256.png differ
diff --git a/website/static/img/textlint-icon_black-white-128x128.png b/website/static/img/textlint-icon_black-white-128x128.png
new file mode 100644
index 000000000..c318c8e8e
Binary files /dev/null and b/website/static/img/textlint-icon_black-white-128x128.png differ