|
| 1 | +# TutorialKit Starter |
| 2 | + |
| 3 | +👋 Welcome to TutorialKit! |
| 4 | + |
| 5 | +This README includes everything you need to start writing your tutorial content quickly. |
| 6 | + |
| 7 | +## Project Structure |
| 8 | + |
| 9 | +```bash |
| 10 | +. |
| 11 | +├── astro.config.mjs # TutorialKit uses Astro 🚀 (https://astro.build) |
| 12 | +├── src |
| 13 | +│ ├── ... |
| 14 | +│ ├── content |
| 15 | +│ │ └── tutorial # Your tutorial content lives here |
| 16 | +│ └── templates # Your templates (see below for more information) |
| 17 | +├── public |
| 18 | +│ ├── favicon.svg |
| 19 | +│ └── logo.svg # Default logo used in top left for your tutorial |
| 20 | +├── ... |
| 21 | +├── theme.ts # Customize the theme of the tutorial |
| 22 | +└── uno.config.ts # UnoCSS config (https://unocss.dev/) |
| 23 | +``` |
| 24 | + |
| 25 | +## Getting Started |
| 26 | + |
| 27 | +Make sure you have all dependencies installed and started the dev server: |
| 28 | + |
| 29 | +```bash |
| 30 | +pnpm install |
| 31 | +pnpm run dev |
| 32 | +``` |
| 33 | + |
| 34 | +## UI Structure |
| 35 | + |
| 36 | +```markdown |
| 37 | +┌─────────────────────────────────────────────────────┐ |
| 38 | +│ ● ● ● │ |
| 39 | +├───────────────────────────┬─────────────────────────┤ |
| 40 | +│ │ │ |
| 41 | +│ │ │ |
| 42 | +│ │ │ |
| 43 | +│ │ │ |
| 44 | +│ │ Code Editor │ |
| 45 | +│ │ │ |
| 46 | +│ │ │ |
| 47 | +│ │ │ |
| 48 | +│ │ │ |
| 49 | +│ Content ├─────────────────────────┤ |
| 50 | +│ │ │ |
| 51 | +│ │ │ |
| 52 | +│ │ Preview & Boot Screen │ |
| 53 | +│ │ │ |
| 54 | +│ │ │ |
| 55 | +│ ├─────────────────────────┤ |
| 56 | +│ │ │ |
| 57 | +│ │ Terminal │ |
| 58 | +│ │ │ |
| 59 | +└───────────────────────────┴─────────────────────────┘ |
| 60 | +``` |
| 61 | + |
| 62 | +## Authoring Content |
| 63 | + |
| 64 | +A tutorial consists of parts, chapters, and lessons. For example: |
| 65 | + |
| 66 | +- Part 1: Basics of Vite |
| 67 | + - Chapter 1: Introduction |
| 68 | + - Lesson 1: Welcome! |
| 69 | + - Lesson 2: Why Vite? |
| 70 | + - … |
| 71 | + - Chapter 2: Your first Vite project |
| 72 | +- Part 2: CLI |
| 73 | + - … |
| 74 | + |
| 75 | +Your content is organized into lessons, with chapters and parts providing a structure and defining common metadata for these lessons. |
| 76 | + |
| 77 | +Here’s an example of how it would look like in `src/content/tutorial`: |
| 78 | + |
| 79 | +```bash |
| 80 | +tutorial |
| 81 | +├── 1-basics-of-vite |
| 82 | +│ ├── 1-introduction |
| 83 | +│ │ ├── 1-welcome |
| 84 | +│ │ │ ├── content.md # The content of your lesson |
| 85 | +│ │ │ ├── _files # Initial set of files |
| 86 | +│ │ │ │ └── ... |
| 87 | +│ │ │ └── _solution # Solution of the lesson |
| 88 | +│ │ │ └── ... |
| 89 | +│ │ ├── 2-why-vite |
| 90 | +│ │ │ ├── content.md |
| 91 | +│ │ │ └── _files |
| 92 | +│ │ │ └── ... |
| 93 | +│ │ └── meta.md # Metadata for the chapter |
| 94 | +│ └── meta.md # Metadata for the part |
| 95 | +├── 2-advanced |
| 96 | +│ ├── ... |
| 97 | +│ └── meta.md |
| 98 | +└── meta.md # Metadata for the tutorial |
| 99 | +``` |
| 100 | + |
| 101 | +### Supported Content Formats |
| 102 | + |
| 103 | +Content can be either written as Markdown (`.md`) files or using [MDX](https://mdxjs.com/) (`.mdx`). Files have a Front Matter at the top that contains the metadata and everything that comes after is the content of your lesson. |
| 104 | + |
| 105 | +**Example** |
| 106 | + |
| 107 | +```markdown |
| 108 | +--- |
| 109 | +type: lesson |
| 110 | +title: Welcome! |
| 111 | +--- |
| 112 | + |
| 113 | +# Welcome to TutorialKit! |
| 114 | + |
| 115 | +In this tutorial we'll walk you through how to setup your environment to |
| 116 | +write your first tutorial 🤩 |
| 117 | +``` |
| 118 | + |
| 119 | +The metadata file (`meta.md`) of parts, chapters, and lessons do not contain any content. It only contains the Front Matter for configuration. |
| 120 | + |
| 121 | +### Metadata |
| 122 | + |
| 123 | +Here is an overview of the properties that can be used as part of the Front Matter: |
| 124 | + |
| 125 | +| Property | Required | Type | Inherited | Description | |
| 126 | +| --------------- | -------- | --------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 127 | +| type | ✅ | `part \| chapter \| lesson` | ❌ | The type of the metadata. | |
| 128 | +| title | ✅ | `string` | ❌ | The title of the part, chapter, or lesson. | |
| 129 | +| slug | | `string` | ❌ | Let’s you customize the URL pathname which is `/:partSlug/:chapterSlug/:lessonSlug`. | |
| 130 | +| previews | | `Preview[]` | ✅ | Configure which ports should be used for the previews. If not specified, the lowest port will be used. | |
| 131 | +| autoReload | | `boolean` | ✅ | Navigating to a lesson that specifies `autoReload` will always reload the preview. This is typically only needed if your server does not support HMR. | |
| 132 | +| prepareCommands | | `Command[]` | ✅ | List of commands to execute sequentially. They are typically used to install dependencies or to run scripts. | |
| 133 | +| mainCommand | | `Command` | ✅ | The main command to be executed. This command will run after the `prepareCommands`. | |
| 134 | + |
| 135 | +A `Command` has the following shape: |
| 136 | + |
| 137 | +```ts |
| 138 | +string | [command: string, title: string] | { command: string, title: string } |
| 139 | +``` |
| 140 | + |
| 141 | +The `title` is used as part of the boot screen (see [UI Structure](#ui-structure)). |
| 142 | + |
| 143 | +A `Preview` has the following shape: |
| 144 | + |
| 145 | +```ts |
| 146 | +string | [port: number, title: string] | { port: number, title: string } |
| 147 | +``` |
| 148 | + |
| 149 | +In most cases, metadata is inherited. For example, if you specify a `mainCommand` on a chapter without specifying it on any of its lessons, each lesson will use the `mainCommand` from its respective chapter. This extends to chapter and parts as well. |
0 commit comments