diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3f015ad534..41562131a6 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -28,7 +28,6 @@ jobs: secrets: GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} TARGET_REPO: ${{ secrets.TARGET_REPO }} - STORYBLOK_ACCESS_TOKEN: ${{ secrets.STORYBLOK_ACCESS_TOKEN }} repository-dispatch: if: (github.event_name == 'repository_dispatch' && github.event.action == 'update_docs') uses: platformatic/docs/.github/workflows/rebuild-and-deploy-docs.yml@main @@ -39,7 +38,6 @@ jobs: secrets: GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} TARGET_REPO: ${{ secrets.TARGET_REPO }} - STORYBLOK_ACCESS_TOKEN: ${{ secrets.STORYBLOK_ACCESS_TOKEN }} workflow-dispatch: if: (github.event_name == 'workflow_dispatch') uses: platformatic/docs/.github/workflows/rebuild-and-deploy-docs.yml@main @@ -50,4 +48,3 @@ jobs: secrets: GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} TARGET_REPO: ${{ secrets.TARGET_REPO }} - STORYBLOK_ACCESS_TOKEN: ${{ secrets.STORYBLOK_ACCESS_TOKEN }} diff --git a/.github/workflows/rebuild-and-deploy-docs.yml b/.github/workflows/rebuild-and-deploy-docs.yml index 55e13a117b..a8e63d8c06 100644 --- a/.github/workflows/rebuild-and-deploy-docs.yml +++ b/.github/workflows/rebuild-and-deploy-docs.yml @@ -32,9 +32,6 @@ on: TARGET_REPO: description: "The repo where Docusaurus is" required: true - STORYBLOK_ACCESS_TOKEN: - description: "Storyblok access token" - required: true jobs: build-and-publish: runs-on: ubuntu-latest @@ -56,7 +53,6 @@ jobs: env: TARGET_REPO: ${{ secrets.TARGET_REPO }} GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} - STORYBLOK_ACCESS_TOKEN: ${{ secrets.STORYBLOK_ACCESS_TOKEN }} - name: Print current versions run: | echo "Remote versions: ${{ steps.check.outputs.remote-versions }}" @@ -69,7 +65,6 @@ jobs: env: TARGET_REPO: ${{ secrets.TARGET_REPO }} GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} - STORYBLOK_ACCESS_TOKEN: ${{ secrets.STORYBLOK_ACCESS_TOKEN }} - name: Push commit if: inputs.original_event == 'push_on_main' || inputs.force || steps.check.outputs.needs-update == 'true' uses: stefanzweifel/git-auto-commit-action@v4 diff --git a/App.js b/App.js deleted file mode 100644 index e982b522ce..0000000000 --- a/App.js +++ /dev/null @@ -1,16 +0,0 @@ -import { useStoryblok, StoryblokComponent } from '@storyblok/react' - -function App () { - const slug = - window.location.pathname === '/' - ? 'home' - : window.location.pathname.replace('/', '') - - const story = useStoryblok(slug, { version: 'published' }) - if (!story || !story.content) { - return
Loading...
- } - - return -} -export default App diff --git a/docusaurus.config.js b/docusaurus.config.js index 759ca0af72..9c40a6ff2b 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -183,43 +183,6 @@ const config = { sidebarId: 'Learn', label: 'Learn' }, - - { - type: 'dropdown', - position: 'left', - label: 'Features', - items: [ - { - to: '/service', - label: 'Service' - }, - { - to: '/database', - label: 'DB' - }, - { - to: '/composer', - label: 'Composer' - }, - - { - to: '/aiwarp', - label: 'AI-Warp' - }, - { - to: '/stackables', - label: 'Stackables' - }, - { - to: '/watt', - label: 'Watt' - }, - { - to: '/caching', - label: 'Caching' - } - ] - }, { type: 'doc', docId: 'Overview', @@ -237,26 +200,6 @@ const config = { } ] }, - // { - // href: "https://www.platformatic.dev", - // label: "About", - // position: "left", - // }, - { - type: 'dropdown', - position: 'left', - label: 'Powered by', - items: [ - { - to: '/fastify', - label: 'Fastify' - }, - { - to: '/nodejs', - label: 'Node.js' - } - ] - }, { href: 'https://platformatichq.com', label: 'For Teams', diff --git a/package-lock.json b/package-lock.json index 8398868946..22dde92205 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,6 @@ "@docusaurus/preset-classic": "^3.5.1", "@docusaurus/types": "^3.5.1", "@mdx-js/react": "^3.0.1", - "@storyblok/react": "^3.0.10", "buffer": "^6.0.3", "clsx": "^1.2.1", "concurrently": "^9.0.1", @@ -35,7 +34,6 @@ "react-dom": "^18.3.1", "react-lottie-player": "^2.1.0", "semver": "^7.6.3", - "storyblok-rich-text-react-renderer": "^2.9.2", "tailwindcss": "^3.4.10", "undici": "^6.19.7" }, @@ -5268,34 +5266,6 @@ "micromark-util-symbol": "^1.0.1" } }, - "node_modules/@storyblok/js": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@storyblok/js/-/js-3.5.0.tgz", - "integrity": "sha512-1gGY6t4CIZNOt9t5h+Q7lMN6lfG8VgrChktv1L3gsMzBcOcEnQdr7ZeqUWFbB9VlGPc8X/RRfULRgckzEwJ6BA==", - "license": "MIT", - "dependencies": { - "@storyblok/richtext": "3.2.0", - "storyblok-js-client": "6.11.0" - } - }, - "node_modules/@storyblok/react": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@storyblok/react/-/react-3.0.15.tgz", - "integrity": "sha512-WCishIb8JUSoRQLX9vCtlfP3fr/4b2EOcAgR1OmewrO0QmRP6OU9ZUMEIbQjVvvFkQ68d4qoaeyyqINSdX75XQ==", - "dependencies": { - "@storyblok/js": "^3.1.1" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storyblok/richtext": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@storyblok/richtext/-/richtext-3.2.0.tgz", - "integrity": "sha512-koVGDv1HtiI5vymE5fzRB1VO1PNguj+RSfHI4zCy2+90pRoqZbsUCR8V2TaNl7Pg8R1oOkFZnbAxdt9Z4xoxDg==", - "license": "MIT" - }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", @@ -23346,21 +23316,6 @@ "node": ">= 0.4" } }, - "node_modules/storyblok-js-client": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/storyblok-js-client/-/storyblok-js-client-6.11.0.tgz", - "integrity": "sha512-2uhd/VA51AB88XoqQ+rw9JqkWNoPl2ydg+J49w+2KBqqFvV2EtUhrS2umnabU8sD7HftFsMg0n69EWhkeDyM/A==", - "license": "MIT" - }, - "node_modules/storyblok-rich-text-react-renderer": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/storyblok-rich-text-react-renderer/-/storyblok-rich-text-react-renderer-2.9.2.tgz", - "integrity": "sha512-ELOuDVoPDpThM0/yYRgZlh1yP2ELSN6N1mh9/i4Z0qwwzQ7mK+mrhGeOJACx1FB7kuaLzFhtDEjVttu0OPYI2A==", - "license": "MIT", - "peerDependencies": { - "react": ">=16.0.0" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -23942,6 +23897,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, "license": "MIT" }, "node_modules/thenify": { diff --git a/package.json b/package.json index 2da1fd7709..f77b5e2412 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,6 @@ "@docusaurus/preset-classic": "^3.5.1", "@docusaurus/types": "^3.5.1", "@mdx-js/react": "^3.0.1", - "@storyblok/react": "^3.0.10", "buffer": "^6.0.3", "clsx": "^1.2.1", "concurrently": "^9.0.1", @@ -44,7 +43,6 @@ "react-dom": "^18.3.1", "react-lottie-player": "^2.1.0", "semver": "^7.6.3", - "storyblok-rich-text-react-renderer": "^2.9.2", "tailwindcss": "^3.4.10", "undici": "^6.19.7" }, diff --git a/plugins/custom-webpack/index.js b/plugins/custom-webpack/index.js index a95d33766e..5ed5752351 100644 --- a/plugins/custom-webpack/index.js +++ b/plugins/custom-webpack/index.js @@ -19,12 +19,6 @@ module.exports = function customWebpackPlugin () { new webpack.ProvidePlugin({ process: 'process/browser', Buffer: ['buffer', 'Buffer'] - }), - new webpack.DefinePlugin({ - 'process.env.STORYBLOK_ACCESS_TOKEN': JSON.stringify( - process.env.STORYBLOK_ACCESS_TOKEN - ), - 'process.env.BASE_URL': JSON.stringify(process.env.BASE_URL) }) ] } diff --git a/src/components/BuildApi.js b/src/components/BuildApi.js deleted file mode 100644 index 6cbc237383..0000000000 --- a/src/components/BuildApi.js +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react' -import SectionTags from './SectionTags' -import { render } from 'storyblok-rich-text-react-renderer' -import CodeBlockWithCopy from './CodeBlockWithCopy' - -const renderContent = (node) => { - if (Array.isArray(node.content)) { - return node.content.map((childNode, index) => { - const codeContent = childNode.content - .map((textNode) => textNode.text) - .join('') - switch (childNode.type) { - case 'code_block': - return - default: - return render(node) - } - }) - } - return null -} - -const BuildApi = ({ blok }) => { - return ( -
-
- - {/* title */} -

