Initial Commit
This commit is contained in:
32
apps/docs/docusaurus/Dockerfile
Normal file
32
apps/docs/docusaurus/Dockerfile
Normal file
@@ -0,0 +1,32 @@
|
||||
# syntax=docker/dockerfile:1.7
|
||||
#
|
||||
# Build container for @suaveplan/docs.
|
||||
#
|
||||
# This image holds the Docusaurus toolchain (Node 22 LTS + npm + docusaurus
|
||||
# deps). It is run via docker-compose to consume a snapshot of the repo's
|
||||
# markdown content (mounted as `/work/docs`) and produce the static build
|
||||
# output (mounted as `/work/build` -> host `apps/docs/build/`).
|
||||
#
|
||||
# The Bun bytecode-compiled runtime server lives outside this image.
|
||||
FROM node:22-bookworm-slim
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV NODE_ENV=production
|
||||
ENV NPM_CONFIG_FUND=false
|
||||
ENV NPM_CONFIG_AUDIT=false
|
||||
|
||||
WORKDIR /work
|
||||
|
||||
# Toolchain deps first so the layer caches when only content changes.
|
||||
COPY package.json ./
|
||||
|
||||
RUN npm install --no-save --omit=optional
|
||||
|
||||
# Site configuration — these change rarely, content changes often.
|
||||
COPY docusaurus.config.ts sidebars.ts ./
|
||||
COPY src ./src
|
||||
COPY tsconfig.json ./
|
||||
|
||||
# Output to a subdirectory of the mounted volume so Docusaurus can rmdir
|
||||
# its own output between runs without touching the bind mount itself.
|
||||
CMD ["npx", "docusaurus", "build", "--out-dir", "/work/build/site"]
|
||||
67
apps/docs/docusaurus/docusaurus.config.ts
Normal file
67
apps/docs/docusaurus/docusaurus.config.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import type { Config } from "@docusaurus/types";
|
||||
import type * as Preset from "@docusaurus/preset-classic";
|
||||
import { themes as prismThemes } from "prism-react-renderer";
|
||||
|
||||
const config: Config = {
|
||||
title: "SuavePlan",
|
||||
tagline: "Enterprise-grade monorepo, rebuilt bottom-up",
|
||||
favicon: "img/favicon.ico",
|
||||
|
||||
url: "https://docs.suaveplan.com",
|
||||
baseUrl: "/",
|
||||
organizationName: "SuavePlan",
|
||||
projectName: "genesis",
|
||||
|
||||
onBrokenLinks: "warn",
|
||||
onBrokenMarkdownLinks: "warn",
|
||||
|
||||
// Use plain CommonMark rather than MDX so spec files containing
|
||||
// ICU-style `{var}` braces and bare HTML-like tokens render as
|
||||
// literals instead of being treated as JSX expressions.
|
||||
markdown: {
|
||||
format: "md",
|
||||
},
|
||||
|
||||
i18n: {
|
||||
defaultLocale: "en",
|
||||
locales: ["en"],
|
||||
},
|
||||
|
||||
presets: [
|
||||
[
|
||||
"classic",
|
||||
{
|
||||
docs: {
|
||||
path: "docs",
|
||||
routeBasePath: "/",
|
||||
sidebarPath: "./sidebars.ts",
|
||||
},
|
||||
blog: false,
|
||||
theme: {
|
||||
customCss: "./src/css/custom.css",
|
||||
},
|
||||
} satisfies Preset.Options,
|
||||
],
|
||||
],
|
||||
|
||||
themeConfig: {
|
||||
navbar: {
|
||||
title: "SuavePlan",
|
||||
items: [
|
||||
{
|
||||
type: "docSidebar",
|
||||
sidebarId: "main",
|
||||
position: "left",
|
||||
label: "Docs",
|
||||
},
|
||||
],
|
||||
},
|
||||
prism: {
|
||||
theme: prismThemes.github,
|
||||
darkTheme: prismThemes.dracula,
|
||||
additionalLanguages: ["bash", "json", "yaml", "toml"],
|
||||
},
|
||||
} satisfies Preset.ThemeConfig,
|
||||
};
|
||||
|
||||
export default config;
|
||||
35
apps/docs/docusaurus/package.json
Normal file
35
apps/docs/docusaurus/package.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "@suaveplan/docs-builder",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"description": "Containerized Docusaurus build environment for @suaveplan/docs",
|
||||
"scripts": {
|
||||
"build": "docusaurus build",
|
||||
"serve": "docusaurus serve --port 6043",
|
||||
"clear": "docusaurus clear"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "^3.10.0",
|
||||
"@docusaurus/preset-classic": "^3.10.0",
|
||||
"@mdx-js/react": "^3.0.0",
|
||||
"clsx": "^2.1.1",
|
||||
"prism-react-renderer": "^2.4.0",
|
||||
"react": "19.2.0",
|
||||
"react-dom": "19.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "^3.10.0",
|
||||
"@docusaurus/types": "^3.10.0"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [">0.5%", "not dead", "not op_mini all"],
|
||||
"development": [
|
||||
"last 3 chrome version",
|
||||
"last 3 firefox version",
|
||||
"last 5 safari version"
|
||||
]
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
}
|
||||
}
|
||||
7
apps/docs/docusaurus/sidebars.ts
Normal file
7
apps/docs/docusaurus/sidebars.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
|
||||
|
||||
const sidebars: SidebarsConfig = {
|
||||
main: [{ type: "autogenerated", dirName: "." }],
|
||||
};
|
||||
|
||||
export default sidebars;
|
||||
13
apps/docs/docusaurus/src/css/custom.css
Normal file
13
apps/docs/docusaurus/src/css/custom.css
Normal file
@@ -0,0 +1,13 @@
|
||||
:root {
|
||||
--ifm-color-primary: #2e7d8f;
|
||||
--ifm-color-primary-dark: #2a7081;
|
||||
--ifm-color-primary-darker: #286a7a;
|
||||
--ifm-color-primary-darkest: #205864;
|
||||
--ifm-color-primary-light: #328a9d;
|
||||
--ifm-color-primary-lighter: #3590a4;
|
||||
--ifm-color-primary-lightest: #3da4ba;
|
||||
--ifm-code-font-size: 95%;
|
||||
}
|
||||
[data-theme="dark"] {
|
||||
--ifm-color-primary: #61c4d8;
|
||||
}
|
||||
8
apps/docs/docusaurus/tsconfig.json
Normal file
8
apps/docs/docusaurus/tsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "@docusaurus/tsconfig",
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"noEmit": true
|
||||
},
|
||||
"include": ["src/", "docusaurus.config.ts", "sidebars.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user