Rework docs navigation and move alternatives to top-level pages (#1487)
* Rework docs navigation and move alternatives to top-level pages - Add nested docs nav with categories, collapsible groups, breadcrumbs, and a right-hand page outline with heading slugs. - Move alternatives out of /docs/alternatives into /alternatives/* marketing pages with 301 redirects. - Add github-slugger for heading IDs and require explicit width on SiteShell so new pages can't accidentally pick the narrow prose layout. - Remove the best-practices doc from public-docs. * Make docs content column prose-width
This commit is contained in:
@@ -61,6 +61,13 @@ import { Route as DocsIndexRouteImport } from "./routes/docs/index";
|
||||
import { Route as BlogIndexRouteImport } from "./routes/blog/index";
|
||||
import { Route as DocsSplatRouteImport } from "./routes/docs/$";
|
||||
import { Route as BlogSplatRouteImport } from "./routes/blog/$";
|
||||
import { Route as AlternativesSupersetRouteImport } from "./routes/alternatives/superset";
|
||||
import { Route as AlternativesOpencodeDesktopRouteImport } from "./routes/alternatives/opencode-desktop";
|
||||
import { Route as AlternativesOpenchamberRouteImport } from "./routes/alternatives/openchamber";
|
||||
import { Route as AlternativesHappyCoderRouteImport } from "./routes/alternatives/happy-coder";
|
||||
import { Route as AlternativesConductorRouteImport } from "./routes/alternatives/conductor";
|
||||
import { Route as AlternativesCodexAppRouteImport } from "./routes/alternatives/codex-app";
|
||||
import { Route as AlternativesClaudeDesktopRouteImport } from "./routes/alternatives/claude-desktop";
|
||||
|
||||
const VtcodeRoute = VtcodeRouteImport.update({
|
||||
id: "/vtcode",
|
||||
@@ -322,6 +329,43 @@ const BlogSplatRoute = BlogSplatRouteImport.update({
|
||||
path: "/$",
|
||||
getParentRoute: () => BlogRoute,
|
||||
} as any);
|
||||
const AlternativesSupersetRoute = AlternativesSupersetRouteImport.update({
|
||||
id: "/alternatives/superset",
|
||||
path: "/alternatives/superset",
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any);
|
||||
const AlternativesOpencodeDesktopRoute =
|
||||
AlternativesOpencodeDesktopRouteImport.update({
|
||||
id: "/alternatives/opencode-desktop",
|
||||
path: "/alternatives/opencode-desktop",
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any);
|
||||
const AlternativesOpenchamberRoute = AlternativesOpenchamberRouteImport.update({
|
||||
id: "/alternatives/openchamber",
|
||||
path: "/alternatives/openchamber",
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any);
|
||||
const AlternativesHappyCoderRoute = AlternativesHappyCoderRouteImport.update({
|
||||
id: "/alternatives/happy-coder",
|
||||
path: "/alternatives/happy-coder",
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any);
|
||||
const AlternativesConductorRoute = AlternativesConductorRouteImport.update({
|
||||
id: "/alternatives/conductor",
|
||||
path: "/alternatives/conductor",
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any);
|
||||
const AlternativesCodexAppRoute = AlternativesCodexAppRouteImport.update({
|
||||
id: "/alternatives/codex-app",
|
||||
path: "/alternatives/codex-app",
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any);
|
||||
const AlternativesClaudeDesktopRoute =
|
||||
AlternativesClaudeDesktopRouteImport.update({
|
||||
id: "/alternatives/claude-desktop",
|
||||
path: "/alternatives/claude-desktop",
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any);
|
||||
|
||||
export interface FileRoutesByFullPath {
|
||||
"/": typeof IndexRoute;
|
||||
@@ -372,6 +416,13 @@ export interface FileRoutesByFullPath {
|
||||
"/sponsor": typeof SponsorRoute;
|
||||
"/stakpak": typeof StakpakRoute;
|
||||
"/vtcode": typeof VtcodeRoute;
|
||||
"/alternatives/claude-desktop": typeof AlternativesClaudeDesktopRoute;
|
||||
"/alternatives/codex-app": typeof AlternativesCodexAppRoute;
|
||||
"/alternatives/conductor": typeof AlternativesConductorRoute;
|
||||
"/alternatives/happy-coder": typeof AlternativesHappyCoderRoute;
|
||||
"/alternatives/openchamber": typeof AlternativesOpenchamberRoute;
|
||||
"/alternatives/opencode-desktop": typeof AlternativesOpencodeDesktopRoute;
|
||||
"/alternatives/superset": typeof AlternativesSupersetRoute;
|
||||
"/blog/$": typeof BlogSplatRoute;
|
||||
"/docs/$": typeof DocsSplatRoute;
|
||||
"/blog/": typeof BlogIndexRoute;
|
||||
@@ -424,6 +475,13 @@ export interface FileRoutesByTo {
|
||||
"/sponsor": typeof SponsorRoute;
|
||||
"/stakpak": typeof StakpakRoute;
|
||||
"/vtcode": typeof VtcodeRoute;
|
||||
"/alternatives/claude-desktop": typeof AlternativesClaudeDesktopRoute;
|
||||
"/alternatives/codex-app": typeof AlternativesCodexAppRoute;
|
||||
"/alternatives/conductor": typeof AlternativesConductorRoute;
|
||||
"/alternatives/happy-coder": typeof AlternativesHappyCoderRoute;
|
||||
"/alternatives/openchamber": typeof AlternativesOpenchamberRoute;
|
||||
"/alternatives/opencode-desktop": typeof AlternativesOpencodeDesktopRoute;
|
||||
"/alternatives/superset": typeof AlternativesSupersetRoute;
|
||||
"/blog/$": typeof BlogSplatRoute;
|
||||
"/docs/$": typeof DocsSplatRoute;
|
||||
"/blog": typeof BlogIndexRoute;
|
||||
@@ -479,6 +537,13 @@ export interface FileRoutesById {
|
||||
"/sponsor": typeof SponsorRoute;
|
||||
"/stakpak": typeof StakpakRoute;
|
||||
"/vtcode": typeof VtcodeRoute;
|
||||
"/alternatives/claude-desktop": typeof AlternativesClaudeDesktopRoute;
|
||||
"/alternatives/codex-app": typeof AlternativesCodexAppRoute;
|
||||
"/alternatives/conductor": typeof AlternativesConductorRoute;
|
||||
"/alternatives/happy-coder": typeof AlternativesHappyCoderRoute;
|
||||
"/alternatives/openchamber": typeof AlternativesOpenchamberRoute;
|
||||
"/alternatives/opencode-desktop": typeof AlternativesOpencodeDesktopRoute;
|
||||
"/alternatives/superset": typeof AlternativesSupersetRoute;
|
||||
"/blog/$": typeof BlogSplatRoute;
|
||||
"/docs/$": typeof DocsSplatRoute;
|
||||
"/blog/": typeof BlogIndexRoute;
|
||||
@@ -535,6 +600,13 @@ export interface FileRouteTypes {
|
||||
| "/sponsor"
|
||||
| "/stakpak"
|
||||
| "/vtcode"
|
||||
| "/alternatives/claude-desktop"
|
||||
| "/alternatives/codex-app"
|
||||
| "/alternatives/conductor"
|
||||
| "/alternatives/happy-coder"
|
||||
| "/alternatives/openchamber"
|
||||
| "/alternatives/opencode-desktop"
|
||||
| "/alternatives/superset"
|
||||
| "/blog/$"
|
||||
| "/docs/$"
|
||||
| "/blog/"
|
||||
@@ -587,6 +659,13 @@ export interface FileRouteTypes {
|
||||
| "/sponsor"
|
||||
| "/stakpak"
|
||||
| "/vtcode"
|
||||
| "/alternatives/claude-desktop"
|
||||
| "/alternatives/codex-app"
|
||||
| "/alternatives/conductor"
|
||||
| "/alternatives/happy-coder"
|
||||
| "/alternatives/openchamber"
|
||||
| "/alternatives/opencode-desktop"
|
||||
| "/alternatives/superset"
|
||||
| "/blog/$"
|
||||
| "/docs/$"
|
||||
| "/blog"
|
||||
@@ -641,6 +720,13 @@ export interface FileRouteTypes {
|
||||
| "/sponsor"
|
||||
| "/stakpak"
|
||||
| "/vtcode"
|
||||
| "/alternatives/claude-desktop"
|
||||
| "/alternatives/codex-app"
|
||||
| "/alternatives/conductor"
|
||||
| "/alternatives/happy-coder"
|
||||
| "/alternatives/openchamber"
|
||||
| "/alternatives/opencode-desktop"
|
||||
| "/alternatives/superset"
|
||||
| "/blog/$"
|
||||
| "/docs/$"
|
||||
| "/blog/"
|
||||
@@ -696,6 +782,13 @@ export interface RootRouteChildren {
|
||||
SponsorRoute: typeof SponsorRoute;
|
||||
StakpakRoute: typeof StakpakRoute;
|
||||
VtcodeRoute: typeof VtcodeRoute;
|
||||
AlternativesClaudeDesktopRoute: typeof AlternativesClaudeDesktopRoute;
|
||||
AlternativesCodexAppRoute: typeof AlternativesCodexAppRoute;
|
||||
AlternativesConductorRoute: typeof AlternativesConductorRoute;
|
||||
AlternativesHappyCoderRoute: typeof AlternativesHappyCoderRoute;
|
||||
AlternativesOpenchamberRoute: typeof AlternativesOpenchamberRoute;
|
||||
AlternativesOpencodeDesktopRoute: typeof AlternativesOpencodeDesktopRoute;
|
||||
AlternativesSupersetRoute: typeof AlternativesSupersetRoute;
|
||||
}
|
||||
|
||||
declare module "@tanstack/react-router" {
|
||||
@@ -1064,6 +1157,55 @@ declare module "@tanstack/react-router" {
|
||||
preLoaderRoute: typeof BlogSplatRouteImport;
|
||||
parentRoute: typeof BlogRoute;
|
||||
};
|
||||
"/alternatives/superset": {
|
||||
id: "/alternatives/superset";
|
||||
path: "/alternatives/superset";
|
||||
fullPath: "/alternatives/superset";
|
||||
preLoaderRoute: typeof AlternativesSupersetRouteImport;
|
||||
parentRoute: typeof rootRouteImport;
|
||||
};
|
||||
"/alternatives/opencode-desktop": {
|
||||
id: "/alternatives/opencode-desktop";
|
||||
path: "/alternatives/opencode-desktop";
|
||||
fullPath: "/alternatives/opencode-desktop";
|
||||
preLoaderRoute: typeof AlternativesOpencodeDesktopRouteImport;
|
||||
parentRoute: typeof rootRouteImport;
|
||||
};
|
||||
"/alternatives/openchamber": {
|
||||
id: "/alternatives/openchamber";
|
||||
path: "/alternatives/openchamber";
|
||||
fullPath: "/alternatives/openchamber";
|
||||
preLoaderRoute: typeof AlternativesOpenchamberRouteImport;
|
||||
parentRoute: typeof rootRouteImport;
|
||||
};
|
||||
"/alternatives/happy-coder": {
|
||||
id: "/alternatives/happy-coder";
|
||||
path: "/alternatives/happy-coder";
|
||||
fullPath: "/alternatives/happy-coder";
|
||||
preLoaderRoute: typeof AlternativesHappyCoderRouteImport;
|
||||
parentRoute: typeof rootRouteImport;
|
||||
};
|
||||
"/alternatives/conductor": {
|
||||
id: "/alternatives/conductor";
|
||||
path: "/alternatives/conductor";
|
||||
fullPath: "/alternatives/conductor";
|
||||
preLoaderRoute: typeof AlternativesConductorRouteImport;
|
||||
parentRoute: typeof rootRouteImport;
|
||||
};
|
||||
"/alternatives/codex-app": {
|
||||
id: "/alternatives/codex-app";
|
||||
path: "/alternatives/codex-app";
|
||||
fullPath: "/alternatives/codex-app";
|
||||
preLoaderRoute: typeof AlternativesCodexAppRouteImport;
|
||||
parentRoute: typeof rootRouteImport;
|
||||
};
|
||||
"/alternatives/claude-desktop": {
|
||||
id: "/alternatives/claude-desktop";
|
||||
path: "/alternatives/claude-desktop";
|
||||
fullPath: "/alternatives/claude-desktop";
|
||||
preLoaderRoute: typeof AlternativesClaudeDesktopRouteImport;
|
||||
parentRoute: typeof rootRouteImport;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1140,6 +1282,13 @@ const rootRouteChildren: RootRouteChildren = {
|
||||
SponsorRoute: SponsorRoute,
|
||||
StakpakRoute: StakpakRoute,
|
||||
VtcodeRoute: VtcodeRoute,
|
||||
AlternativesClaudeDesktopRoute: AlternativesClaudeDesktopRoute,
|
||||
AlternativesCodexAppRoute: AlternativesCodexAppRoute,
|
||||
AlternativesConductorRoute: AlternativesConductorRoute,
|
||||
AlternativesHappyCoderRoute: AlternativesHappyCoderRoute,
|
||||
AlternativesOpenchamberRoute: AlternativesOpenchamberRoute,
|
||||
AlternativesOpencodeDesktopRoute: AlternativesOpencodeDesktopRoute,
|
||||
AlternativesSupersetRoute: AlternativesSupersetRoute,
|
||||
};
|
||||
export const routeTree = rootRouteImport
|
||||
._addFileChildren(rootRouteChildren)
|
||||
|
||||
Reference in New Issue
Block a user