diff --git a/content/docs/advanced/security.mdx b/content/docs/advanced/security.mdx new file mode 100644 index 0000000..e052658 --- /dev/null +++ b/content/docs/advanced/security.mdx @@ -0,0 +1,6 @@ +--- +title: Security +description: Secure your OrcaCD deployment with hardening +--- + +TODO: diff --git a/content/docs/configuration/env-variables.mdx b/content/docs/configuration/env-variables.mdx new file mode 100644 index 0000000..8f370d0 --- /dev/null +++ b/content/docs/configuration/env-variables.mdx @@ -0,0 +1,35 @@ +--- +title: Environment Variables +description: Complete reference for all OrcaCD configuration options +--- + +Below are all the environment variables supported by OrcaCD. These should be configured in your `.env` file. + +Be cautious when modifying environment variables that are not recommended to change. + +## General + +These environment variables can be used in both the agent and the hub. + +| Variable | Default Value | Recommended to change | Description | +| ----------- | ------------- | --------------------- | ---------------------------------------------------------- | +| `DEBUG` | `false` | no | Debug mode | +| `LOG_LEVEL` | `info ` | no | Log level. Options: trace, debug, info, warn, error, fatal | + +## Hub + +| Variable | Default Value | Recommended to change | Description | +| ------------------ | ------------- | --------------------- | ------------------------------------------------------------------------------------------ | +| `APP_URL` | `-` | yes (required) | The URL of the OrcaCD instance | +| `APP_SECRET` | `-` | yes (required) | Secret used for authentication and encryption. Generate one with `openssl rand -base64 42` | +| `HOST` | `0.0.0.0 ` | no | Host address | +| `PORT` | `8080 ` | no | Container port | +| `DisableLocalAuth` | `false ` | no | Disable password authentication. Useful when using SSO with OIDC | +| `TrustedProxies` | `- ` | no | Recommended if using a reverse proxy. Comma seperated list of network origins | + +## Agent + +| Variable | Default Value | Recommended to change | Description | +| ------------ | ------------- | --------------------- | ------------------------------------------------------------------------------------------- | +| `HUB_URL` | `-` | yes (required) | The URL of the Hub. Example: `https://example.com` | +| `AUTH_TOKEN` | `- ` | yes (required) | The authentication token of the agent. Register an agent in the hub frontend to retrieve it | diff --git a/content/docs/guides/oidc.mdx b/content/docs/guides/oidc.mdx new file mode 100644 index 0000000..1c3dbc7 --- /dev/null +++ b/content/docs/guides/oidc.mdx @@ -0,0 +1,10 @@ +--- +title: OIDC Authentication +description: Learn how to use OIDC providers for auhentication in OrcaCD +--- + +TODO: + +## Example (Pocket Id) + +TODO diff --git a/content/docs/guides/reverse-proxy.mdx b/content/docs/guides/reverse-proxy.mdx new file mode 100644 index 0000000..dd84496 --- /dev/null +++ b/content/docs/guides/reverse-proxy.mdx @@ -0,0 +1,12 @@ +--- +title: Reverse Proxy +description: Learn how to use a reverse proxy with OrcaCD +--- + +## Nginx + +TODO + +## Traefik + +TODO diff --git a/content/docs/helping-out/contributing.mdx b/content/docs/helping-out/contributing.mdx new file mode 100644 index 0000000..6d1b041 --- /dev/null +++ b/content/docs/helping-out/contributing.mdx @@ -0,0 +1,6 @@ +--- +title: Contributing +description: Learn how to contribute to the OrcaCD project +--- + +TODO diff --git a/content/docs/helping-out/documentation.mdx b/content/docs/helping-out/documentation.mdx new file mode 100644 index 0000000..5957a95 --- /dev/null +++ b/content/docs/helping-out/documentation.mdx @@ -0,0 +1,6 @@ +--- +title: Documentation +description: Contribute to improving the OrcaCD website or documentation +--- + +TODO diff --git a/content/docs/helping-out/translating.mdx b/content/docs/helping-out/translating.mdx new file mode 100644 index 0000000..f469246 --- /dev/null +++ b/content/docs/helping-out/translating.mdx @@ -0,0 +1,29 @@ +--- +title: Translating +description: Help translate OrcaCD into your language +--- + +Help us make OrcaCD accessible in your language by contributing translations. + +## Translation Guidelines + +Use informal language for translations + +## Getting Started + +1. Visit our [Crowdin project page](https://crowdin.com/project/orca-cd). +2. Choose the language you wish to translate into. +3. Open the `en-US.json` source file. +4. Now you can start translating the strings. + +## Adding a New Language + +TODO: Add language request issue template here + +Is your language missing from Crowdin? You can [request its addition](https://crowdin.com/project/orca-cd). + +## Need Help? + +TODO: Add localization discussion + +Encountering issues while translating? Join the [Localization discussion](https://crowdin.com/project/orca-cd) to seek help and share experiences. diff --git a/content/docs/index.mdx b/content/docs/index.mdx index 7a7632b..fd1a0e0 100644 --- a/content/docs/index.mdx +++ b/content/docs/index.mdx @@ -1,31 +1,28 @@ --- -title: Hello World -description: Your favourite docs framework. -icon: Rocket +title: Introduction +description: Welcome to OrcaCD - A simple service for using gitops with docker --- -Hey there! Fumadocs is the docs framework that also works on Tanstack Start! + + OrcaCD is in early development and not yet production-ready. There are no stable releases. Expect + breaking changes at any time. + -## Heading +import { HomeIcon } from "lucide-react"; -Hello World! +TODO: About section (motivation, ...) + +TODO: Image examples - - + + Quickstart installation + + + Learn more the configuration options. + -### CodeBlock - -```ts -console.log("Hello World"); -``` - -#### Table +## Useful Links -| Head | Description | -| ------------------------------- | ----------------------------------- | -| `hello` | Hello World | -| very **important** | Hey | -| _Surprisingly_ | Fumadocs | -| very long text that looks weird | hello world hello world hello world | +- [Installation](/docs/setup/installation) diff --git a/content/docs/meta.json b/content/docs/meta.json new file mode 100644 index 0000000..5bc7048 --- /dev/null +++ b/content/docs/meta.json @@ -0,0 +1,21 @@ +{ + "title": "Getting Started", + "description": "The docs framework", + "root": true, + "pages": [ + "---Getting Started---", + "index", + "---[Rocket]Setup---", + "...setup", + "---[Settings]Configuration---", + "...configuration", + "---[Book]Guides---", + "...guides", + "---[Pickaxe]Advanced---", + "...advanced", + "---[Bug]Troubleshooting---", + "...troubleshooting", + "---[HandHelping]Helping Out---", + "...helping-out" + ] +} diff --git a/content/docs/setup/installation.mdx b/content/docs/setup/installation.mdx new file mode 100644 index 0000000..6aeeb4b --- /dev/null +++ b/content/docs/setup/installation.mdx @@ -0,0 +1,19 @@ +--- +title: Installation +description: Get OrcaCD running quickly with Docker installation +--- + +## Installation with Docker + +1. Download the [`docker-compose.yml`](https://raw.githubusercontent.com/OrcaCD/orca-cd/main/docker-compose.yml) and [`.env`](https://raw.githubusercontent.com/OrcaCD/orca-cd/main/.env.example) file: + +```bash +curl -o docker-compose.yml https://raw.githubusercontent.com/OrcaCD/orca-cd/main/docker-compose.yml +curl -o .env https://raw.githubusercontent.com/OrcaCD/orca-cd/main/.env.example +``` + +2. Edit the `.env` file so that it fits your needs. See the environment variables section for more information. + +3. Run `docker compose up -d` + +Create an admin account on `https:///login` diff --git a/content/docs/setup/upgrading.mdx b/content/docs/setup/upgrading.mdx new file mode 100644 index 0000000..ece3078 --- /dev/null +++ b/content/docs/setup/upgrading.mdx @@ -0,0 +1,17 @@ +--- +title: Upgrading +description: Keep your OrcaCD installation up to date +--- + + + Before upgrading OrcaCD in production, we strongly recommend creating a backup of your database + and keeping a copy of your current `.env` and `docker-compose.yml` files. This gives you a + rollback path if something goes wrong. + + +For upgrading OrcaCD when using Docker, you just need to pull the latest image and restart the services: + +```bash +docker compose pull +docker compose up -d +``` diff --git a/content/docs/test.mdx b/content/docs/test.mdx deleted file mode 100644 index 68e1f4c..0000000 --- a/content/docs/test.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Test -description: This is another page ---- - -Hello World again! - -## Installation - -```npm -npm i fumadocs-core fumadocs-ui -``` diff --git a/content/docs/troubleshooting/common-issues.mdx b/content/docs/troubleshooting/common-issues.mdx new file mode 100644 index 0000000..a1080ef --- /dev/null +++ b/content/docs/troubleshooting/common-issues.mdx @@ -0,0 +1,6 @@ +--- +title: Common Issues +description: Solutions to frequently encountered problems +--- + +TODO diff --git a/package-lock.json b/package-lock.json index d0f8c7c..98febd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -301,35 +301,32 @@ } }, "node_modules/@emnapi/core": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", - "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", + "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { - "@emnapi/wasi-threads": "1.2.1", + "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", - "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -978,9 +975,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.122.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", - "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "version": "0.123.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.123.0.tgz", + "integrity": "sha512-YtECP/y8Mj1lSHiUWGSRzy/C6teUKlS87dEfuVKT09LgQbUsBW1rNg+MiJ4buGu3yuADV60gbIvo9/HplA56Ew==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" @@ -2528,9 +2525,9 @@ "license": "MIT" }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.13.tgz", + "integrity": "sha512-5ZiiecKH2DXAVJTNN13gNMUcCDg4Jy8ZjbXEsPnqa248wgOVeYRX0iqXXD5Jz4bI9BFHgKsI2qmyJynstbmr+g==", "cpu": [ "arm64" ], @@ -2544,9 +2541,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.13.tgz", + "integrity": "sha512-tz/v/8G77seu8zAB3A5sK3UFoOl06zcshEzhUO62sAEtrEuW/H1CcyoupOrD+NbQJytYgA4CppXPzlrmp4JZKA==", "cpu": [ "arm64" ], @@ -2560,9 +2557,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.13.tgz", + "integrity": "sha512-8DakphqOz8JrMYWTJmWA+vDJxut6LijZ8Xcdc4flOlAhU7PNVwo2MaWBF9iXjJAPo5rC/IxEFZDhJ3GC7NHvug==", "cpu": [ "x64" ], @@ -2576,9 +2573,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.13.tgz", + "integrity": "sha512-4wBQFfjDuXYN/SVI8inBF3Aa+isq40rc6VMFbk5jcpolUBTe5cYnMsHZ51nFWsx3PVyyNN3vgoESki0Hmr/4BA==", "cpu": [ "x64" ], @@ -2592,9 +2589,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", - "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.13.tgz", + "integrity": "sha512-JW/e4yPIXLms+jmnbwwy5LA/LxVwZUWLN8xug+V200wzaVi5TEGIWQlh8o91gWYFxW609euI98OCCemmWGuPrw==", "cpu": [ "arm" ], @@ -2608,12 +2605,15 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.13.tgz", + "integrity": "sha512-ZfKWpXiUymDnavepCaM6KG/uGydJ4l2nBmMxg60Ci4CbeefpqjPWpfaZM7PThOhk2dssqBAcwLc6rAyr0uTdXg==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2624,12 +2624,15 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.13.tgz", + "integrity": "sha512-bmRg3O6Z0gq9yodKKWCIpnlH051sEfdVwt+6m5UDffAQMUUqU0xjnQqqAUm+Gu7ofAAly9DqiQDtKu2nPDEABA==", "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -2640,12 +2643,15 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.13.tgz", + "integrity": "sha512-8Wtnbw4k7pMYN9B/mOEAsQ8HOiq7AZ31Ig4M9BKn2So4xRaFEhtCSa4ZJaOutOWq50zpgR4N5+L/opnlaCx8wQ==", "cpu": [ "ppc64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2656,12 +2662,15 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.13.tgz", + "integrity": "sha512-D/0Nlo8mQuxSMohNJUF2lDXWRsFDsHldfRRgD9bRgktj+EndGPj4DOV37LqDKPYS+osdyhZEH7fTakTAEcW7qg==", "cpu": [ "s390x" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2672,12 +2681,15 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.13.tgz", + "integrity": "sha512-eRrPvat2YaVQcwwKi/JzOP6MKf1WRnOCr+VaI3cTWz3ZoLcP/654z90lVCJ4dAuMEpPdke0n+qyAqXDZdIC4rA==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2688,12 +2700,15 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.13.tgz", + "integrity": "sha512-PsdONiFRp8hR8KgVjTWjZ9s7uA3uueWL0t74/cKHfM4dR5zXYv4AjB8BvA+QDToqxAFg4ZkcVEqeu5F7inoz5w==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -2704,9 +2719,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.13.tgz", + "integrity": "sha512-hCNXgC5dI3TVOLrPT++PKFNZ+1EtS0mLQwfXXXSUD/+rGlB65gZDwN/IDuxLpQP4x8RYYHqGomlUXzpO8aVI2w==", "cpu": [ "arm64" ], @@ -2720,25 +2735,27 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", - "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.13.tgz", + "integrity": "sha512-viLS5C5et8NFtLWw9Sw3M/w4vvnVkbWkO7wSNh3C+7G1+uCkGpr6PcjNDSFcNtmXY/4trjPBqUfcOL+P3sWy/g==", "cpu": [ "wasm32" ], "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" + "@emnapi/core": "1.9.1", + "@emnapi/runtime": "1.9.1", + "@napi-rs/wasm-runtime": "^1.1.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.13.tgz", + "integrity": "sha512-Fqa3Tlt1xL4wzmAYxGNFV36Hb+VfPc9PYU+E25DAnswXv3ODDu/yyWjQDbXMo5AGWkQVjLgQExuVu8I/UaZhPQ==", "cpu": [ "arm64" ], @@ -2752,9 +2769,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.13.tgz", + "integrity": "sha512-/pLI5kPkGEi44TDlnbio3St/5gUFeN51YWNAk/Gnv6mEQBOahRBh52qVFVBpmrnU01n2yysvBML9Ynu7K4kGAQ==", "cpu": [ "x64" ], @@ -4212,9 +4229,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8481,13 +8498,13 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", - "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.13.tgz", + "integrity": "sha512-bvVj8YJmf0rq4pSFmH7laLa6pYrhghv3PRzrCdRAr23g66zOKVJ4wkvFtgohtPLWmthgg8/rkaqRHrpUEh0Zbw==", "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.122.0", - "@rolldown/pluginutils": "1.0.0-rc.12" + "@oxc-project/types": "=0.123.0", + "@rolldown/pluginutils": "1.0.0-rc.13" }, "bin": { "rolldown": "bin/cli.mjs" @@ -8496,27 +8513,27 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-x64": "1.0.0-rc.12", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" + "@rolldown/binding-android-arm64": "1.0.0-rc.13", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.13", + "@rolldown/binding-darwin-x64": "1.0.0-rc.13", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.13", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.13", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.13", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.13", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.13", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.13", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.13", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.13", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.13", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.13", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.13", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.13" } }, "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", - "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.13.tgz", + "integrity": "sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==", "license": "MIT" }, "node_modules/rou3": { @@ -9303,15 +9320,15 @@ } }, "node_modules/vite": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", - "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.7.tgz", + "integrity": "sha512-P1PbweD+2/udplnThz3btF4cf6AgPky7kk23RtHUkJIU5BIxwPprhRGmOAHs6FTI7UiGbTNrgNP6jSYD6JaRnw==", "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.8", - "rolldown": "1.0.0-rc.12", + "rolldown": "1.0.0-rc.13", "tinyglobby": "^0.2.15" }, "bin": { @@ -9329,7 +9346,7 @@ "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", - "esbuild": "^0.27.0", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", diff --git a/public/assets/apple-touch-icon.png b/public/assets/apple-touch-icon.png new file mode 100644 index 0000000..352ca78 Binary files /dev/null and b/public/assets/apple-touch-icon.png differ diff --git a/public/assets/favicon.ico b/public/assets/favicon.ico new file mode 100644 index 0000000..d321729 Binary files /dev/null and b/public/assets/favicon.ico differ diff --git a/public/assets/logo-dark-1024.png b/public/assets/logo-dark-1024.png new file mode 100644 index 0000000..c6ea9be Binary files /dev/null and b/public/assets/logo-dark-1024.png differ diff --git a/public/assets/logo-dark-128.png b/public/assets/logo-dark-128.png new file mode 100644 index 0000000..6be5b41 Binary files /dev/null and b/public/assets/logo-dark-128.png differ diff --git a/public/assets/logo-dark-144.png b/public/assets/logo-dark-144.png new file mode 100644 index 0000000..9988fa2 Binary files /dev/null and b/public/assets/logo-dark-144.png differ diff --git a/public/assets/logo-dark-180.png b/public/assets/logo-dark-180.png new file mode 100644 index 0000000..352ca78 Binary files /dev/null and b/public/assets/logo-dark-180.png differ diff --git a/public/assets/logo-dark-192.png b/public/assets/logo-dark-192.png new file mode 100644 index 0000000..a24f76b Binary files /dev/null and b/public/assets/logo-dark-192.png differ diff --git a/public/assets/logo-dark-256.png b/public/assets/logo-dark-256.png new file mode 100644 index 0000000..13a0b05 Binary files /dev/null and b/public/assets/logo-dark-256.png differ diff --git a/public/assets/logo-dark-32.png b/public/assets/logo-dark-32.png new file mode 100644 index 0000000..9c0b25d Binary files /dev/null and b/public/assets/logo-dark-32.png differ diff --git a/public/assets/logo-dark-512.png b/public/assets/logo-dark-512.png new file mode 100644 index 0000000..a69a747 Binary files /dev/null and b/public/assets/logo-dark-512.png differ diff --git a/public/assets/logo-dark-64.png b/public/assets/logo-dark-64.png new file mode 100644 index 0000000..93cd748 Binary files /dev/null and b/public/assets/logo-dark-64.png differ diff --git a/public/assets/logo-dark-96.png b/public/assets/logo-dark-96.png new file mode 100644 index 0000000..cdc5cf1 Binary files /dev/null and b/public/assets/logo-dark-96.png differ diff --git a/public/assets/logo-dark.svg b/public/assets/logo-dark.svg new file mode 100644 index 0000000..0aece29 --- /dev/null +++ b/public/assets/logo-dark.svg @@ -0,0 +1 @@ +OrcaCD \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/source.config.ts b/source.config.ts index ade0d8c..35808f4 100644 --- a/source.config.ts +++ b/source.config.ts @@ -3,6 +3,11 @@ import lastModified from "fumadocs-mdx/plugins/last-modified"; export const docs = defineDocs({ dir: "content/docs", + docs: { + postprocess: { + includeProcessedMarkdown: true, + }, + }, }); export default defineConfig({ diff --git a/src/lib/layout.shared.tsx b/src/lib/layout.shared.tsx index 79df17a..8f8f273 100644 --- a/src/lib/layout.shared.tsx +++ b/src/lib/layout.shared.tsx @@ -3,7 +3,13 @@ import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared"; export function baseOptions(): BaseLayoutProps { return { nav: { - title: "OrcaCD Docs", + title: ( + <> + OrcaCD Logo + OrcaCD + + ), + transparentMode: "top", }, githubUrl: "https://github.com/OrcaCD/orca-cd", }; diff --git a/src/lib/source.ts b/src/lib/source.ts index 469d113..3f89a73 100644 --- a/src/lib/source.ts +++ b/src/lib/source.ts @@ -1,5 +1,5 @@ import { docs } from "fumadocs-mdx:collections/server"; -import { loader } from "fumadocs-core/source"; +import { InferPageType, loader } from "fumadocs-core/source"; import { lucideIconsPlugin } from "fumadocs-core/source/lucide-icons"; export const source = loader({ @@ -7,3 +7,20 @@ export const source = loader({ baseUrl: "/docs", plugins: [lucideIconsPlugin()], }); + +export function getPageMarkdownUrl(page: InferPageType) { + const segments = [...page.slugs, "content.md"]; + + return { + segments, + url: `/llms.mdx/docs/${segments.join("/")}`, + }; +} + +export async function getLLMText(page: InferPageType) { + const processed = await page.data.getText("processed"); + + return `# ${page.data.title} (${page.url}) + +${processed}`; +} diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 6a5e345..dab5c1a 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -9,10 +9,23 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' +import { Route as LlmsDottxtRouteImport } from './routes/llms[.]txt' +import { Route as LlmsFullDottxtRouteImport } from './routes/llms-full[.]txt' import { Route as IndexRouteImport } from './routes/index' import { Route as DocsSplatRouteImport } from './routes/docs/$' import { Route as ApiSearchRouteImport } from './routes/api/search' +import { Route as LlmsDotmdxDocsSplatRouteImport } from './routes/llms[.]mdx.docs.$' +const LlmsDottxtRoute = LlmsDottxtRouteImport.update({ + id: '/llms.txt', + path: '/llms.txt', + getParentRoute: () => rootRouteImport, +} as any) +const LlmsFullDottxtRoute = LlmsFullDottxtRouteImport.update({ + id: '/llms-full.txt', + path: '/llms-full.txt', + getParentRoute: () => rootRouteImport, +} as any) const IndexRoute = IndexRouteImport.update({ id: '/', path: '/', @@ -28,39 +41,89 @@ const ApiSearchRoute = ApiSearchRouteImport.update({ path: '/api/search', getParentRoute: () => rootRouteImport, } as any) +const LlmsDotmdxDocsSplatRoute = LlmsDotmdxDocsSplatRouteImport.update({ + id: '/llms.mdx/docs/$', + path: '/llms.mdx/docs/$', + getParentRoute: () => rootRouteImport, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute + '/llms-full.txt': typeof LlmsFullDottxtRoute + '/llms.txt': typeof LlmsDottxtRoute '/api/search': typeof ApiSearchRoute '/docs/$': typeof DocsSplatRoute + '/llms.mdx/docs/$': typeof LlmsDotmdxDocsSplatRoute } export interface FileRoutesByTo { '/': typeof IndexRoute + '/llms-full.txt': typeof LlmsFullDottxtRoute + '/llms.txt': typeof LlmsDottxtRoute '/api/search': typeof ApiSearchRoute '/docs/$': typeof DocsSplatRoute + '/llms.mdx/docs/$': typeof LlmsDotmdxDocsSplatRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute + '/llms-full.txt': typeof LlmsFullDottxtRoute + '/llms.txt': typeof LlmsDottxtRoute '/api/search': typeof ApiSearchRoute '/docs/$': typeof DocsSplatRoute + '/llms.mdx/docs/$': typeof LlmsDotmdxDocsSplatRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/' | '/api/search' | '/docs/$' + fullPaths: + | '/' + | '/llms-full.txt' + | '/llms.txt' + | '/api/search' + | '/docs/$' + | '/llms.mdx/docs/$' fileRoutesByTo: FileRoutesByTo - to: '/' | '/api/search' | '/docs/$' - id: '__root__' | '/' | '/api/search' | '/docs/$' + to: + | '/' + | '/llms-full.txt' + | '/llms.txt' + | '/api/search' + | '/docs/$' + | '/llms.mdx/docs/$' + id: + | '__root__' + | '/' + | '/llms-full.txt' + | '/llms.txt' + | '/api/search' + | '/docs/$' + | '/llms.mdx/docs/$' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute + LlmsFullDottxtRoute: typeof LlmsFullDottxtRoute + LlmsDottxtRoute: typeof LlmsDottxtRoute ApiSearchRoute: typeof ApiSearchRoute DocsSplatRoute: typeof DocsSplatRoute + LlmsDotmdxDocsSplatRoute: typeof LlmsDotmdxDocsSplatRoute } declare module '@tanstack/react-router' { interface FileRoutesByPath { + '/llms.txt': { + id: '/llms.txt' + path: '/llms.txt' + fullPath: '/llms.txt' + preLoaderRoute: typeof LlmsDottxtRouteImport + parentRoute: typeof rootRouteImport + } + '/llms-full.txt': { + id: '/llms-full.txt' + path: '/llms-full.txt' + fullPath: '/llms-full.txt' + preLoaderRoute: typeof LlmsFullDottxtRouteImport + parentRoute: typeof rootRouteImport + } '/': { id: '/' path: '/' @@ -82,13 +145,23 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ApiSearchRouteImport parentRoute: typeof rootRouteImport } + '/llms.mdx/docs/$': { + id: '/llms.mdx/docs/$' + path: '/llms.mdx/docs/$' + fullPath: '/llms.mdx/docs/$' + preLoaderRoute: typeof LlmsDotmdxDocsSplatRouteImport + parentRoute: typeof rootRouteImport + } } } const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, + LlmsFullDottxtRoute: LlmsFullDottxtRoute, + LlmsDottxtRoute: LlmsDottxtRoute, ApiSearchRoute: ApiSearchRoute, DocsSplatRoute: DocsSplatRoute, + LlmsDotmdxDocsSplatRoute: LlmsDotmdxDocsSplatRoute, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/src/router.tsx b/src/router.tsx index aed71ee..89dd586 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -8,6 +8,5 @@ export function getRouter() { defaultPreload: "intent", scrollRestoration: true, defaultNotFoundComponent: NotFound, - trailingSlash: "always", }); } diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 600af76..ffd8241 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -15,10 +15,91 @@ export const Route = createRootRoute({ content: "width=device-width, initial-scale=1", }, { - title: "Fumadocs on TanStack Start", + name: "description", + content: "GitOps for Docker", + }, + { + title: "OrcaCD Documentation", + }, + ], + + links: [ + { rel: "stylesheet", href: appCss }, + { + rel: "icon", + href: "/assets/favicon.ico", + }, + { + rel: "apple-touch-icon", + href: "/assets/apple-touch-icon.png", + }, + { + rel: "icon", + type: "image/svg+xml", + sizes: "any", + href: "/assets/logo-dark.svg", + }, + { + rel: "icon", + type: "image/png", + sizes: "32x32", + href: "/assets/logo-dark-32.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "64x64", + href: "/assets/logo-dark-64.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "96x96", + href: "/assets/logo-dark-96.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "128x128", + href: "/assets/logo-dark-128.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "144x144", + href: "/assets/logo-dark-144.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "180x180", + href: "/assets/logo-dark-180.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "192x192", + href: "/assets/logo-dark-192.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "256x256", + href: "/assets/logo-dark-256.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "512x512", + href: "/assets/logo-dark-512.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "1024x1024", + href: "/assets/logo-dark-1024.png", }, ], - links: [{ rel: "stylesheet", href: appCss }], }), component: RootComponent, }); diff --git a/src/routes/docs/$.tsx b/src/routes/docs/$.tsx index 48a491c..24319d8 100644 --- a/src/routes/docs/$.tsx +++ b/src/routes/docs/$.tsx @@ -10,10 +10,13 @@ import { DocsPage, DocsTitle, PageLastUpdate, + MarkdownCopyButton, + ViewOptionsPopover, } from "fumadocs-ui/layouts/docs/page"; import defaultMdxComponents from "fumadocs-ui/mdx"; import { baseOptions } from "@/lib/layout.shared"; -import { source } from "@/lib/source"; +import { getPageMarkdownUrl, source } from "@/lib/source"; +import { Suspense } from "react"; export const Route = createFileRoute("/docs/$")({ component: Page, @@ -38,16 +41,33 @@ const loader = createServerFn({ return { path: page.path, + markdownUrl: getPageMarkdownUrl(page).url, pageTree: await source.serializePageTree(source.getPageTree()), }; }); const clientLoader = browserCollections.docs.createClientLoader({ - component({ toc, frontmatter, default: MDX, lastModified }) { + component( + { toc, frontmatter, default: MDX, lastModified }, // you can define props for the component + { + markdownUrl, + path, + }: { + markdownUrl: string; + path: string; + }, + ) { return ( {frontmatter.title} {frontmatter.description} +
+ + +
- + {clientLoader.useContent(path, { markdownUrl, path })} ); } diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 3e0372e..649e3e4 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -1,26 +1,310 @@ import { createFileRoute, Link } from "@tanstack/react-router"; import { HomeLayout } from "fumadocs-ui/layouts/home"; import { baseOptions } from "@/lib/layout.shared"; +import { + GitBranch, + Container, + RefreshCw, + Shield, + Terminal, + Rocket, + BookOpen, + Users, + Heart, + Book, + Settings, +} from "lucide-react"; +import { + NavbarMenu, + NavbarMenuContent, + NavbarMenuLink, + NavbarMenuTrigger, +} from "fumadocs-ui/layouts/home/navbar"; export const Route = createFileRoute("/")({ component: Home, }); -function Home() { +function FeatureCard({ + icon: Icon, + title, + description, +}: { + icon: React.ComponentType<{ className?: string }>; + title: string; + description: string; +}) { return ( - -
-

Fumadocs on Tanstack Start.

- - Open Docs - +
+
+
+

{title}

+

{description}

+
+ ); +} + +function SmallFeature({ + icon: Icon, + title, + description, +}: { + icon: React.ComponentType<{ className?: string }>; + title: string; + description: string; +}) { + return ( +
+
+ +
+
+

{title}

+

{description}

+
+
+ ); +} + +function Home() { + return ( + , + }, + { + text: "Installation", + url: "/docs/setup/installation", + icon: , + }, + { + text: "Environment Variables", + url: "/docs/configuration/env-variables", + icon: , + }, + ], + }, + { + type: "custom", + on: "nav", + children: ( + + Docs + + + +

Introduction

+

Welcome to OrcaCD

+
+ + +

Installation

+

+ Get OrcaCD running quickly with Docker installation. +

+
+ + +

Environment Variables

+

+ Complete reference for all OrcaCD configuration options. +

+
+
+
+ ), + }, + ]} + > +
+
+
+
+ + GitOps for Docker +
+

