mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 10:18:54 +00:00
Simplify product roadmap (#2626)
Still need to configure the view to show rough dates/times, but this should suffice for now. Fixes firezone/gtm#205
This commit is contained in:
@@ -233,8 +233,9 @@ designed 1.0 to be flexible enough to suit the needs of both.
|
||||
While we were at it, we decided to build a slew of new features for 1.0 in
|
||||
addition to the architecture improvements laid out in this post. Most notably, a
|
||||
cloud-managed admin portal, native clients, and high availability support. But
|
||||
there's much more. Check our [product roadmap](/product/roadmap) for more
|
||||
details on what's coming in 1.0.
|
||||
there's much more. Check our
|
||||
[product roadmap](https://github.com/orgs/firezone/projects/9) for more details
|
||||
on what's coming in 1.0.
|
||||
|
||||
#### Next steps
|
||||
|
||||
@@ -243,6 +244,7 @@ phases, starting with an early access preview aiming to launch mid-Q3 of this
|
||||
year. If you're interesting in joining the early access program,
|
||||
[head here to fill out the form](/product/early-access) and we'll be in touch.
|
||||
|
||||
Until then, feel free to [follow our roadmap](/product/roadmap) or
|
||||
Until then, feel free to
|
||||
[follow our roadmap](https://github.com/orgs/firezone/projects/9) or
|
||||
[watch our GitHub repository](https://www.github.com/firezone/firezone) for
|
||||
updates. Comments welcome!
|
||||
|
||||
@@ -1,367 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { Metadata } from "next";
|
||||
import Link from "next/link";
|
||||
import CommitMarquee from "@/components/CommitMarquee";
|
||||
import ActionLink from "@/components/ActionLink";
|
||||
import { HiMegaphone, HiBeaker } from "react-icons/hi2";
|
||||
import { XMLParser } from "fast-xml-parser";
|
||||
import { useState, useEffect } from "react";
|
||||
import GitHubHtml from "@/components/GitHubHtml";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Product Roadmap • Firezone",
|
||||
description: "Recently shipped, in progress, and future updates to Firezone.",
|
||||
};
|
||||
|
||||
function RoadmapItem({
|
||||
title,
|
||||
href,
|
||||
type,
|
||||
date,
|
||||
entryId,
|
||||
children,
|
||||
}: {
|
||||
href: string;
|
||||
title: string;
|
||||
type: string;
|
||||
date?: string;
|
||||
entryId?: string;
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
function badge(type: string) {
|
||||
switch (type) {
|
||||
case "release":
|
||||
return (
|
||||
<span className="bg-accent-600 text-white text-xs font-semibold px-2.5 py-0.5 rounded">
|
||||
{type}
|
||||
</span>
|
||||
);
|
||||
case "1.0":
|
||||
case "feature":
|
||||
return (
|
||||
<span className="bg-primary-450 text-white text-xs font-semibold px-2.5 py-0.5 rounded">
|
||||
{type}
|
||||
</span>
|
||||
);
|
||||
case "refactor":
|
||||
case "website":
|
||||
return (
|
||||
<span className="bg-neutral-800 text-white text-xs font-semibold px-2.5 py-0.5 rounded">
|
||||
{type}
|
||||
</span>
|
||||
);
|
||||
case "docs":
|
||||
return (
|
||||
<span className="bg-neutral-100 text-neutral-800 text-xs font-semibold px-2.5 py-0.5 rounded">
|
||||
{type}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
return (
|
||||
<li
|
||||
key={entryId}
|
||||
className="shadow-sm bg-white rounded shadow-sm p-4 mb-4 hover:shadow-md"
|
||||
>
|
||||
<h5 className="text-lg font-semibold">
|
||||
<Link
|
||||
href={href}
|
||||
className="text-accent-500 underline hover:no-underline"
|
||||
>
|
||||
{title}
|
||||
</Link>
|
||||
</h5>
|
||||
<div className="pb-4">{children}</div>
|
||||
<div className="flex items-center justify-between">
|
||||
{date ? (
|
||||
<span className="text-xs font-semibold px-2.5 py-0.5 bg-neutral-200 text-neutral-800">
|
||||
{new Date(date!).toDateString()}
|
||||
</span>
|
||||
) : (
|
||||
<span></span>
|
||||
)}
|
||||
{badge(type)}
|
||||
</div>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Page() {
|
||||
const parser = new XMLParser({ ignoreAttributes: false });
|
||||
const [xml, setXml] = useState<any>({ feed: { entry: [] } });
|
||||
|
||||
useEffect(() => {
|
||||
fetch("/api/github/firezone/firezone/releases.atom")
|
||||
.then((response) => response.text())
|
||||
.then((str) => parser.parse(str))
|
||||
.then((data) => {
|
||||
setXml(data);
|
||||
})
|
||||
.catch((error) => console.error(error));
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className="bg-neutral-100">
|
||||
<div className="py-8 px-4 mx-auto max-w-screen-xl lg:py-16 lg:px-6">
|
||||
<div className="mx-auto max-w-screen-md">
|
||||
<h1 className="mb-4 md:mb-12 justify-center text-center text-5xl sm:text-6xl font-extrabold tracking-tight leading-none text-neutral-900">
|
||||
Product Roadmap
|
||||
</h1>
|
||||
<h2 className="mx-auto text-xl text-center mb-8 md:mb-12 max-w-2xl tracking-tight text-neutral-800">
|
||||
Take a peek below to learn what we're working on and how you can get
|
||||
involved.
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<div className="grid md:grid-cols-3 mx-auto max-w-screen-lg divide-x">
|
||||
<div className="p-6">
|
||||
<h3 className="text-neutral-900 tracking-tight font-bold text-2xl mb-4">
|
||||
Shipped
|
||||
</h3>
|
||||
<p className="text-lg text-neutral-900 mb-6">
|
||||
Updates we've recently shipped.
|
||||
</p>
|
||||
<div className="mb-4">
|
||||
<h4 className="border-b border-neutral-200 mb-2 text-xl tracking-tight font-semibold text-neutral-800">
|
||||
Recent Releases
|
||||
</h4>
|
||||
<ul className="flex flex-col">
|
||||
{xml.feed.entry.slice(0, 3).map((entry: any) => {
|
||||
return (
|
||||
<RoadmapItem
|
||||
entryId={entry.id}
|
||||
title={entry.title}
|
||||
href={entry.link["@_href"]}
|
||||
type="release"
|
||||
date={entry.updated}
|
||||
>
|
||||
<GitHubHtml html={entry.content["#text"]} />
|
||||
</RoadmapItem>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</div>
|
||||
{/* TODO: Consider automating this with the GitHub API */}
|
||||
<div className="mb-4">
|
||||
<h4 className="border-b border-neutral-200 mb-2 text-xl tracking-tight font-semibold text-neutral-800">
|
||||
Website / Docs
|
||||
</h4>
|
||||
<ul className="flex flex-col">
|
||||
<RoadmapItem
|
||||
title="1.0 early access page"
|
||||
href="https://github.com/firezone/firezone/pull/1733"
|
||||
type="website"
|
||||
date="2023-07-06T17:56:03Z"
|
||||
>
|
||||
We've added a new{" "}
|
||||
<Link
|
||||
href="/product/early-access"
|
||||
className="text-accent-500 underline hover:no-underline"
|
||||
>
|
||||
early access page
|
||||
</Link>{" "}
|
||||
to allow users to sign up to test new Firezone features and
|
||||
releases.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Team page"
|
||||
href="https://github.com/firezone/firezone/pull/1731"
|
||||
type="website"
|
||||
date="2023-07-05T16:08:36Z"
|
||||
>
|
||||
A new{" "}
|
||||
<Link
|
||||
href="/team"
|
||||
className="text-accent-500 underline hover:no-underline"
|
||||
>
|
||||
team page
|
||||
</Link>{" "}
|
||||
has been added to showcase the team behind Firezone.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Brand colors"
|
||||
href="https://github.com/firezone/firezone/pull/1728"
|
||||
type="website"
|
||||
date="2023-07-03T23:32:41Z"
|
||||
>
|
||||
Our website now sports a new color palette, font, and spacing
|
||||
consistent with the Firezone product.
|
||||
</RoadmapItem>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-6">
|
||||
<h3 className="text-neutral-900 tracking-tight font-bold text-2xl mb-4">
|
||||
In progress
|
||||
</h3>
|
||||
<p className="text-lg text-neutral-900 mb-6">
|
||||
Things we're actively working on and plan to ship in the next
|
||||
release or two.
|
||||
</p>
|
||||
<div className="mb-4">
|
||||
<div className="p-2 bg-primary-100 border border-primary-200 mb-4">
|
||||
<HiBeaker className="inline-block w-4 h-4 mr-1 text-primary-450" />
|
||||
<Link
|
||||
href="/product/early-access"
|
||||
className="text-accent-500 underline hover:no-underline"
|
||||
>
|
||||
Sign up for early access
|
||||
</Link>{" "}
|
||||
to test new Firezone features and releases.
|
||||
</div>
|
||||
<h4 className="border-b border-neutral-200 mb-2 text-xl tracking-tight font-semibold text-neutral-800">
|
||||
Firezone 1.0
|
||||
</h4>
|
||||
<ul className="flex flex-col">
|
||||
<RoadmapItem
|
||||
title="Automated provisioning"
|
||||
href="https://github.com/firezone/firezone/issues/1437"
|
||||
type="feature"
|
||||
>
|
||||
Automated user and group provisioning via just-in-time (JIT)
|
||||
provisioning or SCIM 2.0.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Authentication overhaul"
|
||||
href="https://github.com/firezone/firezone/issues/1123"
|
||||
type="refactor"
|
||||
>
|
||||
More robust support for SAML 2.0, OIDC, and magic link
|
||||
authentication methods.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Group-based access policies"
|
||||
href="https://github.com/firezone/firezone/issues/1157"
|
||||
type="feature"
|
||||
>
|
||||
Control access to protected Resources on a per-group basis.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Apple client"
|
||||
href="https://github.com/firezone/firezone/issues/1763"
|
||||
type="feature"
|
||||
>
|
||||
Native Firezone client for macOS and iOS.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="NAT traversal"
|
||||
href="https://github.com/firezone/firezone/issues/1765"
|
||||
type="feature"
|
||||
>
|
||||
Automatic holepunching and STUN/TURN discovery for Clients and
|
||||
Gateways.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Split DNS"
|
||||
href="https://github.com/firezone/firezone/issues/1158"
|
||||
type="feature"
|
||||
>
|
||||
Resolve DNS queries for protected Resources using Firezone's
|
||||
built-in DNS while forwarding other queries to a configurable
|
||||
upstream DNS server.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Android client"
|
||||
href="https://github.com/firezone/firezone/issues/1767"
|
||||
type="feature"
|
||||
>
|
||||
Native Firezone client for Android.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="High availability"
|
||||
href="https://github.com/firezone/firezone/issues/897"
|
||||
type="feature"
|
||||
>
|
||||
Support for High availability (HA) deployments of the Firezone
|
||||
Gateway.
|
||||
</RoadmapItem>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-6">
|
||||
<h3 className="text-neutral-900 tracking-tight font-bold text-2xl mb-4">
|
||||
Under consideration
|
||||
</h3>
|
||||
<p className="text-lg text-neutral-900 mb-6">
|
||||
Things we're still investigating, architecting, or in the process
|
||||
of prioritizing.{" "}
|
||||
<span className="font-semibold">(feedback welcome!)</span>
|
||||
</p>
|
||||
<ul className="flex flex-col">
|
||||
<RoadmapItem
|
||||
title="Windows client"
|
||||
href="https://github.com/firezone/firezone/issues/1768"
|
||||
type="feature"
|
||||
>
|
||||
Native Firezone client for Windows.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Service accounts"
|
||||
href="https://github.com/firezone/firezone/issues/1770"
|
||||
type="feature"
|
||||
>
|
||||
Support for service accounts to allow automated access to
|
||||
protected Resources. Requires headless clients for
|
||||
Linux/Windows.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Linux client"
|
||||
href="https://github.com/firezone/firezone/issues/1762"
|
||||
type="feature"
|
||||
>
|
||||
Native Firezone client for Linux.
|
||||
</RoadmapItem>
|
||||
<RoadmapItem
|
||||
title="Audit logging"
|
||||
href="https://github.com/firezone/firezone/issues/949"
|
||||
type="feature"
|
||||
>
|
||||
Log admin portal configuration changes and end-user access to
|
||||
protected Resources to achieve compliance with regulatory
|
||||
requirements.
|
||||
</RoadmapItem>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="border border-primary-200 bg-primary-100">
|
||||
<div className="mx-auto max-w-screen-lg grid text-center md:grid-cols-2 text-lg sm:text-xl py-3 sm:py-6">
|
||||
<div>
|
||||
<HiMegaphone className="inline-flex h-5 w-5 mr-2 text-primary-450" />
|
||||
Want to stay updated on our progress?
|
||||
</div>
|
||||
<div>
|
||||
<ActionLink
|
||||
href="/product/newsletter"
|
||||
className="ml-8 inline-flex text-accent-500 underline hover:no-underline"
|
||||
>
|
||||
Subscribe to our newsletter.
|
||||
</ActionLink>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="border-t border-neutral-200 mx-auto bg-gradient-to-b from-white to-neutral-100 pt-14">
|
||||
<h2 className="ml-2 sm:justify-center flex-wrap mb-4 text-4xl font-extrabold tracking-tight text-neutral-900">
|
||||
<span>We're building Firezone</span>{" "}
|
||||
<span className="text-primary-450 underline">in the open.</span>
|
||||
</h2>
|
||||
<p className="sm:mx-auto ml-2 max-w-xl text-neutral-900 sm:text-center mb-4 text-lg sm:text-xl">
|
||||
We're open source because we believe <i>better transparency</i> leads
|
||||
to <i>better security</i>. After all, how can you trust what you can't
|
||||
see?
|
||||
</p>
|
||||
<p className="mx-auto mb-4 sm:mb-8 text-lg sm:text-xl">
|
||||
<ActionLink
|
||||
href="https://github.com/firezone/firezone/pulls"
|
||||
className="ml-2 flex text-lg items-center sm:justify-center text-accent-500 underline hover:no-underline"
|
||||
>
|
||||
See what we're working on
|
||||
</ActionLink>
|
||||
.
|
||||
</p>
|
||||
<CommitMarquee xmlFeed="/api/github/firezone/firezone/commits/main.atom" />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import { Metadata } from "next";
|
||||
import Page from "./_page";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Product Roadmap • Firezone",
|
||||
description: "See what we're working on and what's coming next.",
|
||||
};
|
||||
|
||||
export default Page;
|
||||
@@ -74,7 +74,7 @@ export default function Footer() {
|
||||
</li>
|
||||
<li className="mb-4">
|
||||
<Link
|
||||
href="/product/roadmap"
|
||||
href="https://github.com/orgs/firezone/projects/9"
|
||||
className="hover:underline hover:text-neutral-900"
|
||||
>
|
||||
Roadmap
|
||||
|
||||
@@ -97,13 +97,8 @@ export default function RootNavbar() {
|
||||
<li>
|
||||
<Link
|
||||
onClick={hideDropdown}
|
||||
href="/product/roadmap"
|
||||
className={
|
||||
(p == "/product/roadmap"
|
||||
? "text-neutral-900 underline"
|
||||
: "text-neutral-800") +
|
||||
" block px-4 py-2 font-medium hover:underline hover:bg-neutral-100 hover:text-neutral-900"
|
||||
}
|
||||
href="https://github.com/orgs/firezone/projects/9"
|
||||
className="text-neutral-800 block px-4 py-2 font-medium hover:underline hover:bg-neutral-100 hover:text-neutral-900"
|
||||
>
|
||||
Roadmap
|
||||
</Link>
|
||||
|
||||
Reference in New Issue
Block a user