diff --git a/packages/frontend/src/main.tsx b/packages/frontend/src/main.tsx index f214187..b60a98b 100644 --- a/packages/frontend/src/main.tsx +++ b/packages/frontend/src/main.tsx @@ -13,6 +13,7 @@ import Issues from "@/pages/Issues"; import Landing from "@/pages/Landing"; import Login from "@/pages/Login"; import NotFound from "@/pages/NotFound"; +import Pricing from "@/pages/Pricing"; import Test from "@/pages/Test"; import Timeline from "@/pages/Timeline"; @@ -27,6 +28,7 @@ ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( {/* public routes */} } /> } /> + } /> } /> {/* authed routes */} diff --git a/packages/frontend/src/pages/Landing.tsx b/packages/frontend/src/pages/Landing.tsx index 70bc3af..e09cacb 100644 --- a/packages/frontend/src/pages/Landing.tsx +++ b/packages/frontend/src/pages/Landing.tsx @@ -1,4 +1,3 @@ -import { Icon } from "@iconify/react"; import { Link } from "react-router-dom"; import { useSession } from "@/components/session-provider"; import ThemeToggle from "@/components/theme-toggle"; @@ -12,16 +11,14 @@ export default function Landing() { Sprint + + Pricing + {!isLoading && user ? ( - <> - {user && ( - Welcome back {user.name.split(" ")[0]}! - )} - - Open app - - > + + Open app + ) : ( Sign in @@ -51,22 +48,6 @@ export default function Landing() { Get started )} - - - - - GitHub - - - {"<-- you can self-host me!"} - - - diff --git a/packages/frontend/src/pages/Pricing.tsx b/packages/frontend/src/pages/Pricing.tsx new file mode 100644 index 0000000..d6a60ad --- /dev/null +++ b/packages/frontend/src/pages/Pricing.tsx @@ -0,0 +1,144 @@ +import { Icon } from "@iconify/react"; +import { Link } from "react-router-dom"; +import { useSession } from "@/components/session-provider"; +import ThemeToggle from "@/components/theme-toggle"; +import { Button } from "@/components/ui/button"; +import { cn } from "@/lib/utils"; + +const pricingTiers = [ + { + name: "Indie", + price: "£0", + period: "Free forever", + description: "Perfect for individual developers and small teams", + features: ["1 organisation (owned or joined)", "1 project", "100 issues", "Up to 5 users"], + cta: "Get started", + ctaLink: "/login", + highlighted: false, + }, + { + name: "Pro", + price: "£12", + period: "per user/month", + description: "For growing teams and professional developers", + features: [ + "Unlimited issues", + "Unlimited projects", + "Unlimited organisations", + "Time tracking & reports", + ], + cta: "Start free trial", + ctaLink: "/login", + highlighted: true, + }, +]; + +export default function Pricing() { + const { user, isLoading } = useSession(); + + return ( + + + Sprint + + + Home + + + {!isLoading && user ? ( + + Open app + + ) : ( + + Sign in + + )} + + + + + + + Simple, transparent pricing + Choose the plan that fits your team + + + + {pricingTiers.map((tier) => ( + + {tier.highlighted && ( + + Most popular + + )} + + + {tier.name} + + + + {tier.price} + {tier.period} + + + + {tier.description} + + + + {tier.features.map((feature) => ( + + + {feature} + + ))} + + + + {tier.cta} + + + ))} + + + + Need something custom? + + Get in touch + + + + + + + + ); +}
Choose the plan that fits your team
{tier.description}
Need something custom?