From 0789f04a9f78a6bd2edb0e708ee34de166bf8667 Mon Sep 17 00:00:00 2001 From: Casi Newell <19928431+CassandraNewell@users.noreply.github.com> Date: Fri, 26 Jul 2024 19:55:02 +0200 Subject: [PATCH] add custom development page --- .../custom-development/ApplicationSteps.tsx | 65 ++++++++++++++++++ .../CustomDevelopmentCallToAction.tsx | 24 +++++++ .../CustomDevelopmentHero.tsx | 20 ++++++ .../custom-development/EmbraceLaunchWare.tsx | 42 +++++++++++ .../HassleFreeSolutions.tsx | 24 +++++++ .../custom-development/HeroBullets.tsx | 44 ++++++++++++ .../custom-development/NoMoreJuggling.tsx | 22 ++++++ .../custom-development/PartnerWithExperts.tsx | 24 +++++++ .../custom-development/Testimonials.tsx | 53 ++++++++++++++ .../custom-development/WeAreWithYou.tsx | 24 +++++++ .../css/application-steps.css | 21 ++++++ .../css/custom-development-call-to-action.css | 23 +++++++ .../css/custom-development-hero.css | 19 +++++ .../css/embrace-launchware.css | 20 ++++++ .../css/hassle-free-solutions.css | 20 ++++++ .../css/highlight-bullets.css | 23 +++++++ .../css/no-more-juggling.css | 20 ++++++ .../css/partner-with-experts.css | 20 ++++++ .../custom-development/css/testimonials.css | 61 ++++++++++++++++ .../css/we-are-with-you.css | 23 +++++++ .../src/components/general/TextImageBlock.tsx | 36 ++++++++++ .../components/general/ThreeCardSection.tsx | 52 +++++++++----- .../general/css/text-image-block.css | 20 ++++++ .../general/css/three-card-section.css | 8 +++ .../gatsby/src/components/icons/chat-icon.png | Bin 0 -> 3423 bytes .../src/components/icons/clipboard-icon.png | Bin 0 -> 2566 bytes .../gatsby/src/components/icons/red-check.png | Bin 0 -> 272 bytes .../components/icons/rocket-blastoff-icon.png | Bin 0 -> 2627 bytes .../components/icons/white-check-on-black.png | Bin 0 -> 500 bytes .../src/pages/services/custom-development.tsx | 48 +++++++++++++ apps/gatsby/tailwind.config.js | 4 ++ 31 files changed, 744 insertions(+), 16 deletions(-) create mode 100644 apps/gatsby/src/components/custom-development/ApplicationSteps.tsx create mode 100644 apps/gatsby/src/components/custom-development/CustomDevelopmentCallToAction.tsx create mode 100644 apps/gatsby/src/components/custom-development/CustomDevelopmentHero.tsx create mode 100644 apps/gatsby/src/components/custom-development/EmbraceLaunchWare.tsx create mode 100644 apps/gatsby/src/components/custom-development/HassleFreeSolutions.tsx create mode 100644 apps/gatsby/src/components/custom-development/HeroBullets.tsx create mode 100644 apps/gatsby/src/components/custom-development/NoMoreJuggling.tsx create mode 100644 apps/gatsby/src/components/custom-development/PartnerWithExperts.tsx create mode 100644 apps/gatsby/src/components/custom-development/Testimonials.tsx create mode 100644 apps/gatsby/src/components/custom-development/WeAreWithYou.tsx create mode 100644 apps/gatsby/src/components/custom-development/css/application-steps.css create mode 100644 apps/gatsby/src/components/custom-development/css/custom-development-call-to-action.css create mode 100644 apps/gatsby/src/components/custom-development/css/custom-development-hero.css create mode 100644 apps/gatsby/src/components/custom-development/css/embrace-launchware.css create mode 100644 apps/gatsby/src/components/custom-development/css/hassle-free-solutions.css create mode 100644 apps/gatsby/src/components/custom-development/css/highlight-bullets.css create mode 100644 apps/gatsby/src/components/custom-development/css/no-more-juggling.css create mode 100644 apps/gatsby/src/components/custom-development/css/partner-with-experts.css create mode 100644 apps/gatsby/src/components/custom-development/css/testimonials.css create mode 100644 apps/gatsby/src/components/custom-development/css/we-are-with-you.css create mode 100644 apps/gatsby/src/components/general/TextImageBlock.tsx create mode 100644 apps/gatsby/src/components/general/css/text-image-block.css create mode 100644 apps/gatsby/src/components/icons/chat-icon.png create mode 100644 apps/gatsby/src/components/icons/clipboard-icon.png create mode 100644 apps/gatsby/src/components/icons/red-check.png create mode 100644 apps/gatsby/src/components/icons/rocket-blastoff-icon.png create mode 100644 apps/gatsby/src/components/icons/white-check-on-black.png create mode 100644 apps/gatsby/src/pages/services/custom-development.tsx diff --git a/apps/gatsby/src/components/custom-development/ApplicationSteps.tsx b/apps/gatsby/src/components/custom-development/ApplicationSteps.tsx new file mode 100644 index 0000000..f47d83f --- /dev/null +++ b/apps/gatsby/src/components/custom-development/ApplicationSteps.tsx @@ -0,0 +1,65 @@ +import React from "react"; +import { ThreeCardSection } from "../general/ThreeCardSection.tsx"; +import { StaticImage } from "gatsby-plugin-image"; + +import "./css/application-steps.css"; +import { useBookCallModal } from "../book-call/hooks/useBookCallModal.tsx"; + +export const ApplicationSteps = () => { + const { modal, clickHandler } = useBookCallModal(); + + return ( +
+ {modal} +
+ + ), + heading: "Step 1: Let’s chat", + paragraphs: ["Schedule a call with our founder to discuss your vision and goals."], + }, + { + icon: ( + + ), + heading: "Step 2: Plan your success", + paragraphs: [ + "We’ll put together a tailored proposal, detailing the scope, timeline, and cost of your project.", + ], + }, + { + icon: ( + + ), + heading: "Step 3: Sit back and watch your vision come alive", + paragraphs: [ + "Our dedicated team will take the reins, keeping you in the loop at every stage of the development process.", + ], + }, + ], + }} + /> + +
+
+ ); +}; diff --git a/apps/gatsby/src/components/custom-development/CustomDevelopmentCallToAction.tsx b/apps/gatsby/src/components/custom-development/CustomDevelopmentCallToAction.tsx new file mode 100644 index 0000000..8d48821 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/CustomDevelopmentCallToAction.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { useBookCallModal } from "../book-call/hooks/useBookCallModal.tsx"; + +import "./css/custom-development-call-to-action.css"; + +export const CustomDevelopmentCallToAction = () => { + const { modal, clickHandler } = useBookCallModal(); + + return ( +
+ {modal} +
+

Ready to get started?

+

+ Ready to get started? Let’s schedule a call and begin your journey to software success. +

+ + +
+
+ ); +}; diff --git a/apps/gatsby/src/components/custom-development/CustomDevelopmentHero.tsx b/apps/gatsby/src/components/custom-development/CustomDevelopmentHero.tsx new file mode 100644 index 0000000..b0aa0a4 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/CustomDevelopmentHero.tsx @@ -0,0 +1,20 @@ +// STATUS: complete +import React from "react"; + +import "./css/custom-development-hero.css"; + +export const CustomDevelopmentHero = () => ( +
+
+

