@lukoweb/apitogo 0.1.67 → 0.1.68
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/dist/cli/cli.js +529 -379
- package/docs/components/playground.mdx +6 -8
- package/docs/components/slot.mdx +2 -2
- package/docs/concepts/auth-provider-api-identities.md +8 -12
- package/docs/configuration/ai-assistants.md +3 -3
- package/docs/configuration/api-catalog.md +4 -4
- package/docs/configuration/api-reference.md +11 -11
- package/docs/configuration/authentication-auth0.md +8 -1
- package/docs/configuration/authentication-azure-ad.md +8 -1
- package/docs/configuration/authentication-clerk.md +8 -1
- package/docs/configuration/authentication-firebase.md +8 -1
- package/docs/configuration/authentication-pingfederate.md +8 -1
- package/docs/configuration/authentication-supabase.md +10 -3
- package/docs/configuration/authentication.md +96 -195
- package/docs/configuration/build-configuration.mdx +2 -2
- package/docs/configuration/docs.md +10 -10
- package/docs/configuration/footer.mdx +84 -180
- package/docs/configuration/llms.md +1 -1
- package/docs/configuration/make-config.mdx +12 -5
- package/docs/configuration/manifest.md +4 -14
- package/docs/configuration/navigation.mdx +2 -2
- package/docs/configuration/overview.md +95 -310
- package/docs/configuration/protected-routes.md +3 -3
- package/docs/configuration/search.md +4 -3
- package/docs/configuration/site.md +5 -5
- package/docs/configuration/slots.mdx +1 -1
- package/docs/custom-plugins.md +1 -1
- package/docs/customization/colors-theme.mdx +8 -8
- package/docs/customization/fonts.md +4 -4
- package/docs/deploy/apitogo.md +18 -12
- package/docs/deploy/cloudflare-pages.md +0 -1
- package/docs/deploy/direct-upload.md +0 -1
- package/docs/deploy/github-pages.md +1 -2
- package/docs/deploy/vercel.md +2 -3
- package/docs/deployment.md +11 -10
- package/docs/extending/events.md +1 -1
- package/docs/guides/custom-pages.md +4 -8
- package/docs/guides/environment-variables.md +41 -49
- package/docs/guides/managing-api-keys-and-identities.md +40 -115
- package/docs/guides/navigation-rules.mdx +1 -1
- package/docs/guides/processors.mdx +2 -2
- package/docs/guides/transforming-examples.md +1 -1
- package/docs/markdown/code-blocks.md +2 -2
- package/docs/markdown/mdx.md +1 -1
- package/docs/mcp/go-live.md +100 -0
- package/docs/mcp/overview.md +76 -0
- package/docs/mcp/setup.md +173 -0
- package/docs/mcp/shape.md +76 -0
- package/docs/mcp/tools.md +102 -0
- package/docs/plugins.md +20 -1
- package/docs/quickstart.md +49 -54
- package/docs/writing.mdx +1 -1
- package/package.json +1 -1
- package/src/vite/plugin-config.ts +3 -0
- package/docs/guides/navigation-migration.md +0 -87
|
@@ -2,213 +2,117 @@
|
|
|
2
2
|
sidebar_label: Footer
|
|
3
3
|
sidebar_icon: panel-bottom-dashed
|
|
4
4
|
description:
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Configure the site footer via modules.landing.content.footer in apitogo.config.json, or site.footer
|
|
6
|
+
for advanced layouts.
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Footer Configuration
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
11
|
+
Portal sites (MCP / create-apitogo scaffolds) render a global footer from
|
|
12
|
+
**`apitogo.config.json`** → `modules.landing.content.footer`. That footer appears on home, docs, API
|
|
13
|
+
reference, pricing, and auth pages, and replaces the default “Built with APIToGo” line.
|
|
14
|
+
|
|
15
|
+
## Recommended: landing content footer (JSON)
|
|
16
|
+
|
|
17
|
+
Ask for real link columns, social URLs, copyright, and optional brand/tagline before inventing
|
|
18
|
+
copy. Example:
|
|
19
|
+
|
|
20
|
+
```json title=config.json
|
|
21
|
+
{
|
|
22
|
+
"modules": {
|
|
23
|
+
"landing": {
|
|
24
|
+
"enabled": true,
|
|
25
|
+
"path": "/",
|
|
26
|
+
"layout": "landing",
|
|
27
|
+
"content": {
|
|
28
|
+
"footer": {
|
|
29
|
+
"columns": [
|
|
30
|
+
{
|
|
31
|
+
"title": "Product",
|
|
32
|
+
"links": [
|
|
33
|
+
{ "label": "Features", "href": "/features" },
|
|
34
|
+
{ "label": "Pricing", "href": "/pricing" },
|
|
35
|
+
{ "label": "Documentation", "href": "/docs" }
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"title": "Company",
|
|
40
|
+
"links": [
|
|
41
|
+
{ "label": "About", "href": "/about" },
|
|
42
|
+
{ "label": "Contact", "href": "/contact" }
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"social": [
|
|
47
|
+
{ "icon": "github", "href": "https://github.com/your-org" },
|
|
48
|
+
{ "icon": "linkedin", "href": "https://www.linkedin.com/company/apitogo" }
|
|
49
|
+
],
|
|
50
|
+
"copyright": "© 2026 Your Company. All rights reserved."
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
44
55
|
}
|
|
45
56
|
```
|
|
46
57
|
|
|
47
|
-
|
|
58
|
+
With MCP connected, prefer asking the user for footer content, then editing JSON (there is no
|
|
59
|
+
dedicated footer MCP tool). See [MCP overview](../mcp/overview.md).
|
|
48
60
|
|
|
49
|
-
##
|
|
61
|
+
## Advanced: `site.footer` (engine)
|
|
50
62
|
|
|
51
|
-
|
|
63
|
+
For custom layouts you can still configure `site.footer` (often from TSX when you need dynamic
|
|
64
|
+
values):
|
|
52
65
|
|
|
53
|
-
```tsx
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
{
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
```tsx title=config
|
|
67
|
+
export default {
|
|
68
|
+
site: {
|
|
69
|
+
footer: {
|
|
70
|
+
position: "center", // "start" | "center" | "end"
|
|
71
|
+
copyright: `© ${new Date().getFullYear()} YourCompany LLC. All rights reserved.`,
|
|
72
|
+
columns: [
|
|
73
|
+
{
|
|
74
|
+
title: "Product",
|
|
75
|
+
links: [
|
|
76
|
+
{ label: "Features", href: "/features" },
|
|
77
|
+
{ label: "Pricing", href: "/pricing" },
|
|
78
|
+
],
|
|
79
|
+
},
|
|
64
80
|
],
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
links: [
|
|
69
|
-
{ label: "About", href: "/about" },
|
|
70
|
-
{ label: "Blog", href: "/blog" },
|
|
71
|
-
{ label: "Contact", href: "/contact" },
|
|
81
|
+
social: [
|
|
82
|
+
{ icon: "github", href: "https://github.com/yourusername" },
|
|
83
|
+
{ icon: "x", href: "https://x.com/yourhandle", label: "Follow us" },
|
|
72
84
|
],
|
|
85
|
+
logo: {
|
|
86
|
+
src: { light: "/logo-light.svg", dark: "/logo-dark.svg" },
|
|
87
|
+
alt: "Company Logo",
|
|
88
|
+
width: "100px",
|
|
89
|
+
},
|
|
73
90
|
},
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Each column can have its own positioning with the `position` property, which can be `"start"`,
|
|
79
|
-
`"center"`, or `"end"`. This controls how the column is positioned within the footer grid.
|
|
80
|
-
|
|
81
|
-
## Social Media Links
|
|
82
|
-
|
|
83
|
-
You can add social media links to your footer:
|
|
84
|
-
|
|
85
|
-
```tsx
|
|
86
|
-
footer: {
|
|
87
|
-
social: [
|
|
88
|
-
{
|
|
89
|
-
icon: "github",
|
|
90
|
-
href: "https://github.com/yourusername",
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
icon: "twitter",
|
|
94
|
-
href: "https://twitter.com/yourhandle",
|
|
95
|
-
label: "Follow us", // optional label text
|
|
96
|
-
},
|
|
97
|
-
];
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
The `icon` property currently can be one of the following values:
|
|
102
|
-
|
|
103
|
-
<div className="[&_ul]:grid [&_ul]:grid-cols-[repeat(3,auto)]">
|
|
104
|
-
|
|
105
|
-
- `"reddit"`
|
|
106
|
-
- `"discord"`
|
|
107
|
-
- `"github"`
|
|
108
|
-
- `"x"` (Twitter)
|
|
109
|
-
- `"linkedin"`
|
|
110
|
-
- `"facebook"`
|
|
111
|
-
- `"instagram"`
|
|
112
|
-
- `"youtube"`
|
|
113
|
-
- `"tiktok"`
|
|
114
|
-
- `"twitch"`
|
|
115
|
-
- `"pinterest"`
|
|
116
|
-
- `"snapchat"`
|
|
117
|
-
- `"whatsapp"`
|
|
118
|
-
- `"telegram"`
|
|
119
|
-
|
|
120
|
-
</div>
|
|
121
|
-
|
|
122
|
-
Or you can provide a custom React component.
|
|
123
|
-
|
|
124
|
-
## Copyright Notice
|
|
125
|
-
|
|
126
|
-
Add a copyright notice with the `copyright` property:
|
|
127
|
-
|
|
128
|
-
```tsx
|
|
129
|
-
footer: {
|
|
130
|
-
copyright: `© ${new Date().getFullYear()} YourCompany LLC. All rights reserved.`;
|
|
131
|
-
}
|
|
91
|
+
},
|
|
92
|
+
};
|
|
132
93
|
```
|
|
133
94
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
You can add a logo to your footer:
|
|
95
|
+
### Social icons
|
|
137
96
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
src: {
|
|
142
|
-
light: "/path/to/light-logo.png",
|
|
143
|
-
dark: "/path/to/dark-logo.png"
|
|
144
|
-
},
|
|
145
|
-
alt: "Company Logo",
|
|
146
|
-
width: "120px" // optional width
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
```
|
|
97
|
+
Supported `icon` values include: `reddit`, `discord`, `github`, `x`, `linkedin`, `facebook`,
|
|
98
|
+
`instagram`, `youtube`, `tiktok`, `twitch`, `pinterest`, `snapchat`, `whatsapp`, `telegram` — or a
|
|
99
|
+
custom React component.
|
|
150
100
|
|
|
151
|
-
##
|
|
101
|
+
## Slots
|
|
152
102
|
|
|
153
|
-
|
|
154
|
-
before or after the main footer columns:
|
|
103
|
+
Insert content around the footer with `footer-before` and `footer-after` in site config `slots`:
|
|
155
104
|
|
|
156
105
|
```tsx
|
|
157
|
-
// In your apitogo.config.tsx
|
|
158
106
|
slots: {
|
|
159
107
|
"footer-before": () => (
|
|
160
108
|
<div>
|
|
161
109
|
<h3>Custom pre-footer content</h3>
|
|
162
|
-
<p>This appears before the columns</p>
|
|
163
110
|
</div>
|
|
164
111
|
),
|
|
165
|
-
"footer-after": () => (
|
|
166
|
-
<div>
|
|
167
|
-
<p>Additional footer content</p>
|
|
168
|
-
</div>
|
|
169
|
-
)
|
|
170
112
|
}
|
|
171
113
|
```
|
|
172
114
|
|
|
173
|
-
##
|
|
174
|
-
|
|
175
|
-
Here's a complete example showing all footer options:
|
|
115
|
+
## Related
|
|
176
116
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
position: "center",
|
|
180
|
-
columns: [
|
|
181
|
-
{
|
|
182
|
-
title: "Product",
|
|
183
|
-
position: "start",
|
|
184
|
-
links: [
|
|
185
|
-
{ label: "Features", href: "/features" },
|
|
186
|
-
{ label: "Pricing", href: "/pricing" },
|
|
187
|
-
{ label: "Documentation", href: "/docs" }
|
|
188
|
-
]
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
title: "Resources",
|
|
192
|
-
position: "center",
|
|
193
|
-
links: [
|
|
194
|
-
{ label: "Blog", href: "/blog" },
|
|
195
|
-
{ label: "Support", href: "/support" },
|
|
196
|
-
{ label: "GitHub", href: "https://github.com/yourusername" } // Auto-detected as external
|
|
197
|
-
]
|
|
198
|
-
}
|
|
199
|
-
],
|
|
200
|
-
social: [
|
|
201
|
-
{ icon: "github", href: "https://github.com/yourusername" },
|
|
202
|
-
{ icon: "linkedin", href: "https://linkedin.com/company/yourcompany", label: "LinkedIn" }
|
|
203
|
-
],
|
|
204
|
-
copyright: `© ${new Date().getFullYear()} YourCompany LLC. All rights reserved.`,
|
|
205
|
-
logo: {
|
|
206
|
-
src: {
|
|
207
|
-
light: "/images/logo-light.svg",
|
|
208
|
-
dark: "/images/logo-dark.svg"
|
|
209
|
-
},
|
|
210
|
-
alt: "Company Logo",
|
|
211
|
-
width: "100px"
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
```
|
|
117
|
+
- [Manifest](./manifest.md)
|
|
118
|
+
- [Site](./site.md)
|
|
@@ -19,7 +19,7 @@ All options are disabled by default.
|
|
|
19
19
|
|
|
20
20
|
LLM features are configured through the `docs` section in your config:
|
|
21
21
|
|
|
22
|
-
```tsx title="
|
|
22
|
+
```tsx title="config"
|
|
23
23
|
export default {
|
|
24
24
|
docs: {
|
|
25
25
|
files: "pages/**/*.{md,mdx}", // Your markdown files
|
|
@@ -13,6 +13,14 @@ when it finds an OpenAPI spec and your config has none yet, and **regenerate `na
|
|
|
13
13
|
`redirects`** from your `pages/` tree. Other existing settings (such as **`site`** or **`theme`**)
|
|
14
14
|
stay as you left them unless you are creating files for the first time.
|
|
15
15
|
|
|
16
|
+
:::note{title="Portal sites need apitogo.config.json"}
|
|
17
|
+
|
|
18
|
+
For portal / MCP products you need **`apitogo.config.json`** for site, modules, plans, and auth —
|
|
19
|
+
see [Manifest](./manifest.md) or scaffold with `npm create @lukoweb/apitogo@latest` /
|
|
20
|
+
[MCP](../mcp/overview.md).
|
|
21
|
+
|
|
22
|
+
:::
|
|
23
|
+
|
|
16
24
|
## What it does
|
|
17
25
|
|
|
18
26
|
1. **Ensures you can run npm scripts** — If there is no **`package.json`**, it creates one with
|
|
@@ -24,11 +32,10 @@ stay as you left them unless you are creating files for the first time.
|
|
|
24
32
|
**`apis/openapi.json`** or **`openapi.json`** at the project root) and your config has no
|
|
25
33
|
**`apis`** entry yet, it adds an **`apis`** block pointing at that file. Existing **`apis`**
|
|
26
34
|
settings are not overwritten.
|
|
27
|
-
3. **Finds or creates a config file** — It looks for an existing `apitogo.config.*`
|
|
28
|
-
|
|
29
|
-
**`
|
|
30
|
-
|
|
31
|
-
from disk.
|
|
35
|
+
3. **Finds or creates a config file** — It looks for an existing `apitogo.config.*` file in the
|
|
36
|
+
project root. If **none** exists, it creates one with **`docs.files`** for your pages glob,
|
|
37
|
+
optional **`apis`** when a spec was found, plus empty **`navigation`** and **`redirects`**, then
|
|
38
|
+
fills nav and redirects from disk.
|
|
32
39
|
4. **Rebuilds `navigation`** — Builds a tree from `.md` / `.mdx` files under your pages directory,
|
|
33
40
|
including nested folders as categories, and adds the usual Documentation category plus API link
|
|
34
41
|
block used by the generator.
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
# Site configuration (apitogo.config.json)
|
|
2
2
|
|
|
3
|
-
Dev portal sites use
|
|
4
|
-
metadata
|
|
3
|
+
Dev portal sites use `apitogo.config.json` for site settings, plans, authentication, and backend
|
|
4
|
+
metadata, with optional `.env` overrides for secrets and local tweaks.
|
|
5
5
|
|
|
6
6
|
## Files
|
|
7
7
|
|
|
8
8
|
| File | Purpose |
|
|
9
9
|
| --------------------- | ----------------------------------------------------------- |
|
|
10
10
|
| `apitogo.config.json` | Committed defaults: site, modules, authentication, backend |
|
|
11
|
-
| `apitogo.config.tsx` | Plugins and other non-JSON configuration |
|
|
12
11
|
| `.env` | Public client vars + publish secrets via `APITOGO_CONFIG_*` |
|
|
13
12
|
|
|
14
13
|
## Canonical shape
|
|
@@ -89,18 +88,9 @@ APITOGO_CONFIG_AUTHENTICATION__STRIPE__SECRET_KEY=sk_test_...
|
|
|
89
88
|
APITOGO_CONFIG_AUTHENTICATION__STRIPE__WEBHOOK_SECRET=whsec_...
|
|
90
89
|
```
|
|
91
90
|
|
|
92
|
-
## Thin `apitogo.config.tsx`
|
|
93
|
-
|
|
94
|
-
```tsx
|
|
95
|
-
import { buildApitogoConfig } from "@lukoweb/apitogo";
|
|
96
|
-
import { devPortalBillingPlugin } from "@lukoweb/apitogo-plugin-dev-portal-billing";
|
|
97
|
-
|
|
98
|
-
export default buildApitogoConfig({
|
|
99
|
-
plugins: [devPortalBillingPlugin()],
|
|
100
|
-
});
|
|
101
|
-
```
|
|
102
|
-
|
|
103
91
|
## Related
|
|
104
92
|
|
|
105
93
|
- [Authentication](./authentication.md)
|
|
106
94
|
- [Overview](./overview.md)
|
|
95
|
+
- [MCP overview](../mcp/overview.md)
|
|
96
|
+
- [Environment variables](../guides/environment-variables.md)
|
|
@@ -18,7 +18,7 @@ entries can be links, document references, categories or custom pages.
|
|
|
18
18
|
The navigation is defined using the `navigation` array in the APIToGo config file. Each item can be
|
|
19
19
|
one of several types. At the simplest level you may only have links and categories.
|
|
20
20
|
|
|
21
|
-
```tsx title="
|
|
21
|
+
```tsx title="config"
|
|
22
22
|
{
|
|
23
23
|
"navigation": [
|
|
24
24
|
{
|
|
@@ -60,7 +60,7 @@ one of several types. At the simplest level you may only have links and categori
|
|
|
60
60
|
|
|
61
61
|
Use the CLI command **`apitogo make-config`** to rebuild **`navigation`** and **`redirects`** from
|
|
62
62
|
your Markdown files. See **[Make config (CLI)](./make-config.md)** for full usage, options, and
|
|
63
|
-
behavior (including creating `apitogo.config.
|
|
63
|
+
behavior (including creating `apitogo.config.json` when no config exists, and which settings are left
|
|
64
64
|
untouched).
|
|
65
65
|
|
|
66
66
|
::::caution
|