+ OrcaCD +

+

+ OrcaCD is a simple GitOps controller for Docker Compose. Deploy and manage your services + with ease, directly from your Git repository. +

+
+ + + Get Started + +
+
+
+ +
+
+
+
+
+
+
+
+
+

TODO: Add OrcaCD dashboard screenshot image

+
+
+
+
+ +
+
+
+

Key Features

+

+ Everything you need for GitOps-powered Docker deployments +

+
+
+ + + + + + +
+
+
+ +
+
+
+

How It Works

+

+ Three simple steps to automated Docker deployments +

+
+
+ {[ + { + step: "1", + title: "Connect Your Repo", + description: + "Point OrcaCD to your Git repository containing your Docker Compose files.", + }, + { + step: "2", + title: "Push Changes", + description: "Commit and push updates to your Compose files or application code.", + }, + { + step: "3", + title: "Auto Deploy", + description: + "OrcaCD detects the changes and automatically updates your running services.", + }, + ].map((item) => ( +
+
+ {item.step} +
+

{item.title}

+

{item.description}

+
+ ))} +
+
+
+ +
+
+
+

Join the Community

+

+ OrcaCD is open source and community-driven +

+
+
+ + + +
+
+
+ + {/* CTA Section */} +
+
+

Ready to get started?

+

