Skip to content

Commit 664aa50

Browse files
committed
Automate TOC and related links, use config for base URL
Address PR review feedback from ngnijland: - Replace hard-coded TABLE_OF_CONTENTS with dynamic generation that scans content files and groups them using the sidebar configuration - Replace hard-coded RELATED_LINKS with automatic generation based on sidebar grouping (pages in the same group link to siblings) - Extract sidebar group definitions into shared config used by both astro.config.ts and the post-processing integration - Derive base URL from config.json instead of hard-coding it (Copilot review feedback)
1 parent 63f2912 commit 664aa50

3 files changed

Lines changed: 290 additions & 228 deletions

File tree

docs/astro.config.ts

Lines changed: 19 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import sitemap from "@astrojs/sitemap";
1111
import { llmsTxtPostProcess } from "./src/integrations/llms-txt-post-process";
1212

1313
import config from "./src/config/config.json";
14+
import { sidebarGroups } from "./src/config/sidebar-groups";
1415

1516
// https://astro.build/config
1617
export default defineConfig({
@@ -120,72 +121,24 @@ export default defineConfig({
120121
Footer: "./src/components/starlight/Footer.astro",
121122
SiteTitle: "./src/components/starlight/SiteTitle.astro",
122123
},
123-
sidebar: [
124-
{
125-
label: "Getting Started",
126-
collapsed: true,
127-
autogenerate: { directory: "docs/getting-started" },
128-
},
129-
{
130-
label: "Screenshots & Recordings",
131-
collapsed: true,
132-
items: [
133-
{ slug: "docs/features/capturing/screenshots" },
134-
{ slug: "docs/features/capturing/recordings" },
135-
{ slug: "docs/features/capturing/floating-thumbnail" },
136-
{ slug: "docs/features/capturing/app-store-connect-optimization" },
137-
{ slug: "docs/features/capturing/touch-indicators" },
138-
{ slug: "docs/features/capturing/120-fps-recordings" },
139-
],
140-
},
141-
{
142-
label: "Simulator Camera",
143-
link: "/docs/features/capturing/simulator-camera-support",
144-
},
145-
{
146-
label: "Status Bar",
147-
link: "/docs/features/capturing/statusbar-appearance",
148-
},
149-
{
150-
label: "Design Comparison",
151-
collapsed: true,
152-
autogenerate: { directory: "docs/features/design-comparison" },
153-
},
154-
{
155-
label: "App Actions",
156-
collapsed: true,
157-
autogenerate: { directory: "docs/features/app-actions" },
158-
},
159-
{
160-
label: "Networking",
161-
collapsed: true,
162-
autogenerate: { directory: "docs/features/networking" },
163-
},
164-
{
165-
label: "Build Insights",
166-
collapsed: true,
167-
autogenerate: { directory: "docs/features/build-insights" },
168-
},
169-
{
170-
label: "Accessibility",
171-
collapsed: true,
172-
autogenerate: { directory: "docs/features/accessibility" },
173-
},
174-
{
175-
label: "User Defaults Editor",
176-
link: "/docs/features/user-defaults-editor",
177-
},
178-
{
179-
label: "Settings",
180-
collapsed: true,
181-
autogenerate: { directory: "docs/settings" },
182-
},
183-
{
184-
label: "Support",
185-
collapsed: true,
186-
autogenerate: { directory: "docs/support" },
187-
},
188-
],
124+
sidebar: sidebarGroups.map((group) => {
125+
if (group.directory) {
126+
return {
127+
label: group.label,
128+
collapsed: group.collapsed,
129+
autogenerate: { directory: group.directory },
130+
};
131+
}
132+
const slugs = group.slugs!;
133+
if (slugs.length === 1) {
134+
return { label: group.label, link: `/${slugs[0]}` };
135+
}
136+
return {
137+
label: group.label,
138+
collapsed: group.collapsed,
139+
items: slugs.map((slug) => ({ slug })),
140+
};
141+
}),
189142
}),
190143
mdx(),
191144
llmsTxtPostProcess(),

docs/src/config/sidebar-groups.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
interface SidebarGroupDef {
2+
label: string;
3+
collapsed?: boolean;
4+
/** For autogenerate groups: directory relative to the content collection root */
5+
directory?: string;
6+
/** For explicit item/link groups: slug paths relative to the content collection root */
7+
slugs?: string[];
8+
}
9+
10+
export const sidebarGroups: SidebarGroupDef[] = [
11+
{
12+
label: "Getting Started",
13+
collapsed: true,
14+
directory: "docs/getting-started",
15+
},
16+
{
17+
label: "Screenshots & Recordings",
18+
collapsed: true,
19+
slugs: [
20+
"docs/features/capturing/screenshots",
21+
"docs/features/capturing/recordings",
22+
"docs/features/capturing/floating-thumbnail",
23+
"docs/features/capturing/app-store-connect-optimization",
24+
"docs/features/capturing/touch-indicators",
25+
"docs/features/capturing/120-fps-recordings",
26+
],
27+
},
28+
{
29+
label: "Simulator Camera",
30+
slugs: ["docs/features/capturing/simulator-camera-support"],
31+
},
32+
{
33+
label: "Status Bar",
34+
slugs: ["docs/features/capturing/statusbar-appearance"],
35+
},
36+
{
37+
label: "Design Comparison",
38+
collapsed: true,
39+
directory: "docs/features/design-comparison",
40+
},
41+
{
42+
label: "App Actions",
43+
collapsed: true,
44+
directory: "docs/features/app-actions",
45+
},
46+
{
47+
label: "Networking",
48+
collapsed: true,
49+
directory: "docs/features/networking",
50+
},
51+
{
52+
label: "Build Insights",
53+
collapsed: true,
54+
directory: "docs/features/build-insights",
55+
},
56+
{
57+
label: "Accessibility",
58+
collapsed: true,
59+
directory: "docs/features/accessibility",
60+
},
61+
{
62+
label: "User Defaults Editor",
63+
slugs: ["docs/features/user-defaults-editor"],
64+
},
65+
{
66+
label: "Settings",
67+
collapsed: true,
68+
directory: "docs/settings",
69+
},
70+
{
71+
label: "Support",
72+
collapsed: true,
73+
directory: "docs/support",
74+
},
75+
];

0 commit comments

Comments
 (0)