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; +} +--- + + + + + 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} - Arrow Top Right + 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 +