+
# Anvil
Anvil is like OpenAPI schemas for microservices, but instead of only documenting your http routes, it helps you to manage most of the aspects of all your microservices at a global scale. It's created to medium~big companies and suffer on delivering things with velocity and consistency.
@@ -74,7 +78,7 @@ Anvil plugins:
## How Anvil work
-Anvil has 4 main parts, each one responsible for a specific complementary role.
+Anvil has 5 main parts, each one responsible for a specific complementary role.
### `*.anv` files
@@ -103,20 +107,10 @@ Generators allows you to generate code based on a `.anv` config. They come in va
Generator are were the magic oh Anvil happens.
-## Meaning
-
-- Domain: Name of the domain being documented
-- Relationships: The relationships that your domain have with other domains and micro-services
-- Types: Generic types to be used as Input or Output for `Repository` and `Usecase` methods
-- Enums: Enums to be used as types for `Entity`, `Events` and `Repository` and `Usecase` methods
-- Entities: Tables on your database
-- Repository: The way that you communicate with the tables on your database
-- Events: Events emitted by this domain
-- Usecase: Where all the business logic stays, has the methods to be used by the consumers through delivery methods
-- Delivery: General config for delivery methods
+### Plugins
-## Recommended Confidentiality Levels
+Plugins do side-effects with Anvil, like:
+- Create tasks in Jira based on the changes of the schema.
+- Notify breaking changes to dependent projects
-- Low: Can be accessed by anyone with access to the service, can be logged and send in events
-- Medium: Can only be accessed by services with special permission, cannot be logged or send in events
-- High: Can only be accessed inside the domain, cannot be accessed by other services, logged or send in events
+Very useful for Agile environments.
diff --git a/docs/docs/generators/_category_.json b/docs/docs/generators/_category_.json
new file mode 100644
index 0000000..4f4457b
--- /dev/null
+++ b/docs/docs/generators/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "Generators",
+ "position": 4,
+ "link": {
+ "type": "generated-index",
+ "description": "How to develop generators"
+ }
+}
diff --git a/docs/docs/generators/communication.md b/docs/docs/generators/communication.md
new file mode 100644
index 0000000..ad7b2c7
--- /dev/null
+++ b/docs/docs/generators/communication.md
@@ -0,0 +1,5 @@
+---
+sidebar_position: 3
+---
+
+# Communication between CLI & generator
diff --git a/docs/docs/generators/generator-parts.md b/docs/docs/generators/generator-parts.md
new file mode 100644
index 0000000..6075b1c
--- /dev/null
+++ b/docs/docs/generators/generator-parts.md
@@ -0,0 +1,11 @@
+---
+sidebar_position: 4
+---
+
+# Parts of a generator
+
+Usually, you generator will have the following parts:
+- Methods:
+ - `create`
+ - `update`
+ - `delete`
diff --git a/docs/docs/generators/internal-schema.md b/docs/docs/generators/internal-schema.md
new file mode 100644
index 0000000..030a4b3
--- /dev/null
+++ b/docs/docs/generators/internal-schema.md
@@ -0,0 +1,35 @@
+---
+sidebar_position: 2
+---
+
+# Internal Schema
+
+We have 2 `schema`s.
+
+The first thing that you need to know when developing for Anvil is that the `schema` that Anvil uses internally is completly different than the one that the users write (`.anv` files).
+
+While the `schema` for written by users is focosed on:
+- Beign easily understandable for humans
+- Beign able to share knowledge to other humans (trough comments)
+- Beign easy and lean to write
+- Beign divisible in multiple files
+- Organized in the way that you architect your API
+
+The internal `schema` that Anvil uses is focused on:
+- Beign performatic to parse by the machine
+- Having everything that you need in one single file
+- Already have all the references resolved
+- Most performative as possible to access all the values that you may need
+- Organized on the way that your program will generate things
+
+To identify the difference between processed / internal `schema`s and "user-friendly" `schema`s, we have 2 different types of files:
+- `.anv`: user friendly schema, the one described [here](../schema).
+- `.anvp`: processed schema, made by the machine for the machine
+
+You will never touch a `.anvp` file, but Anvil will always use this format to communicate to your generator.
+
+## When and how does Anvil CLI communicates with the generator?
+
+Anvil CLI calls your generator when the configuration says so.
+
+Anvil CLI uses `stdout`, a decision inspired by LSPs. All the information is formmated in **JSON string**.
diff --git a/docs/docs/generators/intro.md b/docs/docs/generators/intro.md
new file mode 100644
index 0000000..4f70ebd
--- /dev/null
+++ b/docs/docs/generators/intro.md
@@ -0,0 +1,35 @@
+---
+sidebar_position: 1
+---
+
+# Introduction
+
+Thanks for wanting to develop things for Anvil! We are here to try to make your journey as smooth as possible.
+
+In this page, we will guide you about the necessary things that you need to know **BEFORE** starting to create your generator.
+
+## What is a generator?
+
+Generators are CLIs that generate things.
+
+These things can be code, schemas, migrations, anything you want.
+
+They should not be used to perform side-actions, like create tasks on Jira, or do things that aren't related to generate things: Yout generator MUST have an output.
+
+To do side actions use [plugins](../plugins).
+
+## Do I need to use a specific language to create?
+
+No, you can use any programming language that you want, you just need to make it executable by the final user.
+
+Example: If you are creating a generator for NodeJs projects using NodeJs, the final user probably will have NodeJs installed, so you can ship JS files directly.
+
+You can run your generator any way that you want, the command to run it is specified on the `.anvilconfig` file.
+
+## How to create a generator?
+
+:::warning
+
+**BEFORE** creating your generator, please get to know and understand our [internal schema](./internal-schema).
+
+:::
diff --git a/docs/docs/intro.md b/docs/docs/intro.md
index 45e8604..5239ece 100644
--- a/docs/docs/intro.md
+++ b/docs/docs/intro.md
@@ -1,47 +1,68 @@
---
sidebar_position: 1
---
+# Anvil
-# Tutorial Intro
+Anvil is like OpenAPI schemas for microservices, but instead of only documenting your http routes, it helps you to manage most of the aspects of all your microservices at a global scale. It's created to medium~big companies and suffer on delivering things with velocity and consistency.
-Let's discover **Docusaurus in less than 5 minutes**.
+It follows an _schema-first_ approach, of instead of writing your code first, you write an schema, and it generates most of the code for you, all that parts that are repetitive and doesn't influence in the performance, while letting you have 100% control of the part that matters: the business logic.
-## Getting Started
+The schema is designed for **Event-Oriented, Domain-Driven, Decoupled MicroServices, with a Delivery-Usecase-Repository architecture and SQL Databases**. It still can be used for monoliths and other types of architectures, but we don't maintain the schema to be extremely flexible and a silver bullet for all the projects. Or goal here **IS NOT** to allow creativity, is to have a way to create scalable, secure and maintainable applications.
-Get started by **creating a new site**.
+## How Anvil can help you
-Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
+- Documentation tool:
+ - Were data is used across your whole system and projects
+ - If data is confidential / has any legal protection
+ - Which services and domains depends on each other
+ - Which events and routes does a service has, so you can subscribe to them without having to communicate with the owner team, making process faster
+- Code generation tool:
+ - Define your own project pattern and generate projects on your own way
+ - Ensure that developers follow a specific pattern
+ - Keep dependencies updated across all your projects
+ - Ensure that best practices / your practices are begin followed
+ - Automatic integrate observability tools, logging, anything you want, on your projects, by default
+ - Ensure standards on variable names, event names and patterns, folder structure and project architecture
+- Refactoring tool:
+ - Want to refactor an old project in a new language / pattern? Use the same schema, a different generator, and you only have to copy-paste / do small adjusts on the business logic. Decrease the refactoring time by an immensurable amount of time.
+ - Test the same project on different languages and architectures, to see which one is the best. Use one schema, different generators, and generate the same API in multiple languages in a fraction of the time that it would took.
-### What you'll need
+Anvil allows you to write once, document and generate everywhere. Once that you have your schema defined, a lot of doors opens to you.
-- [Node.js](https://nodejs.org/en/download/) version 18.0 or above:
- - When installing Node.js, you are recommended to check all checkboxes related to dependencies.
+## What INS'T Anvil
-## Generate a new site
+- Something to control/create/update your infrastructure like CloudFormation, Terraform or Serverless Framework
+- A framework to magically implement things under the hood, hide complexity and make you dependent on it
+- Something to guide exactly how you should implement your code, your architecture, your folder structure, and so on
+- A message bus to help you send and receive events
-Generate a new Docusaurus site using the **classic template**.
+## Why use Anvil
-The classic template will automatically be added to your project after you run the command:
+**TL;DR**
+Anvil will help you to:
+- Need less developers to accomplish the same (probably even best) results
+- Decrease the amount of time that it takes to create new products and features, without having to compromise the quality and security of the software
+- Better divide the responsibilities of your team, to get the best that they can offer and not needing so many experienced developers to create amazing products
-```bash
-npm init docusaurus@latest my-website classic
-```
+In large organizations, we usually have hundreds or even thousands of micro-services, teams, events, packages and team members changing teams in a daily basis. It's very hard and demanding to maintain everything, to share these knowledge of the best practices, to ensure that all developers not only know how to implement certain patterns but know the way that the company implements certain patterns.
-You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.
+Anvil is created for these kind of ecosystems. It allows you to have one centralized small team of extremely capable developers that say how the things will work, define rules, best practices, standard libraries, and everything else that you need or want to defined, and all the other teams and members of your organization will follow these rules and patterns.
-The command also installs all necessary dependencies you need to run Docusaurus.
+## How Anvil does these things?
-## Start your site
+Anvil by itself:
+- _Schema-first_ approaches help you to visualize the current state of your system in a very easy and fast way: Instead of having to understand code, the project pattern, searching in a bunch of files, go directly to the ONE file definition anf figure it out right away.
+- Instead of trying to reinvent the wheel, you can follow a standardized architecture that is scalable, clean, flexible, follows the best practices and allows the work to be divided in multiple steps that can be executed in parallel
+- Standardize all you micro-services to follow the exact same patterns for EVERYTHING, decreasing a lot the learning curve and the effort necessary to maintain them
+- Allows tracking and usage of confidential and private data, like user's emails, to complain with regulations
-Run the development server:
+Anvil generators:
+- Generate e2e tests, useful for early stage startups that can't afford a QA or have enough time to implement more complex tests
+- Generate `.proto` files for gRPC APIs and OpenAPI specs for REST APIs
+- Generate database migrations and automatically handle them, begin able to easily see the current state of your database by looking at the schema file
+- Generate standardized clients for your APIs, with automatically generate `CHANGELOG.md`s that follows [SemVer](https://semver.org)
+- You are not stuck to Anvil. It's not a framework, it generates code that you have 100% control of. If you don't want to use Anvil anymore, it will have no impact on your systems.
-```bash
-cd my-website
-npm run start
-```
-
-The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.
-
-The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.
-
-Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes.
+Anvil plugins:
+- Integration with other tools like Jira, Linear, Slack or your own custom system to send notifications / perform tasks
+- Easy to change things at a global scale: Do not get stuck into a language, framework or architecture anymore, if you want to change it one day, it will be 100x times easier and faster.
diff --git a/docs/docs/plugins/_category_.json b/docs/docs/plugins/_category_.json
new file mode 100644
index 0000000..dadafae
--- /dev/null
+++ b/docs/docs/plugins/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "Plugins",
+ "position": 3,
+ "link": {
+ "type": "generated-index",
+ "description": "How to develop plugins"
+ }
+}
diff --git a/docs/docs/tutorial-basics/_category_.json b/docs/docs/tutorial-basics/_category_.json
deleted file mode 100644
index 2e6db55..0000000
--- a/docs/docs/tutorial-basics/_category_.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "label": "Tutorial - Basics",
- "position": 2,
- "link": {
- "type": "generated-index",
- "description": "5 minutes to learn the most important Docusaurus concepts."
- }
-}
diff --git a/docs/docs/tutorial-basics/congratulations.md b/docs/docs/tutorial-basics/congratulations.md
deleted file mode 100644
index 04771a0..0000000
--- a/docs/docs/tutorial-basics/congratulations.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-sidebar_position: 6
----
-
-# Congratulations!
-
-You have just learned the **basics of Docusaurus** and made some changes to the **initial template**.
-
-Docusaurus has **much more to offer**!
-
-Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**.
-
-Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610)
-
-## What's next?
-
-- Read the [official documentation](https://docusaurus.io/)
-- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config)
-- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration)
-- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout)
-- Add a [search bar](https://docusaurus.io/docs/search)
-- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase)
-- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support)
diff --git a/docs/docs/tutorial-basics/create-a-blog-post.md b/docs/docs/tutorial-basics/create-a-blog-post.md
deleted file mode 100644
index 550ae17..0000000
--- a/docs/docs/tutorial-basics/create-a-blog-post.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-sidebar_position: 3
----
-
-# Create a Blog Post
-
-Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed...
-
-## Create your first Post
-
-Create a file at `blog/2021-02-28-greetings.md`:
-
-```md title="blog/2021-02-28-greetings.md"
----
-slug: greetings
-title: Greetings!
-authors:
- - name: Joel Marcey
- title: Co-creator of Docusaurus 1
- url: https://github.com/JoelMarcey
- image_url: https://github.com/JoelMarcey.png
- - name: Sébastien Lorber
- title: Docusaurus maintainer
- url: https://sebastienlorber.com
- image_url: https://github.com/slorber.png
-tags: [greetings]
----
-
-Congratulations, you have made your first post!
-
-Feel free to play around and edit this post as much as you like.
-```
-
-A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings).
diff --git a/docs/docs/tutorial-basics/create-a-document.md b/docs/docs/tutorial-basics/create-a-document.md
deleted file mode 100644
index c22fe29..0000000
--- a/docs/docs/tutorial-basics/create-a-document.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-sidebar_position: 2
----
-
-# Create a Document
-
-Documents are **groups of pages** connected through:
-
-- a **sidebar**
-- **previous/next navigation**
-- **versioning**
-
-## Create your first Doc
-
-Create a Markdown file at `docs/hello.md`:
-
-```md title="docs/hello.md"
-# Hello
-
-This is my **first Docusaurus document**!
-```
-
-A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello).
-
-## Configure the Sidebar
-
-Docusaurus automatically **creates a sidebar** from the `docs` folder.
-
-Add metadata to customize the sidebar label and position:
-
-```md title="docs/hello.md" {1-4}
----
-sidebar_label: 'Hi!'
-sidebar_position: 3
----
-
-# Hello
-
-This is my **first Docusaurus document**!
-```
-
-It is also possible to create your sidebar explicitly in `sidebars.js`:
-
-```js title="sidebars.js"
-export default {
- tutorialSidebar: [
- 'intro',
- // highlight-next-line
- 'hello',
- {
- type: 'category',
- label: 'Tutorial',
- items: ['tutorial-basics/create-a-document'],
- },
- ],
-};
-```
diff --git a/docs/docs/tutorial-basics/create-a-page.md b/docs/docs/tutorial-basics/create-a-page.md
deleted file mode 100644
index 20e2ac3..0000000
--- a/docs/docs/tutorial-basics/create-a-page.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-sidebar_position: 1
----
-
-# Create a Page
-
-Add **Markdown or React** files to `src/pages` to create a **standalone page**:
-
-- `src/pages/index.js` → `localhost:3000/`
-- `src/pages/foo.md` → `localhost:3000/foo`
-- `src/pages/foo/bar.js` → `localhost:3000/foo/bar`
-
-## Create your first React Page
-
-Create a file at `src/pages/my-react-page.js`:
-
-```jsx title="src/pages/my-react-page.js"
-import React from 'react';
-import Layout from '@theme/Layout';
-
-export default function MyReactPage() {
- return (
-
- My React page
- This is a React page
-
- );
-}
-```
-
-A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page).
-
-## Create your first Markdown Page
-
-Create a file at `src/pages/my-markdown-page.md`:
-
-```mdx title="src/pages/my-markdown-page.md"
-# My Markdown page
-
-This is a Markdown page
-```
-
-A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page).
diff --git a/docs/docs/tutorial-basics/deploy-your-site.md b/docs/docs/tutorial-basics/deploy-your-site.md
deleted file mode 100644
index 1c50ee0..0000000
--- a/docs/docs/tutorial-basics/deploy-your-site.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-sidebar_position: 5
----
-
-# Deploy your site
-
-Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**).
-
-It builds your site as simple **static HTML, JavaScript and CSS files**.
-
-## Build your site
-
-Build your site **for production**:
-
-```bash
-npm run build
-```
-
-The static files are generated in the `build` folder.
-
-## Deploy your site
-
-Test your production build locally:
-
-```bash
-npm run serve
-```
-
-The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/).
-
-You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**).
diff --git a/docs/docs/tutorial-basics/markdown-features.mdx b/docs/docs/tutorial-basics/markdown-features.mdx
deleted file mode 100644
index 35e0082..0000000
--- a/docs/docs/tutorial-basics/markdown-features.mdx
+++ /dev/null
@@ -1,152 +0,0 @@
----
-sidebar_position: 4
----
-
-# Markdown Features
-
-Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**.
-
-## Front Matter
-
-Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/):
-
-```text title="my-doc.md"
-// highlight-start
----
-id: my-doc-id
-title: My document title
-description: My document description
-slug: /my-custom-url
----
-// highlight-end
-
-## Markdown heading
-
-Markdown text with [links](./hello.md)
-```
-
-## Links
-
-Regular Markdown links are supported, using url paths or relative file paths.
-
-```md
-Let's see how to [Create a page](/create-a-page).
-```
-
-```md
-Let's see how to [Create a page](./create-a-page.md).
-```
-
-**Result:** Let's see how to [Create a page](./create-a-page.md).
-
-## Images
-
-Regular Markdown images are supported.
-
-You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`):
-
-```md
-![Docusaurus logo](/img/docusaurus.png)
-```
-
-![Docusaurus logo](/img/docusaurus.png)
-
-You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them:
-
-```md
-![Docusaurus logo](./img/docusaurus.png)
-```
-
-## Code Blocks
-
-Markdown code blocks are supported with Syntax highlighting.
-
-````md
-```jsx title="src/components/HelloDocusaurus.js"
-function HelloDocusaurus() {
- return
Hello, Docusaurus!
;
-}
-```
-````
-
-```jsx title="src/components/HelloDocusaurus.js"
-function HelloDocusaurus() {
- return
Hello, Docusaurus!
;
-}
-```
-
-## Admonitions
-
-Docusaurus has a special syntax to create admonitions and callouts:
-
-```md
-:::tip My tip
-
-Use this awesome feature option
-
-:::
-
-:::danger Take care
-
-This action is dangerous
-
-:::
-```
-
-:::tip My tip
-
-Use this awesome feature option
-
-:::
-
-:::danger Take care
-
-This action is dangerous
-
-:::
-
-## MDX and React Components
-
-[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**:
-
-```jsx
-export const Highlight = ({children, color}) => (
-
{
- alert(`You clicked the color ${color} with label ${children}`)
- }}>
- {children}
-
-);
-
-This is
Docusaurus green !
-
-This is
Facebook blue !
-```
-
-export const Highlight = ({children, color}) => (
-
{
- alert(`You clicked the color ${color} with label ${children}`);
- }}>
- {children}
-
-);
-
-This is
Docusaurus green !
-
-This is
Facebook blue !
diff --git a/docs/docs/tutorial-extras/_category_.json b/docs/docs/tutorial-extras/_category_.json
deleted file mode 100644
index a8ffcc1..0000000
--- a/docs/docs/tutorial-extras/_category_.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "label": "Tutorial - Extras",
- "position": 3,
- "link": {
- "type": "generated-index"
- }
-}
diff --git a/docs/docs/tutorial-extras/img/docsVersionDropdown.png b/docs/docs/tutorial-extras/img/docsVersionDropdown.png
deleted file mode 100644
index 97e4164..0000000
Binary files a/docs/docs/tutorial-extras/img/docsVersionDropdown.png and /dev/null differ
diff --git a/docs/docs/tutorial-extras/img/localeDropdown.png b/docs/docs/tutorial-extras/img/localeDropdown.png
deleted file mode 100644
index e257edc..0000000
Binary files a/docs/docs/tutorial-extras/img/localeDropdown.png and /dev/null differ
diff --git a/docs/docs/tutorial-extras/manage-docs-versions.md b/docs/docs/tutorial-extras/manage-docs-versions.md
deleted file mode 100644
index ccda0b9..0000000
--- a/docs/docs/tutorial-extras/manage-docs-versions.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-sidebar_position: 1
----
-
-# Manage Docs Versions
-
-Docusaurus can manage multiple versions of your docs.
-
-## Create a docs version
-
-Release a version 1.0 of your project:
-
-```bash
-npm run docusaurus docs:version 1.0
-```
-
-The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created.
-
-Your docs now have 2 versions:
-
-- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs
-- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs**
-
-## Add a Version Dropdown
-
-To navigate seamlessly across versions, add a version dropdown.
-
-Modify the `docusaurus.config.js` file:
-
-```js title="docusaurus.config.js"
-export default {
- themeConfig: {
- navbar: {
- items: [
- // highlight-start
- {
- type: 'docsVersionDropdown',
- },
- // highlight-end
- ],
- },
- },
-};
-```
-
-The docs version dropdown appears in your navbar:
-
-![Docs Version Dropdown](./img/docsVersionDropdown.png)
-
-## Update an existing version
-
-It is possible to edit versioned docs in their respective folder:
-
-- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello`
-- `docs/hello.md` updates `http://localhost:3000/docs/next/hello`
diff --git a/docs/docs/tutorial-extras/translate-your-site.md b/docs/docs/tutorial-extras/translate-your-site.md
deleted file mode 100644
index b5a644a..0000000
--- a/docs/docs/tutorial-extras/translate-your-site.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-sidebar_position: 2
----
-
-# Translate your site
-
-Let's translate `docs/intro.md` to French.
-
-## Configure i18n
-
-Modify `docusaurus.config.js` to add support for the `fr` locale:
-
-```js title="docusaurus.config.js"
-export default {
- i18n: {
- defaultLocale: 'en',
- locales: ['en', 'fr'],
- },
-};
-```
-
-## Translate a doc
-
-Copy the `docs/intro.md` file to the `i18n/fr` folder:
-
-```bash
-mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/
-
-cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md
-```
-
-Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French.
-
-## Start your localized site
-
-Start your site on the French locale:
-
-```bash
-npm run start -- --locale fr
-```
-
-Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated.
-
-:::caution
-
-In development, you can only use one locale at a time.
-
-:::
-
-## Add a Locale Dropdown
-
-To navigate seamlessly across languages, add a locale dropdown.
-
-Modify the `docusaurus.config.js` file:
-
-```js title="docusaurus.config.js"
-export default {
- themeConfig: {
- navbar: {
- items: [
- // highlight-start
- {
- type: 'localeDropdown',
- },
- // highlight-end
- ],
- },
- },
-};
-```
-
-The locale dropdown now appears in your navbar:
-
-![Locale Dropdown](./img/localeDropdown.png)
-
-## Build your localized site
-
-Build your site for a specific locale:
-
-```bash
-npm run build -- --locale fr
-```
-
-Or build your site to include all the locales at once:
-
-```bash
-npm run build
-```
diff --git a/docs/docs/use/_category_.json b/docs/docs/use/_category_.json
new file mode 100644
index 0000000..2313396
--- /dev/null
+++ b/docs/docs/use/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "Use",
+ "position": 2,
+ "link": {
+ "type": "generated-index",
+ "description": "How to use Anvil"
+ }
+}
diff --git a/docs/docs/use/schema.md b/docs/docs/use/schema.md
new file mode 100644
index 0000000..3df3306
--- /dev/null
+++ b/docs/docs/use/schema.md
@@ -0,0 +1,48 @@
+---
+sidebar_position: 2
+---
+
+# Schema
+
+## Linter & Autocomplete
+
+The best option of linter for now is [YAML Language Support](https://github.com/redhat-developer/yaml-language-server) by Red Hat.
+
+They have extensions for the most famous code editors:
+- Zed: Already installed by default
+- VSCode: [Extension](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)
+- Neovim: You must [configure the LSP manually](https://neovim.io/doc/user/lsp.html).
+
+To configure the LSP, you must specify a JSON schema that we provide:
+```
+https://github.com/henriqueleite42/anvil/blob/master/schemas/v1.0.0.json
+```
+
+Heres an example of how to configure it in VSCode and Zed, at the begging of your `.anv` file, add this:
+```
+# yaml-language-server: $schema=https://github.com/henriqueleite42/anvil/blob/master/schemas/v1.0.0.json
+```
+
+:::danger
+
+Be sure to replace the schema version to the latest version.
+
+:::
+
+## Parts
+
+- Domain: Name of the domain being documented
+- Relationships: The relationships that your domain have with other domains and micro-services
+- Types: Generic types to be used as Input or Output for `Repository` and `Usecase` methods
+- Enums: Enums to be used as types for `Entity`, `Events` and `Repository` and `Usecase` methods
+- Entities: Tables on your database
+- Repository: The way that you communicate with the tables on your database
+- Events: Events emitted by this domain
+- Usecase: Where all the business logic stays, has the methods to be used by the consumers through delivery methods
+- Delivery: General config for delivery methods
+
+## Recommended Confidentiality Levels
+
+- Low: Can be accessed by anyone with access to the service, can be logged and send in events
+- Medium: Can only be accessed by services with special permission, cannot be logged or send in events
+- High: Can only be accessed inside the domain, cannot be accessed by other services, logged or send in events
diff --git a/docs/static/img/logo.webp b/docs/static/img/logo.webp
new file mode 100644
index 0000000..a2ffdb3
Binary files /dev/null and b/docs/static/img/logo.webp differ