+ Deploy OrcaCD today and start using GitOps for your Docker services. +

+
+ + Read Documentation + + + View on GitHub + +
+
+
); } diff --git a/src/routes/llms-full[.]txt.ts b/src/routes/llms-full[.]txt.ts new file mode 100644 index 0000000..740057f --- /dev/null +++ b/src/routes/llms-full[.]txt.ts @@ -0,0 +1,14 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { source, getLLMText } from "@/lib/source"; + +export const Route = createFileRoute("/llms-full.txt")({ + server: { + handlers: { + GET: async () => { + const scan = source.getPages().map(getLLMText); + const scanned = await Promise.all(scan); + return new Response(scanned.join("\n\n")); + }, + }, + }, +}); diff --git a/src/routes/llms[.]mdx.docs.$.ts b/src/routes/llms[.]mdx.docs.$.ts new file mode 100644 index 0000000..4b10109 --- /dev/null +++ b/src/routes/llms[.]mdx.docs.$.ts @@ -0,0 +1,23 @@ +import { createFileRoute, notFound } from "@tanstack/react-router"; +import { getLLMText, source } from "@/lib/source"; + +export const Route = createFileRoute("/llms.mdx/docs/$")({ + server: { + handlers: { + GET: async ({ params }) => { + const slugs = params._splat?.split("/") ?? []; + slugs.pop(); + const page = source.getPage(slugs); + if (!page) { + throw notFound(); + } + + return new Response(await getLLMText(page), { + headers: { + "Content-Type": "text/markdown", + }, + }); + }, + }, + }, +}); diff --git a/src/routes/llms[.]txt.ts b/src/routes/llms[.]txt.ts new file mode 100644 index 0000000..7707e93 --- /dev/null +++ b/src/routes/llms[.]txt.ts @@ -0,0 +1,13 @@ +import { source } from "@/lib/source"; +import { createFileRoute } from "@tanstack/react-router"; +import { llms } from "fumadocs-core/source"; + +export const Route = createFileRoute("/llms.txt")({ + server: { + handlers: { + GET() { + return new Response(llms(source).index()); + }, + }, + }, +}); diff --git a/src/styles/app.css b/src/styles/app.css index dbcc721..2e73bda 100644 --- a/src/styles/app.css +++ b/src/styles/app.css @@ -1,3 +1,11 @@ @import "tailwindcss"; @import "fumadocs-ui/css/neutral.css"; @import "fumadocs-ui/css/preset.css"; + +@theme { + --color-fd-primary: oklch(0.59 0.14 242); +} + +.dark { + --color-fd-primary: oklch(0.68 0.15 237); +}