move files to organize better
This commit is contained in:
parent
1b22c1ab14
commit
f9c35839de
@ -1,4 +1,4 @@
|
|||||||
import PricingDialog from "./payments/PricingDialog";
|
import PricingDialog from "./hosted/payments/PricingDialog";
|
||||||
|
|
||||||
export function PicoBadge() {
|
export function PicoBadge() {
|
||||||
return (
|
return (
|
||||||
|
|||||||
55
frontend/src/components/hosted/PricingPage.tsx
Normal file
55
frontend/src/components/hosted/PricingPage.tsx
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import React from "react";
|
||||||
|
import Footer from "./LandingPage/Footer";
|
||||||
|
|
||||||
|
const PricingPage: React.FC = () => {
|
||||||
|
return (
|
||||||
|
<div className="container mx-auto px-4 py-8">
|
||||||
|
<h1 className="text-3xl font-bold mb-6">Pricing</h1>
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||||
|
{/* Basic Plan */}
|
||||||
|
<div className="border rounded-lg p-6">
|
||||||
|
<h2 className="text-2xl font-semibold mb-4">Basic</h2>
|
||||||
|
<p className="text-3xl font-bold mb-4">$9.99/mo</p>
|
||||||
|
<ul className="list-disc list-inside mb-6">
|
||||||
|
<li>Feature 1</li>
|
||||||
|
<li>Feature 2</li>
|
||||||
|
<li>Feature 3</li>
|
||||||
|
</ul>
|
||||||
|
<button className="bg-blue-500 text-white px-4 py-2 rounded">
|
||||||
|
Choose Plan
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/* Pro Plan */}
|
||||||
|
<div className="border rounded-lg p-6 bg-gray-100">
|
||||||
|
<h2 className="text-2xl font-semibold mb-4">Pro</h2>
|
||||||
|
<p className="text-3xl font-bold mb-4">$19.99/mo</p>
|
||||||
|
<ul className="list-disc list-inside mb-6">
|
||||||
|
<li>All Basic features</li>
|
||||||
|
<li>Feature 4</li>
|
||||||
|
<li>Feature 5</li>
|
||||||
|
</ul>
|
||||||
|
<button className="bg-blue-600 text-white px-4 py-2 rounded">
|
||||||
|
Choose Plan
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/* Enterprise Plan */}
|
||||||
|
<div className="border rounded-lg p-6">
|
||||||
|
<h2 className="text-2xl font-semibold mb-4">Enterprise</h2>
|
||||||
|
<p className="text-3xl font-bold mb-4">Custom</p>
|
||||||
|
<ul className="list-disc list-inside mb-6">
|
||||||
|
<li>All Pro features</li>
|
||||||
|
<li>Custom integrations</li>
|
||||||
|
<li>Dedicated support</li>
|
||||||
|
</ul>
|
||||||
|
<button className="bg-blue-500 text-white px-4 py-2 rounded">
|
||||||
|
Contact Sales
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Footer />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PricingPage;
|
||||||
@ -6,12 +6,12 @@ import {
|
|||||||
DialogHeader,
|
DialogHeader,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
DialogTrigger,
|
DialogTrigger,
|
||||||
} from "../ui/dialog";
|
} from "../../ui/dialog";
|
||||||
import { FaCheckCircle } from "react-icons/fa";
|
import { FaCheckCircle } from "react-icons/fa";
|
||||||
import Spinner from "../custom-ui/Spinner";
|
import Spinner from "../../custom-ui/Spinner";
|
||||||
import useStripeCheckout from "./useStripeCheckout";
|
import useStripeCheckout from "./useStripeCheckout";
|
||||||
import { Button } from "../ui/button";
|
import { Button } from "../../ui/button";
|
||||||
import { useStore } from "../../store/store";
|
import { useStore } from "../../../store/store";
|
||||||
|
|
||||||
const LOGOS = ["microsoft", "amazon", "mit", "stanford", "bytedance", "baidu"];
|
const LOGOS = ["microsoft", "amazon", "mit", "stanford", "bytedance", "baidu"];
|
||||||
|
|
||||||
@ -1,9 +1,9 @@
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { SAAS_BACKEND_URL, STRIPE_PUBLISHABLE_KEY } from "../../config";
|
import { SAAS_BACKEND_URL, STRIPE_PUBLISHABLE_KEY } from "../../../config";
|
||||||
import { addEvent } from "../../lib/analytics";
|
import { addEvent } from "../../../lib/analytics";
|
||||||
import { Stripe, loadStripe } from "@stripe/stripe-js";
|
import { Stripe, loadStripe } from "@stripe/stripe-js";
|
||||||
import { useAuthenticatedFetch } from "../hosted/useAuthenticatedFetch";
|
import { useAuthenticatedFetch } from "../useAuthenticatedFetch";
|
||||||
|
|
||||||
interface CreateCheckoutSessionResponse {
|
interface CreateCheckoutSessionResponse {
|
||||||
sessionId: string;
|
sessionId: string;
|
||||||
@ -7,6 +7,7 @@ import EvalsPage from "./components/evals/EvalsPage.tsx";
|
|||||||
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
|
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
|
||||||
import { CLERK_PUBLISHABLE_KEY } from "./config.ts";
|
import { CLERK_PUBLISHABLE_KEY } from "./config.ts";
|
||||||
import "./index.css";
|
import "./index.css";
|
||||||
|
import PricingPage from "./components/hosted/PricingPage.tsx";
|
||||||
|
|
||||||
ReactDOM.createRoot(document.getElementById("root")!).render(
|
ReactDOM.createRoot(document.getElementById("root")!).render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
@ -21,6 +22,7 @@ ReactDOM.createRoot(document.getElementById("root")!).render(
|
|||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/" element={<AppContainer />} />
|
<Route path="/" element={<AppContainer />} />
|
||||||
<Route path="/evals" element={<EvalsPage />} />
|
<Route path="/evals" element={<EvalsPage />} />
|
||||||
|
<Route path="/pricing" element={<PricingPage />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</Router>
|
</Router>
|
||||||
<Toaster
|
<Toaster
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user