diff --git a/apps/gatsby/src/components/code-audit/ApplicationSteps.tsx b/apps/gatsby/src/components/code-audit/ApplicationSteps.tsx
new file mode 100644
index 0000000..419b248
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/ApplicationSteps.tsx
@@ -0,0 +1,67 @@
+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: Book Your Code Audit",
+ paragraphs: [
+ "Book a convenient time to chat with our founder about the application you want to review and if a code audit is a fit, we’ll get you scheduled for your custom code audit.",
+ ],
+ },
+ {
+ icon: (
+
+ ),
+ heading: "Step 2: Get a detailed analysis",
+ paragraphs: [
+ "Our team dives deep into your software, uncovering bottlenecks and opportunities.",
+ ],
+ },
+ {
+ icon: (
+
+ ),
+ heading: "Step 3: Take action",
+ paragraphs: [
+ "Receive your detailed roadmap, complete with clear insights and actionable steps.",
+ ],
+ },
+ ],
+ }}
+ />
+
+ Book my launch call
+
+
+
+ );
+};
diff --git a/apps/gatsby/src/components/code-audit/CallToAction.tsx b/apps/gatsby/src/components/code-audit/CallToAction.tsx
new file mode 100644
index 0000000..e2c502d
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/CallToAction.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 CallToAction = () => {
+ const { modal, clickHandler } = useBookCallModal();
+
+ return (
+
+ {modal}
+
+
Ready to get started?
+
+ Ready to transform your software project? Schedule your code audit with LaunchWare today.
+
+
+
+ Book Your Launch Call
+
+
+
+ );
+};
diff --git a/apps/gatsby/src/components/code-audit/CodeAuditHero.tsx b/apps/gatsby/src/components/code-audit/CodeAuditHero.tsx
new file mode 100644
index 0000000..97910f8
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/CodeAuditHero.tsx
@@ -0,0 +1,16 @@
+// STATUS: complete
+import React from "react";
+
+import "./css/custom-development-hero.css";
+
+export const CodeAuditHero = () => (
+
+
+
Turn Code Chaos into Seamless Success
+
+ Discover the power of expert code audits with LaunchWare. We help you navigate your software
+ challenges and set the stage for success.
+
+
+
+);
diff --git a/apps/gatsby/src/components/code-audit/EmbraceLaunchWare.tsx b/apps/gatsby/src/components/code-audit/EmbraceLaunchWare.tsx
new file mode 100644
index 0000000..570b80e
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/EmbraceLaunchWare.tsx
@@ -0,0 +1,22 @@
+import React from "react";
+import { StaticImage } from "gatsby-plugin-image";
+
+import "./css/embrace-launchware.css";
+
+export const EmbraceLaunchWare = () => (
+
+
+
+ Unlock your project’s potential with LaunchWare
+
+
With LaunchWare, you can:
+
+ Identify and tackle software bottlenecks head-on
+ Make informed decisions with transparent reporting
+ Enhance your software’s performance for a superior user experience
+ Recapture missed opportunities and steer your project towards success
+ Enjoy the peace of mind that comes with expert guidance
+
+
+
+);
diff --git a/apps/gatsby/src/components/code-audit/ExpertGuidance.tsx b/apps/gatsby/src/components/code-audit/ExpertGuidance.tsx
new file mode 100644
index 0000000..21d5426
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/ExpertGuidance.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 ExpertGuidance = () => (
+
+
+ }
+ headingText="Expert guidance, in plain language"
+ text="We believe that you don’t need to be a tech whizz to understand your software. Our team speaks your language, simplifying complex tech terms and guiding you every step of the way."
+ webViewImagePosition="right"
+ />
+
+);
diff --git a/apps/gatsby/src/components/code-audit/HeroBullets.tsx b/apps/gatsby/src/components/code-audit/HeroBullets.tsx
new file mode 100644
index 0000000..432038c
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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: "Unlock code clarity",
+ icon: (
+
+ ),
+ },
+ {
+ heading: "Propel project progress",
+ icon: (
+
+ ),
+ },
+ {
+ heading: "Get momentum",
+ icon: (
+
+ ),
+ },
+ ],
+ };
+
+ return (
+
+ );
+};
diff --git a/apps/gatsby/src/components/code-audit/InformedDecisions.tsx b/apps/gatsby/src/components/code-audit/InformedDecisions.tsx
new file mode 100644
index 0000000..ea85cba
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/InformedDecisions.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 InformedDecisions = () => (
+
+
+ }
+ headingText="Make informed decisions with clear insights"
+ text="We don’t just identify bottlenecks in your software, we illuminate the path forward. Our code audits equip you with a detailed roadmap to optimize your software, giving you the clarity you need to make confident decisions."
+ webViewImagePosition="left"
+ />
+
+);
diff --git a/apps/gatsby/src/components/code-audit/SeamlessSoftware.tsx b/apps/gatsby/src/components/code-audit/SeamlessSoftware.tsx
new file mode 100644
index 0000000..912913b
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/SeamlessSoftware.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 SeamlessSoftware = () => (
+
+
+ }
+ headingText="Envision a world of seamless software"
+ text="Imagine your software humming along like a finely tuned engine, each line of code contributing to a perfectly synchronized rhythm. With LaunchWare’s code audits, that vision becomes your reality."
+ webViewImagePosition="right"
+ />
+
+);
diff --git a/apps/gatsby/src/components/code-audit/StruggleEndsHere.tsx b/apps/gatsby/src/components/code-audit/StruggleEndsHere.tsx
new file mode 100644
index 0000000..99c191e
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/StruggleEndsHere.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 StruggleEndsHere = () => (
+
+ }
+ headingText="Your software struggles end here"
+ text="We know the frustration of dealing with software projects that veer off course. Delayed timelines, budget overruns, and subpar functionality can feel like a tangled mess, hindering your progress."
+ webViewImagePosition="left"
+ />
+);
diff --git a/apps/gatsby/src/components/code-audit/css/application-steps.css b/apps/gatsby/src/components/code-audit/css/application-steps.css
new file mode 100644
index 0000000..d83a97c
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/code-audit/css/code-audit-hero.css b/apps/gatsby/src/components/code-audit/css/code-audit-hero.css
new file mode 100644
index 0000000..e0fdba7
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/css/code-audit-hero.css
@@ -0,0 +1,19 @@
+@import "../../../css/index.css";
+
+.code-audit-hero {
+ @apply parent-section;
+ @apply bg-launch-neutral-20;
+}
+
+.code-audit-hero__contents {
+ @apply contents-container;
+ @apply flex-col space-y-6;
+}
+
+.code-audit-hero__heading {
+ @apply text-5xl text-left md:text-center max-w-xl lg:max-w-3xl;
+}
+
+.code-audit-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/code-audit/css/custom-development-call-to-action.css b/apps/gatsby/src/components/code-audit/css/custom-development-call-to-action.css
new file mode 100644
index 0000000..1cb133a
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/code-audit/css/embrace-launchware.css b/apps/gatsby/src/components/code-audit/css/embrace-launchware.css
new file mode 100644
index 0000000..66529d1
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/code-audit/css/hassle-free-solutions.css b/apps/gatsby/src/components/code-audit/css/hassle-free-solutions.css
new file mode 100644
index 0000000..42943a8
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/code-audit/css/highlight-bullets.css b/apps/gatsby/src/components/code-audit/css/highlight-bullets.css
new file mode 100644
index 0000000..437802f
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/code-audit/css/no-more-juggling.css b/apps/gatsby/src/components/code-audit/css/no-more-juggling.css
new file mode 100644
index 0000000..a0797f7
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/code-audit/css/partner-with-experts.css b/apps/gatsby/src/components/code-audit/css/partner-with-experts.css
new file mode 100644
index 0000000..949a6fd
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/code-audit/css/testimonials.css b/apps/gatsby/src/components/code-audit/css/testimonials.css
new file mode 100644
index 0000000..29583df
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/code-audit/css/we-are-with-you.css b/apps/gatsby/src/components/code-audit/css/we-are-with-you.css
new file mode 100644
index 0000000..06e4aeb
--- /dev/null
+++ b/apps/gatsby/src/components/code-audit/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/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.",
+ ],
+ },
+ ],
+ }}
+ />
+
+ Book my launch call
+
+
+
+ );
+};
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.
+
+
+
+ Book Your Launch Call
+
+
+
+ );
+};
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:
+
+
+
+ A custom software solution that reflects your vision and wows your users - we believe
+ technology is a force for good and should solve real problems for your users.
+
+
+ A break from the headaches of recruitment and team management - we take extra care when
+ assigning the right resources so they blend into your culture and make things easy for you
+ and your team.
+
+
+ A dedicated team of experts at your disposal - we place a strong emphasis on continuous
+ development of our staff to make sure we can match your needs to the right expertise.
+
+
+ A transparent development process that keeps you in the loop - we believe that software
+ development is first and foremost an exercise in communication and that is reflected in
+ how we work with our clients on each and every project.
+
+
+ The peace of mind that comes with knowing your software is in good hands - from our
+ expertise to our transparency, we build a partnership with you so you feel comfortable at
+ each step of the process. No black boxes or feature factories where you worry about what
+ will be delivered at the end of the project.
+
+
+
+
+);
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/flight-plan/AlignedSoftware.tsx b/apps/gatsby/src/components/flight-plan/AlignedSoftware.tsx
new file mode 100644
index 0000000..c891a15
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/AlignedSoftware.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 AlignedSoftware = () => (
+
+
+ }
+ headingText="Imagine your software, perfectly aligned with user needs"
+ text="Visualize the successful launch of your software. Your solution doesn’t just work; it resonates with your users, solving their problems with elegance and ease. It’s a beautiful synergy of your innovative vision and their unmet needs, made possible through meticulous planning and strategic execution."
+ webViewImagePosition="right"
+ />
+
+);
diff --git a/apps/gatsby/src/components/flight-plan/ApplicationSteps.tsx b/apps/gatsby/src/components/flight-plan/ApplicationSteps.tsx
new file mode 100644
index 0000000..6636740
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/ApplicationSteps.tsx
@@ -0,0 +1,67 @@
+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: Share your vision",
+ paragraphs: [
+ "Our ‘Jobs to Be Done Workshop’ helps us understand your target audience and the unique solutions your software aims to deliver.",
+ ],
+ },
+ {
+ icon: (
+
+ ),
+ heading: "Step 2: Get your blueprint",
+ paragraphs: [
+ "Our team crafts intuitive wireframes, clear user stories, and a strategic project plan, forming a comprehensive blueprint for your software journey.",
+ ],
+ },
+ {
+ icon: (
+
+ ),
+ heading: "Launch with confidence",
+ paragraphs: [
+ "With a clear flight plan in hand, you can confidently embark on your software development journey, knowing your path is clear.",
+ ],
+ },
+ ],
+ }}
+ />
+
+ Book my launch call
+
+
+
+ );
+};
diff --git a/apps/gatsby/src/components/flight-plan/CallToAction.tsx b/apps/gatsby/src/components/flight-plan/CallToAction.tsx
new file mode 100644
index 0000000..f81256e
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/CallToAction.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 CallToAction = () => {
+ const { modal, clickHandler } = useBookCallModal();
+
+ return (
+
+ {modal}
+
+
+ It’s time to let your software ideas take flight. Schedule your launch call with our
+ founder today.
+
+
+
+ Let's Launch Together
+
+
+
+ );
+};
diff --git a/apps/gatsby/src/components/flight-plan/ExperienceAdvantage.tsx b/apps/gatsby/src/components/flight-plan/ExperienceAdvantage.tsx
new file mode 100644
index 0000000..1a4120a
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/ExperienceAdvantage.tsx
@@ -0,0 +1,23 @@
+import React from "react";
+import { StaticImage } from "gatsby-plugin-image";
+
+import "./css/embrace-launchware.css";
+
+export const ExperienceAdvantage = () => (
+
+
+
Experience the LaunchWare advantage
+
Get ready to take your software vision to new heights with LaunchWare:
+
+ Bring your innovative ideas to life with a clear and comprehensive development plan
+ Save valuable time and resources with a comprehensive development plan
+ Create software that resonates deeply with your target audience
+ Keep your project on track with a strategic, easy-to-follow plan
+
+ Enjoy a hassle-free development journey with our friendly and approachable team by your
+ side
+
+
+
+
+);
diff --git a/apps/gatsby/src/components/flight-plan/Expertise.tsx b/apps/gatsby/src/components/flight-plan/Expertise.tsx
new file mode 100644
index 0000000..c607511
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/Expertise.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 Expertise = () => (
+
+
+ }
+ headingText="Expertise meets approachability"
+ text="We get it. The world of software development can feel like uncharted territory. That’s why at LaunchWare, we’re dedicated to guiding you through the process, making it approachable and easy to understand. We’re committed to demystifying the process and empowering you to make informed decisions every step of the way."
+ webViewImagePosition="right"
+ />
+
+);
diff --git a/apps/gatsby/src/components/flight-plan/FlightPlanHero.tsx b/apps/gatsby/src/components/flight-plan/FlightPlanHero.tsx
new file mode 100644
index 0000000..9280e32
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/FlightPlanHero.tsx
@@ -0,0 +1,16 @@
+// STATUS: complete
+import React from "react";
+
+import "./css/custom-development-hero.css";
+
+export const FlightPlanHero = () => (
+
+
+
Turn your software ideas into reality
+
+ Embark on a seamless journey to successful software development with LaunchWare, your
+ trusted co-pilot in the digital worldrealm.
+
+
+
+);
diff --git a/apps/gatsby/src/components/flight-plan/HeroBullets.tsx b/apps/gatsby/src/components/flight-plan/HeroBullets.tsx
new file mode 100644
index 0000000..92b66e5
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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: "Shape your vision",
+ icon: (
+
+ ),
+ },
+ {
+ heading: "Streamline development",
+ icon: (
+
+ ),
+ },
+ {
+ heading: "Delight your users",
+ icon: (
+
+ ),
+ },
+ ],
+ };
+
+ return (
+
+ );
+};
diff --git a/apps/gatsby/src/components/flight-plan/IdeasTakeFlight.tsx b/apps/gatsby/src/components/flight-plan/IdeasTakeFlight.tsx
new file mode 100644
index 0000000..9f02d21
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/IdeasTakeFlight.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 IdeasTakeFlight = () => (
+
+ }
+ headingText="Your great ideas deserve to take flight"
+ text="In the bustling world of technology, innovative ideas often get lost in the shuffle. The path to turning a brilliant concept into a successful software product can feel overwhelming, riddled with technical jargon and unforeseen hurdles. Without a clear flight plan, your great ideas may never reach the skies they’re meant to soar in."
+ webViewImagePosition="left"
+ />
+);
diff --git a/apps/gatsby/src/components/flight-plan/TailoredFlightPlan.tsx b/apps/gatsby/src/components/flight-plan/TailoredFlightPlan.tsx
new file mode 100644
index 0000000..2c3c11c
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/TailoredFlightPlan.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 TailoredFlightPlan = () => (
+
+
+ }
+ headingText="A tailored flight plan for your software journey"
+ text="At LaunchWare, we’re not just your software developers; we’re your co-pilots. We start with our unique ‘Jobs to Be Done Workshop’, where we define your target audience and pinpoint their needs. From there, we craft a flight plan that includes intuitive wireframes, user stories, and a strategic project plan that builds your path to success."
+ webViewImagePosition="left"
+ />
+
+);
diff --git a/apps/gatsby/src/components/flight-plan/css/application-steps.css b/apps/gatsby/src/components/flight-plan/css/application-steps.css
new file mode 100644
index 0000000..d83a97c
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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/flight-plan/css/code-audit-hero.css b/apps/gatsby/src/components/flight-plan/css/code-audit-hero.css
new file mode 100644
index 0000000..e0fdba7
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/css/code-audit-hero.css
@@ -0,0 +1,19 @@
+@import "../../../css/index.css";
+
+.code-audit-hero {
+ @apply parent-section;
+ @apply bg-launch-neutral-20;
+}
+
+.code-audit-hero__contents {
+ @apply contents-container;
+ @apply flex-col space-y-6;
+}
+
+.code-audit-hero__heading {
+ @apply text-5xl text-left md:text-center max-w-xl lg:max-w-3xl;
+}
+
+.code-audit-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/flight-plan/css/custom-development-call-to-action.css b/apps/gatsby/src/components/flight-plan/css/custom-development-call-to-action.css
new file mode 100644
index 0000000..1cb133a
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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/flight-plan/css/embrace-launchware.css b/apps/gatsby/src/components/flight-plan/css/embrace-launchware.css
new file mode 100644
index 0000000..66529d1
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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/flight-plan/css/hassle-free-solutions.css b/apps/gatsby/src/components/flight-plan/css/hassle-free-solutions.css
new file mode 100644
index 0000000..42943a8
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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/flight-plan/css/highlight-bullets.css b/apps/gatsby/src/components/flight-plan/css/highlight-bullets.css
new file mode 100644
index 0000000..437802f
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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/flight-plan/css/no-more-juggling.css b/apps/gatsby/src/components/flight-plan/css/no-more-juggling.css
new file mode 100644
index 0000000..a0797f7
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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/flight-plan/css/partner-with-experts.css b/apps/gatsby/src/components/flight-plan/css/partner-with-experts.css
new file mode 100644
index 0000000..949a6fd
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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/flight-plan/css/testimonials.css b/apps/gatsby/src/components/flight-plan/css/testimonials.css
new file mode 100644
index 0000000..29583df
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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/flight-plan/css/we-are-with-you.css b/apps/gatsby/src/components/flight-plan/css/we-are-with-you.css
new file mode 100644
index 0000000..06e4aeb
--- /dev/null
+++ b/apps/gatsby/src/components/flight-plan/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 }) => (
+
+);
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 0000000..bd459a7
Binary files /dev/null and b/apps/gatsby/src/components/icons/chat-icon.png differ
diff --git a/apps/gatsby/src/components/icons/clipboard-icon.png b/apps/gatsby/src/components/icons/clipboard-icon.png
new file mode 100644
index 0000000..d8cbec8
Binary files /dev/null and b/apps/gatsby/src/components/icons/clipboard-icon.png differ
diff --git a/apps/gatsby/src/components/icons/red-check.png b/apps/gatsby/src/components/icons/red-check.png
new file mode 100644
index 0000000..3da5b9f
Binary files /dev/null and b/apps/gatsby/src/components/icons/red-check.png differ
diff --git a/apps/gatsby/src/components/icons/rocket-blastoff-icon.png b/apps/gatsby/src/components/icons/rocket-blastoff-icon.png
new file mode 100644
index 0000000..61701b6
Binary files /dev/null and b/apps/gatsby/src/components/icons/rocket-blastoff-icon.png differ
diff --git a/apps/gatsby/src/components/icons/white-check-on-black.png b/apps/gatsby/src/components/icons/white-check-on-black.png
new file mode 100644
index 0000000..9bec533
Binary files /dev/null and b/apps/gatsby/src/components/icons/white-check-on-black.png differ
diff --git a/apps/gatsby/src/pages/services/code-audit.tsx b/apps/gatsby/src/pages/services/code-audit.tsx
new file mode 100644
index 0000000..bde64ed
--- /dev/null
+++ b/apps/gatsby/src/pages/services/code-audit.tsx
@@ -0,0 +1,46 @@
+import React from "react";
+import { PageProps } from "gatsby";
+
+import { Layout } from "../../components/layout/Layout.tsx";
+import { HeadDefaults } from "../../components/layout/HeadDefaults.tsx";
+import { CodeAuditHero } from "../../components/code-audit/CodeAuditHero.tsx";
+import { HeroBullets } from "../../components/code-audit/HeroBullets.tsx";
+import { StruggleEndsHere } from "../../components/code-audit/StruggleEndsHere.tsx";
+import { SeamlessSoftware } from "../../components/code-audit/SeamlessSoftware.tsx";
+import { InformedDecisions } from "../../components/code-audit/InformedDecisions.tsx";
+import { ExpertGuidance } from "../../components/code-audit/ExpertGuidance.tsx";
+import { ApplicationSteps } from "../../components/code-audit/ApplicationSteps.tsx";
+import { EmbraceLaunchWare } from "../../components/code-audit/EmbraceLaunchWare.tsx";
+import { CallToAction } from "../../components/code-audit/CallToAction.tsx";
+
+export const Head = () => (
+ <>
+
LaunchWare Services: Custom Development & Staff Augmentation
+
+
+
+ >
+);
+const CodeAuditPage = (pageProps: PageProps) => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default CodeAuditPage;
diff --git a/apps/gatsby/src/pages/services/custom-development.tsx b/apps/gatsby/src/pages/services/custom-development.tsx
new file mode 100644
index 0000000..3bb05ef
--- /dev/null
+++ b/apps/gatsby/src/pages/services/custom-development.tsx
@@ -0,0 +1,48 @@
+import React from "react";
+import { PageProps } from "gatsby";
+
+import { Layout } from "../../components/layout/Layout";
+import { HeadDefaults } from "../../components/layout/HeadDefaults";
+import { CustomDevelopmentHero } from "../../components/custom-development/CustomDevelopmentHero.tsx";
+import { HeroBullets } from "../../components/custom-development/HeroBullets.tsx";
+import { NoMoreJuggling } from "../../components/custom-development/NoMoreJuggling.tsx";
+import { HassleFreeSolutions } from "../../components/custom-development/HassleFreeSolutions.tsx";
+import { PartnerWithExperts } from "../../components/custom-development/PartnerWithExperts.tsx";
+import { WeAreWithYou } from "../../components/custom-development/WeAreWithYou.tsx";
+import { Testimonials } from "../../components/custom-development/Testimonials.tsx";
+import { ApplicationSteps } from "../../components/custom-development/ApplicationSteps.tsx";
+import { EmbraceLaunchWare } from "../../components/custom-development/EmbraceLaunchWare.tsx";
+import { CustomDevelopmentCallToAction } from "../../components/custom-development/CustomDevelopmentCallToAction.tsx";
+
+export const Head = () => (
+ <>
+
LaunchWare Services: Custom Development & Staff Augmentation
+
+
+
+ >
+);
+const CustomDevelopmentPage = (pageProps: PageProps) => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default CustomDevelopmentPage;
diff --git a/apps/gatsby/src/pages/services/flight-plan.tsx b/apps/gatsby/src/pages/services/flight-plan.tsx
new file mode 100644
index 0000000..5c9a9b4
--- /dev/null
+++ b/apps/gatsby/src/pages/services/flight-plan.tsx
@@ -0,0 +1,46 @@
+import React from "react";
+import { PageProps } from "gatsby";
+
+import { Layout } from "../../components/layout/Layout.tsx";
+import { HeadDefaults } from "../../components/layout/HeadDefaults.tsx";
+import { FlightPlanHero } from "../../components/flight-plan/FlightPlanHero.tsx";
+import { HeroBullets } from "../../components/flight-plan/HeroBullets.tsx";
+import { IdeasTakeFlight } from "../../components/flight-plan/IdeasTakeFlight.tsx";
+import { AlignedSoftware } from "../../components/flight-plan/AlignedSoftware.tsx";
+import { TailoredFlightPlan } from "../../components/flight-plan/TailoredFlightPlan.tsx";
+import { Expertise } from "../../components/flight-plan/Expertise.tsx";
+import { ApplicationSteps } from "../../components/flight-plan/ApplicationSteps.tsx";
+import { ExperienceAdvantage } from "../../components/flight-plan/ExperienceAdvantage.tsx";
+import { CallToAction } from "../../components/flight-plan/CallToAction.tsx";
+
+export const Head = () => (
+ <>
+
LaunchWare Services: Custom Development & Staff Augmentation
+
+
+
+ >
+);
+const CodeAuditPage = (pageProps: PageProps) => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default CodeAuditPage;
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: {