- {blok.services[0].section_title} -

-
- {render(blok.services[0].section_desc)} -
-
- {/* grid items */} -
- {blok.services[0].api_features.map((feature, index) => ( -
- feature icon -

- {feature.feature_title} -

-
item.type === 'bullet_list' - ) && 'opacity-65' - } feature__richtext text-sm md:text-base`} - > - {' '} - {renderContent(feature.feature_subcontent)} -
-
- ))} -
- {/* cta */} - - {blok.services[0].section_cta[0].btn_caption} - -
- ) -} - -export default BuildApi diff --git a/src/components/CodeBlockWithCopy.js b/src/components/CodeBlockWithCopy.js deleted file mode 100644 index fd7c49ca48..0000000000 --- a/src/components/CodeBlockWithCopy.js +++ /dev/null @@ -1,55 +0,0 @@ -import React, { useState } from 'react' -import Tooltip from './ToolTip' - -const CodeBlockWithCopy = ({ code }) => { - const [tooltipVisible, setTooltipVisible] = useState(false) - const copyToClipboard = () => { - navigator.clipboard.writeText(code) - setTooltipVisible(true) - setTimeout(() => setTooltipVisible(false), 1500) - } - - return ( -
-
-        
- - - - - - -
- {code} -
-
- ) -} - -export default CodeBlockWithCopy diff --git a/src/components/ComparisonCard.jsx b/src/components/ComparisonCard.jsx new file mode 100644 index 0000000000..34367d2da1 --- /dev/null +++ b/src/components/ComparisonCard.jsx @@ -0,0 +1,49 @@ +import React from 'react' + +export default function ComparisonCard ({ title, items, isAfter }) { + return ( +
+ {!isAfter && ( + <> +
+
+ + )} + {isAfter &&
} +
+ {title} +
+
    + {items.map((item, index) => ( +
  • + + + + + {item} + +
  • + ))} +
+
+ ) +} diff --git a/src/components/DeployInSeconds.js b/src/components/DeployInSeconds.js deleted file mode 100644 index 8bd3e99e80..0000000000 --- a/src/components/DeployInSeconds.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const DeployInSeconds = ({ blok }) => { - return ( -
-
-
-
- icon -
- {blok.title} -
-
-
- {render(blok.desc)} -
-
-
-
-
-
-
- ) -} - -export default DeployInSeconds diff --git a/src/components/Explore.js b/src/components/Explore.jsx similarity index 65% rename from src/components/Explore.js rename to src/components/Explore.jsx index cc0d6ca0f9..8e8768cbad 100644 --- a/src/components/Explore.js +++ b/src/components/Explore.jsx @@ -1,9 +1,8 @@ import React, { useState } from 'react' -import { render } from 'storyblok-rich-text-react-renderer' -const Timeline = ({ blok }) => { - const tablist = blok.watt_tab_list.slice(0, 3) - const lastList = blok.watt_tab_list.slice(-1) +const WattTimeline = ({ data }) => { + const tablist = data.slice(0, 3) + const lastList = data.slice(-1) return (
@@ -17,7 +16,7 @@ const Timeline = ({ blok }) => {
  • @@ -25,13 +24,13 @@ const Timeline = ({ blok }) => {
    -

    {render(item.title)}

    +

    {item.title}

    - {render(item.subtitle)} + {item.subtitle}

    - {render(item.paragraph)} + {item.paragraph}

  • @@ -46,20 +45,20 @@ const Timeline = ({ blok }) => { {' '} {/* Added background color, spacing, and slightly rounded corners */}
    -

    {render(lastList[0].title)}

    +

    {lastList[0].title}

    - {render(lastList[0].subtitle)} + {lastList[0].subtitle}

    - {render(lastList[0].paragraph)} + {lastList[0].paragraph}

    @@ -67,19 +66,12 @@ const Timeline = ({ blok }) => {
    - {/* - {render(blok.wa_btn)} - */} -
    @@ -88,8 +80,8 @@ const Timeline = ({ blok }) => { ) } -const Timeline2 = ({ blok }) => { - const tablist = blok.watt_tab_list +const OpenSourceTimeline = ({ data }) => { + const tablist = data return (
    @@ -100,20 +92,20 @@ const Timeline2 = ({ blok }) => { {' '} {/* Added background color, spacing, and slightly rounded corners */}
    -

    {render(item.title)}

    +

    {item.title}

    - {render(item.subtitle)} + {item.subtitle}

    - {render(item.paragraph)} + {item.paragraph}

    @@ -127,20 +119,20 @@ const Timeline2 = ({ blok }) => { {' '} {/* Added background color, spacing, and slightly rounded corners */}
    -

    {render(tablist[2].title)}

    +

    {tablist[2].title}

    - {render(tablist[2].subtitle)} + {tablist[2].subtitle}

    - {render(tablist[2].paragraph)} + {tablist[2].paragraph}

    @@ -148,22 +140,17 @@ const Timeline2 = ({ blok }) => { {/* second */}

    - {render(blok.waopen_text)} + The leading open source toolkit used by million of developers globally

    -

    - {render(blok.waopen_downloads.split(' ')[0])} -

    - -

    - {render(blok.waopen_downloads.split(' ').slice(1).join(' '))} -

    +

    3M

    +

    monthly NPM downloads

    - {render(blok.waopen_btn)} + Read our docs
    @@ -172,9 +159,55 @@ const Timeline2 = ({ blok }) => { ) } -const Explore = ({ blok }) => { +const Explore = () => { const [activeTab, setActiveTab] = useState(0) + const watt = [ + { + icon: '/img/watt-icon-1.svg', + title: 'Comprehensive NFR management', + subtitle: 'Simplify critical app functions without the hassle.', + paragraph: 'Abstracts away time-consuming tasks like logging, tracing, observability, and resource allocation—allowing your team to focus on building, not managing infrastructure.' + }, + { + icon: '/img/watt-icon-2.svg', + title: 'Integrated OpenTelemetry tracing', + subtitle: 'Get full visibility into your app’s performance.', + paragraph: 'Track application behavior in real-time with built-in OpenTelemetry tracing. Automatically monitor distributed services and gain insights into dependencies and performance.' + }, + { + icon: '/img/watt-icon-3.svg', + title: 'Unified logging with Pino', + subtitle: 'Streamline your logging strategy effortlessly.', + paragraph: 'Leverage Pino for fast, efficient, and structured logging across your Node.js applications, ensuring that you can monitor performance without complexity.' + }, + { + icon: '/img/watt-icon-4.svg', + title: 'Multithreading done right', + subtitle: 'Enable multithreading on your Node.js applications instantly.', + paragraph: 'Optimize resource allocation and dramatically increase efficiency, allowing your app to handle more traffic seamlessly.' + } + ] + const openSource = [ + { + icon: '/img/oss-icon-1.svg', + title: 'Build APIs quickly', + subtitle: 'Platformatic is opinionated on distributed backends, but not prescriptive', + paragraph: 'With your team, create, package and publish configurations on your internal npm registry. Accelerate Open API and GraphQL development and cut repetitive tasks.' + }, + { + icon: '/img/oss-icon-2.svg', + title: 'Seamlessly consume your API', + subtitle: 'Based on [fetch], Platformatic Client runs on every JavaScript runtime.', + paragraph: 'Automatically generate a type-safe and low-dependency client from an OpenAPI Schema or GraphQL endpoint. Works for service-to-service and frontend-to-backend communications.' + }, + { + icon: '/img/oss-icon-3.svg', + title: 'Innovate fast', + subtitle: 'Quickly build your base application with Platformatic Stackables\' templates.', + paragraph: 'Go beyond starter kits. Take your configurations, package them and publish them on your internal npm registry. Access & use the same core configurations.' + } + ] return (
    {/* Main container */} @@ -182,10 +215,12 @@ const Explore = ({ blok }) => { {/* Header section */}

    - {render(blok.Explore_platformatic[0].title)} + Explore Platformatic’s + + Open Source functionality:

    - {render(blok.Explore_platformatic[0].paragraph)} + The foundation for running high-performance Node.js apps and efficient development teams.

    {/* Tabs section */} @@ -212,10 +247,10 @@ const Explore = ({ blok }) => { {/* Tab content */}
    {activeTab === 0 && ( - + )} {activeTab === 1 && ( - + )}
    diff --git a/src/components/FacingNodeChallenge.js b/src/components/FacingNodeChallenge.js deleted file mode 100644 index 2386032929..0000000000 --- a/src/components/FacingNodeChallenge.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import SectionTags from './SectionTags' -import { render } from 'storyblok-rich-text-react-renderer' - -const FacingNodeChallenge = ({ blok }) => { - return ( -
    - -
    -
    - {render(blok.section_title)} -
    -
    - {render(blok.section_subtitle)} -
    -
    - image - {/* cta */} - - {blok.section_cta[0].btn_caption} - -
    - ) -} - -export default FacingNodeChallenge diff --git a/src/components/FaqSection.js b/src/components/Faq.jsx similarity index 61% rename from src/components/FaqSection.js rename to src/components/Faq.jsx index 89ceb09c3a..7010f3c9a8 100644 --- a/src/components/FaqSection.js +++ b/src/components/Faq.jsx @@ -1,21 +1,33 @@ import React, { useState } from 'react' -import { render } from 'storyblok-rich-text-react-renderer' -function FaqSection ({ faq, title }) { +function Faq () { const [openIndex, setOpenIndex] = useState(null) const toggleFaq = (index) => { setOpenIndex(openIndex === index ? null : index) } - + const faqs = [ + { + question: 'Do I need to re-write my app to use Platformatic?', + answer: 'No, Platformatic allows you to bring your Node.js Fastify, Express, Koa, Next.js, Remix, and Astro apps, plug in, and play.' + }, + { + question: 'Does Platformatic Watt support frameworks not listed above?', + answer: 'If it’s not listed above, then no- however, contact us and we will see what we can do.' + }, + { + question: 'Is Platformatic Open Source?', + answer: Yes, it’s Apache-2.0 licensed. You can find the source code at https://github.com/platformatic/platformatic. + } + ] return (

    - {render(title)} + FAQ

    - {faq.map((faq, index) => ( + {faqs.map((faq, index) => (
    {openIndex === index ? '−' : '+'} - {render(faq.question)} + {faq.question}
    {openIndex === index && (

    - {render(faq.answer)} + {faq.answer}

    )}
    @@ -43,4 +55,4 @@ function FaqSection ({ faq, title }) { ) } -export default FaqSection +export default Faq diff --git a/src/components/HighPerformingApps.js b/src/components/HighPerformingApps.jsx similarity index 73% rename from src/components/HighPerformingApps.js rename to src/components/HighPerformingApps.jsx index e6a00b21a9..3bcbf05f92 100644 --- a/src/components/HighPerformingApps.js +++ b/src/components/HighPerformingApps.jsx @@ -1,7 +1,6 @@ import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' -const HighPerformingApps = ({ blok }) => { +const HighPerformingApps = () => { return (
    {/* Main container */} @@ -11,28 +10,23 @@ const HighPerformingApps = ({ blok }) => { {/* Title and subtitle */}

    - {render(blok.Seamless_block[0].ready_title)} + Ready to optimize your + Node.js infrastructure?

    - {render(blok.Seamless_block[0].ready_paragraph)} + Get started with Platformatic and take the hassle out of managing non-functional requirements like logging, tracing, and scaling.

    {/* CTA buttons */} @@ -42,7 +36,7 @@ const HighPerformingApps = ({ blok }) => { {/* Infrastructure background */}
    @@ -51,25 +45,27 @@ const HighPerformingApps = ({ blok }) => {

    - {render(blok.Seamless_block[0].teady_box_title)} + Pillars of Node.js

    - {render(blok.Seamless_block[0].ready_box_para)} + 9 principles for doing Node.js right in enterprise environments

    - {render(blok.Seamless_block[0].ready_box_link)} + + Get the guide +

    {/* Footer text */}

    - {render(blok.Seamless_block[0].last_paragraph)} + Learn more about Node.js best practices in our blogs

    diff --git a/src/components/HubSpotForm.js b/src/components/HubSpotForm.js deleted file mode 100644 index ed55f7566a..0000000000 --- a/src/components/HubSpotForm.js +++ /dev/null @@ -1,88 +0,0 @@ -/* global MutationObserver */ -import React, { useEffect, useState } from 'react' - -const HubSpotForm = ({ - portalId, - formId, - targetId, - region = 'na1', - cssClass = 'light-mode' -}) => { - const [loading, setLoading] = useState(true) - - useEffect(() => { - const script = document.createElement('script') - script.src = 'https://js.hsforms.net/forms/v2.js' - document.body.appendChild(script) - - script.addEventListener('load', () => { - setLoading(false) - if (window.hbspt) { - window.hbspt.forms.create({ - portalId, - formId, - target: `#${targetId}`, - region, - cssClass, - onFormReady: function ($form) { - const iframe = document.querySelector('iframe') - if (iframe) { - const observer = new MutationObserver( - (mutationsList, observer) => { - for (const mutation of mutationsList) { - if ( - mutation.type === 'childList' && - iframe.contentDocument - ) { - const doc = - iframe.contentDocument || - iframe.contentWindow?.document - if (doc) { - // Set the background color of the iframe's body - doc.body.style.backgroundColor = '#040607' - - const labels = doc.querySelectorAll('label') - labels.forEach((label) => { - label.style.color = '#ffffff' - }) - observer.disconnect() // Stop observing after labels and background are adjusted - } - } - } - } - ) - - observer.observe(iframe.contentDocument, { - childList: true, - subtree: true - }) - } else { - console.error('Iframe not found.') - } - } - }) - } else { - console.error('hbspt not available.') - } - }) - - script.addEventListener('error', () => { - setLoading(false) - console.error('Failed to load the script.') - }) - }, [portalId, formId, targetId, region, cssClass]) - - if (loading) { - return ( -
    -
    - Loading... -
    -
    - ) - } - - return
    -} - -export default HubSpotForm diff --git a/src/components/ManagingNode.js b/src/components/ManagingNode.jsx similarity index 69% rename from src/components/ManagingNode.js rename to src/components/ManagingNode.jsx index 5e1d9d5b99..a623f91b14 100644 --- a/src/components/ManagingNode.js +++ b/src/components/ManagingNode.jsx @@ -1,9 +1,22 @@ import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const ManagingNode = ({ blok }) => { - const features = blok.build_node[0].node_box - +const ManagingNode = () => { + const features = [ + { + title: 'Inconsistent NFRs', + paragraph: 'A lack of standardized tracing, logging, and HTTP clients across teams creates a maintenance nightmare.', + icon: '/img/node-icon-1.svg' + }, + { + title: 'Development Delays', + paragraph: 'The time spent on NFRs diverts resources from core features, slowing down development cycles.', + icon: '/img/node-icon-2.svg' + }, + { + title: 'Procedural Complexity', + paragraph: 'Existing tools often require significant code & process modifications or application re-writes, increasing complexity and reducing agility.', + icon: '/img/node-icon-3.svg' + } + ] return (
    @@ -12,10 +25,12 @@ const ManagingNode = ({ blok }) => {

    - {render(blok.build_node[0].node_title)} + Handling Node applications is + + time-consuming, stress-inducing and often requires complex re-writes.

    - {render(blok.build_node[0].node_subtitle)} + Today, teams face:

    @@ -28,18 +43,18 @@ const ManagingNode = ({ blok }) => {

    - {render(feature.title)} + {feature.title}

    - {render(feature.paragraph)} + {feature.paragraph}

    diff --git a/src/components/PutNode.js b/src/components/PutNode.js deleted file mode 100644 index 8c31501cf2..0000000000 --- a/src/components/PutNode.js +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' -import { ComparisonCard } from './watt/WattCompare' - -const Header = ({ blok }) => ( -
    -

    - - {blok.title_header.split(' ')[0]} - - {blok.title_header.split(' ')[1]} -

    -

    - {render(blok.title_paragraph)} -

    -
    -) - -const BackgroundImage = ({ blok }) => ( -
    - -
    -) - -const SupportedTechnologies = ({ blok }) => ( -
    -

    - {render(blok.paragraph)} -

    -
    - {blok.images.map((Logo, index) => ( -
    - -
    - ))} -
    -

    - {render(blok.italic_paragraph)} -

    -
    -) - -const PutNode = ({ blok }) => { - return ( -
    -
    -
    - - -
    - -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - ) -} - -export default PutNode diff --git a/src/components/PutNode.jsx b/src/components/PutNode.jsx new file mode 100644 index 0000000000..26090686ad --- /dev/null +++ b/src/components/PutNode.jsx @@ -0,0 +1,104 @@ +import React from 'react' +import ComparisonCard from './ComparisonCard' + +const Header = () => ( +
    +

    + + Introducing + + Platformatic +

    +

    + The foundation for running high-performance Node.js apps and efficient development teams. +

    +
    +) + +const BackgroundImage = () => ( +
    + +
    +) + +const SupportedTechnologies = function ({ images }) { + return ( +
    +

    + Not just another runtime. We are built for Node.js, while supporting: +

    +
    + {images.map((image, index) => ( +
    + +
    + ))} +
    +

    + Just plug in and play. +

    +
    + ) +} + +const PutNode = () => { + const before = [ + 'Disjointed developer experience', + 'Inefficient handling of NFRs', + 'Slow development cycles', + 'Confusion around best practices' + ] + + const after = [ + 'Build without the endless loop of setup and maintenance', + 'Streamlined NFR handling', + 'Faster development & API creation', + 'Built-in best practices atop existing processes' + ] + const images = [ + 'express', + 'fastify-logo', + 'koa', + 'nextjs', + 'remix', + 'astro' + ] + return ( +
    +
    +
    + + +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + ) +} + +export default PutNode diff --git a/src/components/SeamlessConsume.js b/src/components/Seamless.jsx similarity index 71% rename from src/components/SeamlessConsume.js rename to src/components/Seamless.jsx index 4a23e29836..6c40c55116 100644 --- a/src/components/SeamlessConsume.js +++ b/src/components/Seamless.jsx @@ -1,13 +1,12 @@ import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' -const SeamlessConsume = ({ blok }) => { +const Seamless = () => { return (
    {/* Main container */}
    @@ -16,18 +15,18 @@ const SeamlessConsume = ({ blok }) => { {/* Header section */}

    - {render(blok.Seamless_block[0].seamless_title)} + Works for you, your team,
    and your architecture

    - {render(blok.Seamless_block[0].seamless_paragraph)} + Seamless integration with your existing Node.js ecosystem

    - +
    ) } -export default SeamlessConsume +export default Seamless diff --git a/src/components/SectionTags.js b/src/components/SectionTags.js deleted file mode 100644 index 887faa3ff8..0000000000 --- a/src/components/SectionTags.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react' - -const SectionTags = ({ LineGradient, Circlebg, tag, className }) => { - return ( -
    -
    -
    -
    - {tag} -
    -
    -
    - ) -} - -export default SectionTags diff --git a/src/components/Testimony.js b/src/components/Testimony.js deleted file mode 100644 index 4a52272ba3..0000000000 --- a/src/components/Testimony.js +++ /dev/null @@ -1,46 +0,0 @@ -import fixImageUrl from '../../util/FixImageUrls' - -const Testimony = ({ blok }) => { - return ( -
    -
    -
    - {/* image, name, and company info */} - - user_image -
    -

    - {blok.section_testimonial_name} -

    -

    - {blok.section_testimonial_job_desc} -

    -
    -
    - {/* company logo */} - - company_logo - -
    - {/* divider */} -
    - {/* description */} -

    - {blok.section_testimonial_testimony} -

    -
    -
    - ) -} - -export default Testimony diff --git a/src/components/TimeToChange.js b/src/components/TimeToChange.js deleted file mode 100644 index 86fcb6f0e1..0000000000 --- a/src/components/TimeToChange.js +++ /dev/null @@ -1,61 +0,0 @@ -import React, { useState } from 'react' -import Lottie from 'react-lottie-player' - -const TimeToChange = ({ blok }) => { - return ( -
    - xxxx -
    - {blok?.time_to_change.map((change, index) => { - const [isHovered, setIsHovered] = useState(false) - - return ( -
    setIsHovered(true)} - onMouseLeave={() => setIsHovered(false)} - > -
    - {change.change_text} - {isHovered && ( - - )} -
    -
    - {change.change_text} -
    -

    - {change.change_text} -

    -
    - ) - })} -
    - xxxx -
    - ) -} - -export default TimeToChange diff --git a/src/components/ToolTip.js b/src/components/ToolTip.js deleted file mode 100644 index f9b9ba2571..0000000000 --- a/src/components/ToolTip.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' - -const Tooltip = ({ message, isVisible }) => { - if (!isVisible) return null - - return ( -
    -
    -
    {message}
    -
    - ) -} - -const Tooltip2 = ({ message, isVisible }) => { - if (!isVisible) return null - - return ( -
    -
    -
    {message}
    -
    - ) -} - -export { Tooltip2 } - -export default Tooltip diff --git a/src/components/TypeWriteCodeBlock.js b/src/components/TypeWriteCodeBlock.js deleted file mode 100644 index 45bc085577..0000000000 --- a/src/components/TypeWriteCodeBlock.js +++ /dev/null @@ -1,66 +0,0 @@ -import React, { useState, useEffect } from 'react' -import { Tooltip2 } from './ToolTip' - -const TypeWriteCodeBlock = ({ code = '' }) => { - const [tooltipVisible, setTooltipVisible] = useState(false) - const [displayedCode, setDisplayedCode] = useState('') - - useEffect(() => { - if (displayedCode.length < code.length) { - const timeout = setTimeout(() => { - setDisplayedCode(code.slice(0, displayedCode.length + 1)) - }, 100) - return () => clearTimeout(timeout) - } - }, [displayedCode, code]) - - const copyToClipboard = () => { - navigator.clipboard.writeText(code) - setTooltipVisible(true) - setTimeout(() => setTooltipVisible(false), 1500) - } - - return ( -
    -
    -        
    - - - - - - -
    - - {displayedCode} - - -
    -
    - ) -} - -export default TypeWriteCodeBlock diff --git a/src/components/WhyPlatformatic.js b/src/components/WhyPlatformatic.js deleted file mode 100644 index b7db1182bf..0000000000 --- a/src/components/WhyPlatformatic.js +++ /dev/null @@ -1,96 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const WhyPlatformatic = ({ blok }) => { - return ( -
    -
    -
    -
    - {render(blok.title)} -
    -
    - {render(blok.subtitle)} -
    -
    - {/* cta */} -
    - {blok.cta_options.map((cta, index) => ( -
    - {cta.btn_variant?.toLowerCase() === 'filled' - ? ( - - icon - {cta.btn_caption} - - ) - : ( - - {cta.btn_caption} - - )} -
    - ))} -
    -
    - - {/* email update */} -
    -
    - {render(blok.updates_title)} -
    -
    -
    - {render(blok.updates_subtitle)} -
    - {/* icon */} - icon - {/* form */} -
    - - -
    -
    -
    -
    - ) -} - -export default WhyPlatformatic diff --git a/src/components/WhyPlatformatic/index.js b/src/components/WhyPlatformatic/index.js deleted file mode 100644 index 6cc0bd2c27..0000000000 --- a/src/components/WhyPlatformatic/index.js +++ /dev/null @@ -1,140 +0,0 @@ -import React from 'react' -import styles from './index.module.css' - -export default function WhyPlatformatic () { - return ( -
    -
    -
    -
    -

    Why Platformatic?

    -

    - Platformatic enables developers to efficiently develop and run APIs at scale. - Historically, API developers have had to repetitively build infrastructure to satisfy - foundational requirements, like authentication, authorization, caching, and connection - to databases, and have had to manage microservices with technologies such as service mesh - or centralized registries. This work is time consuming, undifferentiated, and painstakingly - complex. With growing demands of SaaS applications, the amount of API permutations has grown - exponentially and has become a development bottleneck. This has led large organizations to - create dedicated platform API engineering teams to help teams deliver on business demands. -

    -

    - Our goal is to make API development simple: we aim is to remove all friction from the day-to-day - of backend developers. Platformatic is a series of Open Source tools to build APIs. - Check out our announcement video. -

    -
    -
    - - -
    -
    -
    -
    -

    Platformatic Service

    -

    - Setting up new projects and APIs is boring. We want to make it easy for you to get started and to - have a production ready setup in no time. - Platformatic Service is your starting point for creating a Node.js API on top of the  - Fastify framework, providing a set of batteries included - defaults for all your needs. -

    -

    - Check out the basic Platformatic Service features: -

    -
      -
    • Customizable via Node.js and Fastify plugins, with automatic types
    • -
    • Automatic TypeScript compilation
    • -
    • Prometheus metrics
    • -
    • Blazing fast live reloads during development
    • -
    • OpenAPI schema generation
    • -
    • GraphQL integration
    • -
    • Third-party API client generation
    • -
    • Batteries included project generator
    • -
    • File-system based routing
    • -
    -
    -
    - Platformatic Service Architecture - Platformatic Service Architecture -
    -
    -
    -
    - Platformatic DB Architecture - Platformatic DB Architecture -
    -
    -

    Platformatic DB

    -

    - Are you tired of creating Create-Read-Update-Delete (CRUD) APIs? - Platformatic DB is a tool that allows you to create both OpenAPI - and GraphQL schemas from your database, without having to write a single line of code. - The key difference to similar tools is that Platformatic DB allows you to customize - it via Node.js and Fastify plugins, - because it's based on Platformatic Service. -

    -

    - Check out the basic Platformatic DB features: -

    -
      -
    • Automatic OpenAPI/REST API generation from the SQL schema
    • -
    • Automatic GraphQL API generation from the SQL schema
    • -
    • Multiple databases: SQLite, MySQL, MariaDB, PostgreSQL
    • -
    • Multiple authentication methods: JWT, WebHook, HTTP Headers
    • -
    • Authorization via role based access control (RBAC)
    • -
    • Type-safety via generated types for improved database interactions
    • -
    -
    -
    -
    -
    -

    Platformatic Composer

    -

    - Want to automatically compose microservices into one ecosystem with a single public API? - Platformatic Composer is a new way to develop aggregated APIs, starting with OpenAPI composition - across multiple API sources. -

    -

    - Check out the Platformatic Composer features: -

    -
      -
    • OpenAPI composition
    • -
    • Resolve conflicts between different endpoints
    • -
    • Automatic schema refresh
    • -
    • Customizable via Node.js and Fastify plugins
    • -
    • Automatic TypeScript compilation
    • -
    -
    -
    - Platformatic Composer Architecture - Platformatic Composer Architecture -
    -
    -
    -
    - Platformatic Runtime Architecture - Platformatic Runtime Architecture -
    -
    -

    Platformatic Runtime

    -

    - The Platformatic Runtime environment enables developers to leverage the perks - of microservices with the deployment simplicity of a monolith. - It consolidates all your Node.js applications into a single Node.js process, - simplifying the development & execution of microservices. -

    -

    - Check out the Platformatic Runtime features: -

    -
      -
    • Hot Module Reloading
    • -
    • In-process routing using fetch() or Platformatic Client
    • -
    • Monorepo support
    • -
    -
    -
    -
    -
    - ) -} diff --git a/src/components/WhyPlatformatic/index.module.css b/src/components/WhyPlatformatic/index.module.css deleted file mode 100644 index b144186602..0000000000 --- a/src/components/WhyPlatformatic/index.module.css +++ /dev/null @@ -1,49 +0,0 @@ - -.video { - display: flex; - align-items: center; - justify-content: center; - padding: 2rem 0; - width: 100%; -} - -.video h1 { - text-align: center; -} - -.video iframe { - position: relative; - top: 0; - left: 0; - width: 100%; - height: 20em; -} - -.why iframe { - position: relative; - top: 0; - left: 0; - /* TODO: make this responsive and add screen size breakpoints*/ - width: 100%; - height: 25em; -} - -.features h2 { - text-align: center; -} - -[data-theme='light'] .light { - display: block; -} - -[data-theme='light'] .dark { - display: none; -} - -[data-theme='dark'] .dark { - display: block ; -} - -[data-theme='dark'] .light { - display: none ; -} diff --git a/src/components/WorksForYou.js b/src/components/WorksForYou.js deleted file mode 100644 index b080c6ed44..0000000000 --- a/src/components/WorksForYou.js +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' -import Testimony from './Testimony' - -const WorksForYou = ({ blok }) => { - return ( -
    -
    -
    -
    - {render(blok.services[1].section_title)} -
    -
    - {render(blok.services[1].section_subtitle)} -
    -
    - image -
    - {blok.services[1].section_feature.map((features, index) => ( -
    -
    - {/* icon */} - icon - {/* title */} -

    - {features.title} -

    - {/* description */} -

    - {render(features.description)} -

    -
    - -
    - ))} -
    -
    - {/* testimony */} - -
    - ) -} - -export default WorksForYou diff --git a/src/components/aiwarp/Feature.js b/src/components/aiwarp/Feature.js deleted file mode 100644 index 40ce867f22..0000000000 --- a/src/components/aiwarp/Feature.js +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const Feature = ({ blok }) => { - return ( -
    -
    -
    -
    -
    - - {blok.feature_title} - - - {render(blok.feature_description_rich)} - -
    - {blok.feature.map((feature, index) => ( -
    - feature icon - - {feature.title} - - - {render(feature.description)} - - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    -
    -
    - ) -} - -export default Feature diff --git a/src/components/aiwarp/Learnplatformatic.js b/src/components/aiwarp/Learnplatformatic.js deleted file mode 100644 index 1ccd519332..0000000000 --- a/src/components/aiwarp/Learnplatformatic.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react' - -const LearnPlatformatic = ({ blok }) => { - return ( -
    -
    -
    -
    - - {blok.learnplatformatic[0].title} - -
    - {blok.learnplatformatic[0].cards.map((card) => ( -
    -
    - feature icon - - {card.title} - -
    - - {card.cta_caption} - - -
    - ))} -
    -
    - ) -} - -export default LearnPlatformatic diff --git a/src/components/caching/architecture-image.js b/src/components/caching/architecture-image.js deleted file mode 100644 index 0a4b9b63d0..0000000000 --- a/src/components/caching/architecture-image.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react' - -export const ArchitectureImage = ({ blok }) => ( -
    - -
    -) diff --git a/src/components/caching/cachefeatures.js b/src/components/caching/cachefeatures.js deleted file mode 100644 index de909d90c2..0000000000 --- a/src/components/caching/cachefeatures.js +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' -import fixImageUrl from '../../../util/FixImageUrls' - -export default function CacheFeatures ({ blok }) { - return ( -
    -
    -

    Features

    - -
    - {blok.cache_feat.map((feature, index) => ( -
    -
    -
    - -
    -
    -

    - {render(feature.title)} -

    -
    -

    - {render(feature.description)} -

    -
    -
    - ))} -
    -
    -
    - ) -} diff --git a/src/components/caching/getstarted.js b/src/components/caching/getstarted.js deleted file mode 100644 index 5fa6f80431..0000000000 --- a/src/components/caching/getstarted.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -export default function GetStarted ({ blok }) { - return ( -
    -
    -

    - {blok.cache_started[0].title} -

    -

    - {blok.cache_started[0].subtitle} -

    -
      - {blok.cache_started[0].cache_get_started_list.map((list, index) => ( -
    1. {render(list.list)}
    2. - ))} -
    -
    -
    - ) -} diff --git a/src/components/caching/learnmore.js b/src/components/caching/learnmore.js deleted file mode 100644 index 6c4e9c8b66..0000000000 --- a/src/components/caching/learnmore.js +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react' -import fixImageUrl from '../../../util/FixImageUrls' -import { render } from 'storyblok-rich-text-react-renderer' - -export default function LearnMore ({ blok }) { - return ( -
    -
    -

    - {blok.cache_learn[0].title} -

    -
    - {blok.cache_learn[0].learn_more_card.map((feature, index) => ( -
    -
    -
    -
    - -
    -
    -

    - {render(feature.title)} -

    -
    -
    -

    - {render(feature.description)} -

    -
    -
    - ))} -
    -
    -
    - ) -} diff --git a/src/components/composer/Architecture.js b/src/components/composer/Architecture.js deleted file mode 100644 index e823d26a42..0000000000 --- a/src/components/composer/Architecture.js +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const Architecture = ({ blok }) => { - return ( -
    -
    -
    - {blok.architecture_composer[0].header} -
    - - {blok.architecture_composer[0].title} - -
    - -
    - - {render(blok.architecture_composer[0].content)} - -
    -
    - ) -} - -export default Architecture diff --git a/src/components/composer/Feature.js b/src/components/composer/Feature.js deleted file mode 100644 index 0a16711423..0000000000 --- a/src/components/composer/Feature.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const Feature = ({ blok }) => { - return ( -
    -
    -
    -
    -
    - - {blok.feature_title} - -
    - {blok.feature.map((feature, index) => ( -
    - feature icon - - {feature.title} - - - {render(feature.description)} - - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    -
    -
    - ) -} - -export default Feature diff --git a/src/components/composer/GetStarted.js b/src/components/composer/GetStarted.js deleted file mode 100644 index a570348660..0000000000 --- a/src/components/composer/GetStarted.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' - -const GetStarted = ({ blok }) => { - return ( -
    - - {blok.getstarted[0].title} - - - {blok.getstarted[0].codeblock} - -
    - icon -
    -
    - ) -} - -export default GetStarted diff --git a/src/components/composer/Learnplatformatic.js b/src/components/composer/Learnplatformatic.js deleted file mode 100644 index 29a4d19cfd..0000000000 --- a/src/components/composer/Learnplatformatic.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' - -const LearnPlatformatic = ({ blok }) => { - return ( -
    -
    -
    -
    - - {blok.learnplatformatic[0].title} - -
    - {blok.learnplatformatic[0].cards.map((card) => ( -
    - feature icon -

    - {card.title} -

    - - {card.cta_caption} - - -
    - ))} -
    -
    - ) -} - -export default LearnPlatformatic diff --git a/src/components/database/Feature.js b/src/components/database/Feature.js deleted file mode 100644 index a96815f2b5..0000000000 --- a/src/components/database/Feature.js +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react' - -const Feature = ({ blok }) => { - return ( -
    -
    -
    -
    -
    - - {blok.feature_title} - -
    - {blok.feature.map((feature, index) => ( -
    - feature icon - - {feature.title} - - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    -
    -
    - ) -} - -export default Feature diff --git a/src/components/database/Learnplatformatic.js b/src/components/database/Learnplatformatic.js deleted file mode 100644 index c4cc199cd8..0000000000 --- a/src/components/database/Learnplatformatic.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' - -const LearnPlatformatic = ({ blok }) => { - return ( -
    -
    -
    -
    - - {blok.learnplatformatic[0].title} - -
    - {blok.learnplatformatic[0].cards.map((card) => ( -
    - feature icon -

    - {card.feature_title} -

    - - {card.label} - - -
    - ))} -
    -
    - ) -} - -export default LearnPlatformatic diff --git a/src/components/fastify/Architecture.js b/src/components/fastify/Architecture.js deleted file mode 100644 index e21dea06e3..0000000000 --- a/src/components/fastify/Architecture.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const Architecture = ({ blok }) => { - return ( -
    -
    - - {blok.architecture_composer[0].title} - - - {render(blok.architecture_composer[0].content)} - -
    -
    - ) -} - -export default Architecture diff --git a/src/components/fastify/Feature.js b/src/components/fastify/Feature.js deleted file mode 100644 index 6fbb4f0962..0000000000 --- a/src/components/fastify/Feature.js +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const Feature = ({ blok }) => { - return ( -
    -
    -
    -
    -
    - - {blok.feature_title} - -
    - {blok.feature.map((feature, index) => ( -
    = blok.feature.length - 2 - ? 'md:w-[49%] mt-4' - : 'md:w-[25rem]' - } mx-auto flex flex-col items-center gap-y-2 md:gap-y-4 p-2 md:p-4 border dark:border-white/20 border-[#00050b]/30 dark:bg-[#00050b] bg-white rounded-md`} - > - feature icon - - {feature.title} - - - {render(feature.description)} - - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    - - {blok.feature_get_started[0].btn_caption} - -
    -
    - ) -} - -export default Feature diff --git a/src/components/fastify/GetStarted.js b/src/components/fastify/GetStarted.js deleted file mode 100644 index eb4f5484cb..0000000000 --- a/src/components/fastify/GetStarted.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const GetStarted = ({ blok }) => { - return ( -
    -
    -
    -
    - - {blok.getstarted[0].title} - - - {render(blok.getstarted[0].content)} - -
    - ) -} - -export default GetStarted diff --git a/src/components/fastify/PlatformaticWork.js b/src/components/fastify/PlatformaticWork.js deleted file mode 100644 index 9f05158178..0000000000 --- a/src/components/fastify/PlatformaticWork.js +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const PlatformaticWork = ({ blok }) => { - return ( -
    -
    - - {blok.learnplatformatic[0].title} - -
    - {blok.learnplatformatic[0].cards.map((feature, index) => ( -
    - feature icon - - {feature.title} - - - {render(feature.description)} - - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    -
    -
    - ) -} - -export default PlatformaticWork diff --git a/src/components/fastify/UsingPlatformatic.js b/src/components/fastify/UsingPlatformatic.js deleted file mode 100644 index b9ca306d43..0000000000 --- a/src/components/fastify/UsingPlatformatic.js +++ /dev/null @@ -1,62 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const UsingPlatformatic = ({ blok }) => { - return ( -
    -
    -
    -
    -
    - - {blok.using_platformatic_title} - -
    - {blok.feature.map((feature, index) => ( -
    = blok.feature.length - 2 - ? 'md:w-[49%] mt-4' - : 'md:w-[25rem]' - } mx-auto flex flex-col items-center gap-y-2 md:gap-y-4 p-2 md:p-4 border dark:border-white/20 border-[#00050b]/30 dark:bg-[#00050b] bg-white rounded-md`} - > - feature icon - - {feature.title} - - - {render(feature.description)} - - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    - - - {blok.feature_get_started[0].btn_caption} - - -
    -
    - ) -} - -export default UsingPlatformatic diff --git a/src/components/meraki/Feature.js b/src/components/meraki/Feature.js deleted file mode 100644 index 1db8b392d4..0000000000 --- a/src/components/meraki/Feature.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const Feature = ({ blok }) => { - return ( -
    -
    -
    -
    -
    - - {blok.feature_title} - -
    - {blok.feature.map((feature, index) => ( -
    - feature icon - - {feature.title} - - - {render(feature.description)} - - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    -
    -
    - ) -} - -export default Feature diff --git a/src/components/nodejs/StructureNodejs.js b/src/components/nodejs/StructureNodejs.js deleted file mode 100644 index f3500b57a3..0000000000 --- a/src/components/nodejs/StructureNodejs.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const StructureNodejs = ({ blok }) => { - return ( -
    - - {render(blok.feature_get_started[0].section_title)} - - - {render(blok.feature_get_started[0].section_subtitle)} - -
    - ) -} - -export default StructureNodejs diff --git a/src/components/nodejs/WhyPlatformatic.js b/src/components/nodejs/WhyPlatformatic.js deleted file mode 100644 index 5261893bc7..0000000000 --- a/src/components/nodejs/WhyPlatformatic.js +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const WhyPlatformatic = ({ blok }) => { - return ( -
    -
    - - {blok.feature_title} - -
    - {blok.feature.map((feature, index) => ( -
    = blok.feature.length - 2 - ? 'md:w-[49%]' - : ' md:w-[25rem]' - } mx-auto flex flex-col justify-between items-start gap-y-2 md:gap-y-4 p-2 md:p-4 border dark:border-white/20 border-[#00050b]/30 dark:bg-[#00050b] bg-white rounded-md`} - > -
    - feature icon - - {feature.title} - - - {render(feature.description)} - -
    - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    -
    -
    - ) -} - -export default WhyPlatformatic diff --git a/src/components/runtime/Feature.js b/src/components/runtime/Feature.js deleted file mode 100644 index 01d082fa94..0000000000 --- a/src/components/runtime/Feature.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const Feature = ({ blok }) => { - return ( -
    -
    -
    -
    -
    - - {blok.feature_title} - -
    - {blok.feature.map((feature, index) => ( -
    - feature icon - - {feature.title} - - - {render(feature.description)} - - {feature.cta_caption.length > 0 && ( - - - - {feature.cta_caption} - - - )} -
    - ))} -
    -
    -
    - ) -} - -export default Feature diff --git a/src/components/runtime/Learnplatformatic.js b/src/components/runtime/Learnplatformatic.js deleted file mode 100644 index 9d809b2829..0000000000 --- a/src/components/runtime/Learnplatformatic.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' - -const LearnPlatformatic = ({ blok }) => { - return ( -
    -
    -
    -
    - - {blok.learnplatformatic[0].title} - -
    - {blok.learnplatformatic[0].cards.map((card) => ( -
    -
    - feature icon - - {card.title} - -
    - - {card.cta_caption} - - -
    - ))} -
    -
    - ) -} - -export default LearnPlatformatic diff --git a/src/components/sbComponents/Feature.js b/src/components/sbComponents/Feature.js deleted file mode 100644 index 4dc0f1b3f4..0000000000 --- a/src/components/sbComponents/Feature.js +++ /dev/null @@ -1,16 +0,0 @@ -// src/components/sbComponents/Feature.js -import React from 'react' -import { storyblokEditable } from '@storyblok/react' - -const Feature = ({ blok }) => ( -
    -
    -
    -

    {blok.title}

    -

    {blok.description}

    - -
    -
    -) - -export default Feature diff --git a/src/components/sbComponents/Grid.js b/src/components/sbComponents/Grid.js deleted file mode 100644 index 9efa0c5d83..0000000000 --- a/src/components/sbComponents/Grid.js +++ /dev/null @@ -1,16 +0,0 @@ -import { StoryblokComponent, storyblokEditable } from '@storyblok/react' - -const Grid = ({ blok }) => { - return ( -
    - {blok.columns.map((blok) => ( - - ))} -
    - ) -} - -export default Grid diff --git a/src/components/sbComponents/HomePageFeatures.js b/src/components/sbComponents/HomePageFeatures.js deleted file mode 100644 index de76dfae55..0000000000 --- a/src/components/sbComponents/HomePageFeatures.js +++ /dev/null @@ -1,18 +0,0 @@ -// src/components/sbComponents/HomepageFeatures.js -import React from 'react' -import { storyblokEditable } from '@storyblok/react' -import Feature from './Feature' - -const HomepageFeatures = ({ blok }) => ( -
    -
    -
    - {blok.features.map((nestedBlok) => ( - - ))} -
    -
    -
    -) - -export default HomepageFeatures diff --git a/src/components/sbComponents/Page.js b/src/components/sbComponents/Page.js deleted file mode 100644 index 77e1a1e5a7..0000000000 --- a/src/components/sbComponents/Page.js +++ /dev/null @@ -1,20 +0,0 @@ -// src/components/sbComponents/Page.js -import React from 'react' -import { StoryblokComponent, storyblokEditable } from '@storyblok/react' - -const Page = ({ blok }) => { - if (!blok || !blok.body) { - console.error('Page component received invalid blok:', blok) - return
    Loading...
    - } - - return ( -
    - {blok.body.map((nestedBlok) => ( - - ))} -
    - ) -} - -export default Page diff --git a/src/components/sbComponents/Teaser.js b/src/components/sbComponents/Teaser.js deleted file mode 100644 index 530acb2c87..0000000000 --- a/src/components/sbComponents/Teaser.js +++ /dev/null @@ -1,11 +0,0 @@ -import { storyblokEditable } from '@storyblok/react' - -const Teaser = ({ blok }) => { - return ( -

    - {blok.headline} -

    - ) -} - -export default Teaser diff --git a/src/components/servicepage/Architecture.js b/src/components/servicepage/Architecture.js deleted file mode 100644 index d6b2afbb83..0000000000 --- a/src/components/servicepage/Architecture.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react' - -const Architecture = ({ blok }) => { - return ( -
    -
    -
    -
    -
    - -
    -
    - ) -} - -export default Architecture diff --git a/src/components/servicepage/Feature.js b/src/components/servicepage/Feature.js deleted file mode 100644 index c63d3a10c6..0000000000 --- a/src/components/servicepage/Feature.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react' - -const Feature = ({ blok }) => { - return ( -
    -
    -
    -
    - - {blok.feature_title} - -
    - {blok.feature.map((feature, index) => ( -
    = blok.feature?.length - 2 && 'col-span-1 md:col-span-2' - }`} - > - feature icon -

    - {feature.feature_title} -

    -
    - ))} -
    -
    - ) -} - -export default Feature diff --git a/src/components/servicepage/GetStarted.js b/src/components/servicepage/GetStarted.js deleted file mode 100644 index 2a82cc4a04..0000000000 --- a/src/components/servicepage/GetStarted.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const GetStarted = ({ blok }) => { - return ( -
    - - {blok.getstarted[0].title} - -
    - copy - - {blok.getstarted[0].codeblock} - -
    - - {render(blok.getstarted[0].content)} - -
    - ) -} - -export default GetStarted diff --git a/src/components/servicepage/Hero.js b/src/components/servicepage/Hero.js deleted file mode 100644 index 4a9702ae6e..0000000000 --- a/src/components/servicepage/Hero.js +++ /dev/null @@ -1,77 +0,0 @@ -import React from 'react' -import { render } from 'storyblok-rich-text-react-renderer' - -const Hero = ({ blok }) => { - return ( -
    -
    -
    - gradient -
    - - - - - {render(blok.Hero[0].hero_title)} - - - {render(blok.Hero[0].hero_subtitle)} - -
    - {blok.Hero[0].cta_buttons.map((cta) => ( - - - - ))} -
    -
    -
    -
    -