create-sailor 1.10.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -135
- package/dist/index.js +108 -2010
- package/package.json +16 -17
- package/templates/backends/python/README.md +0 -16
- package/templates/backends/python/_shared/__init__.py +0 -5
- package/templates/backends/python/pyproject.toml +0 -13
- package/templates/deploy/railway.toml +0 -13
- package/templates/deploy/vercel.json +0 -37
- package/templates/deploy/wrangler.gateway.toml +0 -11
- package/templates/deploy/wrangler.toml +0 -8
- package/templates/docs/docusaurus/README.md +0 -24
- package/templates/docs/docusaurus/docs/getting-started/develop.md +0 -20
- package/templates/docs/docusaurus/docs/getting-started/install.md +0 -11
- package/templates/docs/docusaurus/docs/intro.md +0 -15
- package/templates/docs/docusaurus/docusaurus.config.ts +0 -66
- package/templates/docs/docusaurus/package.json +0 -44
- package/templates/docs/docusaurus/sidebars.ts +0 -14
- package/templates/docs/docusaurus/src/css/custom.css +0 -22
- package/templates/docs/docusaurus/tsconfig.json +0 -7
- package/templates/docs/fumadocs/README.md +0 -46
- package/templates/docs/fumadocs/app/(home)/page.tsx +0 -22
- package/templates/docs/fumadocs/app/api/search/route.ts +0 -4
- package/templates/docs/fumadocs/app/docs/[[...slug]]/page.tsx +0 -39
- package/templates/docs/fumadocs/app/docs/layout.tsx +0 -11
- package/templates/docs/fumadocs/app/global.css +0 -10
- package/templates/docs/fumadocs/app/layout.tsx +0 -18
- package/templates/docs/fumadocs/content/docs/api.mdx +0 -31
- package/templates/docs/fumadocs/content/docs/concepts.mdx +0 -19
- package/templates/docs/fumadocs/content/docs/getting-started.mdx +0 -56
- package/templates/docs/fumadocs/content/docs/index.mdx +0 -17
- package/templates/docs/fumadocs/content/docs/meta.json +0 -4
- package/templates/docs/fumadocs/lib/source.ts +0 -7
- package/templates/docs/fumadocs/next.config.mjs +0 -20
- package/templates/docs/fumadocs/package.json +0 -33
- package/templates/docs/fumadocs/source.config.ts +0 -17
- package/templates/docs/fumadocs/tsconfig.json +0 -25
- package/templates/docs/mintlify/README.md +0 -25
- package/templates/docs/mintlify/api-reference/introduction.mdx +0 -25
- package/templates/docs/mintlify/introduction.mdx +0 -21
- package/templates/docs/mintlify/mint.json +0 -37
- package/templates/docs/mintlify/package.json +0 -14
- package/templates/docs/mintlify/quickstart.mdx +0 -26
- package/templates/docs/nextra/README.md +0 -35
- package/templates/docs/nextra/app/[[...mdxPath]]/page.tsx +0 -23
- package/templates/docs/nextra/app/layout.tsx +0 -36
- package/templates/docs/nextra/content/_meta.ts +0 -4
- package/templates/docs/nextra/content/getting-started.mdx +0 -35
- package/templates/docs/nextra/content/index.mdx +0 -18
- package/templates/docs/nextra/mdx-components.tsx +0 -10
- package/templates/docs/nextra/next.config.mjs +0 -9
- package/templates/docs/nextra/package.json +0 -25
- package/templates/docs/nextra/tsconfig.json +0 -21
- package/templates/docs/vitepress/.vitepress/config.ts +0 -35
- package/templates/docs/vitepress/README.md +0 -23
- package/templates/docs/vitepress/guide/getting-started.md +0 -26
- package/templates/docs/vitepress/guide/introduction.md +0 -12
- package/templates/docs/vitepress/index.md +0 -23
- package/templates/docs/vitepress/package.json +0 -18
- package/templates/docs/vitepress/tsconfig.json +0 -15
- package/templates/orm/drizzle/README.md +0 -58
- package/templates/orm/drizzle/drizzle.config.ts +0 -16
- package/templates/orm/drizzle/migrations/.gitkeep +0 -0
- package/templates/orm/drizzle/package.json +0 -30
- package/templates/orm/drizzle/src/index.ts +0 -31
- package/templates/orm/drizzle/src/schema/auth.ts +0 -73
- package/templates/orm/drizzle/src/schema/billing.ts +0 -37
- package/templates/orm/drizzle/src/schema/index.ts +0 -3
- package/templates/orm/drizzle/src/schema/tenant.ts +0 -57
- package/templates/orm/drizzle/tsconfig.json +0 -16
- package/templates/workflows/README.md +0 -9
- package/templates/workflows/inngest/README.md +0 -3
- package/templates/workflows/inngest/welcome-email.ts +0 -30
- package/templates/workflows/n8n/README.md +0 -3
- package/templates/workflows/n8n/example-flow.json +0 -6
- package/templates/workflows/pusher/README.md +0 -3
- package/templates/workflows/pusher/events.ts +0 -6
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Getting Started
|
|
3
|
-
description: Run your first example in 5 minutes
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
{/* 2026 BEST PRACTICE: Getting Started's ONLY goal is 5-minute first example */}
|
|
7
|
-
{/* 2026 BEST PRACTICE: No architecture explanation here — that belongs in Concepts */}
|
|
8
|
-
{/* 2026 BEST PRACTICE: Structure: Install → Initialize → Hello World → Next steps */}
|
|
9
|
-
|
|
10
|
-
# Getting Started
|
|
11
|
-
|
|
12
|
-
## Install
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
npm install @your-product/sdk
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Initialize
|
|
19
|
-
|
|
20
|
-
```ts title="src/index.ts"
|
|
21
|
-
import { YourProduct } from '@your-product/sdk';
|
|
22
|
-
|
|
23
|
-
const client = new YourProduct({
|
|
24
|
-
apiKey: process.env.YOUR_API_KEY,
|
|
25
|
-
});
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Hello World
|
|
29
|
-
|
|
30
|
-
<Tabs items={['TypeScript', 'Python', 'cURL']}>
|
|
31
|
-
<Tab value="TypeScript">
|
|
32
|
-
```ts
|
|
33
|
-
const result = await client.hello();
|
|
34
|
-
console.log(result);
|
|
35
|
-
```
|
|
36
|
-
</Tab>
|
|
37
|
-
<Tab value="Python">
|
|
38
|
-
```python
|
|
39
|
-
result = client.hello()
|
|
40
|
-
print(result)
|
|
41
|
-
```
|
|
42
|
-
</Tab>
|
|
43
|
-
<Tab value="cURL">
|
|
44
|
-
```bash
|
|
45
|
-
curl https://api.your-product.com/hello \
|
|
46
|
-
-H "Authorization: Bearer $YOUR_API_KEY"
|
|
47
|
-
```
|
|
48
|
-
</Tab>
|
|
49
|
-
</Tabs>
|
|
50
|
-
|
|
51
|
-
## Next steps
|
|
52
|
-
|
|
53
|
-
<Cards>
|
|
54
|
-
<Card title="Concepts" href="/docs/concepts" />
|
|
55
|
-
<Card title="API Reference" href="/docs/api" />
|
|
56
|
-
</Cards>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Welcome to {PRODUCT_NAME}
|
|
3
|
-
description: Your product's docs home page
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
{/* 2026 BEST PRACTICE: Hero with 2-3 line description, no marketing fluff */}
|
|
7
|
-
{/* 2026 BEST PRACTICE: 3-6 quick-start cards is highest-value module on docs home */}
|
|
8
|
-
|
|
9
|
-
# Welcome to {PRODUCT_NAME}
|
|
10
|
-
|
|
11
|
-
Build AI-native SaaS products faster.
|
|
12
|
-
|
|
13
|
-
<Cards>
|
|
14
|
-
<Card title="Getting Started" href="/docs/getting-started" description="Run your first example in 5 minutes" />
|
|
15
|
-
<Card title="Concepts" href="/docs/concepts" description="Core mental models" />
|
|
16
|
-
<Card title="API Reference" href="/docs/api" description="Complete API documentation" />
|
|
17
|
-
</Cards>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { createMDX } from "fumadocs-mdx/next";
|
|
2
|
-
|
|
3
|
-
const withMDX = createMDX({
|
|
4
|
-
configPath: "source.config.ts",
|
|
5
|
-
outDir: ".source",
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
/** @type {import('next').NextConfig} */
|
|
9
|
-
const nextConfig = {
|
|
10
|
-
reactStrictMode: true,
|
|
11
|
-
transpilePackages: [
|
|
12
|
-
"@nebutra/ui",
|
|
13
|
-
"@nebutra/tokens",
|
|
14
|
-
"fumadocs-ui",
|
|
15
|
-
"fumadocs-core",
|
|
16
|
-
"fumadocs-mdx",
|
|
17
|
-
],
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export default withMDX(nextConfig);
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@nebutra/docs",
|
|
3
|
-
"private": true,
|
|
4
|
-
"version": "0.0.1",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"predev": "fumadocs-mdx",
|
|
7
|
-
"dev": "next dev -p 3001",
|
|
8
|
-
"prebuild": "fumadocs-mdx",
|
|
9
|
-
"build": "_FUMADOCS_MDX=1 next build",
|
|
10
|
-
"start": "next start -p 3001",
|
|
11
|
-
"typecheck": "fumadocs-mdx && _FUMADOCS_MDX=1 next typegen && tsc --noEmit"
|
|
12
|
-
},
|
|
13
|
-
"dependencies": {
|
|
14
|
-
"@nebutra/tokens": "^0.1.0",
|
|
15
|
-
"@nebutra/ui": "^0.1.0",
|
|
16
|
-
"fumadocs-core": "^16.6.12",
|
|
17
|
-
"fumadocs-mdx": "^14.2.9",
|
|
18
|
-
"fumadocs-ui": "^16.6.12",
|
|
19
|
-
"next": "^16.2.6",
|
|
20
|
-
"react": "^19.2.4",
|
|
21
|
-
"react-dom": "^19.2.4"
|
|
22
|
-
},
|
|
23
|
-
"devDependencies": {
|
|
24
|
-
"@tailwindcss/postcss": "^4.2.1",
|
|
25
|
-
"@types/mdx": "^2.0.13",
|
|
26
|
-
"@types/node": "^22.19.15",
|
|
27
|
-
"@types/react": "^19.2.14",
|
|
28
|
-
"@types/react-dom": "^19.2.3",
|
|
29
|
-
"tailwindcss": "^4.2.1",
|
|
30
|
-
"typescript": "^5.9.3"
|
|
31
|
-
},
|
|
32
|
-
"license": "MIT"
|
|
33
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { defineConfig, defineDocs, frontmatterSchema } from "fumadocs-mdx/config";
|
|
2
|
-
|
|
3
|
-
export const docs = defineDocs({
|
|
4
|
-
dir: "content/docs",
|
|
5
|
-
docs: {
|
|
6
|
-
schema: frontmatterSchema,
|
|
7
|
-
},
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
export default defineConfig({
|
|
11
|
-
mdxOptions: {
|
|
12
|
-
// Add remark / rehype plugins here as needed.
|
|
13
|
-
// See: https://fumadocs.vercel.app/docs/mdx
|
|
14
|
-
remarkPlugins: [],
|
|
15
|
-
rehypePlugins: [],
|
|
16
|
-
},
|
|
17
|
-
});
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"target": "ES2022",
|
|
5
|
-
"lib": ["dom", "dom.iterable", "esnext"],
|
|
6
|
-
"allowJs": true,
|
|
7
|
-
"skipLibCheck": true,
|
|
8
|
-
"strict": true,
|
|
9
|
-
"noEmit": true,
|
|
10
|
-
"esModuleInterop": true,
|
|
11
|
-
"module": "esnext",
|
|
12
|
-
"moduleResolution": "bundler",
|
|
13
|
-
"resolveJsonModule": true,
|
|
14
|
-
"isolatedModules": true,
|
|
15
|
-
"incremental": false,
|
|
16
|
-
"jsx": "preserve",
|
|
17
|
-
"plugins": [{ "name": "next" }],
|
|
18
|
-
"baseUrl": ".",
|
|
19
|
-
"paths": {
|
|
20
|
-
"@/*": ["./*"]
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", ".source/**/*.ts"],
|
|
24
|
-
"exclude": ["node_modules"]
|
|
25
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# {PRODUCT_NAME} Docs
|
|
2
|
-
|
|
3
|
-
Documentation site for {PRODUCT_NAME}, built with [Mintlify](https://mintlify.com/).
|
|
4
|
-
|
|
5
|
-
## Develop
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm install
|
|
9
|
-
pnpm dev # http://localhost:3001
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Add a page
|
|
13
|
-
|
|
14
|
-
1. Create an `.mdx` file at the root or under a subdirectory
|
|
15
|
-
2. Add it to `navigation` in `mint.json`
|
|
16
|
-
|
|
17
|
-
## Deploy
|
|
18
|
-
|
|
19
|
-
Mintlify deploys from your `main` branch. Connect the repo at [dashboard.mintlify.com](https://dashboard.mintlify.com) — no build step needed.
|
|
20
|
-
|
|
21
|
-
## Check broken links
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
pnpm broken-links
|
|
25
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "API Reference"
|
|
3
|
-
description: "{PRODUCT_NAME} REST API"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Authentication
|
|
7
|
-
|
|
8
|
-
All endpoints require a bearer token in the `Authorization` header.
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
curl https://api.example.com/v1/health \
|
|
12
|
-
-H "Authorization: Bearer YOUR_TOKEN"
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Generating from OpenAPI
|
|
16
|
-
|
|
17
|
-
Mintlify can auto-generate this section from an OpenAPI spec. Add to `mint.json`:
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
{
|
|
21
|
-
"openapi": "https://api.example.com/openapi.json"
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Then run `mint openapi-to-mdx` to scaffold endpoint pages.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Introduction"
|
|
3
|
-
description: "Welcome to {PRODUCT_NAME}"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This is the documentation site for **{PRODUCT_NAME}**, scaffolded by [create-sailor](https://github.com/Nebutra/Nebutra-Sailor) with the [Mintlify](https://mintlify.com/) framework.
|
|
9
|
-
|
|
10
|
-
Mintlify is a hosted documentation platform that renders MDX with rich components and built-in search. There is no static build — Mintlify handles deployment from your `main` branch.
|
|
11
|
-
|
|
12
|
-
## What's included
|
|
13
|
-
|
|
14
|
-
<CardGroup cols={2}>
|
|
15
|
-
<Card title="Quickstart" icon="rocket" href="/quickstart">
|
|
16
|
-
Boot the docs site locally
|
|
17
|
-
</Card>
|
|
18
|
-
<Card title="API reference" icon="terminal" href="/api-reference/introduction">
|
|
19
|
-
OpenAPI-driven endpoints
|
|
20
|
-
</Card>
|
|
21
|
-
</CardGroup>
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://mintlify.com/schema.json",
|
|
3
|
-
"name": "{PRODUCT_NAME}",
|
|
4
|
-
"logo": {
|
|
5
|
-
"light": "/logo/light.svg",
|
|
6
|
-
"dark": "/logo/dark.svg"
|
|
7
|
-
},
|
|
8
|
-
"favicon": "/favicon.svg",
|
|
9
|
-
"colors": {
|
|
10
|
-
"primary": "#0033FE",
|
|
11
|
-
"light": "#0BF1C3",
|
|
12
|
-
"dark": "#0033FE"
|
|
13
|
-
},
|
|
14
|
-
"topbarLinks": [
|
|
15
|
-
{
|
|
16
|
-
"name": "Support",
|
|
17
|
-
"url": "mailto:hi@example.com"
|
|
18
|
-
}
|
|
19
|
-
],
|
|
20
|
-
"topbarCtaButton": {
|
|
21
|
-
"name": "Dashboard",
|
|
22
|
-
"url": "https://example.com/app"
|
|
23
|
-
},
|
|
24
|
-
"navigation": [
|
|
25
|
-
{
|
|
26
|
-
"group": "Get started",
|
|
27
|
-
"pages": ["introduction", "quickstart"]
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"group": "API reference",
|
|
31
|
-
"pages": ["api-reference/introduction"]
|
|
32
|
-
}
|
|
33
|
-
],
|
|
34
|
-
"footerSocials": {
|
|
35
|
-
"github": "https://github.com/your-org/your-repo"
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@nebutra/docs",
|
|
3
|
-
"private": true,
|
|
4
|
-
"version": "0.0.1",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"dev": "mint dev --port 3001",
|
|
7
|
-
"build": "mint build",
|
|
8
|
-
"broken-links": "mint broken-links"
|
|
9
|
-
},
|
|
10
|
-
"devDependencies": {
|
|
11
|
-
"mint": "^4.2.0"
|
|
12
|
-
},
|
|
13
|
-
"license": "MIT"
|
|
14
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Quickstart"
|
|
3
|
-
description: "Run the {PRODUCT_NAME} docs locally"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Install the Mintlify CLI
|
|
7
|
-
|
|
8
|
-
```bash
|
|
9
|
-
pnpm install
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Run the dev server
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
pnpm dev
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
The docs site runs on http://localhost:3001 with hot reload.
|
|
19
|
-
|
|
20
|
-
## Edit a page
|
|
21
|
-
|
|
22
|
-
All pages are MDX files at the project root or under subdirectories like `api-reference/`. The navigation is configured in `mint.json` — add new entries under the `navigation` array.
|
|
23
|
-
|
|
24
|
-
## Deploy
|
|
25
|
-
|
|
26
|
-
Mintlify deploys from your `main` branch automatically. Connect your repo at [dashboard.mintlify.com](https://dashboard.mintlify.com).
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# {PRODUCT_NAME} Docs
|
|
2
|
-
|
|
3
|
-
Documentation site for {PRODUCT_NAME}, built with [Nextra v4](https://nextra.site/) (App Router) + Next.js 16.
|
|
4
|
-
|
|
5
|
-
## Develop
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm install
|
|
9
|
-
pnpm dev # http://localhost:3001
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Add a page
|
|
13
|
-
|
|
14
|
-
Create a `.mdx` file under `content/`:
|
|
15
|
-
|
|
16
|
-
```mdx
|
|
17
|
-
---
|
|
18
|
-
title: My new page
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
# My new page
|
|
22
|
-
|
|
23
|
-
content here
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
That's it — file-based routing handles the rest.
|
|
27
|
-
|
|
28
|
-
## Deploy
|
|
29
|
-
|
|
30
|
-
Any Next.js host: Vercel, Cloudflare Pages, Railway, self-hosted Node.
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
pnpm build
|
|
34
|
-
pnpm start
|
|
35
|
-
```
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { generateStaticParamsFor, importPage } from "nextra/pages";
|
|
2
|
-
import { useMDXComponents as getMDXComponents } from "../../mdx-components";
|
|
3
|
-
|
|
4
|
-
export const generateStaticParams = generateStaticParamsFor("mdxPath");
|
|
5
|
-
|
|
6
|
-
export async function generateMetadata(props: { params: Promise<{ mdxPath?: string[] }> }) {
|
|
7
|
-
const params = await props.params;
|
|
8
|
-
const { metadata } = await importPage(params.mdxPath);
|
|
9
|
-
return metadata;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const Wrapper = getMDXComponents().wrapper;
|
|
13
|
-
|
|
14
|
-
export default async function Page(props: { params: Promise<{ mdxPath?: string[] }> }) {
|
|
15
|
-
const params = await props.params;
|
|
16
|
-
const result = await importPage(params.mdxPath);
|
|
17
|
-
const { default: MDXContent, toc, metadata } = result;
|
|
18
|
-
return (
|
|
19
|
-
<Wrapper toc={toc} metadata={metadata}>
|
|
20
|
-
<MDXContent {...props} params={params} />
|
|
21
|
-
</Wrapper>
|
|
22
|
-
);
|
|
23
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Banner, Head } from "nextra/components";
|
|
2
|
-
import { getPageMap } from "nextra/page-map";
|
|
3
|
-
import { Footer, Layout, Navbar } from "nextra-theme-docs";
|
|
4
|
-
import "nextra-theme-docs/style.css";
|
|
5
|
-
|
|
6
|
-
export const metadata = {
|
|
7
|
-
title: { default: "{PRODUCT_NAME} Docs", template: "%s — {PRODUCT_NAME}" },
|
|
8
|
-
description: "Documentation for {PRODUCT_NAME}.",
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const banner = <Banner storageKey="docs-launch">{"{PRODUCT_NAME}"} docs are live</Banner>;
|
|
12
|
-
const navbar = <Navbar logo={<b>{"{PRODUCT_NAME}"}</b>} />;
|
|
13
|
-
const footer = (
|
|
14
|
-
<Footer>
|
|
15
|
-
© {new Date().getFullYear()} {"{PRODUCT_NAME}"}
|
|
16
|
-
</Footer>
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
export default async function RootLayout({ children }: { children: React.ReactNode }) {
|
|
20
|
-
return (
|
|
21
|
-
<html lang="en" dir="ltr" suppressHydrationWarning>
|
|
22
|
-
<Head />
|
|
23
|
-
<body>
|
|
24
|
-
<Layout
|
|
25
|
-
banner={banner}
|
|
26
|
-
navbar={navbar}
|
|
27
|
-
pageMap={await getPageMap()}
|
|
28
|
-
docsRepositoryBase="https://github.com/your-org/your-repo/tree/main"
|
|
29
|
-
footer={footer}
|
|
30
|
-
>
|
|
31
|
-
{children}
|
|
32
|
-
</Layout>
|
|
33
|
-
</body>
|
|
34
|
-
</html>
|
|
35
|
-
);
|
|
36
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Getting Started
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Getting Started with {PRODUCT_NAME}
|
|
6
|
-
|
|
7
|
-
## Install
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
pnpm install
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Develop
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
pnpm dev
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
The docs site runs on http://localhost:3001.
|
|
20
|
-
|
|
21
|
-
## Build for production
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
pnpm build
|
|
25
|
-
pnpm start
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Project structure
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
content/ MDX content — every .mdx is a page
|
|
32
|
-
app/ Next.js App Router (layout + catchall page)
|
|
33
|
-
mdx-components.tsx
|
|
34
|
-
next.config.mjs Nextra plugin wrapper
|
|
35
|
-
```
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Welcome to {PRODUCT_NAME}
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Welcome to {PRODUCT_NAME}
|
|
6
|
-
|
|
7
|
-
This is the documentation site for **{PRODUCT_NAME}**, scaffolded by [create-sailor](https://github.com/Nebutra/Nebutra-Sailor) with the [Nextra](https://nextra.site/) framework.
|
|
8
|
-
|
|
9
|
-
## Why Nextra
|
|
10
|
-
|
|
11
|
-
Nextra runs on top of Next.js App Router with first-class MDX support, file-based routing, and built-in search. Drop a `.mdx` file under `content/` and it's a page.
|
|
12
|
-
|
|
13
|
-
## Next steps
|
|
14
|
-
|
|
15
|
-
- Edit `content/index.mdx` to change this page
|
|
16
|
-
- Add new pages by creating `.mdx` files under `content/`
|
|
17
|
-
- Customize the navbar / footer in `app/layout.tsx`
|
|
18
|
-
- Run `pnpm dev` and visit http://localhost:3001
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { useMDXComponents as getThemeComponents } from "nextra-theme-docs";
|
|
2
|
-
|
|
3
|
-
const themeComponents = getThemeComponents();
|
|
4
|
-
|
|
5
|
-
export function useMDXComponents(components?: Record<string, unknown>) {
|
|
6
|
-
return {
|
|
7
|
-
...themeComponents,
|
|
8
|
-
...components,
|
|
9
|
-
};
|
|
10
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@nebutra/docs",
|
|
3
|
-
"private": true,
|
|
4
|
-
"version": "0.0.1",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"dev": "next dev -p 3001",
|
|
7
|
-
"build": "next build",
|
|
8
|
-
"start": "next start -p 3001",
|
|
9
|
-
"typecheck": "tsc --noEmit"
|
|
10
|
-
},
|
|
11
|
-
"dependencies": {
|
|
12
|
-
"next": "^16.2.6",
|
|
13
|
-
"nextra": "^4.6.0",
|
|
14
|
-
"nextra-theme-docs": "^4.6.0",
|
|
15
|
-
"react": "^19.2.4",
|
|
16
|
-
"react-dom": "^19.2.4"
|
|
17
|
-
},
|
|
18
|
-
"devDependencies": {
|
|
19
|
-
"@types/node": "^22.19.15",
|
|
20
|
-
"@types/react": "^19.2.14",
|
|
21
|
-
"@types/react-dom": "^19.2.3",
|
|
22
|
-
"typescript": "^5.9.3"
|
|
23
|
-
},
|
|
24
|
-
"license": "MIT"
|
|
25
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
-
"allowJs": true,
|
|
6
|
-
"skipLibCheck": true,
|
|
7
|
-
"strict": true,
|
|
8
|
-
"noEmit": true,
|
|
9
|
-
"esModuleInterop": true,
|
|
10
|
-
"module": "esnext",
|
|
11
|
-
"moduleResolution": "bundler",
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"isolatedModules": true,
|
|
14
|
-
"jsx": "preserve",
|
|
15
|
-
"incremental": true,
|
|
16
|
-
"plugins": [{ "name": "next" }],
|
|
17
|
-
"paths": { "@/*": ["./*"] }
|
|
18
|
-
},
|
|
19
|
-
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.mdx", ".next/types/**/*.ts"],
|
|
20
|
-
"exclude": ["node_modules"]
|
|
21
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from "vitepress";
|
|
2
|
-
|
|
3
|
-
export default defineConfig({
|
|
4
|
-
title: "{PRODUCT_NAME}",
|
|
5
|
-
description: "Documentation for {PRODUCT_NAME}",
|
|
6
|
-
cleanUrls: true,
|
|
7
|
-
|
|
8
|
-
themeConfig: {
|
|
9
|
-
nav: [
|
|
10
|
-
{ text: "Home", link: "/" },
|
|
11
|
-
{ text: "Guide", link: "/guide/introduction" },
|
|
12
|
-
],
|
|
13
|
-
|
|
14
|
-
sidebar: {
|
|
15
|
-
"/guide/": [
|
|
16
|
-
{
|
|
17
|
-
text: "Guide",
|
|
18
|
-
items: [
|
|
19
|
-
{ text: "Introduction", link: "/guide/introduction" },
|
|
20
|
-
{ text: "Getting started", link: "/guide/getting-started" },
|
|
21
|
-
],
|
|
22
|
-
},
|
|
23
|
-
],
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
socialLinks: [{ icon: "github", link: "https://github.com/your-org/your-repo" }],
|
|
27
|
-
|
|
28
|
-
footer: {
|
|
29
|
-
message: "Released under the MIT License.",
|
|
30
|
-
copyright: "Copyright © " + new Date().getFullYear() + " {PRODUCT_NAME}",
|
|
31
|
-
},
|
|
32
|
-
|
|
33
|
-
search: { provider: "local" },
|
|
34
|
-
},
|
|
35
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# {PRODUCT_NAME} Docs
|
|
2
|
-
|
|
3
|
-
Documentation site for {PRODUCT_NAME}, built with [VitePress](https://vitepress.dev/).
|
|
4
|
-
|
|
5
|
-
## Develop
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm install
|
|
9
|
-
pnpm dev # http://localhost:3001
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Add a page
|
|
13
|
-
|
|
14
|
-
Drop a `.md` file in any directory, then register it in the `sidebar` of `.vitepress/config.ts`.
|
|
15
|
-
|
|
16
|
-
## Deploy
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
pnpm build # static output -> .vitepress/dist
|
|
20
|
-
pnpm preview # local preview
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
Host the `.vitepress/dist` directory on any static host (Vercel, Cloudflare Pages, GitHub Pages, S3, etc.).
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Getting started
|
|
2
|
-
|
|
3
|
-
## Install
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
pnpm install
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
## Develop
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
pnpm dev # http://localhost:3001
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Add a page
|
|
16
|
-
|
|
17
|
-
Drop a `.md` file under any directory and add it to the `sidebar` in `.vitepress/config.ts`. File-based routing handles the URL.
|
|
18
|
-
|
|
19
|
-
## Build for production
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
pnpm build # static output -> .vitepress/dist
|
|
23
|
-
pnpm preview # serve the built output locally
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
The `.vitepress/dist` directory is the static output — host on Vercel, Cloudflare Pages, GitHub Pages, S3, or any other static host.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Introduction
|
|
2
|
-
|
|
3
|
-
This is the documentation site for **{PRODUCT_NAME}**, scaffolded by [create-sailor](https://github.com/Nebutra/Nebutra-Sailor) with [VitePress](https://vitepress.dev/).
|
|
4
|
-
|
|
5
|
-
VitePress is a static-site generator built on top of Vite. Markdown files become static HTML pages — no client-side framework required to read the docs, but Vue components are available if you want them.
|
|
6
|
-
|
|
7
|
-
## Why VitePress
|
|
8
|
-
|
|
9
|
-
- Vite-powered dev with instant hot reload
|
|
10
|
-
- Markdown-first, with seamless Vue component embedding
|
|
11
|
-
- Built-in local search (no external service needed)
|
|
12
|
-
- Tiny static output, hostable on any CDN
|