Add public product roadmap (#480)
This commit is contained in:
parent
0a11839a1c
commit
bd402844fa
51
web/content/marketing/roadmap.md
Normal file
51
web/content/marketing/roadmap.md
Normal file
@ -0,0 +1,51 @@
|
||||
---
|
||||
title: Roadmap
|
||||
description: Features we plan to add to OpenSEO over the next three months.
|
||||
---
|
||||
|
||||
Have a feature request that belongs here? [Tell us on Discord](https://discord.gg/c9uGs3cFXr).
|
||||
|
||||
## Evergreen
|
||||
|
||||
- Fix bugs
|
||||
- Improve onboarding
|
||||
- Easy whether your new to SEO or a Pro
|
||||
- Improve the UX
|
||||
|
||||
## Highest Priority
|
||||
|
||||
- Add teammates to an account
|
||||
- Community skill library
|
||||
- "Advanced" features available in other tools make the tools less approachable to people new to SEO.
|
||||
- We'll make a community library for these more advanced workflows.
|
||||
- Web Bot Auth for bot-protected sites for Audit
|
||||
- Improve In App Agent
|
||||
- Consistent design across OpenSEO, built on a shared component library
|
||||
- IndexNow support
|
||||
|
||||
## Soon
|
||||
|
||||
- Prompt tracking for AI search visibility
|
||||
- Google Business Profile integration
|
||||
- Google Maps geo-grid rank tracking
|
||||
- Support multi-user for Docker self hosting
|
||||
- Guides for popular platforms like Coolify and Railway.
|
||||
- Configurable daily and weekly email reports
|
||||
- Scheduled Site Audits
|
||||
- GSC Reports
|
||||
- Rank Tracking Alerts
|
||||
- Custom reports
|
||||
- We'll expose a Claude Skill so that you can customize to your company or clients.
|
||||
- Share reports with clients
|
||||
- Content writing workflows for Agents
|
||||
- Agent readiness checks in site audits
|
||||
- Bing Webmaster Tools integration
|
||||
|
||||
## Not planned
|
||||
|
||||
- Content Optimization features like "Keyword Density"
|
||||
- Advanced Site Audit Features like JS Rendering
|
||||
- Keyword Gap Analysis Page
|
||||
- We will support this as a skill. You can ask Claude to turn it into a report.
|
||||
|
||||
Have a feature request that belongs here? [Tell us on Discord](https://discord.gg/c9uGs3cFXr).
|
||||
@ -28,6 +28,7 @@ const STATIC_PATHS = [
|
||||
"/backlink-checker",
|
||||
"/open-source-seo",
|
||||
"/google-search-console-mcp",
|
||||
"/roadmap",
|
||||
...Object.values(FEATURE_PAGE_SLUGS).map((slug) => `/features/${slug}`),
|
||||
];
|
||||
|
||||
|
||||
@ -51,6 +51,7 @@ export function SiteFooter({ className }: { className?: string }) {
|
||||
<div>
|
||||
<p className="font-semibold text-neutral-900">Company</p>
|
||||
<div className="mt-2 flex flex-col gap-1.5">
|
||||
<Link to="/roadmap">Roadmap</Link>
|
||||
<Link to="/pricing">Pricing</Link>
|
||||
<a
|
||||
href="https://github.com/every-app/open-seo"
|
||||
|
||||
@ -23,6 +23,7 @@ import { Route as BlogsSplatRouteImport } from './routes/blogs/$'
|
||||
import { Route as ApiSubscribeRouteImport } from './routes/api/subscribe'
|
||||
import { Route as ApiEventRouteImport } from './routes/api/event'
|
||||
import { Route as ApiBacklinkCheckRouteImport } from './routes/api/backlink-check'
|
||||
import { Route as MarketingRoadmapRouteImport } from './routes/_marketing/roadmap'
|
||||
import { Route as MarketingPricingRouteImport } from './routes/_marketing/pricing'
|
||||
import { Route as MarketingOpenSourceSeoRouteImport } from './routes/_marketing/open-source-seo'
|
||||
import { Route as MarketingGoogleSearchConsoleMcpRouteImport } from './routes/_marketing/google-search-console-mcp'
|
||||
@ -117,6 +118,11 @@ const ApiBacklinkCheckRoute = ApiBacklinkCheckRouteImport.update({
|
||||
path: '/api/backlink-check',
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any)
|
||||
const MarketingRoadmapRoute = MarketingRoadmapRouteImport.update({
|
||||
id: '/roadmap',
|
||||
path: '/roadmap',
|
||||
getParentRoute: () => MarketingRoute,
|
||||
} as any)
|
||||
const MarketingPricingRoute = MarketingPricingRouteImport.update({
|
||||
id: '/pricing',
|
||||
path: '/pricing',
|
||||
@ -268,6 +274,7 @@ export interface FileRoutesByFullPath {
|
||||
'/google-search-console-mcp': typeof MarketingGoogleSearchConsoleMcpRoute
|
||||
'/open-source-seo': typeof MarketingOpenSourceSeoRoute
|
||||
'/pricing': typeof MarketingPricingRoute
|
||||
'/roadmap': typeof MarketingRoadmapRoute
|
||||
'/api/backlink-check': typeof ApiBacklinkCheckRoute
|
||||
'/api/event': typeof ApiEventRoute
|
||||
'/api/subscribe': typeof ApiSubscribeRoute
|
||||
@ -306,6 +313,7 @@ export interface FileRoutesByTo {
|
||||
'/google-search-console-mcp': typeof MarketingGoogleSearchConsoleMcpRoute
|
||||
'/open-source-seo': typeof MarketingOpenSourceSeoRoute
|
||||
'/pricing': typeof MarketingPricingRoute
|
||||
'/roadmap': typeof MarketingRoadmapRoute
|
||||
'/api/backlink-check': typeof ApiBacklinkCheckRoute
|
||||
'/api/event': typeof ApiEventRoute
|
||||
'/api/subscribe': typeof ApiSubscribeRoute
|
||||
@ -347,6 +355,7 @@ export interface FileRoutesById {
|
||||
'/_marketing/google-search-console-mcp': typeof MarketingGoogleSearchConsoleMcpRoute
|
||||
'/_marketing/open-source-seo': typeof MarketingOpenSourceSeoRoute
|
||||
'/_marketing/pricing': typeof MarketingPricingRoute
|
||||
'/_marketing/roadmap': typeof MarketingRoadmapRoute
|
||||
'/api/backlink-check': typeof ApiBacklinkCheckRoute
|
||||
'/api/event': typeof ApiEventRoute
|
||||
'/api/subscribe': typeof ApiSubscribeRoute
|
||||
@ -389,6 +398,7 @@ export interface FileRouteTypes {
|
||||
| '/google-search-console-mcp'
|
||||
| '/open-source-seo'
|
||||
| '/pricing'
|
||||
| '/roadmap'
|
||||
| '/api/backlink-check'
|
||||
| '/api/event'
|
||||
| '/api/subscribe'
|
||||
@ -427,6 +437,7 @@ export interface FileRouteTypes {
|
||||
| '/google-search-console-mcp'
|
||||
| '/open-source-seo'
|
||||
| '/pricing'
|
||||
| '/roadmap'
|
||||
| '/api/backlink-check'
|
||||
| '/api/event'
|
||||
| '/api/subscribe'
|
||||
@ -467,6 +478,7 @@ export interface FileRouteTypes {
|
||||
| '/_marketing/google-search-console-mcp'
|
||||
| '/_marketing/open-source-seo'
|
||||
| '/_marketing/pricing'
|
||||
| '/_marketing/roadmap'
|
||||
| '/api/backlink-check'
|
||||
| '/api/event'
|
||||
| '/api/subscribe'
|
||||
@ -616,6 +628,13 @@ declare module '@tanstack/react-router' {
|
||||
preLoaderRoute: typeof ApiBacklinkCheckRouteImport
|
||||
parentRoute: typeof rootRouteImport
|
||||
}
|
||||
'/_marketing/roadmap': {
|
||||
id: '/_marketing/roadmap'
|
||||
path: '/roadmap'
|
||||
fullPath: '/roadmap'
|
||||
preLoaderRoute: typeof MarketingRoadmapRouteImport
|
||||
parentRoute: typeof MarketingRoute
|
||||
}
|
||||
'/_marketing/pricing': {
|
||||
id: '/_marketing/pricing'
|
||||
path: '/pricing'
|
||||
@ -792,6 +811,7 @@ interface MarketingRouteChildren {
|
||||
MarketingGoogleSearchConsoleMcpRoute: typeof MarketingGoogleSearchConsoleMcpRoute
|
||||
MarketingOpenSourceSeoRoute: typeof MarketingOpenSourceSeoRoute
|
||||
MarketingPricingRoute: typeof MarketingPricingRoute
|
||||
MarketingRoadmapRoute: typeof MarketingRoadmapRoute
|
||||
MarketingIndexRoute: typeof MarketingIndexRoute
|
||||
MarketingFeaturesAiBrandVisibilityRoute: typeof MarketingFeaturesAiBrandVisibilityRoute
|
||||
MarketingFeaturesAiSearchPromptsRoute: typeof MarketingFeaturesAiSearchPromptsRoute
|
||||
@ -820,6 +840,7 @@ const MarketingRouteChildren: MarketingRouteChildren = {
|
||||
MarketingGoogleSearchConsoleMcpRoute: MarketingGoogleSearchConsoleMcpRoute,
|
||||
MarketingOpenSourceSeoRoute: MarketingOpenSourceSeoRoute,
|
||||
MarketingPricingRoute: MarketingPricingRoute,
|
||||
MarketingRoadmapRoute: MarketingRoadmapRoute,
|
||||
MarketingIndexRoute: MarketingIndexRoute,
|
||||
MarketingFeaturesAiBrandVisibilityRoute:
|
||||
MarketingFeaturesAiBrandVisibilityRoute,
|
||||
|
||||
@ -52,6 +52,7 @@ function getMobileNavItems(githubStarCount: string) {
|
||||
label: "Product",
|
||||
links: [
|
||||
{ label: "Features", href: "/features" },
|
||||
{ label: "Roadmap", href: "/roadmap" },
|
||||
{ label: "Pricing", href: "/pricing" },
|
||||
],
|
||||
},
|
||||
@ -170,6 +171,12 @@ function MarketingLayout() {
|
||||
<div className="hidden items-center justify-center gap-5 md:flex">
|
||||
<FeatureDropdown />
|
||||
<ResourcesDropdown />
|
||||
<Link
|
||||
to="/roadmap"
|
||||
className="text-sm font-semibold text-neutral-600 transition-colors hover:text-neutral-900"
|
||||
>
|
||||
Roadmap
|
||||
</Link>
|
||||
<Link
|
||||
to="/pricing"
|
||||
className="text-sm font-semibold text-neutral-600 transition-colors hover:text-neutral-900"
|
||||
|
||||
37
web/src/routes/_marketing/roadmap.tsx
Normal file
37
web/src/routes/_marketing/roadmap.tsx
Normal file
@ -0,0 +1,37 @@
|
||||
import { createFileRoute } from "@tanstack/react-router";
|
||||
import defaultMdxComponents from "fumadocs-ui/mdx";
|
||||
import { DocsBody } from "fumadocs-ui/page";
|
||||
import RoadmapContent, {
|
||||
frontmatter as roadmapFrontmatter,
|
||||
} from "../../../content/marketing/roadmap.md";
|
||||
import { buildPageSeo } from "@/lib/seo";
|
||||
|
||||
export const Route = createFileRoute("/_marketing/roadmap")({
|
||||
head: () =>
|
||||
buildPageSeo({
|
||||
title: roadmapFrontmatter.title,
|
||||
description: roadmapFrontmatter.description,
|
||||
path: "/roadmap",
|
||||
titleSuffix: "OpenSEO",
|
||||
}),
|
||||
component: Roadmap,
|
||||
});
|
||||
|
||||
function Roadmap() {
|
||||
return (
|
||||
<article className="mx-auto max-w-3xl text-neutral-900">
|
||||
<header className="mb-10 border-b border-[var(--color-border-subtle)] pb-8">
|
||||
<h1 className="text-4xl font-semibold leading-tight tracking-tight text-neutral-950 md:text-6xl">
|
||||
{roadmapFrontmatter.title}
|
||||
</h1>
|
||||
<p className="mt-5 max-w-2xl text-lg leading-8 text-[var(--color-brand-muted)]">
|
||||
{roadmapFrontmatter.description}
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<DocsBody className="min-w-0 text-neutral-800 [&_a]:!text-neutral-950 [&_a]:font-medium [&_a]:underline [&_a]:decoration-[var(--color-brand-accent)] [&_a]:underline-offset-4 [&_h2]:!text-neutral-950 [&_h2_a]:!no-underline [&_li]:!text-neutral-700 [&_p]:!text-neutral-700">
|
||||
<RoadmapContent components={defaultMdxComponents} />
|
||||
</DocsBody>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user