-
-
-
+
+
);
diff --git a/website/src/pages/index.module.css b/website/src/pages/index.module.css
index 7bd26776d29e..7d3f93a473e9 100644
--- a/website/src/pages/index.module.css
+++ b/website/src/pages/index.module.css
@@ -1,254 +1,179 @@
-/**
- * CSS files with the .module.css suffix will be treated as CSS modules
- * and scoped locally.
- */
+/************* PAGE LAYOUT *************/
-.buttons {
- display: flex;
- align-items: center;
- justify-content: center;
+#homepageContainer {
+ width: calc(100% - 32px) !important;
+ max-width: 1200px !important;
+ border-left: 1px solid var(--color-separator);
+ border-right: 1px solid var(--color-separator);
+ margin: 0 16px;
}
-.tagline {
- font-family: 'Lota Grotesque', sans-serif;
- font-size: 64px;
- font-weight: 600;
- line-height: 80px;
- letter-spacing: 0;
- text-align: left;
- transition: all var(--ifm-transition-fast);
-
-}
-
-.taglineGap {
- color: transparent !important;
-}
-
-.relative {
+.dashedSeparator {
position: relative;
-}
-
-.codeBlock {
- position: absolute;
- top: 40%;
- max-width: 400px;
width: 100%;
+ border-bottom: 1px dashed var(--color-separator);
}
-.heroBanner {
- padding-top: 100px;
- padding-bottom: 4rem;
-}
-
-.heroBanner h1:nth-child(1) {
- background: linear-gradient(225deg, #FFB200 0.1%, #FFB100 8.15%, #FFAF02 15.6%, #FEAB04 22.55%, #FDA606 29.08%, #FCA00A 35.28%, #FB980E 41.26%, #FA9013 47.1%, #F98618 52.89%, #F77B1E 58.73%, #F56F24 64.71%, #F3632B 70.91%, #F25532 77.44%, #EF473A 84.39%, #ED3842 91.84%, #EB284B 99.9%),
- #FCA000;
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-clip: text;
+.dashedSeparatorVertical {
+ position: relative;
+ border-right: 1px dashed var(--color-separator);
}
-.heroBanner h1:nth-child(2) {
+.dashedDecorativeCircle {
+ width: 120px;
+ height: 120px;
+ border: 1px dashed var(--color-separator);
+ border-radius: 50%;
position: absolute;
- top: 0;
- z-index: 1;
- width: calc(100% - 2rem);
-}
-
-.heroBanner h1::selection,
-.heroBanner h1 span::selection {
- color: rgb(36, 39, 54) !important;
- -webkit-text-fill-color: rgb(36, 39, 54);
- background: #B4D7FE !important;
- -webkit-background-clip: unset;
- background-clip: unset;
-}
-
-html[data-theme='dark'] .heroBanner ::selection {
- color: #fff !important;
- -webkit-text-fill-color: #fff;
- background: #385477 !important;
-}
-
-html .heroBanner h2 {
- font-style: normal;
- font-weight: 400;
- font-size: 24px;
- line-height: 40px;
- color: #41465d;
- margin-top: 8px;
- margin-bottom: 24px;
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
-}
-
-html[data-theme='dark'] .heroBanner h2 {
- color: #b3b8d2;
-}
-
-.heroBanner code {
- background: #272c3d;
- padding: 10px 20px;
-}
-
-.heroBanner button {
- opacity: 0.4;
- padding: 5px 8px;
- margin-top: -2px;
-}
-
-.heroBanner button span {
- width: 16px;
- height: 16px;
- padding: 0;
- margin: 0;
-}
+ transform: translate(-50%, -50%);
+}
+
+.fadedOutSeparator {
+ border: none;
+ height: 1px;
+ background-image:
+ linear-gradient(
+ 90deg,
+ transparent,
+ transparent 50%,
+ var(--color-background) 50%,
+ var(--color-background) 100%
+ ),
+ linear-gradient(
+ 90deg,
+ var(--color-separator) 0%,
+ transparent 50%,
+ var(--color-separator) 100%
+ );
+ background-size:
+ 6px 1px,
+ 100% 1px;
+}
+
+.trianglesSeparator {
+ width: 100%;
+ height: 32px;
+ background-position: center;
+ background-repeat: repeat-x;
+ background-image: url('../../static/img/triangles_light.svg');
-.heroBanner code span {
- color: #f2f3fb;
-}
+ html[data-theme='dark'] & {
+ background-image: url('../../static/img/triangles_dark.svg');
+ }
-.logoBlur {
- position: absolute;
- width: 680px;
- height: 680px;
- top: -120px;
- left: -100px;
- z-index: -1;
+ /* TABLET */
+ @media (min-width: 768px) {
+ background-position: unset;
+ background-repeat: repeat;
+ height: 52px;
+ }
}
-.heroButtons {
- display: flex;
- align-items: center;
- gap: 1rem;
- margin-bottom: 50px;
+/* most separators and decorations are not displayed on mobile */
+.dashedSeparatorVertical,
+.dashedDecorativeCircle,
+.fadedOutSeparator {
+ display: none;
}
-@media only screen and (min-device-width: 1101px) and (max-device-width: 1440px) {
- .tagline {
- font-size: 56px;
- line-height: 78px;
+/* TABLET */
+@media (min-width: 768px) {
+ .dashedSeparatorVertical,
+ .dashedDecorativeCircle,
+ .fadedOutSeparator {
+ display: block;
}
-}
-@media only screen and (min-device-width: 997px) and (max-device-width: 1100px) {
- .tagline {
- font-size: 48px;
- line-height: 64px;
+ #homepageContainer {
+ width: calc(100% - 80px) !important;
+ margin: 0 40px;
}
}
-@media only screen and (max-device-width: 996px) {
- .codeBlock {
- position: relative;
- top: 50px;
+/* DESKTOP */
+@media (min-width: 1024px) {
+ .dashedSeparatorVertical,
+ .dashedDecorativeCircle,
+ .fadedOutSeparator {
+ display: block;
}
- .logoBlur {
- display: none;
+ #homepageContainer {
+ width: calc(100% - 128px) !important;
+ margin: 0 64px;
}
}
-@media only screen and (max-device-width: 736px) {
- .heroBanner {
- padding-top: 20px;
- padding-bottom: 2rem;
- }
+/************* LANGUAGE GET STARTED SECTION *************/
- .tagline {
- font-size: 32px;
- line-height: 48px;
- }
-
- .tagline br {
- display: none;
+.languageGetStartedSection {
+ display: flex;
+ flex-direction: column;
+ gap: 32px;
+ margin: 0 0 24px 0;
+}
+
+/* TABLET */
+@media (min-width: 768px) {
+ .languageGetStartedSection {
+ flex-direction: row;
+ align-items: stretch;
+ justify-content: space-around;
+ gap: 0;
+ margin: 0;
}
+}
- .hideSmall {
- display: none;
- }
+/************* CODE EXAMPLE SECTION *************/
- .codeBlock {
- top: 0;
- }
+.languageSwitchContainer {
+ place-self: center;
+ margin: 32px 0 16px 0;
}
-@media only screen and (max-device-width: 450px) {
- .codeBlock code {
- font-size: 0.8em;
+/* TABLET */
+@media (min-width: 768px) {
+ .codeExampleSection {
+ position: relative;
}
- .heroButtons {
- flex-direction: column;
- align-items: flex-start !important;
+ .languageSwitchContainer {
+ margin: 0;
+ position: absolute;
+ top: calc(46px - 18px);
+ left: calc(50% - 90px);
}
- .heroBanner button {
- opacity: 0;
+ .decorativeRow {
+ position: relative;
+ height: 46px;
+ border-bottom: 1px dashed var(--color-separator);
+
+ &::before {
+ content: ' ';
+ position: absolute;
+ left: 60px;
+ height: 100%;
+ border-right: 1px dashed var(--color-separator);
+ }
+
+ &::after {
+ content: ' ';
+ position: absolute;
+ right: 60px;
+ height: 100%;
+ border-left: 1px dashed var(--color-separator);
+ }
}
-}
-@media only screen and (max-device-width: 350px) {
- .codeBlock code {
- font-size: 0.7em;
+ .codeBlockContainer {
+ margin: 0 60px;
+ border-left: 1px dashed var(--color-separator);
+ border-right: 1px dashed var(--color-separator);
+ }
+ .codeBlockContainer > div {
+ border-radius: 0;
+ margin: 0;
+ box-shadow: none;
}
-}
-
-.tagline span {
- color: var(--ifm-color-primary);
-}
-
-.getStarted {
- font-size: 18px;
- line-height: 28px;
- padding: 12px 24px;
- background: #ed3545;
- border-radius: 8px;
- color: white;
- font-weight: 600;
-}
-
-.getStarted:hover {
- color: white;
- background: #ad1934;
-}
-
-html[data-theme='dark'] .getStarted {
- border-color: #585e76;
-}
-
-.try {
- padding-top: 20px;
-}
-
-.try, .features {
- color: #41465d;
-}
-
-html[data-theme='dark'] .try,
-html[data-theme='dark'] .features {
- color: #b3b8d2;
-}
-
-.features > * {
- margin: 2em 0;
-}
-
-.bottomLogo path:nth-child(1) {
- fill: url(#gradient-1) !important;
- stroke: url(#gradient-1) !important;
-}
-
-.crawleeForPython {
- font-size: 44px;
- font-weight: 700;
- line-height: 60px;
- text-align: center;
- margin-bottom: 80px;
-}
-
-.crawleeForPython a {
- background: linear-gradient(90deg, #833ab4, #fd1d1d 50%, #fcb045);
- -webkit-background-clip: text;
- background-clip: text;
- -webkit-text-fill-color: #0000;
}
diff --git a/website/src/pages/js.js b/website/src/pages/js.js
new file mode 100644
index 000000000000..bb355bb8bbf9
--- /dev/null
+++ b/website/src/pages/js.js
@@ -0,0 +1,387 @@
+/* eslint-disable max-len */
+import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+import CodeBlock from '@theme/CodeBlock';
+import Layout from '@theme/Layout';
+import ThemedImage from '@theme/ThemedImage';
+import React from 'react';
+
+import commonStyles from './index.module.css';
+import styles from './js.module.css';
+import Button from '../components/Button';
+import HomepageCliExample from '../components/Homepage/HomepageCliExample';
+import HomepageCtaSection from '../components/Homepage/HomepageCtaSection';
+import HomepageHeroSection from '../components/Homepage/HomepageHeroSection';
+import LanguageInfoWidget from '../components/Homepage/LanguageInfoWidget';
+import RiverSection from '../components/Homepage/RiverSection';
+import ThreeCardsWithIcon from '../components/Homepage/ThreeCardsWithIcon';
+import RunnableCodeBlock from '../components/RunnableCodeBlock';
+
+function GetStartedSection() {
+ return (
+
+ );
+}
+
+const example = `import { PlaywrightCrawler } from 'crawlee';
+
+const crawler = new PlaywrightCrawler({
+ async requestHandler({ request, page, enqueueLinks, pushData, log }) {
+ const title = await page.title();
+ log.info(\`Title of \${request.loadedUrl} is '\${title}'\`);
+
+ await pushData({ title, url: request.loadedUrl });
+ await enqueueLinks();
+ },
+
+ // Uncomment this option to see the browser window.
+ // headless: false,
+});
+
+await crawler.run(['https://crawlee.dev']);
+`;
+
+function CodeExampleSection() {
+ return (
+
+
+
+
+ {{
+ code: example,
+ hash: 'eyJ1IjoiRWdQdHczb2VqNlRhRHQ1cW4iLCJ2IjoxfQ.eyJpbnB1dCI6IntcbiAgICBcImNvZGVcIjogXCJpbXBvcnQgeyBQbGF5d3JpZ2h0Q3Jhd2xlciB9IGZyb20gJ2NyYXdsZWUnO1xcblxcbi8vIENyYXdsZXIgc2V0dXAgZnJvbSB0aGUgcHJldmlvdXMgZXhhbXBsZS5cXG5jb25zdCBjcmF3bGVyID0gbmV3IFBsYXl3cmlnaHRDcmF3bGVyKHtcXG4gICAgLy8gVXNlIHRoZSByZXF1ZXN0SGFuZGxlciB0byBwcm9jZXNzIGVhY2ggb2YgdGhlIGNyYXdsZWQgcGFnZXMuXFxuICAgIGFzeW5jIHJlcXVlc3RIYW5kbGVyKHsgcmVxdWVzdCwgcGFnZSwgZW5xdWV1ZUxpbmtzLCBwdXNoRGF0YSwgbG9nIH0pIHtcXG4gICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgcGFnZS50aXRsZSgpO1xcbiAgICAgICAgbG9nLmluZm8oYFRpdGxlIG9mICR7cmVxdWVzdC5sb2FkZWRVcmx9IGlzICcke3RpdGxlfSdgKTtcXG5cXG4gICAgICAgIC8vIFNhdmUgcmVzdWx0cyBhcyBKU09OIHRvIC4vc3RvcmFnZS9kYXRhc2V0cy9kZWZhdWx0XFxuICAgICAgICBhd2FpdCBwdXNoRGF0YSh7IHRpdGxlLCB1cmw6IHJlcXVlc3QubG9hZGVkVXJsIH0pO1xcblxcbiAgICAgICAgLy8gRXh0cmFjdCBsaW5rcyBmcm9tIHRoZSBjdXJyZW50IHBhZ2VcXG4gICAgICAgIC8vIGFuZCBhZGQgdGhlbSB0byB0aGUgY3Jhd2xpbmcgcXVldWUuXFxuICAgICAgICBhd2FpdCBlbnF1ZXVlTGlua3MoKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gVW5jb21tZW50IHRoaXMgb3B0aW9uIHRvIHNlZSB0aGUgYnJvd3NlciB3aW5kb3cuXFxuICAgIC8vIGhlYWRsZXNzOiBmYWxzZSxcXG5cXG4gICAgLy8gQ29tbWVudCB0aGlzIG9wdGlvbiB0byBzY3JhcGUgdGhlIGZ1bGwgd2Vic2l0ZS5cXG4gICAgbWF4UmVxdWVzdHNQZXJDcmF3bDogMjAsXFxufSk7XFxuXFxuLy8gQWRkIGZpcnN0IFVSTCB0byB0aGUgcXVldWUgYW5kIHN0YXJ0IHRoZSBjcmF3bC5cXG5hd2FpdCBjcmF3bGVyLnJ1bihbJ2h0dHBzOi8vY3Jhd2xlZS5kZXYnXSk7XFxuXFxuLy8gRXhwb3J0IHRoZSBlbnRpcmV0eSBvZiB0aGUgZGF0YXNldCB0byBhIHNpbmdsZSBmaWxlIGluXFxuLy8gLi9zdG9yYWdlL2tleV92YWx1ZV9zdG9yZXMvcmVzdWx0LmNzdlxcbmNvbnN0IGRhdGFzZXQgPSBhd2FpdCBjcmF3bGVyLmdldERhdGFzZXQoKTtcXG5hd2FpdCBkYXRhc2V0LmV4cG9ydFRvQ1NWKCdyZXN1bHQnKTtcXG5cXG4vLyBPciB3b3JrIHdpdGggdGhlIGRhdGEgZGlyZWN0bHkuXFxuY29uc3QgZGF0YSA9IGF3YWl0IGNyYXdsZXIuZ2V0RGF0YSgpO1xcbmNvbnNvbGUudGFibGUoZGF0YS5pdGVtcyk7XFxuXCJcbn0iLCJvcHRpb25zIjp7ImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsIm1lbW9yeSI6NDA5Nn19.WKB14SjgTceKYyhONw2oXTkiOao6X4-UAS7cIuwqGvo',
+ }}
+
+
+
+
+
+ );
+}
+
+const benefitsCodeBlockCrawler = `{
+ useFingerprints: true,
+ fingerprintOptions: {
+ fingerprintGeneratorOptions: {
+ browsers: [BrowserName.chrome, BrowserName.firefox],
+ devices: [DeviceCategory.mobile],
+ locales: ['en-US'],
+ },
+ },
+},
+`;
+
+const benefitsCodeBlockHeadless = `const crawler = new AdaptivePlaywrightCrawler({
+ renderingTypeDetectionRatio: 0.1,
+ async requestHandler({ querySelector, enqueueLinks }) {
+ // The crawler detects if JS rendering is needed
+ // to extract this data. If not, it will use HTTP
+ // for follow-up requests to save time and costs.
+ const $prices = await querySelector('span.price')
+ await enqueueLinks();
+ },
+});
+`;
+
+function BenefitsSection() {
+ return (
+
+ What are the benefits?
+
+ {benefitsCodeBlockCrawler}
+
+ }
+
+ to="/docs/guides/avoid-blocking"
+ />
+
+
+ }
+ reversed
+ to="/docs/quick-start#choose-your-crawler"
+ />
+
+
+ {benefitsCodeBlockHeadless}
+
+ }
+ to="/api/core"
+ />
+
+ );
+}
+
+function OtherFeaturesSection() {
+ return (
+
+ What else is in Crawlee?
+
+
+
+
+
+
+ Auto scaling
+
+
+ Crawlers automatically adjust concurrency based
+ on available system resources. Avoid memory
+ errors in small containers and run faster in
+ large ones.
+
+
+
+
+
+
+
+ Smart proxy rotation
+
+
+ Crawlee uses a pool of sessions represented by
+ different proxies to maintain the proxy
+ performance and keep IPs healthy. Blocked
+ proxies are removed from the pool automatically.
+
+
+
+
+
+ ),
+ title: 'Queue and storage',
+ description:
+ 'Pause and resume crawlers thanks to a persistent queue of URLs and storage for structured data.',
+ },
+ {
+ icon: (
+
+ ),
+ title: 'Handy scraping utils',
+ description:
+ 'Sitemaps, infinite scroll, contact extraction, large asset blocking and many more utils included.',
+ },
+ {
+ icon: (
+
+ ),
+ title: 'Routing & middleware',
+ description:
+ 'Keep your code clean and organized while managing complex crawls with a built-in router that streamlines the process.',
+ },
+ ]}
+ />
+
+
+ );
+}
+
+function DeployToCloudSection() {
+ return (
+
+
+
Deploy to cloud
+
+ Crawlee, by Apify, works anywhere, but Apify offers the best
+ experience. Easily turn your project into an Actor—a
+ serverless micro-app with built-in infra, proxies, and
+ storage.
+
+
+ Deploy to Apify
+
+
+
+
+
+
+
+ Install Apify SDK and Apify CLI.
+
+
+
+
+
+ Add
Actor.init() to the begining and{' '}
+
Actor.exit() to the end of your code.
+
+
+
+
+
+ Use the Apify CLI to push the code to the Apify
+ platform.
+
+
+
+
+ );
+}
+
+function BuildFastScrapersSection() {
+ return (
+
+
+
+ Crawlee helps you build scrapers faster
+
+ ),
+ title: 'Zero setup required',
+ description:
+ 'Use on the templates, install Crawlee and go. No CLI required, no complex file structure, no boilerplate.',
+ actionLink: {
+ text: 'Get started',
+ href: '/docs/quick-start',
+ },
+ },
+ {
+ icon: (
+
+ ),
+ title: 'Reasonable defaults',
+ description:
+ 'Unblocking, proxy rotation and other core features are already turned on. But also very configurable.',
+ actionLink: {
+ text: 'Learn more',
+ href: '/docs/guides/configuration',
+ },
+ },
+ {
+ icon: (
+
+ ),
+ title: 'Helpful community',
+ description:
+ 'Join our Discord community of over Xk developers and get fast answers to your web scraping questions.',
+ actionLink: {
+ text: 'Join Discord',
+ href: 'https://discord.gg/jyEM2PRvMU',
+ },
+ },
+ ]}
+ />
+
+ );
+}
+
+export default function JavascriptHomepage() {
+ const { siteConfig } = useDocusaurusContext();
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/website/src/pages/js.module.css b/website/src/pages/js.module.css
new file mode 100644
index 000000000000..6ed199f45fdd
--- /dev/null
+++ b/website/src/pages/js.module.css
@@ -0,0 +1,295 @@
+/************** BENEFITS SECTION ***********/
+
+.benefitsSection {
+ margin-bottom: 60px;
+
+ h2 {
+ margin: 32px 0;
+ text-align: center;
+
+ /* TABLET */
+ @media (min-width: 768px) {
+ margin: 80px 0;
+ }
+ }
+}
+
+/************** OTHER FEATURES SECTION ***********/
+
+.otherFeaturesSection {
+ display: flex;
+ flex-direction: column;
+
+ h2 {
+ padding: 32px 12px;
+
+ text-align: center;
+ color: var(--color-text);
+ font-weight: 400;
+
+ line-height: 46px !important;
+ font-size: 36px !important;
+
+ @media (min-width: 768px) {
+ line-height: 56px !important;
+ font-size: 48px !important;
+ margin: 80px 0 64px;
+ padding: 32px 24px;
+ }
+ }
+ margin-bottom: 40px;
+
+ @media (min-width: 768px) {
+ margin-bottom: 80px;
+ }
+}
+
+.cardsWithContentContainer {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ background-position-x: 5px;
+ background-image: url('../../static/img/triangles_light.svg');
+
+ html[data-theme='dark'] & {
+ background-image: url('../../static/img/triangles_dark.svg');
+ }
+
+ @media (min-width: 768px) {
+ gap: 48px;
+ }
+}
+
+.cardsWithImageContainer {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ width: 100%;
+
+ @media (min-width: 768px) {
+ gap: 32px;
+ flex-direction: row;
+ }
+}
+
+.cardWithImage {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+ background: var(--color-card-background);
+ border-block: 1px solid var(--color-separator);
+
+ @media (min-width: 768px) {
+ border: 1px solid var(--color-separator);
+ }
+
+ &:first-child {
+ border-left: 0;
+ }
+ &:last-child {
+ border-right: 0;
+ }
+}
+
+.cardWithImage img {
+ width: 100%;
+ height: 250px;
+ object-fit: cover;
+}
+
+.cardWithImage:last-child img {
+ object-position: left 90%;
+}
+
+.cardWithImageText {
+ padding: 40px 24px;
+ border-top: 1px solid var(--color-separator);
+}
+
+.cardWithImageTitle {
+ margin: 0;
+
+ color: var(--color-text);
+ font-size: 26px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 34px;
+}
+
+.cardWithImageDescription {
+ margin-top: 12px;
+ color: var(--color-text-muted);
+ font-family: var(--ifm-font-family-base);
+ font-size: 16px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 24px;
+}
+
+/************** DEPLOY TO CLOUD SECTION ***********/
+
+.deployToCloudSection {
+ padding: 32px 16px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 48px;
+}
+
+.deployToCloudLeftSide {
+ display: flex;
+ flex-direction: column;
+ flex-basis: 50%;
+ gap: 24px;
+ text-align: center;
+ font-style: normal;
+ font-weight: 400;
+
+ h2 {
+ color: var(--color-text);
+ font-family: 'Lota Grotesque';
+ font-size: 38px;
+ line-height: 46px;
+ }
+}
+
+.deployToCloudDescription {
+ color: var(--color-text-muted);
+ font-size: 16px;
+ line-height: 24px;
+}
+
+.deployToCloudRightSide {
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+ flex-basis: 50%;
+ position: relative;
+}
+
+.deployToCloudStep {
+ display: flex;
+ flex-direction: row;
+ gap: 16px;
+ align-items: center;
+}
+
+.deployToCloudStepNumber {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 72px;
+ height: 72px;
+ padding: 16px;
+ border-radius: 8px;
+ border: 1px solid var(--color-separator);
+ background: var(--color-background);
+ color: var(--color-text-muted);
+ font-size: 16px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 24px;
+ z-index: 1;
+ div {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 40px;
+ width: 40px;
+ border-radius: 50%;
+ border: 1px dashed var(--color-separator);
+ }
+}
+
+.deployToCloudStepText {
+ display: inline-flex;
+ align-items: baseline;
+ flex-wrap: wrap;
+ gap: 4px;
+ color: var(--color-text);
+ font-size: 14px;
+ font-style: normal;
+ font-weight: 500;
+ line-height: 20px;
+
+ pre {
+ margin: 0;
+ padding: 0;
+ background-color: transparent;
+ }
+}
+
+#verticalStepLine {
+ position: absolute;
+ left: 36px;
+ height: 100%;
+ z-index: 0;
+}
+
+/* TABLET */
+@media (min-width: 768px) {
+ .deployToCloudSection {
+ padding: 96px 40px;
+ flex-direction: row;
+ }
+ .deployToCloudLeftSide {
+ text-align: left;
+
+ h2 {
+ color: var(--color-text);
+ font-family: 'Lota Grotesque';
+ font-size: 48px;
+ line-height: 58px;
+ }
+ }
+ .deployToCloudDescription {
+ font-size: 18px;
+ line-height: 28px;
+ }
+}
+
+/************** BUILD SCRAPERS FAST SECTION ***********/
+
+.buildFastScrapersSection {
+ position: relative;
+
+ padding: 40px 0 32px;
+
+ border-bottom: 1px solid var(--color-separator);
+
+ h2 {
+ margin: 0;
+ padding: 32px 0;
+ text-align: center;
+ color: var(--color-text);
+ font-weight: 400;
+ padding-inline: 12px;
+
+ line-height: 46px !important;
+ font-size: 36px !important;
+
+ @media (min-width: 768px) {
+ padding-inline: 24px;
+
+ line-height: 56px !important;
+ font-size: 48px !important;
+ padding: 80px 0 64px;
+ }
+ }
+
+ div[class*='dashedDecorativeCircle'] {
+ display: none;
+ }
+
+ @media (min-width: 1024px) {
+ padding: 80px 0 60px;
+ div[class*='dashedDecorativeCircle'] {
+ display: block;
+ }
+ }
+}
+
+.buildFastScrapersContent {
+ border-block: 1px solid var(--color-separator);
+}
diff --git a/website/static/img/animated-crawlee-logo-dark.svg b/website/static/img/animated-crawlee-logo-dark.svg
new file mode 100644
index 000000000000..f33b08b25563
--- /dev/null
+++ b/website/static/img/animated-crawlee-logo-dark.svg
@@ -0,0 +1,646 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/static/img/animated-crawlee-logo-light.svg b/website/static/img/animated-crawlee-logo-light.svg
new file mode 100644
index 000000000000..c4f256be9a10
--- /dev/null
+++ b/website/static/img/animated-crawlee-logo-light.svg
@@ -0,0 +1,590 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/static/img/arrow_right.svg b/website/static/img/arrow_right.svg
new file mode 100644
index 000000000000..37e30d2e2ac2
--- /dev/null
+++ b/website/static/img/arrow_right.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/website/static/img/auto-scaling-dark.webp b/website/static/img/auto-scaling-dark.webp
new file mode 100644
index 000000000000..942f7b1ff4f3
Binary files /dev/null and b/website/static/img/auto-scaling-dark.webp differ
diff --git a/website/static/img/auto-scaling-light.webp b/website/static/img/auto-scaling-light.webp
new file mode 100644
index 000000000000..a93153df0d22
Binary files /dev/null and b/website/static/img/auto-scaling-light.webp differ
diff --git a/website/static/img/community-dark-icon.svg b/website/static/img/community-dark-icon.svg
new file mode 100644
index 000000000000..d7ab5225c1b9
--- /dev/null
+++ b/website/static/img/community-dark-icon.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/website/static/img/community-light-icon.svg b/website/static/img/community-light-icon.svg
new file mode 100644
index 000000000000..5159a6100027
--- /dev/null
+++ b/website/static/img/community-light-icon.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/website/static/img/crawlee-logo-monocolor.svg b/website/static/img/crawlee-logo-monocolor.svg
new file mode 100644
index 000000000000..628e0bae2c96
--- /dev/null
+++ b/website/static/img/crawlee-logo-monocolor.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/static/img/defaults-dark-icon.svg b/website/static/img/defaults-dark-icon.svg
new file mode 100644
index 000000000000..8ba564aba490
--- /dev/null
+++ b/website/static/img/defaults-dark-icon.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/static/img/defaults-light-icon.svg b/website/static/img/defaults-light-icon.svg
new file mode 100644
index 000000000000..f10fcc7c22be
--- /dev/null
+++ b/website/static/img/defaults-light-icon.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/static/img/js_dark.png b/website/static/img/js_dark.png
new file mode 100644
index 000000000000..29cd7392a7b8
Binary files /dev/null and b/website/static/img/js_dark.png differ
diff --git a/website/static/img/js_light.png b/website/static/img/js_light.png
new file mode 100644
index 000000000000..97c34ff52a2c
Binary files /dev/null and b/website/static/img/js_light.png differ
diff --git a/website/static/img/queue-dark-icon.svg b/website/static/img/queue-dark-icon.svg
new file mode 100644
index 000000000000..4b06fd0c00fa
--- /dev/null
+++ b/website/static/img/queue-dark-icon.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/website/static/img/queue-light-icon.svg b/website/static/img/queue-light-icon.svg
new file mode 100644
index 000000000000..d31ffda4bd15
--- /dev/null
+++ b/website/static/img/queue-light-icon.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/website/static/img/routing-dark-icon.svg b/website/static/img/routing-dark-icon.svg
new file mode 100644
index 000000000000..26585e9b7fe9
--- /dev/null
+++ b/website/static/img/routing-dark-icon.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/website/static/img/routing-light-icon.svg b/website/static/img/routing-light-icon.svg
new file mode 100644
index 000000000000..0e11097d73ae
--- /dev/null
+++ b/website/static/img/routing-light-icon.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/website/static/img/scraping-utils-dark-icon.svg b/website/static/img/scraping-utils-dark-icon.svg
new file mode 100644
index 000000000000..76db00a841ec
--- /dev/null
+++ b/website/static/img/scraping-utils-dark-icon.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/website/static/img/scraping-utils-light-icon.svg b/website/static/img/scraping-utils-light-icon.svg
new file mode 100644
index 000000000000..10e9c73b0e33
--- /dev/null
+++ b/website/static/img/scraping-utils-light-icon.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/website/static/img/smart-proxy-dark.webp b/website/static/img/smart-proxy-dark.webp
new file mode 100644
index 000000000000..6eec515a00a1
Binary files /dev/null and b/website/static/img/smart-proxy-dark.webp differ
diff --git a/website/static/img/smart-proxy-light.webp b/website/static/img/smart-proxy-light.webp
new file mode 100644
index 000000000000..d38f23f3eed0
Binary files /dev/null and b/website/static/img/smart-proxy-light.webp differ
diff --git a/website/static/img/triangles_dark.svg b/website/static/img/triangles_dark.svg
new file mode 100644
index 000000000000..e1239828e4a5
--- /dev/null
+++ b/website/static/img/triangles_dark.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/website/static/img/triangles_light.svg b/website/static/img/triangles_light.svg
new file mode 100644
index 000000000000..bd26bc94823c
--- /dev/null
+++ b/website/static/img/triangles_light.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/website/static/img/zero-setup-dark-icon.svg b/website/static/img/zero-setup-dark-icon.svg
new file mode 100644
index 000000000000..9d70adcd8b95
--- /dev/null
+++ b/website/static/img/zero-setup-dark-icon.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/website/static/img/zero-setup-light-icon.svg b/website/static/img/zero-setup-light-icon.svg
new file mode 100644
index 000000000000..97b41580475d
--- /dev/null
+++ b/website/static/img/zero-setup-light-icon.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+