+ Say Hello to Stress-Free +
+ Software Development +

+

+ Unleash the potential of your ideas with LaunchWare, your go-to team for custom software + development. +

+
+
+); diff --git a/apps/gatsby/src/components/custom-development/EmbraceLaunchWare.tsx b/apps/gatsby/src/components/custom-development/EmbraceLaunchWare.tsx new file mode 100644 index 0000000..639b6b2 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/EmbraceLaunchWare.tsx @@ -0,0 +1,42 @@ +import React from "react"; +import { StaticImage } from "gatsby-plugin-image"; + +import "./css/embrace-launchware.css"; + +export const EmbraceLaunchWare = () => ( +
+
+

Embrace the LaunchWare Advantage

+

+ Ready to transform your software idea into a successful application? Here’s what you can + look forward to when you partner with LaunchWare: +

+ +
+
+); diff --git a/apps/gatsby/src/components/custom-development/HassleFreeSolutions.tsx b/apps/gatsby/src/components/custom-development/HassleFreeSolutions.tsx new file mode 100644 index 0000000..467248b --- /dev/null +++ b/apps/gatsby/src/components/custom-development/HassleFreeSolutions.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { TextImageBlock } from "../general/TextImageBlock.tsx"; +import { StaticImage } from "gatsby-plugin-image"; + +import "./css/hassle-free-solutions.css"; + +export const HassleFreeSolutions = () => ( +
+ + } + headingText="Welcome to a world of hassle-free software solutions" + text="Picture this: your innovative idea transformed into a fully-functional, user-friendly application that not only meets your needs but also delights your end users. Sounds like a dream? With LaunchWare, it’s your new reality." + webViewImagePosition="right" + /> +
+); diff --git a/apps/gatsby/src/components/custom-development/HeroBullets.tsx b/apps/gatsby/src/components/custom-development/HeroBullets.tsx new file mode 100644 index 0000000..a2f35a6 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/HeroBullets.tsx @@ -0,0 +1,44 @@ +import { faCheckCircle } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import React from "react"; +import { ThreeCardSection } from "../general/ThreeCardSection.tsx"; + +import "./css/highlight-bullets.css"; + +export const HeroBullets = () => { + const sectionContents = { + cards: [ + { + heading: "Turn your ideas into applications", + icon: ( + + ), + }, + { + heading: "Tailored software solutions", + icon: ( + + ), + }, + { + heading: "Dedicated team of experts", + icon: ( + + ), + }, + ], + }; + + return ( +
+
+ +
+
+ ); +}; diff --git a/apps/gatsby/src/components/custom-development/NoMoreJuggling.tsx b/apps/gatsby/src/components/custom-development/NoMoreJuggling.tsx new file mode 100644 index 0000000..24aae7b --- /dev/null +++ b/apps/gatsby/src/components/custom-development/NoMoreJuggling.tsx @@ -0,0 +1,22 @@ +import { StaticImage } from "gatsby-plugin-image"; +import React from "react"; +import { TextImageBlock } from "../general/TextImageBlock.tsx"; + +import "./css/no-more-juggling.css"; + +export const NoMoreJuggling = () => ( + + } + headingText="No More Juggling Between Recruitment and Development" + text="Ever felt like you’re juggling too many balls trying to transform your software ideas into reality? You’re not alone. Many tech leaders are grappling with finding the right team, juggling project timelines, and staying true to their vision. It can feel like an uphill battle, and we get it." + webViewImagePosition="left" + /> +); diff --git a/apps/gatsby/src/components/custom-development/PartnerWithExperts.tsx b/apps/gatsby/src/components/custom-development/PartnerWithExperts.tsx new file mode 100644 index 0000000..d884628 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/PartnerWithExperts.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { TextImageBlock } from "../general/TextImageBlock.tsx"; +import { StaticImage } from "gatsby-plugin-image"; + +import "./css/partner-with-experts.css"; + +export const PartnerWithExperts = () => ( +
+ + } + headingText="Discover the Ease of Partnering with Experts" + text="With LaunchWare, you gain more than a service provider; you gain a partner who speaks your language. We handle the intricacies of the development process, transforming your ideas into functional, user-centric software." + webViewImagePosition="left" + /> +
+); diff --git a/apps/gatsby/src/components/custom-development/Testimonials.tsx b/apps/gatsby/src/components/custom-development/Testimonials.tsx new file mode 100644 index 0000000..c94d599 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/Testimonials.tsx @@ -0,0 +1,53 @@ +import React from "react"; +import { UserCircleIcon } from "@heroicons/react/24/solid"; +import { Tagline } from "../general/Tagline"; +import { StaticImage } from "gatsby-plugin-image"; + +import "./css/testimonials.css"; + +export const Testimonials = () => ( +
+
+ +
+
+ +

Don't just take our word for it

+
+
    +
  • +

    + “They showed up and did exactly what I thought they were going to do and + I’m thrilled.” +

    +
    + +
    +

    Catherine Headen

    +

    Director, Product & Design

    +
    +
    +
  • +
  • +

    + “A strong sense of vision about the process [without being] religious about any + specific aspect. They have a strong point of view while remaining open to change their + minds.” ” +

    +
    + +
    +

    David Evans

    +

    VP of Product

    +
    +
    +
  • +
+
+
+
+); diff --git a/apps/gatsby/src/components/custom-development/WeAreWithYou.tsx b/apps/gatsby/src/components/custom-development/WeAreWithYou.tsx new file mode 100644 index 0000000..57f9736 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/WeAreWithYou.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { TextImageBlock } from "../general/TextImageBlock.tsx"; +import { StaticImage } from "gatsby-plugin-image"; + +import "./css/we-are-with-you.css"; + +export const WeAreWithYou = () => ( +
+ + } + headingText="We’re With You, Every Step of the Way" + text="At LaunchWare, we’re not just about delivering top-notch code. We’re here to guide you through every step of the process, ensuring that your journey from concept to code is as smooth as possible. We pride ourselves on clear communication, actionable plans, and a steadfast commitment to making your software vision a reality." + webViewImagePosition="right" + /> +
+); diff --git a/apps/gatsby/src/components/custom-development/css/application-steps.css b/apps/gatsby/src/components/custom-development/css/application-steps.css new file mode 100644 index 0000000..d83a97c --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/application-steps.css @@ -0,0 +1,21 @@ +.application-steps { + @apply parent-section; + @apply bg-launch-black; + + & .three-card-section__heading-container { + @apply max-w-none flex-grow; + } + + & .three-card-section__heading { + @apply text-white text-left w-full; + } +} + +.application-steps__contents { + @apply contents-container; + @apply flex-col space-y-6; +} + +.application-steps__image { + @apply h-16 w-14 items-center; +} diff --git a/apps/gatsby/src/components/custom-development/css/custom-development-call-to-action.css b/apps/gatsby/src/components/custom-development/css/custom-development-call-to-action.css new file mode 100644 index 0000000..1cb133a --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/custom-development-call-to-action.css @@ -0,0 +1,23 @@ +@import "../../../css/index.css"; + +.custom-development-call-to-action { + @apply parent-section; + @apply bg-launch-neutral-20; +} + +.custom-development-call-to-action__contents { + @apply contents-container; + @apply flex-col space-y-6; +} + +.custom-development-call-to-action__heading { + @apply text-5xl text-center max-w-xl lg:max-w-3xl; +} + +.custom-development-call-to-action__uppercase { + @apply uppercase; +} + +.custom-development-call-to-action__text { + @apply text-center text-launch-black-80; +} diff --git a/apps/gatsby/src/components/custom-development/css/custom-development-hero.css b/apps/gatsby/src/components/custom-development/css/custom-development-hero.css new file mode 100644 index 0000000..92352e2 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/custom-development-hero.css @@ -0,0 +1,19 @@ +@import "../../../css/index.css"; + +.custom-development-hero { + @apply parent-section; + @apply bg-launch-neutral-20; +} + +.custom-development-hero__contents { + @apply contents-container; + @apply flex-col space-y-6; +} + +.custom-development-hero__heading { + @apply text-5xl text-left md:text-center max-w-xl lg:max-w-3xl; +} + +.custom-development-hero__text { + @apply text-left md:text-center text-launch-black-80 max-w-xl lg:max-w-3xl; +} diff --git a/apps/gatsby/src/components/custom-development/css/embrace-launchware.css b/apps/gatsby/src/components/custom-development/css/embrace-launchware.css new file mode 100644 index 0000000..66529d1 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/embrace-launchware.css @@ -0,0 +1,20 @@ +@import "../../../css/index.css"; + +.embrace-launchware { + @apply parent-section; + @apply bg-launch-neutral-30; +} + +.embrace-launchware__contents { + @apply contents-container; + @apply flex-col space-y-6; +} + +.embrace-launchware__icon { + @apply inline; + @apply float-left; +} + +.embrace-launchware__list { + /* @apply red-checkmark */ +} diff --git a/apps/gatsby/src/components/custom-development/css/hassle-free-solutions.css b/apps/gatsby/src/components/custom-development/css/hassle-free-solutions.css new file mode 100644 index 0000000..42943a8 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/hassle-free-solutions.css @@ -0,0 +1,20 @@ +@import "../../../css/index.css"; + +.hassle-free-solutions { + @apply parent-section; + @apply bg-launch-neutral-30; +} + +.hassle-free-solutions__contents { + @apply contents-container; + @apply flex-col space-y-6; +} + +.hassle-free-solutions__icon { + @apply inline; + @apply float-left; +} + +.hassle-free-solutions__list { + /* @apply red-checkmark */ +} diff --git a/apps/gatsby/src/components/custom-development/css/highlight-bullets.css b/apps/gatsby/src/components/custom-development/css/highlight-bullets.css new file mode 100644 index 0000000..437802f --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/highlight-bullets.css @@ -0,0 +1,23 @@ +@import "../../../css/index.css"; + +.highlight-bullets { + @apply parent-section; + @apply bg-launch-neutral-30; +} + +.highlight-bullets__contents { + @apply contents-container; + @apply flex-col space-y-6; + + > .three-card-section__cards-container { + @apply pt-0 pb-0; + } + + & .three-card-section__card-heading { + @apply pt-0; + } +} + +.highlight-bullets__icon { + @apply inline w-12 align-middle justify-center; +} diff --git a/apps/gatsby/src/components/custom-development/css/no-more-juggling.css b/apps/gatsby/src/components/custom-development/css/no-more-juggling.css new file mode 100644 index 0000000..a0797f7 --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/no-more-juggling.css @@ -0,0 +1,20 @@ +@import "../../../css/index.css"; + +.no-more-juggling { + /* @apply parent-section; + @apply bg-launch-neutral-30 py-0; */ +} + +.no-more-juggling__contents { + @apply contents-container; + @apply flex-col space-y-6; +} + +.no-more-juggling__icon { + @apply inline; + @apply float-left; +} + +.no-more-juggling__list { + /* @apply red-checkmark */ +} diff --git a/apps/gatsby/src/components/custom-development/css/partner-with-experts.css b/apps/gatsby/src/components/custom-development/css/partner-with-experts.css new file mode 100644 index 0000000..949a6fd --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/partner-with-experts.css @@ -0,0 +1,20 @@ +@import "../../../css/index.css"; + +.partner-with-experts { + @apply parent-section; + @apply bg-launch-neutral-30; +} + +.partner-with-experts__contents { + @apply contents-container; + @apply flex-col space-y-6; +} + +.partner-with-experts__icon { + @apply inline; + @apply float-left; +} + +.partner-with-experts__list { + /* @apply red-checkmark */ +} diff --git a/apps/gatsby/src/components/custom-development/css/testimonials.css b/apps/gatsby/src/components/custom-development/css/testimonials.css new file mode 100644 index 0000000..29583df --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/testimonials.css @@ -0,0 +1,61 @@ +@import "../../../css/index.css"; + +.testimonials { + @apply parent-section; + @apply bg-white relative z-30 md:overflow-clip; +} + +.testimonials__contents { + @apply contents-container; + @apply relative; +} + +div.testimonials__decorative-square { + @apply absolute -z-10 -right-64 md:-top-72 hidden md:inline; +} + +.testimonials__text-container { + @apply flex flex-col md:items-start md:pr-4; + @apply text-left; +} + +.testimonials__heading-container { + @apply text-center mx-auto; +} + +.testimonials__heading { + @apply text-4xl mb-6 px-6 md:px-0; +} + +.testimonials__cards-container { + @apply w-full max-w-2xl grid grid-cols-1 md:grid-cols-2; + @apply lg:space-x-6 space-y-4 lg:space-y-0 items-start; +} + +.testimonials__text { + @apply text-base text-launch-black-80 px-6 md:px-0; +} + +.testimonials__card { + @apply flex flex-col space-y-4 p-6 bg-launch-neutral-20 rounded-md; +} + +.testimonials__name { + @apply flex flex-row space-x-1; +} + +.testimonials__icon { + @apply w-10 shrink-0; +} + +.testimonials__semibold { + @apply font-semibold; +} + +.testimonials__image-container { + @apply py-8 md:p-0; +} + +.testimonials__image { + @apply rounded-image; +} diff --git a/apps/gatsby/src/components/custom-development/css/we-are-with-you.css b/apps/gatsby/src/components/custom-development/css/we-are-with-you.css new file mode 100644 index 0000000..06e4aeb --- /dev/null +++ b/apps/gatsby/src/components/custom-development/css/we-are-with-you.css @@ -0,0 +1,23 @@ +@import "../../../css/index.css"; + +.we-are-with-you { + @apply parent-section; + @apply bg-launch-neutral-20; +} + +.we-are-with-you__contents { + @apply contents-container; + @apply flex-col space-y-6; +} + +.we-are-with-you__heading { + @apply text-5xl text-center max-w-xl lg:max-w-3xl; +} + +.we-are-with-you__uppercase { + @apply uppercase; +} + +.we-are-with-you__text { + @apply text-center text-launch-black-80; +} diff --git a/apps/gatsby/src/components/general/TextImageBlock.tsx b/apps/gatsby/src/components/general/TextImageBlock.tsx new file mode 100644 index 0000000..4d4dc68 --- /dev/null +++ b/apps/gatsby/src/components/general/TextImageBlock.tsx @@ -0,0 +1,36 @@ +// import { StaticImage } from "gatsby-plugin-image"; +import React from "react"; +import "./css/text-image-block.css"; + +type TextImageBlockProps = { + headingText: string; + text: string; + image: React.ReactNode; + webViewImagePosition: "left" | "right"; +}; + +/* + Creates a section with an image and text. The image can be positioned on the left or right side of the text. + In mobile view, the image will be displayed above the text. +*/ +export const TextImageBlock = ({ + headingText, + text, + image, + webViewImagePosition, +}: TextImageBlockProps) => { + const img =
{image}
; + + return ( +
+
+ {webViewImagePosition === "left" && img} +
+

{headingText}

+

{text}

+
+ {webViewImagePosition === "right" && img} +
+
+ ); +}; diff --git a/apps/gatsby/src/components/general/ThreeCardSection.tsx b/apps/gatsby/src/components/general/ThreeCardSection.tsx index 1eae325..090a983 100644 --- a/apps/gatsby/src/components/general/ThreeCardSection.tsx +++ b/apps/gatsby/src/components/general/ThreeCardSection.tsx @@ -3,37 +3,57 @@ import React, { FC } from "react"; import "./css/three-card-section.css"; interface ThreeCardProps { + iconsInline?: boolean; sectionContents: { - sectionHeading: string; + sectionHeading?: string; cards: { heading: string; icon: JSX.Element; - paragraphs: string[]; + paragraphs?: string[]; }[]; }; } export const ThreeCardSection: FC = ({ sectionContents: { sectionHeading, cards }, + iconsInline, }) => { - const cardList = cards.map((card, index) => ( -
-
{card.icon}
-

{card.heading}

- {card.paragraphs.map((paragraph) => ( -

- {paragraph} -

- ))} -
- )); + console.log(iconsInline); return ( <> -
-

{sectionHeading}

+ {sectionHeading && ( +
+

{sectionHeading}

+
+ )} +
+ {cards.map((card, index) => ( +
+ {iconsInline ? ( + + ) : ( + <> +
{card.icon}
+

{card.heading}

+ + )} + {card.paragraphs && + card.paragraphs.map((paragraph) => ( +

+ {paragraph} +

+ ))} +
+ ))}
-
{cardList}
); }; + +const InlineIconHeading: FC<{ icon: JSX.Element; heading: string }> = ({ icon, heading }) => ( +
+
{icon}
+

{heading}

+
+); diff --git a/apps/gatsby/src/components/general/css/text-image-block.css b/apps/gatsby/src/components/general/css/text-image-block.css new file mode 100644 index 0000000..c3e57f0 --- /dev/null +++ b/apps/gatsby/src/components/general/css/text-image-block.css @@ -0,0 +1,20 @@ +@import "../../../css/index.css"; + +.text-image-block { + @apply parent-section; + @apply bg-launch-neutral-20; +} + +.text-image-block__image-container { + @apply contents-container; + @apply w-full lg:w-7/12; +} + +.text-image-block__text-contents { + @apply flex-col space-y-6; + @apply justify-start; +} + +.text-image-block__heading { + @apply text-4xl max-w-xl lg:max-w-3xl; +} diff --git a/apps/gatsby/src/components/general/css/three-card-section.css b/apps/gatsby/src/components/general/css/three-card-section.css index b54edf5..1893375 100644 --- a/apps/gatsby/src/components/general/css/three-card-section.css +++ b/apps/gatsby/src/components/general/css/three-card-section.css @@ -32,3 +32,11 @@ .three-card-section__image-container { @apply w-full; } + +.three-card-section__inline-icon-heading { + @apply flex; + + & .three-card-section__image-container { + @apply max-w-12 align-middle justify-center; + } +} diff --git a/apps/gatsby/src/components/icons/chat-icon.png b/apps/gatsby/src/components/icons/chat-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd459a74b5f5213ecc097dab09fff1abbc808375 GIT binary patch literal 3423 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 gPyY^6hr8&lJOjtV7P;qKe+M|iS!A z%AO!S!qQrvERCgdP<}1nj!(g8OAhTlVX%1XoJCPY=^njFbteB z1RV;}UW}m>vy5>r>7R~Jic!Wu@CP~N+#vF!nY4a9kuVGHD1)$&W=A0jD^WYh zD7XBf9G0&D0000 ( + <> + LaunchWare Services: Custom Development & Staff Augmentation + + + + +); +const CustomDevelopmentPage = (pageProps: PageProps) => { + return ( + + + + + + + + + + + + + ); +}; + +export default CustomDevelopmentPage; diff --git a/apps/gatsby/tailwind.config.js b/apps/gatsby/tailwind.config.js index e039ed4..87f4f17 100644 --- a/apps/gatsby/tailwind.config.js +++ b/apps/gatsby/tailwind.config.js @@ -33,6 +33,10 @@ module.exports = { "launch-neutral-30": "#F5F5F5", "launch-primary-10": "#FFF7F6", }, + // I've tried pointing at the pre- and post-compilation paths, but it doesn't work + // listStyleImage: { + // "red-checkmark": 'url("/apps/gatsby/src/images/red-check.png")', + // }, }, }, fontDisplay: {