- {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 (
-
- )
-}
-
-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 */}
-
-
-
-
- {blok.section_testimonial_name}
-
-
- {blok.section_testimonial_job_desc}
-
-
-
- {/* 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)}
- >
-
-
- {isHovered && (
-
- )}
-
-
-
-
-
- {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 (
-
- )
-}
-
-const Tooltip2 = ({ message, isVisible }) => {
- if (!isVisible) return null
-
- return (
-
- )
-}
-
-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) => (
-
- ))}
-
-
-
- {/* email update */}
-
-
- {render(blok.updates_title)}
-
-
-
- {render(blok.updates_subtitle)}
-
- {/* 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 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 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)}
-
-
-
-
- {blok.services[1].section_feature.map((features, index) => (
-
-
- {/* 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) => (
-
- ))}
-
-
-
- )
-}
-
-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) => (
-
- ))}
-
-
- )
-}
-
-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) => (
- {render(list.list)}
- ))}
-
-
-
- )
-}
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) => (
-
- ))}
-
-
-
- )
-}
-
-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}
-
-
-
-
-
- )
-}
-
-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) => (
-
- ))}
-
-
- )
-}
-
-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) => (
-
- ))}
-
-
-
- )
-}
-
-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) => (
-
- ))}
-
-
- )
-}
-
-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.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) => (
-
- ))}
-
-
-
- )
-}
-
-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.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) => (
-
- ))}
-
-
-
- )
-}
-
-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.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) => (
-
- ))}
-
-
-
- )
-}
-
-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) => (
-
- ))}
-
-
- )
-}
-
-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.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}
-
-
-
-
- {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 (
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default Hero
diff --git a/src/components/servicepage/LearnPlatformatic.js b/src/components/servicepage/LearnPlatformatic.js
deleted file mode 100644
index 6ca3ff0b1b..0000000000
--- a/src/components/servicepage/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) => (
-
-
-
- {card.feature_title}
-
-
-
- ))}
-
-
- )
-}
-
-export default LearnPlatformatic
diff --git a/src/components/stackables/Feature.js b/src/components/stackables/Feature.js
deleted file mode 100644
index ea30b5d230..0000000000
--- a/src/components/stackables/Feature.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import React from 'react'
-import { render } from 'storyblok-rich-text-react-renderer'
-
-const Feature = ({ blok }) => {
- return (
-
-
-
-
- {blok.feature_title}
-
-
- {blok.feature_description}
-
-
- {blok.feature.map((feature, index) => (
-
- ))}
-
-
-
- )
-}
-
-export default Feature
diff --git a/src/components/stackables/Learnplatformatic.js b/src/components/stackables/Learnplatformatic.js
deleted file mode 100644
index dccdad5492..0000000000
--- a/src/components/stackables/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) => (
-
- ))}
-
-
- )
-}
-
-export default LearnPlatformatic
diff --git a/src/components/stackables/TemplateMarketPlace.js b/src/components/stackables/TemplateMarketPlace.js
deleted file mode 100644
index ec887c1ed9..0000000000
--- a/src/components/stackables/TemplateMarketPlace.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import React from 'react'
-import { render } from 'storyblok-rich-text-react-renderer'
-
-const TemplateMarketplace = ({ blok }) => {
- return (
-
-
-
- {blok.template_marketplace_title}
-
-
- {blok.template_marketplace_description}
-
-
- {blok.template_marketplace.map((feature, index) => (
-
- ))}
-
-
-
- )
-}
-
-export default TemplateMarketplace
diff --git a/src/components/watt/WattCompare.js b/src/components/watt/WattCompare.js
deleted file mode 100644
index 4b934c6d53..0000000000
--- a/src/components/watt/WattCompare.js
+++ /dev/null
@@ -1,188 +0,0 @@
-import React from 'react'
-import { render } from 'storyblok-rich-text-react-renderer'
-
-export const ComparisonCard = ({ title, items, isAfter }) => (
-
- {!isAfter && (
- <>
-
-
- >
- )}
- {isAfter &&
}
-
- {render(title)}
-
-
- {items.map((item, index) => (
-
-
-
-
-
- {render(item.item)}
-
-
- ))}
-
-
-)
-
-function WattCompare ({ blok }) {
- const beforeItems = blok.Hero_section[2].compare_box[0]
- const afterItems = blok.Hero_section[2].compare_box[1]
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {' '}
- Kubernetes-ready to run Node.js apps
-
-
-
- Get full visibility into your apps performance
-
-
-
-
-
- Seamlessly leverage the power of multithreading within your
- Kubernetes deployment.
-
-
-
-
-
-
-
-
-
-
-
-
Comprehensive NFR management
-
-
- Simplify critical app functions without the hassle.
-
-
-
-
-
- Abstract away time-consuming tasks like logging, tracing,
- observability, and resource allocation—allowing you to focus
- on building, not managing infrastructure.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Integrated OpenTelemetry tracing
-
-
-
- Get full visibility into your apps performance
-
-
-
-
-
- Track application behavior in real-time with built-in
- OpenTelemetry tracing. Automatically monitor distributed
- services and gain insights into dependencies and
- performance.
-
-
-
-
-
-
-
-
-
-
-
-
Unified logging with Pino
-
-
- Streamline your logging strategy effortlessly.
-
-
-
-
-
- Leverage Pino for fast, efficient, and structured logging
- across your Node.js applications, ensuring that you can
- monitor performance without complexity.
-
-
-
-
- {/* second */}
-
-
-
-
-
- )
-}
-
-export default WattCompare
diff --git a/src/components/watt/WattDiscover.js b/src/components/watt/WattDiscover.js
deleted file mode 100644
index c4806b9792..0000000000
--- a/src/components/watt/WattDiscover.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react'
-
-function WattDiscover () {
- return (
-
- {/* Main container */}
-
- )
-}
-
-export default WattDiscover
diff --git a/src/components/watt/WattExplore.js b/src/components/watt/WattExplore.js
deleted file mode 100644
index 7b81b01095..0000000000
--- a/src/components/watt/WattExplore.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from 'react'
-import { render } from 'storyblok-rich-text-react-renderer'
-
-function WattExplore ({ blok }) {
- return (
-
-
- {/* Main container */}
-
-
-
- {/* Header section */}
-
-
- {render(blok.Hero_section[1].focus_title)}
-
-
- {render(blok.Hero_section[1].focus_paragraph)}
-
-
-
-
- {render(blok.Hero_section[1].sub_focus_title)}
-
-
- {render(blok.Hero_section[1].sub_focus_para)}
-
-
- {render(blok.Hero_section[1].sub_focus_text)}
-
-
-
-
-
-
- )
-}
-
-export default WattExplore
diff --git a/src/components/watt/WattReady.js b/src/components/watt/WattReady.js
deleted file mode 100644
index acad7f13ca..0000000000
--- a/src/components/watt/WattReady.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import React from 'react'
-import { render } from 'storyblok-rich-text-react-renderer'
-
-function WattReady ({ blok }) {
- return (
-
- {/* Main container */}
-
- {/* Header section */}
-
- {/* Title and subtitle */}
-
-
- {render(blok.Hero_section[4].heading)}
-
-
- {render(blok.Hero_section[4].paragraph)}
-
-
- {/* CTA buttons */}
-
-
- {/* Infrastructure section */}
-
- {/* Infrastructure background */}
-
-
-
-
- {/* Infrastructure content */}
-
-
-
-
- )
-}
-
-export default WattReady
diff --git a/src/components/watt/WattSupported.js b/src/components/watt/WattSupported.js
deleted file mode 100644
index be17648e66..0000000000
--- a/src/components/watt/WattSupported.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import React from 'react'
-import { render } from 'storyblok-rich-text-react-renderer'
-
-function WattSupported ({ blok }) {
- return (
-
-
- {' '}
-
-
-
- {render(blok.Hero_section[3].framework_title)}
-
-
-
-
-
-
-
- Supporting:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {render(blok.Hero_section[3].paragraph)}
-
-
-
-
- )
-}
-
-export default WattSupported
diff --git a/src/css/custom.css b/src/css/custom.css
index 002132f3dd..25ea9c0383 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -625,3 +625,7 @@ article ul {
list-style-type: disc;
padding-left: var(--ifm-list-left-padding) !important;
}
+
+.navbar {
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+}
\ No newline at end of file
diff --git a/src/pages/AIwarp/index.js b/src/pages/AIwarp/index.js
deleted file mode 100644
index 50731d0d2d..0000000000
--- a/src/pages/AIwarp/index.js
+++ /dev/null
@@ -1,175 +0,0 @@
-/* global MutationObserver */
-
-import React, { useEffect } from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import Feature from '../../components/aiwarp/Feature'
-import LearnPlatformatic from '../../components/aiwarp/Learnplatformatic'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default function AIwarp () {
- let slug = 'aiwarp'
- const story = useStoryblok(slug, { version: 'draft' })
-
- useEffect(() => {
- const script = document.createElement('script')
- script.src = 'https://js.hsforms.net/forms/v2.js'
- document.body.appendChild(script)
-
- script.addEventListener('load', () => {
- if (window.hbspt) {
- window.hbspt.forms.create({
- portalId: '22380288',
- formId: '0f01c143-e40c-46cf-ad6b-2d8b33d9a1ea',
- target: '#aiwarp',
- region: 'na1',
- cssClass: 'light-mode',
- 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'
- // doc.body.style.backgroundColor = darkMode
- // ? '#00050b'
- // : '#FAFAFA'
-
- const labels = doc.querySelectorAll('label')
- labels.forEach((label) => {
- // label.style.color = darkMode ? 'white' : '#00050b'
- 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', () => {
- console.error('Failed to load the script.')
- })
- }, [story])
-
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Composer/index.js b/src/pages/Composer/index.js
deleted file mode 100644
index db67f5f2e9..0000000000
--- a/src/pages/Composer/index.js
+++ /dev/null
@@ -1,187 +0,0 @@
-/* global MutationObserver */
-
-import React, { useEffect } from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import Architecture from '../../components/composer/Architecture'
-import Feature from '../../components/composer/Feature'
-import GetStarted from '../../components/composer/GetStarted'
-import LearnPlatformatic from '../../components/composer/Learnplatformatic'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default function Composer () {
- let slug = 'composer'
- const story = useStoryblok(slug, { version: 'draft' })
-
- useEffect(() => {
- const script = document.createElement('script')
- script.src = 'https://js.hsforms.net/forms/v2.js'
- document.body.appendChild(script)
-
- script.addEventListener('load', () => {
- if (window.hbspt) {
- window.hbspt.forms.create({
- portalId: '22380288',
- formId: '63b16ade-bdfb-475d-b40e-f017f7278e1a',
- target: '#composer',
- region: 'na1',
- cssClass: 'light-mode',
- 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'
- // doc.body.style.backgroundColor = darkMode
- // ? '#00050b'
- // : '#FAFAFA'
-
- const labels = doc.querySelectorAll('label')
- labels.forEach((label) => {
- // label.style.color = darkMode ? 'white' : '#00050b'
- 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', () => {
- console.error('Failed to load the script.')
- })
- }, [story])
-
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Database/index.js b/src/pages/Database/index.js
deleted file mode 100644
index f29f50f63f..0000000000
--- a/src/pages/Database/index.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/* global MutationObserver */
-
-import React, { useEffect } from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import Architecture from '../../components/servicepage/Architecture'
-import Feature from '../../components/database/Feature'
-import GetStarted from '../../components/servicepage/GetStarted'
-import LearnPlatformatic from '../../components/database/Learnplatformatic'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default function Database () {
- let slug = 'database'
- const story = useStoryblok(slug, { version: 'draft' })
-
- useEffect(() => {
- const script = document.createElement('script')
- script.src = 'https://js.hsforms.net/forms/v2.js'
- document.body.appendChild(script)
-
- script.addEventListener('load', () => {
- if (window.hbspt) {
- window.hbspt.forms.create({
- portalId: '22380288',
- formId: '9d88e23d-89fb-4beb-9d4d-0a844ca6639d',
- target: '#database',
- region: 'na1',
- cssClass: 'light-mode',
- 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'
- // doc.body.style.backgroundColor = darkMode
- // ? '#00050b'
- // : '#FAFAFA'
-
- const labels = doc.querySelectorAll('label')
- labels.forEach((label) => {
- // label.style.color = darkMode ? 'white' : '#00050b'
- 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', () => {
- console.error('Failed to load the script.')
- })
- }, [story])
-
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
-
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Fastify/index.js b/src/pages/Fastify/index.js
deleted file mode 100644
index 8f88504d0d..0000000000
--- a/src/pages/Fastify/index.js
+++ /dev/null
@@ -1,124 +0,0 @@
-import React from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import Architecture from '../../components/fastify/Architecture'
-import GetStarted from '../../components/fastify/GetStarted'
-import HubSpotForm from '../../components/HubSpotForm'
-import Feature from '../../components/fastify/Feature'
-import PlatformaticWork from '../../components/fastify/PlatformaticWork'
-import UsingPlatformatic from '../../components/fastify/UsingPlatformatic'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default function Fastify () {
- let slug = 'fastify'
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- const story = useStoryblok(slug, { version: 'draft' })
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Meraki/index.js b/src/pages/Meraki/index.js
deleted file mode 100644
index 3de42e8edb..0000000000
--- a/src/pages/Meraki/index.js
+++ /dev/null
@@ -1,121 +0,0 @@
-import React from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import Feature from '../../components/meraki/Feature'
-import LearnPlatformatic from '../../components/aiwarp/Learnplatformatic'
-import HubSpotForm from '../../components/HubSpotForm'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default function AIwarp () {
- let slug = 'meraki'
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- const story = useStoryblok(slug, { version: 'draft' })
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Nodejs/index.js b/src/pages/Nodejs/index.js
deleted file mode 100644
index 616a0e3080..0000000000
--- a/src/pages/Nodejs/index.js
+++ /dev/null
@@ -1,99 +0,0 @@
-import React from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import HubSpotForm from '../../components/HubSpotForm'
-import WhyPlatformatic from '../../components/nodejs/WhyPlatformatic'
-import StructureNodejs from '../../components/nodejs/StructureNodejs'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default function Nodejs () {
- let slug = 'nodejs'
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- const story = useStoryblok(slug, { version: 'draft' })
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Runtime/index.js b/src/pages/Runtime/index.js
deleted file mode 100644
index c64359a4d4..0000000000
--- a/src/pages/Runtime/index.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/* global MutationObserver */
-
-import React, { useEffect } from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import Architecture from '../../components/composer/Architecture'
-import Feature from '../../components/runtime/Feature'
-import GetStarted from '../../components/servicepage/GetStarted'
-import LearnPlatformatic from '../../components/runtime/Learnplatformatic'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default function Runtime () {
- let slug = 'runtime'
- const story = useStoryblok(slug, { version: 'draft' })
-
- useEffect(() => {
- const script = document.createElement('script')
- script.src = 'https://js.hsforms.net/forms/v2.js'
- document.body.appendChild(script)
-
- script.addEventListener('load', () => {
- if (window.hbspt) {
- window.hbspt.forms.create({
- portalId: '22380288',
- formId: '592cfbb8-d2f3-4c43-a054-f3e13df9dabc',
- target: '#runtime',
- region: 'na1',
- cssClass: 'light-mode',
- 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'
- // doc.body.style.backgroundColor = darkMode
- // ? '#00050b'
- // : '#FAFAFA'
-
- const labels = doc.querySelectorAll('label')
- labels.forEach((label) => {
- // label.style.color = darkMode ? 'white' : '#00050b'
- 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', () => {
- console.error('Failed to load the script.')
- })
- }, [story])
-
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Service/index.js b/src/pages/Service/index.js
deleted file mode 100644
index 853397f8e9..0000000000
--- a/src/pages/Service/index.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/* global MutationObserver */
-
-import React, { useEffect } from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import Architecture from '../../components/servicepage/Architecture'
-import Hero from '../../components/servicepage/Hero'
-import Feature from '../../components/servicepage/Feature'
-import GetStarted from '../../components/servicepage/GetStarted'
-import LearnPlatformatic from '../../components/servicepage/LearnPlatformatic'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-export default function Service () {
- let slug = 'service'
- const story = useStoryblok(slug, { version: 'draft' })
-
- useEffect(() => {
- const script = document.createElement('script')
- script.src = 'https://js.hsforms.net/forms/v2.js'
- document.body.appendChild(script)
-
- script.addEventListener('load', () => {
- if (window.hbspt) {
- window.hbspt.forms.create({
- portalId: '22380288',
- formId: '554864dd-bc26-4f05-94c8-26267a188f9c',
- target: '#service',
- region: 'na1',
- cssClass: 'light-mode',
- 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'
- // doc.body.style.backgroundColor = darkMode
- // ? '#00050b'
- // : '#FAFAFA'
-
- const labels = doc.querySelectorAll('label')
- labels.forEach((label) => {
- // label.style.color = darkMode ? 'white' : '#00050b'
- 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', () => {
- console.error('Failed to load the script.')
- })
- }, [story])
-
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Stackables/index.js b/src/pages/Stackables/index.js
deleted file mode 100644
index 2d54a2fc74..0000000000
--- a/src/pages/Stackables/index.js
+++ /dev/null
@@ -1,193 +0,0 @@
-/* global MutationObserver */
-
-import React, { useEffect } from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import Architecture from '../../components/composer/Architecture'
-import Feature from '../../components/stackables/Feature'
-import TemplateMarketPlace from '../../components/stackables/TemplateMarketPlace'
-import LearnPlatformatic from '../../components/stackables/Learnplatformatic'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default function Stackables () {
- let slug = 'stackables'
- const story = useStoryblok(slug, { version: 'draft' })
-
- useEffect(() => {
- const script = document.createElement('script')
- script.src = 'https://js.hsforms.net/forms/v2.js'
- document.body.appendChild(script)
-
- script.addEventListener('load', () => {
- if (window.hbspt) {
- window.hbspt.forms.create({
- portalId: '22380288',
- formId: '2615228f-2c36-46b5-8e1d-7f4494a9b7b4',
- target: '#stackables',
- region: 'na1',
- cssClass: 'light-mode',
- 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'
- // doc.body.style.backgroundColor = darkMode
- // ? '#00050b'
- // : '#FAFAFA'
-
- const labels = doc.querySelectorAll('label')
- labels.forEach((label) => {
- // label.style.color = darkMode ? 'white' : '#00050b'
- 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', () => {
- console.error('Failed to load the script.')
- })
- }, [story])
-
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/Watt/index.js b/src/pages/Watt/index.js
deleted file mode 100644
index e8eb140bff..0000000000
--- a/src/pages/Watt/index.js
+++ /dev/null
@@ -1,112 +0,0 @@
-import React from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import WattExplore from '../../components/watt/WattExplore'
-import FaqSection from '../../components/FaqSection'
-import WattCompare from '../../components/watt/WattCompare'
-import WattSupported from '../../components/watt/WattSupported'
-import WattReady from '../../components/watt/WattReady'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
-
- apiOptions: {
- region: 'eu',
- cache: {
- clear: 'auto',
- type: 'none'
- },
- headers: {
- 'Cache-Control': 'no-store'
- }
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
- {render(blok.Hero_section[0].Hero_title)}
-
-
- {render(blok.Hero_section[0].Hero_subtitle)}
-
-
-
-
-
-
- )
-}
-
-export default function Watt () {
- let slug = 'watt'
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- const story = useStoryblok(slug, { version: 'draft' })
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
-
- {/*
-
-
-
- */}
-
- )
-}
diff --git a/src/pages/caching/index.js b/src/pages/caching/index.js
deleted file mode 100644
index ed90cd0455..0000000000
--- a/src/pages/caching/index.js
+++ /dev/null
@@ -1,144 +0,0 @@
-import React from 'react'
-import {
- useStoryblok,
- storyblokInit,
- apiPlugin
-} from '@storyblok/react'
-import Layout from '@theme/Layout'
-import Page from '../../components/sbComponents/Page'
-import { render } from 'storyblok-rich-text-react-renderer'
-import { ArchitectureImage } from '../../components/caching/architecture-image'
-import CacheFeatures from '../../components/caching/cachefeatures'
-import GetStarted from '../../components/caching/getstarted'
-import LearnMore from '../../components/caching/learnmore'
-import HubSpotForm from '../../components/HubSpotForm'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page
- },
-
- apiOptions: {
- region: 'eu',
- cache: {
- clear: 'auto',
- type: 'none'
- },
- headers: {
- 'Cache-Control': 'no-store'
- }
- }
-})
-
-function PageHeader ({ blok }) {
- return (
-
-
-
-
-
-
-
-
-
-
- {blok.cache_hero[0].tag_text}
-
-
-
-
- {blok.cache_hero[0].hero_title}
-
-
-
- {blok.cache_hero[0].hero_subtitle}
-
-
-
-
-
-
-
-
-
-
-
- {render(blok.cache_hero[0].hero_long_text)}
-
-
-
-
-
- )
-}
-
-export default function Caching () {
- let slug = 'caching'
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- const story = useStoryblok(slug, { version: 'draft' })
- if (!story || !story.content) {
- return
Loading...
- }
-
- return (
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/pages/index.js b/src/pages/index.js
index 61a0776eae..65840fb025 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -1,129 +1,49 @@
-import Layout from '@theme/Layout'
-
import React from 'react'
-import WhyPlatformatic from '../components/WhyPlatformatic'
+import Layout from '@theme/Layout'
+import Faq from '../components/Faq'
+import Seamless from '../components/Seamless'
+import HighPerformingApps from '../components/HighPerformingApps'
import Explore from '../components/Explore'
-import { useStoryblok, storyblokInit, apiPlugin } from '@storyblok/react'
-import Page from '../components/sbComponents/Page'
-import Teaser from '../components/sbComponents/Teaser'
-import Grid from '../components/sbComponents/Grid'
-import Feature from '../components/sbComponents/Feature'
-import SbHomepageFeatures from '../components/sbComponents/HomePageFeatures'
-import { render } from 'storyblok-rich-text-react-renderer'
-import ManagingNode from '../components/ManagingNode'
import PutNode from '../components/PutNode'
-import TimeToChange from '../components/TimeToChange'
-import BuildApi from '../components/BuildApi'
-import WorksForYou from '../components/WorksForYou'
-import SeamlessConsume from '../components/SeamlessConsume'
-import HighPerformingApps from '../components/HighPerformingApps'
-import FacingNodeChallenge from '../components/FacingNodeChallenge'
-import DeployInSeconds from '../components/DeployInSeconds'
-import FaqSection from '../components/FaqSection'
-
-storyblokInit({
- accessToken: process.env.STORYBLOK_ACCESS_TOKEN,
- use: [apiPlugin],
- components: {
- page: Page,
- teaser: Teaser,
- grid: Grid,
- feature: Feature,
- HomepageFeatures: SbHomepageFeatures,
- ManageNode: ManagingNode,
- PutNode,
- TimeToChange,
- BuildApi,
- WorksForYou,
- SeamlessConsume,
- HighPerformingApps,
- FacingNodeChallenge,
- DeployInSeconds,
- WhyPlatformatic,
- FaqSection,
- Explore
- },
- apiOptions: {
- region: 'eu'
- }
-})
-
-function HomepageHeader ({ blok }) {
- return (
-
-
-
-
-
-
- {render(blok.hero_section[0].hero_title)}
-
-
- {render(blok.hero_section[0].hero_subtitle)}
-
-
-
-
-
-
-
- )
-}
+import ManagingNode from '../components/ManagingNode'
export default function Home () {
- let slug = 'home'
- if (globalThis.window && globalThis.window.location.pathname !== '/') {
- slug = globalThis.window.location.pathname.replace('/', '')
- }
- const story = useStoryblok(slug, { version: 'draft' })
- if (!story || !story.content) {
- return
Loading...
- }
-
return (
-
-
-
-
+
+
+
+
+
+ The out-of-the-box,
+
open source primitive to build & run Node.js applications
+
-
-
-
+
Focus on building your Node.js applications, not building around them
+
+
+
+
+
+
+
+
+
+
-
)
diff --git a/src/pages/index.module.css b/src/pages/index.module.css
deleted file mode 100644
index 9177707456..0000000000
--- a/src/pages/index.module.css
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * CSS files with the .module.css suffix will be treated as CSS modules
- * and scoped locally.
- */
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-@layer base {
- :root {
- --background: 0 0% 100%;
- --foreground: 222.2 84% 4.9%;
-
- --card: 0 0% 100%;
- --card-foreground: 222.2 84% 4.9%;
-
- --popover: 0 0% 100%;
- --popover-foreground: 222.2 84% 4.9%;
-
- --primary: 222.2 47.4% 11.2%;
- --primary-foreground: 210 40% 98%;
-
- --secondary: 210 40% 96.1%;
- --secondary-foreground: 222.2 47.4% 11.2%;
-
- --muted: 210 40% 96.1%;
- --muted-foreground: 215.4 16.3% 46.9%;
-
- --accent: 210 40% 96.1%;
- --accent-foreground: 222.2 47.4% 11.2%;
-
- --destructive: 0 84.2% 60.2%;
- --destructive-foreground: 210 40% 98%;
-
- --border: 214.3 31.8% 91.4%;
- --input: 214.3 31.8% 91.4%;
- --ring: 222.2 84% 4.9%;
-
- --radius: 0.5rem;
-
- --rgba-secondary-color: 255, 255, 255;
- --secondary-color: #ffffff;
-
- --text-color-light: black;
- }
-
- /* Dark mode styles */
- @media (prefers-color-scheme: dark) {
- :root {
- --text-color-light: white;
- }
- }
-}
-
-.heroBanner {
- padding: 2rem 0;
- text-align: center;
- position: relative;
- overflow: hidden;
-}
-
-@media screen and (max-width: 996px) {
- .heroBanner {
- padding: 2rem;
- }
-}
-
-.buttons {
- display: flex;
- align-items: center;
- justify-content: center;
-}
diff --git a/src/pages/markdown-page.md b/src/pages/markdown-page.md
deleted file mode 100644
index 9756c5b668..0000000000
--- a/src/pages/markdown-page.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Markdown page example
----
-
-# Markdown page example
-
-You don't need React to write simple standalone pages.
diff --git a/static/img/astro.svg b/static/img/astro.svg
new file mode 100644
index 0000000000..cc99821c14
--- /dev/null
+++ b/static/img/astro.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/img/diagram-platformatic-features-1.png b/static/img/diagram-platformatic-features-1.png
new file mode 100644
index 0000000000..02916c7181
Binary files /dev/null and b/static/img/diagram-platformatic-features-1.png differ
diff --git a/static/img/express.svg b/static/img/express.svg
new file mode 100644
index 0000000000..7d0285ee71
--- /dev/null
+++ b/static/img/express.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/img/fastify-logo.svg b/static/img/fastify-logo.svg
new file mode 100644
index 0000000000..106f12d0e6
--- /dev/null
+++ b/static/img/fastify-logo.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/img/homepage-bg.svg b/static/img/homepage-bg.svg
new file mode 100644
index 0000000000..1a5d94f09d
--- /dev/null
+++ b/static/img/homepage-bg.svg
@@ -0,0 +1,452 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/koa.svg b/static/img/koa.svg
new file mode 100644
index 0000000000..9cadda738f
--- /dev/null
+++ b/static/img/koa.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/nextjs.svg b/static/img/nextjs.svg
new file mode 100644
index 0000000000..e5f171ea7d
--- /dev/null
+++ b/static/img/nextjs.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/img/node-icon-1.svg b/static/img/node-icon-1.svg
new file mode 100644
index 0000000000..e4d55f4616
--- /dev/null
+++ b/static/img/node-icon-1.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/node-icon-2.svg b/static/img/node-icon-2.svg
new file mode 100644
index 0000000000..7895ae2fa9
--- /dev/null
+++ b/static/img/node-icon-2.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/static/img/node-icon-3.svg b/static/img/node-icon-3.svg
new file mode 100644
index 0000000000..115837f769
--- /dev/null
+++ b/static/img/node-icon-3.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/static/img/node-pillars.svg b/static/img/node-pillars.svg
new file mode 100644
index 0000000000..adf68893c4
--- /dev/null
+++ b/static/img/node-pillars.svg
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/oss-icon-1.svg b/static/img/oss-icon-1.svg
new file mode 100644
index 0000000000..c2a2df8e05
--- /dev/null
+++ b/static/img/oss-icon-1.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/static/img/oss-icon-2.svg b/static/img/oss-icon-2.svg
new file mode 100644
index 0000000000..eeea0f86f5
--- /dev/null
+++ b/static/img/oss-icon-2.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/static/img/oss-icon-3.svg b/static/img/oss-icon-3.svg
new file mode 100644
index 0000000000..bebb3214e7
--- /dev/null
+++ b/static/img/oss-icon-3.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/static/img/putnode-bg.svg b/static/img/putnode-bg.svg
new file mode 100644
index 0000000000..c482e8e725
--- /dev/null
+++ b/static/img/putnode-bg.svg
@@ -0,0 +1,505 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/remix.svg b/static/img/remix.svg
new file mode 100644
index 0000000000..b587facbe8
--- /dev/null
+++ b/static/img/remix.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/img/seamless-bg.svg b/static/img/seamless-bg.svg
new file mode 100644
index 0000000000..d288818327
--- /dev/null
+++ b/static/img/seamless-bg.svg
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/watt-explore-bg.svg b/static/img/watt-explore-bg.svg
new file mode 100644
index 0000000000..ae20d1e621
--- /dev/null
+++ b/static/img/watt-explore-bg.svg
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/watt-icon-1.svg b/static/img/watt-icon-1.svg
new file mode 100644
index 0000000000..782ab1640b
--- /dev/null
+++ b/static/img/watt-icon-1.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/watt-icon-2.svg b/static/img/watt-icon-2.svg
new file mode 100644
index 0000000000..b8cf28400a
--- /dev/null
+++ b/static/img/watt-icon-2.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/static/img/watt-icon-3.svg b/static/img/watt-icon-3.svg
new file mode 100644
index 0000000000..ac4da7a27e
--- /dev/null
+++ b/static/img/watt-icon-3.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/watt-icon-4.svg b/static/img/watt-icon-4.svg
new file mode 100644
index 0000000000..6b1e018a04
--- /dev/null
+++ b/static/img/watt-icon-4.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+