diff --git a/apps/website/public/arrow-top-right.svg b/apps/website/public/arrow-top-right.svg
deleted file mode 100644
index fbc278c0..00000000
--- a/apps/website/public/arrow-top-right.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/website/src/components/BookACallButton.astro b/apps/website/src/components/BookACallButton.astro
new file mode 100644
index 00000000..a50ae014
--- /dev/null
+++ b/apps/website/src/components/BookACallButton.astro
@@ -0,0 +1,55 @@
+---
+import { Image } from "astro:assets";
+import crocoderLogo from "../assets/crocoder-logo.png";
+import BookACallModal from "./BookACallModal.astro";
+import ArrowTopRight from "./icons/ArrowTopRight.astro";
+
+export interface Props {
+ calLink: string;
+ eventType: string;
+}
+---
+
+
+
+
+
+ Book a call
+
+
+
+
diff --git a/apps/website/src/components/BookACallForm.astro b/apps/website/src/components/BookACallForm.astro
index daaf3283..6a1ae572 100644
--- a/apps/website/src/components/BookACallForm.astro
+++ b/apps/website/src/components/BookACallForm.astro
@@ -12,6 +12,7 @@ export interface Props {
eventType?: string;
className?: string;
contentClassName?: string;
+ deferLoad?: boolean;
}
const {
@@ -19,15 +20,19 @@ const {
eventType = "hello",
className,
contentClassName,
+ deferLoad,
} = Astro.props;
---
diff --git a/apps/website/src/components/BookACallModal.astro b/apps/website/src/components/BookACallModal.astro
new file mode 100644
index 00000000..e433c725
--- /dev/null
+++ b/apps/website/src/components/BookACallModal.astro
@@ -0,0 +1,157 @@
+---
+import CloseCrossX from "./icons/CloseCrossX.astro";
+import Modal from "./Modal.astro";
+import Pill from "./Pill.astro";
+
+export interface Props {
+ calLink: string;
+ eventType: string;
+ modalId: string;
+}
+
+const { calLink, eventType, modalId } = Astro.props;
+---
+
+
+
+
+
+
+
+
+ Book your call today
+
+ Let's Build Together
+
+
+ Tell us what you're working on — we'll match you with our engineers who
+ can ramp up quickly, integrate seamlessly, and bring real product
+ impact.
+
+
+
+
+
+
+
diff --git a/apps/website/src/components/CalcomEmbedInline.astro b/apps/website/src/components/CalcomEmbedInline.astro
index 0f7e4323..5c3134e3 100644
--- a/apps/website/src/components/CalcomEmbedInline.astro
+++ b/apps/website/src/components/CalcomEmbedInline.astro
@@ -3,8 +3,9 @@ export interface Props {
calLink: string;
eventType: string;
layout?: "month_view" | "week_view" | "column_view";
- elementOrSelector: string;
+ elementOrSelector: `#${string}`;
hideEventTypeDetails?: boolean;
+ deferLoad?: boolean;
}
const {
@@ -13,6 +14,7 @@ const {
layout = "month_view",
elementOrSelector,
hideEventTypeDetails = false,
+ deferLoad = false,
} = Astro.props;
---
@@ -25,8 +27,8 @@ const {
elementOrSelector,
hideEventTypeDetails,
eventType,
+ deferLoad,
}}
- async
>
const loadCalEmbed = () => {
(function (C, A, L) {
@@ -111,10 +113,36 @@ const {
},
});
};
+ if (deferLoad) {
+ const calcomWrapper = document.getElementById(
+ elementOrSelector.substring(1)
+ );
- if ("requestIdleCallback" in window) {
+ const handleLoadEmbed = (entries, observer) => {
+ entries.forEach((entry) => {
+ if (entry.isIntersecting) {
+ loadCalEmbed();
+ observer.unobserve(calcomWrapper);
+ }
+ });
+ };
+
+ const opts = {
+ rootMargin: "1000px 0px",
+ };
+
+ const observer = new IntersectionObserver(handleLoadEmbed, opts);
+
+ observer.observe(calcomWrapper);
+ }
+
+ const isRicSupported = "requestIdleCallback" in window;
+
+ if (!deferLoad && isRicSupported) {
requestIdleCallback(loadCalEmbed);
- } else {
+ }
+
+ if (!deferLoad && !isRicSupported) {
window.addEventListener("load", loadCalEmbed);
}
diff --git a/apps/website/src/components/ExternalLink.astro b/apps/website/src/components/ExternalLink.astro
index 334e9311..5d181f95 100644
--- a/apps/website/src/components/ExternalLink.astro
+++ b/apps/website/src/components/ExternalLink.astro
@@ -1,5 +1,7 @@
---
import classnames from "classnames";
+import ArrowTopRight from "./icons/ArrowTopRight.astro";
+
interface Props {
href: string;
text: string;
@@ -16,10 +18,5 @@ const { href, text, classNames } = Astro.props;
>
{text}
-
+
diff --git a/apps/website/src/components/Pill.astro b/apps/website/src/components/Pill.astro
index 3a1f41c5..0fd1d959 100644
--- a/apps/website/src/components/Pill.astro
+++ b/apps/website/src/components/Pill.astro
@@ -1,13 +1,17 @@
---
import classNames from "classnames";
+type Props = {
+ className?: string;
+};
+
const { className } = Astro.props;
---
diff --git a/apps/website/src/components/ServiceCard.astro b/apps/website/src/components/ServiceCard.astro
index 2fde4c18..91aca5c9 100644
--- a/apps/website/src/components/ServiceCard.astro
+++ b/apps/website/src/components/ServiceCard.astro
@@ -4,6 +4,7 @@ import classnames from "classnames";
import BlogLink from "./BlogLink.astro";
import CTA from "./CTA.astro";
import IconSubtitle from "./IconSubtitle.astro";
+import ArrowTopRight from "./icons/ArrowTopRight.astro";
interface Props {
idx: number;
@@ -105,11 +106,9 @@ const image = await src();
) : (
{link.text}
-
)
diff --git a/apps/website/src/components/contact/Hero.astro b/apps/website/src/components/contact/Hero.astro
index fcee15af..98b98d45 100644
--- a/apps/website/src/components/contact/Hero.astro
+++ b/apps/website/src/components/contact/Hero.astro
@@ -11,7 +11,7 @@ import RightArrow from "../icons/RightArrow.astro";
diff --git a/apps/website/src/components/icons/ArrowTopRight.astro b/apps/website/src/components/icons/ArrowTopRight.astro
new file mode 100644
index 00000000..db3941fe
--- /dev/null
+++ b/apps/website/src/components/icons/ArrowTopRight.astro
@@ -0,0 +1,24 @@
+---
+import type { HTMLAttributes } from "astro/types";
+import classnames from "classnames";
+
+type Props = HTMLAttributes<"svg"> & { classNames?: string };
+
+const { stroke, classNames } = Astro.props;
+---
+
+
+
+
diff --git a/apps/website/src/components/icons/CloseCrossX.astro b/apps/website/src/components/icons/CloseCrossX.astro
new file mode 100644
index 00000000..e71292cd
--- /dev/null
+++ b/apps/website/src/components/icons/CloseCrossX.astro
@@ -0,0 +1,14 @@
+
+
+
diff --git a/apps/website/src/layouts/base.astro b/apps/website/src/layouts/base.astro
index 6c6e1c80..78f0978d 100644
--- a/apps/website/src/layouts/base.astro
+++ b/apps/website/src/layouts/base.astro
@@ -66,9 +66,8 @@ const { className, ogImage } = Astro.props;
items-center
justify-center
min-h-screen
- bg-gray-100
- has-[dialog[open]]:overflow-hidden`,
- className,
+ bg-gray-100`,
+ className
)}
>
diff --git a/apps/website/src/pages/contact.astro b/apps/website/src/pages/contact.astro
index 5236c249..356e5097 100644
--- a/apps/website/src/pages/contact.astro
+++ b/apps/website/src/pages/contact.astro
@@ -12,7 +12,7 @@ import "../styles/main.css";
-
+
Everything Kicks Off
with One Call
diff --git a/apps/website/src/pages/for-ctos.astro b/apps/website/src/pages/for-ctos.astro
index b7d9fe13..02587f55 100644
--- a/apps/website/src/pages/for-ctos.astro
+++ b/apps/website/src/pages/for-ctos.astro
@@ -23,6 +23,7 @@ const { ogImage = "https://www.crocoder.dev/cto-metadata-img.png" } =
Everything Kicks Off
diff --git a/apps/website/src/pages/index.astro b/apps/website/src/pages/index.astro
index ad7f28f3..77ec155c 100644
--- a/apps/website/src/pages/index.astro
+++ b/apps/website/src/pages/index.astro
@@ -1,4 +1,5 @@
---
+import BookACallButton from "../components/BookACallButton.astro";
import BookACallForm from "../components/BookACallForm.astro";
import Clients from "../components/Clients.astro";
import Footer from "../components/footer.astro";
@@ -14,17 +15,18 @@ const { ogImage = "https://www.crocoder.dev/homepage-metadata-img.png" } =
Astro.props;
---
-
+
-
+
Build Your Business With Us
+
diff --git a/apps/website/src/pages/staff-augmentation.astro b/apps/website/src/pages/staff-augmentation.astro
index 78ea6927..0d8290b1 100644
--- a/apps/website/src/pages/staff-augmentation.astro
+++ b/apps/website/src/pages/staff-augmentation.astro
@@ -37,6 +37,7 @@ const { ogImage = "https://www.crocoder.dev/homepage-metadata-img.png" } =
contentClassName="items-center bg-secondary rounded-4xl md:rounded-[96px] pb-[122px] px-4"
calLink="team/crocoder/staff-augmentation-intro"
eventType="staff-augmentation-intro"
+ deferLoad
>
Let's Build Together
diff --git a/apps/website/src/pages/vibe-code-mvp.astro b/apps/website/src/pages/vibe-code-mvp.astro
index 501bc4b3..bd905cf2 100644
--- a/apps/website/src/pages/vibe-code-mvp.astro
+++ b/apps/website/src/pages/vibe-code-mvp.astro
@@ -28,7 +28,7 @@ const { ogImage = "https://www.crocoder.dev/homepage-metadata-img.png" } =
-
+
Build Your Business With Us
diff --git a/apps/website/tailwind.config.js b/apps/website/tailwind.config.js
index 9183a49e..24e93850 100644
--- a/apps/website/tailwind.config.js
+++ b/apps/website/tailwind.config.js
@@ -53,6 +53,7 @@ module.exports = {
"crocoder-green": theme.colors.default.theme_color.crocoder_green,
"crocoder-orange": theme.colors.default.theme_color.crocoder_orange,
"light-gray": theme.colors.default.text_color.gray,
+ periwinkle: theme.colors.default.theme_color.periwinkle,
},
fontSize: {
base: font_base + "px",
diff --git a/apps/website/theme.json b/apps/website/theme.json
index a494304d..8ca02b69 100644
--- a/apps/website/theme.json
+++ b/apps/website/theme.json
@@ -11,7 +11,8 @@
"crocoder_yellow": "#FEC343",
"contrast": "#1E1A1A",
"crocoder_green": "#607A1A",
- "crocoder_orange": "#FEB534"
+ "crocoder_orange": "#FEB534",
+ "periwinkle": "#4E5BC8"
},
"text_color": {
"default": "#747577",