diff --git a/apps/web/src/app/(dash)/roadmap.tsx b/apps/web/src/app/(dash)/roadmap.tsx new file mode 100644 index 00000000..5e19cabe --- /dev/null +++ b/apps/web/src/app/(dash)/roadmap.tsx @@ -0,0 +1,128 @@ +import { BreadcrumbItem } from "@mattrax/ui"; +import clsx from "clsx"; +import { For, Show } from "solid-js"; +import { Page } from "~/components/Page"; + +export default function () { + return ( + Roadmap]} + class="p-4 max-w-xl" + > +
+
+ + {([title, section]) => ( +
+
status === "done", + ) + ? "bg-green-500" + : Object.values(section.items).some( + (status) => status === "progress", + ) + ? "bg-orange-500" + : "bg-muted-foreground", + )} + /> +
{title}
+ + {(description) => ( +
+ {description()} +
+ )} +
+
    + + {([item, status]) => ( +
  • + {item} +
  • + )} +
    +
+
+ )} + +
+
+ + ); +} + +type Status = "none" | "progress" | "done"; +type RoadmapSection = { + description?: string; + items: Record; +}; + +const roadmap: Record = { + "Alpha launch": { + items: { + "Basic account and tenant management": "done", + "Blueprint management & Device overview": "progress", + "Basic Windows management": "none", + "Improve sidebar with mobile support & minimise": "none", + "Analytics and error tracking": "none", + }, + }, + // Beta launch + Cleanup: { + description: "Cleanup major missing functionality from the alpha launch.", + items: { + "Implement tenant delete": "none", + "Implement account delete": "none", + "Multiple administrators with access to a single tenant": "none", + "Improve login process": "none", + "Global Search (Cmd + K) & Keyboard navigation": "none", + }, + }, + "Extended management": { + items: { + "macOS Management": "none", + "Android Management": "none", + "Application management": "none", + "Run bash and batch scripts on devices": "none", + "Custom attributes": "none", + }, + }, + Composability: { + items: { + "Apply policies in the user vs device scope": "none", + Policies: "none", + Groups: "none", + "Manage policy versions": "none", + }, + }, + Users: { + items: { + "AzureAD integration": "none", + "Google Workspaces integration": "none", + "Active Directory integration": "none", + "SAML integration": "none", + "User-initiated enrollment": "none", + }, + }, + // v1 Launch + "Self-service self hosting": { + items: { + "Support self-hosted": "none", + Updater: "none", + "Deployment Guide": "none", + }, + }, +}; diff --git a/apps/web/src/components/Sidebar/OtherNavigation.tsx b/apps/web/src/components/Sidebar/OtherNavigation.tsx index 231b00ce..2391bd45 100644 --- a/apps/web/src/components/Sidebar/OtherNavigation.tsx +++ b/apps/web/src/components/Sidebar/OtherNavigation.tsx @@ -14,11 +14,12 @@ export function OtherNavigation() { title: string, href: string, Icon: (props: { class: string }) => JSX.Element, + newTab?: boolean, ) => (
  • @@ -104,6 +105,7 @@ export function OtherNavigation() {
  • {item("Support", "mailto:hello@mattrax.app", IconLucideLifeBuoy)} + {item("Roadmap", "/roadmap", IconPhMapTrifold, false)} ); } diff --git a/packages/ui/src/auto-imports.d.ts b/packages/ui/src/auto-imports.d.ts index 8a5f4e55..4df6a207 100644 --- a/packages/ui/src/auto-imports.d.ts +++ b/packages/ui/src/auto-imports.d.ts @@ -82,6 +82,7 @@ declare global { const IconPhMagnifyingGlass: typeof import('~icons/ph/magnifying-glass.jsx')['default'] const IconPhMagnifyingGlassDuotone: typeof import('~icons/ph/magnifying-glass-duotone.jsx')['default'] const IconPhMagnifyingGlassLight: typeof import('~icons/ph/magnifying-glass-light.jsx')['default'] + const IconPhMapTrifold: typeof import('~icons/ph/map-trifold.jsx')['default'] const IconPhPlus: typeof import('~icons/ph/plus.jsx')['default'] const IconPhPlusCircle: typeof import('~icons/ph/plus-circle.jsx')['default'] const IconPhPuzzlePiece: typeof import('~icons/ph/puzzle-piece.jsx')['default']