create-sailor 1.10.0 → 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.
Files changed (78) hide show
  1. package/README.md +34 -135
  2. package/dist/index.js +119 -2002
  3. package/package.json +16 -17
  4. package/templates/infra/ops/README.md +2 -1
  5. package/templates/infra/ops/platform-expected.example.json +10 -1
  6. package/templates/backends/python/README.md +0 -16
  7. package/templates/backends/python/_shared/__init__.py +0 -5
  8. package/templates/backends/python/pyproject.toml +0 -13
  9. package/templates/deploy/railway.toml +0 -13
  10. package/templates/deploy/vercel.json +0 -37
  11. package/templates/deploy/wrangler.gateway.toml +0 -11
  12. package/templates/deploy/wrangler.toml +0 -8
  13. package/templates/docs/docusaurus/README.md +0 -24
  14. package/templates/docs/docusaurus/docs/getting-started/develop.md +0 -20
  15. package/templates/docs/docusaurus/docs/getting-started/install.md +0 -11
  16. package/templates/docs/docusaurus/docs/intro.md +0 -15
  17. package/templates/docs/docusaurus/docusaurus.config.ts +0 -66
  18. package/templates/docs/docusaurus/package.json +0 -44
  19. package/templates/docs/docusaurus/sidebars.ts +0 -14
  20. package/templates/docs/docusaurus/src/css/custom.css +0 -22
  21. package/templates/docs/docusaurus/tsconfig.json +0 -7
  22. package/templates/docs/fumadocs/README.md +0 -46
  23. package/templates/docs/fumadocs/app/(home)/page.tsx +0 -22
  24. package/templates/docs/fumadocs/app/api/search/route.ts +0 -4
  25. package/templates/docs/fumadocs/app/docs/[[...slug]]/page.tsx +0 -39
  26. package/templates/docs/fumadocs/app/docs/layout.tsx +0 -11
  27. package/templates/docs/fumadocs/app/global.css +0 -10
  28. package/templates/docs/fumadocs/app/layout.tsx +0 -18
  29. package/templates/docs/fumadocs/content/docs/api.mdx +0 -31
  30. package/templates/docs/fumadocs/content/docs/concepts.mdx +0 -19
  31. package/templates/docs/fumadocs/content/docs/getting-started.mdx +0 -56
  32. package/templates/docs/fumadocs/content/docs/index.mdx +0 -17
  33. package/templates/docs/fumadocs/content/docs/meta.json +0 -4
  34. package/templates/docs/fumadocs/lib/source.ts +0 -7
  35. package/templates/docs/fumadocs/next.config.mjs +0 -20
  36. package/templates/docs/fumadocs/package.json +0 -33
  37. package/templates/docs/fumadocs/source.config.ts +0 -17
  38. package/templates/docs/fumadocs/tsconfig.json +0 -25
  39. package/templates/docs/mintlify/README.md +0 -25
  40. package/templates/docs/mintlify/api-reference/introduction.mdx +0 -25
  41. package/templates/docs/mintlify/introduction.mdx +0 -21
  42. package/templates/docs/mintlify/mint.json +0 -37
  43. package/templates/docs/mintlify/package.json +0 -14
  44. package/templates/docs/mintlify/quickstart.mdx +0 -26
  45. package/templates/docs/nextra/README.md +0 -35
  46. package/templates/docs/nextra/app/[[...mdxPath]]/page.tsx +0 -23
  47. package/templates/docs/nextra/app/layout.tsx +0 -36
  48. package/templates/docs/nextra/content/_meta.ts +0 -4
  49. package/templates/docs/nextra/content/getting-started.mdx +0 -35
  50. package/templates/docs/nextra/content/index.mdx +0 -18
  51. package/templates/docs/nextra/mdx-components.tsx +0 -10
  52. package/templates/docs/nextra/next.config.mjs +0 -9
  53. package/templates/docs/nextra/package.json +0 -25
  54. package/templates/docs/nextra/tsconfig.json +0 -21
  55. package/templates/docs/vitepress/.vitepress/config.ts +0 -35
  56. package/templates/docs/vitepress/README.md +0 -23
  57. package/templates/docs/vitepress/guide/getting-started.md +0 -26
  58. package/templates/docs/vitepress/guide/introduction.md +0 -12
  59. package/templates/docs/vitepress/index.md +0 -23
  60. package/templates/docs/vitepress/package.json +0 -18
  61. package/templates/docs/vitepress/tsconfig.json +0 -15
  62. package/templates/orm/drizzle/README.md +0 -58
  63. package/templates/orm/drizzle/drizzle.config.ts +0 -16
  64. package/templates/orm/drizzle/migrations/.gitkeep +0 -0
  65. package/templates/orm/drizzle/package.json +0 -30
  66. package/templates/orm/drizzle/src/index.ts +0 -31
  67. package/templates/orm/drizzle/src/schema/auth.ts +0 -73
  68. package/templates/orm/drizzle/src/schema/billing.ts +0 -37
  69. package/templates/orm/drizzle/src/schema/index.ts +0 -3
  70. package/templates/orm/drizzle/src/schema/tenant.ts +0 -57
  71. package/templates/orm/drizzle/tsconfig.json +0 -16
  72. package/templates/workflows/README.md +0 -9
  73. package/templates/workflows/inngest/README.md +0 -3
  74. package/templates/workflows/inngest/welcome-email.ts +0 -30
  75. package/templates/workflows/n8n/README.md +0 -3
  76. package/templates/workflows/n8n/example-flow.json +0 -6
  77. package/templates/workflows/pusher/README.md +0 -3
  78. 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,4 +0,0 @@
1
- {
2
- "title": "Documentation",
3
- "pages": ["index", "getting-started", "concepts", "api"]
4
- }
@@ -1,7 +0,0 @@
1
- import { loader } from "fumadocs-core/source";
2
- import { docs } from "@/.source/server";
3
-
4
- export const source = loader({
5
- baseUrl: "/docs",
6
- source: docs.toFumadocsSource(),
7
- });
@@ -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,4 +0,0 @@
1
- export default {
2
- index: { title: "Welcome", display: "hidden" },
3
- "getting-started": "Getting Started",
4
- };
@@ -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,9 +0,0 @@
1
- import nextra from "nextra";
2
-
3
- const withNextra = nextra({
4
- search: { codeblocks: false },
5
- });
6
-
7
- export default withNextra({
8
- reactStrictMode: true,
9
- });
@@ -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