diff --git a/website/.firebaserc b/website/.firebaserc index 53d576ea4..a07c651b3 100644 --- a/website/.firebaserc +++ b/website/.firebaserc @@ -1,5 +1,5 @@ { "projects": { - "default": "firecms-demo-27150" + "default": "firecms-backend" } } diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 7584d8e56..ec460753a 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -74,11 +74,6 @@ module.exports = { ], position: "left" }, - { - to: "enterprise", - label: "Enterprise", - position: "left" - }, { to: "pricing", label: "Pricing", @@ -110,18 +105,18 @@ module.exports = { { to: "https://demo.firecms.co", label: "Demo", - // className: "btn shadow-none mr-2 px-6 py-2 uppercase", - className: "btn mr-3 px-6 py-2 text-white uppercase bg-primary hover:text-white hover:bg-blue-700", + className: "btn shadow-none mr-2 px-6 py-2 uppercase", + // className: "btn mr-3 px-6 py-2 text-white uppercase bg-primary hover:text-white hover:bg-blue-700", "aria-label": "Open the demo project", position: "right" }, - // { - // to: "https://app.firecms.co", - // label: "Sign in", - // className: "btn mr-3 px-6 py-2 text-white uppercase bg-primary hover:text-white hover:bg-blue-700", - // "aria-label": "Go to FireCMS Cloud", - // position: "right" - // }, + { + to: "https://app.firecms.co", + label: "Sign in", + className: "btn mr-3 px-6 py-2 text-white uppercase bg-primary hover:text-white hover:bg-blue-700", + "aria-label": "Go to FireCMS Cloud", + position: "right" + }, ] }, footer: { @@ -140,6 +135,11 @@ module.exports = { // Label of the section of these links title: "Links", items: [ + { + to: "enterprise", + label: "Enterprise", + position: "left" + }, { label: "Demo", to: "https://demo.firecms.co" diff --git a/website/firebase.json b/website/firebase.json index b25eadc95..3546ef1c7 100644 --- a/website/firebase.json +++ b/website/firebase.json @@ -1,7 +1,7 @@ { "hosting": { "public": "build", - "site": "firecms-landing", + "site": "firecms-landing-2", "trailingSlash": false, "ignore": [ "firebase.json", diff --git a/website/src/pages/enterprise.tsx b/website/src/pages/enterprise.tsx index 727630e30..85472d546 100644 --- a/website/src/pages/enterprise.tsx +++ b/website/src/pages/enterprise.tsx @@ -6,6 +6,8 @@ import { EnterpriseFeatures } from "../partials/enterprise/EnterpriseFeatures"; import { EnterpriseArchitectures } from "../partials/enterprise/EnterpriseArchitectures"; +import { CTAButtonMixin, CTAOutlinedButtonWhiteMixin } from "../partials/utils"; +import { Panel } from "../partials/general/Panel"; function Enterprise() { return ( @@ -17,8 +19,17 @@ function Enterprise() { - {/**/} - + +

+ Happy to help you build your next product +

+ + Get in touch + +
diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index d7199a0c8..b769ca3a8 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -12,6 +12,7 @@ import FirebaseIntro from "../partials/home/FirebaseIntro"; import { Companies } from "../partials/home/Companies"; import FeaturesTeaser from "../partials/home/FeaturesTeaser"; import EnterpriseTeaser from "../partials/home/EnterpriseTeaser"; +import { FireCMSCloudIntro } from "../partials/home/FireCMSCloudIntro"; function Home() { const context = useDocusaurusContext(); @@ -35,7 +36,7 @@ function Home() { {/**/} - {/**/} + diff --git a/website/src/pages/pricing.tsx b/website/src/pages/pricing.tsx index 3670e9c83..6462da6ea 100644 --- a/website/src/pages/pricing.tsx +++ b/website/src/pages/pricing.tsx @@ -1,12 +1,9 @@ import React from "react"; import Layout from "@theme/Layout"; - -import Features from "../partials/features/Features"; import { Hero } from "../partials/general/Hero"; -import { DeveloperFeatures } from "../partials/features/DeveloperFeatures"; import { VersionsComparison } from "../partials/pricing/VersionsComparison"; -import { PricingIntro } from "../partials/pricing/PricingIntro"; +import { SelfHosted } from "../partials/pricing/SelfHosted"; import { FireCMSCloudVersions } from "../partials/pricing/FireCMSCloudVersions"; function FeaturesPage() { @@ -23,7 +20,10 @@ function FeaturesPage() { } subtitle={ <> -

Experience the power of our CMS platform with a free, self-hosted option or upgrade to FireCMS Cloud for a premium, full-service solution.

+

Experience the power of our CMS platform with a + free, self-hosted option or upgrade to FireCMS + Cloud for a premium, full-service solution. +

} // cta={ - + diff --git a/website/src/partials/features/DeveloperFeatures.tsx b/website/src/partials/features/DeveloperFeatures.tsx index 292073142..59e3bb607 100644 --- a/website/src/partials/features/DeveloperFeatures.tsx +++ b/website/src/partials/features/DeveloperFeatures.tsx @@ -36,7 +36,7 @@ export function DeveloperFeatures() { const isDarkTheme = colorMode === "dark"; return ( - +

For developers diff --git a/website/src/partials/general/EnterpriseTeaser.tsx b/website/src/partials/general/EnterpriseTeaser.tsx new file mode 100644 index 000000000..7fd65fe01 --- /dev/null +++ b/website/src/partials/general/EnterpriseTeaser.tsx @@ -0,0 +1,40 @@ +import React from "react"; + +import useBaseUrl from "@docusaurus/useBaseUrl"; + +export function EnterpriseTeaser() { + return ( +

+ +
+ ) +} diff --git a/website/src/partials/general/Panel.tsx b/website/src/partials/general/Panel.tsx index 39c40fefc..d518b114e 100644 --- a/website/src/partials/general/Panel.tsx +++ b/website/src/partials/general/Panel.tsx @@ -4,12 +4,12 @@ import { ContainerMixin } from "../utils"; export function Panel({ children, color = "gray", - centered = true, + centered = false, includeMargin = false, contained = false }: { children: React.ReactNode, - color: "gray" | "primary" | "secondary", + color?: "gray" | "primary" | "secondary", centered?: boolean, includeMargin?: boolean, contained?: boolean @@ -22,9 +22,10 @@ export function Panel({ return (
+ + (includeMargin ? " my-16" : "")}>
+ + (contained ? " my-16 max-w-3xl" : " my-12") + + (centered ? " mx-auto flex flex-col items-center" : "")}> {children}
diff --git a/website/src/partials/home/FeaturesPanels.tsx b/website/src/partials/home/FeaturesPanels.tsx index 9f1dbfd82..aa188b689 100644 --- a/website/src/partials/home/FeaturesPanels.tsx +++ b/website/src/partials/home/FeaturesPanels.tsx @@ -99,7 +99,7 @@ function FeaturesPanels() { Advanced editing

- Spreadsheet-like inline editing, powerful + Spreadsheet-like editing, powerful forms, files storage, entity references...

diff --git a/website/src/partials/home/FireCMSCloudIntro.tsx b/website/src/partials/home/FireCMSCloudIntro.tsx index 538e44bc5..f2500fe13 100644 --- a/website/src/partials/home/FireCMSCloudIntro.tsx +++ b/website/src/partials/home/FireCMSCloudIntro.tsx @@ -3,7 +3,13 @@ import React from "react" import collectionEditorVideo // @ts-ignore from "@site/static/img/collection_editor_preview.mp4"; -import { ContainerMixin } from "../utils"; +import { + ContainerMixin, + CTAButtonMixin, + CTACaret, + CTAOutlinedButtonMixin, CTAOutlinedButtonWhiteMixin +} from "../utils"; +import useBaseUrl from "@docusaurus/useBaseUrl"; export const FireCMSCloudIntro = () => { @@ -14,18 +20,19 @@ export const FireCMSCloudIntro = () => { className={"px-4 sm:px-6 mb-16 bg-pink-400 text-white pb-16"}>
+

- New content-schema editor + New No-code FireCMS

-
- FireCMS Cloud is a hosted version of FireCMS that - allows you to create your own headless CMS in - minutes. It includes a new content schema editor - that allows you to create your own content models - and collections. -
+

+ FireCMS Cloud is a hosted version of FireCMS + that allows you to create your own headless CMS + in minutes. It includes a new content schema + editor that allows you to create your own + content models and collections. +

If you have an existing Firebase project, let FireCMS Cloud set-up the collections for you based on your @@ -36,8 +43,27 @@ export const FireCMSCloudIntro = () => { new ones, since it sets up a complete Google Cloud Project for you.

+ +
+ Note that you can always use the self-hosted version of + FireCMS +
+
+ +
{ ) } - -function validateEmail(email: string) { - const regex = /^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/; - return regex.test(email); -} diff --git a/website/src/partials/pricing/FireCMSCloudVersions.tsx b/website/src/partials/pricing/FireCMSCloudVersions.tsx index 98b67d544..c1018b4cd 100644 --- a/website/src/partials/pricing/FireCMSCloudVersions.tsx +++ b/website/src/partials/pricing/FireCMSCloudVersions.tsx @@ -1,6 +1,11 @@ import React from "react"; import { ThreeColumns } from "../general/ThreeColumns"; -import { CTAButtonMixin, CTACaret, CTAOutlinedButtonMixin } from "../utils"; +import { + ContainerMixin, + CTAButtonMixin, + CTACaret, + CTAOutlinedButtonMixin +} from "../utils"; export function FireCMSCloudVersions() { @@ -80,7 +85,7 @@ export function FireCMSCloudVersions() {
); - return
+ return
-

- FireCMS Cloud Versions +

+ Full no-code solution

+ +

+ FireCMS Cloud offers a complete, end-to-end + solution for businesses that require the highest level of + support and security. With dedicated hosting, advanced features, and + expert support, you'll have everything you need to take your project + to the next level. +

+
-

Self-Hosted Option: With our self-hosted option, you'll have access - to all of our core features at no cost. Simply download and install - on your own server, and enjoy complete control and - customization.

- -

FireCMS Cloud: Our enterprise tier offers a complete, end-to-end - solution for businesses that require the highest level of support - and security. With dedicated hosting, advanced features, and expert - support, you'll have everything you need to take your website to the - next level.

-
-} diff --git a/website/src/partials/pricing/SelfHosted.tsx b/website/src/partials/pricing/SelfHosted.tsx new file mode 100644 index 000000000..a8e77059e --- /dev/null +++ b/website/src/partials/pricing/SelfHosted.tsx @@ -0,0 +1,41 @@ +import React from "react"; +import { ThreeColumns } from "../general/ThreeColumns"; +import { + ContainerMixin, + CTAButtonMixin, + CTACaret, + CTAOutlinedButtonMixin +} from "../utils"; +import { Panel } from "../general/Panel"; +import useBaseUrl from "@docusaurus/useBaseUrl"; + +export function SelfHosted() { + + return + +

+ Self-hosted mode +

+ +

+ With our self-hosted option, you'll have + access to all of our open-source core features at no cost. + Simply download and install on your own infrastructure, + and enjoy complete control and customization. +

+ +

+ Self-hosted mode is perfect for developers who want to + build custom features. +

+ +
+ Go to docs + + + ; + +} diff --git a/website/src/partials/pricing/VersionsComparison.tsx b/website/src/partials/pricing/VersionsComparison.tsx index 8020496ea..5f8cc1921 100644 --- a/website/src/partials/pricing/VersionsComparison.tsx +++ b/website/src/partials/pricing/VersionsComparison.tsx @@ -47,13 +47,7 @@ const data = [{ cloud: "Yes", cloudPlus: "Yes", cloudPro: "Yes" - }, { - feature: "Support", - selfHosted: "Enterprise", - cloud: "Yes", - cloudPlus: "Yes", - cloudPro: "Yes" - }, { + }, { feature: "Data export", selfHosted: "Yes", cloud: "Yes", @@ -66,6 +60,12 @@ const data = [{ cloudPlus: "Yes", cloudPro: "Yes" }, { + feature: "Support", + selfHosted: "Enterprise", + cloud: "No", + cloudPlus: "Yes", + cloudPro: "Yes" + },{ feature: "Text search", selfHosted: "Dev managed", cloud: "No", @@ -154,7 +154,7 @@ export function VersionsComparison() { - - - Self-hosted - Free @@ -187,6 +183,10 @@ export function VersionsComparison() { className="border-none rounded-lg text-base md:px-6 md:py-4 text-center "> Pro + + Self-hosted + @@ -198,9 +198,6 @@ export function VersionsComparison() { className="bg-gray-50 mx-2 dark:bg-gray-900 border-none rounded-lg px-4 py-2 text-gray-800 dark:text-gray-300 font-bold"> {row.feature} - - {getFeatureComponent(row.selfHosted)} - {getFeatureComponent(row.cloud)} @@ -210,6 +207,9 @@ export function VersionsComparison() { {getFeatureComponent(row.cloudPro)} + + {getFeatureComponent(row.selfHosted)} + )) } @@ -221,33 +221,34 @@ export function VersionsComparison() { - - More details - - - - Get started - - Get started - - - Get started - - + More details + + {/**/} + {/* */} + {/* Get started*/} + {/* */} + {/**/} + {/**/} + {/* */} + {/* Get started*/} + {/* */} + {/**/} diff --git a/website/src/partials/utils.tsx b/website/src/partials/utils.tsx index c86ccf7dd..7c7d28616 100644 --- a/website/src/partials/utils.tsx +++ b/website/src/partials/utils.tsx @@ -1,6 +1,6 @@ import React from "react"; -export const CTAOutlinedButtonMixin = "btn px-8 py-3 md:px-12 md:py-4 border-1 border-gray-600 dark:border-gray-700 uppercase rounded border-solid dark:text-white text-gray-800 hover:text-gray-700 dark:hover:text-gray-100 hover:bg-gray-200 dark:hover:bg-gray-900 h dark:hover:border-gray-800 text-center"; +export const CTAOutlinedButtonMixin = "btn px-8 py-3 md:px-12 md:py-4 border-1 border-gray-600 dark:border-gray-700 uppercase rounded border-solid dark:text-white text-gray-800 hover:text-gray-700 dark:hover:text-gray-100 hover:bg-gray-100 dark:hover:bg-gray-900 h dark:hover:border-gray-800 text-center"; export const CTAOutlinedButtonWhiteMixin = "btn px-8 py-3 md:px-12 md:py-4 border-1 border-white uppercase rounded border-solid text-white hover:bg-gray-200 hover:border-gray-200 text-center"; export const CTAButtonMixin = "btn px-8 py-3 md:px-12 md:py-4 text-white bg-primary hover:text-white hover:bg-blue-700 hover:text-white uppercase border-solid rounded text-center"; diff --git a/website/src/theme/Footer/Layout/index.js b/website/src/theme/Footer/Layout/index.js index 9d860b60f..b18845163 100644 --- a/website/src/theme/Footer/Layout/index.js +++ b/website/src/theme/Footer/Layout/index.js @@ -1,44 +1,18 @@ import React from "react"; import Layout from "@theme-original/Footer/Layout"; import { Newsletter } from "../../../partials/general/Newsletter"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import { EnterpriseTeaser } from "../../../partials/general/EnterpriseTeaser"; +import { useLocation } from "@docusaurus/router"; export default function LayoutWrapper(props) { - return ( - <> -
-
-
-

- Need a hand? -

- -
-
- Learn how to get the most out of your - project with the help of our consulting team. -
- - Get in touch - -
-
-
-
+ const { pathname } = useLocation(); + const includeEnterpriseTeaser = !pathname.startsWith("/enterprise"); -
- -
-
-
+ return ( + <> + {includeEnterpriseTeaser && }