diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 324c9f8..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -.vscode/**/* diff --git a/.prettierrc b/.prettierrc.js similarity index 59% rename from .prettierrc rename to .prettierrc.js index 7c5f6b7..0bd75b6 100644 --- a/.prettierrc +++ b/.prettierrc.js @@ -1,4 +1,4 @@ -{ +export default config = { "printWidth": 100, "semi": true } diff --git a/apps/gatsby/.eslintignore b/apps/gatsby/.eslintignore new file mode 100644 index 0000000..9a26d46 --- /dev/null +++ b/apps/gatsby/.eslintignore @@ -0,0 +1,5 @@ +node_modules +public +.cache +static/fonts +tailwind.config.js diff --git a/.estlintrc.ts b/apps/gatsby/.eslintrc.js similarity index 50% rename from .estlintrc.ts rename to apps/gatsby/.eslintrc.js index 7626aef..c5dd34e 100644 --- a/.estlintrc.ts +++ b/apps/gatsby/.eslintrc.js @@ -1,23 +1,48 @@ -export default { - root: true, +// import rootConfig from "../../.eslintrc"; + +// export default { +// ...rootConfig, +// }; + +// basic .eslintrc.js compatible with react prettier and typescript +module.exports = { overrides: [ { files: ["*.ts", "*.tsx"], - processor: "@graphql-eslint/graphql", + + // Specifies the ESLint parser for TypeScript parser: "@typescript-eslint/parser", extends: [ "@launchware/eslint-config-react", "eslint:recommended", "plugin:@typescript-eslint/recommended", - "@tanstack/query", ], + settings: { + react: { + version: "detect", + }, + }, env: { + browser: true, + node: true, es6: true, }, - settings: { - react: { - version: 'detect' - } + plugins: ["@typescript-eslint", "react", "@tanstack/query"], + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + // Allows for the parsing of modern ECMAScript features + ecmaVersion: 2018, + // Allows for the use of imports + sourceType: "module", + }, + rules: { + // Disable prop-types as we use TypeScript for type checking + "react/prop-types": "off", + "react/jsx-uses-vars": "error", + "react/jsx-uses-react": "error", + "react/require-default-props": "off", }, }, { diff --git a/apps/gatsby/.prettierrc.js b/apps/gatsby/.prettierrc.js new file mode 100644 index 0000000..df13098 --- /dev/null +++ b/apps/gatsby/.prettierrc.js @@ -0,0 +1,5 @@ +// This file exists to facilitate development in VSCode with the Prettier extension +// and the gatsby dir as the project root (the extension cannot read outside the root dir) +import config from "../../.prettierrc.js"; + +export default config diff --git a/apps/gatsby/gatsby-browser.ts b/apps/gatsby/gatsby-browser.ts index 6565321..903b366 100644 --- a/apps/gatsby/gatsby-browser.ts +++ b/apps/gatsby/gatsby-browser.ts @@ -1,2 +1,3 @@ -console.log("in gatsby browser") import "./src/css/index.css"; +// eslint-disable-next-line no-console +console.log("in gatsby browser"); diff --git a/apps/gatsby/gatsby-config.ts b/apps/gatsby/gatsby-config.ts index b13b1fe..3f73e37 100644 --- a/apps/gatsby/gatsby-config.ts +++ b/apps/gatsby/gatsby-config.ts @@ -79,6 +79,14 @@ const config: GatsbyConfig = { icon: `src/images/launchware-favicon.png`, // This path is relative to the root of the site. }, }, + { + resolve: "gatsby-plugin-eslint", + options: { + extensions: ["js", "jsx", "ts", "tsx"], + exclude: ["node_modules", ".cache", "public"], + stages: ["develop"], + }, + }, // { // resolve: `gatsby-plugin-feed`, // options: { diff --git a/apps/gatsby/gatsby-node.ts b/apps/gatsby/gatsby-node.ts index 824c3c6..0ae1cd2 100644 --- a/apps/gatsby/gatsby-node.ts +++ b/apps/gatsby/gatsby-node.ts @@ -4,7 +4,10 @@ * See: https://www.gatsbyjs.com/docs/reference/config-files/gatsby-node/ */ + +// eslint-disable-next-line @typescript-eslint/no-var-requires const path = require(`path`); +// eslint-disable-next-line @typescript-eslint/no-var-requires const { createFilePath } = require(`gatsby-source-filesystem`); // Define the template for blog post diff --git a/apps/gatsby/gatsby-ssr.tsx b/apps/gatsby/gatsby-ssr.tsx index efea655..fd4a5e4 100644 --- a/apps/gatsby/gatsby-ssr.tsx +++ b/apps/gatsby/gatsby-ssr.tsx @@ -30,15 +30,13 @@ const fonts = [ // "/fonts/Inter/Inter-Thin.ttf", ] export const onRenderBody = ({ setHeadComponents, setHtmlAttributes }) => { - const links = fonts.map((font) => { - return - }) + />) const userCentricLinks = [ , diff --git a/apps/gatsby/package.json b/apps/gatsby/package.json index a6bd7fe..f78ca97 100644 --- a/apps/gatsby/package.json +++ b/apps/gatsby/package.json @@ -17,8 +17,8 @@ "develop": "netlify dev", "develop:gatsby": "gatsby develop", "lint": "pnpm run lint:syntax && pnpm run lint:style", - "lint:syntax": "eslint", - "lint:style": "prettier -u -c ./src/**/*.**", + "lint:syntax": "eslint .", + "lint:style": "prettier -u -c ./src", "start": "gatsby develop", "serve": "gatsby serve", "typecheck": "tsc --noEmit" @@ -70,7 +70,7 @@ "devDependencies": { "@graphql-eslint/eslint-plugin": "^3.18.0", "@launchware/eslint-config-react": "0.0.3", - "@tanstack/eslint-plugin-query": "^4.34.1", + "@tanstack/eslint-plugin-query": "^4.38.0", "@types/node": "^18.15.8", "@types/react": "^18.0.29", "@types/react-dom": "^18.0.11", diff --git a/apps/gatsby/src/api-client/getApiClient.ts b/apps/gatsby/src/api-client/getApiClient.ts index 2c39d7f..a730586 100644 --- a/apps/gatsby/src/api-client/getApiClient.ts +++ b/apps/gatsby/src/api-client/getApiClient.ts @@ -2,6 +2,7 @@ import axios, { AxiosInstance } from "axios"; export class ApiClient { private _client: AxiosInstance; + static instance: ApiClient; private constructor() { diff --git a/apps/gatsby/src/api-client/hooks/useApiClient.tsx b/apps/gatsby/src/api-client/hooks/useApiClient.tsx index 8d26530..ab72bc9 100644 --- a/apps/gatsby/src/api-client/hooks/useApiClient.tsx +++ b/apps/gatsby/src/api-client/hooks/useApiClient.tsx @@ -1,5 +1,3 @@ -import { ApiClient } from "../getApiClient" +import { ApiClient } from "../getApiClient"; -export const useApiClient = () => { - return ApiClient.getInstance().client -} +export const useApiClient = () => ApiClient.getInstance().client; diff --git a/apps/gatsby/src/components/about-page/AboutHero.tsx b/apps/gatsby/src/components/about-page/AboutHero.tsx index 3e2ba3b..8aa4123 100644 --- a/apps/gatsby/src/components/about-page/AboutHero.tsx +++ b/apps/gatsby/src/components/about-page/AboutHero.tsx @@ -2,11 +2,11 @@ import React from "react"; import "./css/about-hero.css"; -export const AboutHero = () => ( -
+export function AboutHero() { + return

Too many software projects fail.

Your vision deserves to see the light of day

-); +} diff --git a/apps/gatsby/src/components/about-page/BetterWay.tsx b/apps/gatsby/src/components/about-page/BetterWay.tsx index 6ec1d58..9b0c2b6 100644 --- a/apps/gatsby/src/components/about-page/BetterWay.tsx +++ b/apps/gatsby/src/components/about-page/BetterWay.tsx @@ -1,13 +1,13 @@ import React from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCheck } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { StaticImage } from "gatsby-plugin-image"; import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; import "./css/better-way.css"; -export const BetterWay = () => { +export function BetterWay() { const { modal, clickHandler } = useBookCallModal(); return ( @@ -22,18 +22,18 @@ export const BetterWay = () => {

LaunchWare has found a better way.

Years ago, we had enough with seeing audacious visions unrealized. For the past 22 - years, we've helped dozens of people just like you cure what's ailing their software + years, we’ve helped dozens of people just like you cure what’s ailing their software development process and get their software shipped.

-
Imagine what's possible for your software:
+
Imagine what’s possible for your software:

- At LaunchWare, that's the reality we're creating for all of our clients. We're committed + At LaunchWare, that’s the reality we’re creating for all of our clients. We’re committed to doing the same for you, so that you can{" "} stop stressing and start shipping.

@@ -86,4 +86,4 @@ export const BetterWay = () => { {modal}
); -}; +} diff --git a/apps/gatsby/src/components/about-page/Leaders.tsx b/apps/gatsby/src/components/about-page/Leaders.tsx index e6be0af..d867339 100644 --- a/apps/gatsby/src/components/about-page/Leaders.tsx +++ b/apps/gatsby/src/components/about-page/Leaders.tsx @@ -1,12 +1,14 @@ import React from "react"; + import { faLinkedin } from "@fortawesome/free-brands-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { StaticImage } from "gatsby-plugin-image"; import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; + import "./css/leaders.css"; -import { StaticImage } from "gatsby-plugin-image"; -export const Leaders = () => { +export function Leaders() { const { modal, clickHandler } = useBookCallModal(); return ( @@ -14,8 +16,8 @@ export const Leaders = () => { {modal}
-

Meet LaunchWare's Founder

-

+

Meet LaunchWare’s Founder

+

@@ -50,11 +52,11 @@ export const Leaders = () => { non-technical individuals face when navigating these challenges.

- However, Dan isn’t just an empathetic ear. He's a solutions architect. Equipped with + However, Dan isn’t just an empathetic ear. He’s a solutions architect. Equipped with a Computer Science degree from Worcester Polytechnic Institute, his resume includes a role as a Director of Engineering and 15 rich years of consulting. He’s also a teacher at heart, having helped train over 1000 Software Engineers via Launch - Academy. Partnering with Dan means you aren't merely crafting software; you're + Academy. Partnering with Dan means you aren’t merely crafting software; you’re making dreams become tangible realities.

@@ -81,4 +83,4 @@ export const Leaders = () => {

); -}; +} diff --git a/apps/gatsby/src/components/about-page/OurBeliefs.tsx b/apps/gatsby/src/components/about-page/OurBeliefs.tsx index 8d8ac44..632787f 100644 --- a/apps/gatsby/src/components/about-page/OurBeliefs.tsx +++ b/apps/gatsby/src/components/about-page/OurBeliefs.tsx @@ -4,8 +4,8 @@ import { StaticImage } from "gatsby-plugin-image"; import "./css/our-beliefs.css"; -export const OurBeliefs = () => ( -
+export function OurBeliefs() { + return
(

What We Believe

- At LaunchWare, we're driven by a set of foundational beliefs that guide every project we - undertake. These are more than just talking points. They're the principles that shape our + At LaunchWare, we’re driven by a set of foundational beliefs that guide every project we + undertake. These are more than just talking points. They’re the principles that shape our approach, influence our decisions, and define who we are as a team.

  • Technology is a Force for Good

    - We're adamant that technology should enhance the well-being of its users. If a project's - intent is deceptive or ethically questionable, it doesn't just merit reconsideration—it - simply won't be built by us. + We’re adamant that technology should enhance the well-being of its users. If a project’s + intent is deceptive or ethically questionable, it doesn’t just merit reconsideration—it + simply won’t be built by us.

  • Every Project is Unique

    We understand that each client and each technological hurdle is singular in its - complexities and opportunities. There's no one-size-fits-all solution, which is why we - value custom approaches tailored to each project's unique demands. + complexities and opportunities. There’s no one-size-fits-all solution, which is why we + value custom approaches tailored to each project’s unique demands.

  • Evolution Over Stagnation

    In our eyes, software development is not a linear process but an evolutionary journey. - Adaptability and flexibility aren't mere 'nice-to-haves'. They're essential traits for + Adaptability and flexibility aren’t mere 'nice-to-haves'. They’re essential traits for navigating the unpredictable landscape of software innovation.

  • @@ -69,11 +69,11 @@ export const OurBeliefs = () => (
  • By staying true to these core beliefs, we aim to foster partnerships that are not just - profitable, but also meaningful and enduring. If these beliefs resonate with you, you're - likely the kind of partner we're looking to collaborate with. + profitable, but also meaningful and enduring. If these beliefs resonate with you, you’re + likely the kind of partner we’re looking to collaborate with.

-); +} diff --git a/apps/gatsby/src/components/about-page/VisionToReality.tsx b/apps/gatsby/src/components/about-page/VisionToReality.tsx index 45137d2..9a17099 100644 --- a/apps/gatsby/src/components/about-page/VisionToReality.tsx +++ b/apps/gatsby/src/components/about-page/VisionToReality.tsx @@ -1,14 +1,16 @@ import React from "react"; +import { StaticImage } from "gatsby-plugin-image"; + import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; import { ThreeCardSection } from "../general/ThreeCardSection"; import { HiFiveIcon } from "../icons/HiFiveIcon"; import { LaptopStackIcon } from "../icons/LaptopStackIcon"; import { SendMessagesIcon } from "../icons/SendMessagesIcon"; + import "./css/vision-to-reality.css"; -import { StaticImage } from "gatsby-plugin-image"; -export const VisionToReality = () => { +export function VisionToReality() { const { modal, clickHandler } = useBookCallModal(); const sectionContents = { @@ -54,4 +56,4 @@ export const VisionToReality = () => { {modal}
); -}; +} diff --git a/apps/gatsby/src/components/about-page/WhySoftwareExists.tsx b/apps/gatsby/src/components/about-page/WhySoftwareExists.tsx index bf2fcac..10bef3c 100644 --- a/apps/gatsby/src/components/about-page/WhySoftwareExists.tsx +++ b/apps/gatsby/src/components/about-page/WhySoftwareExists.tsx @@ -5,7 +5,7 @@ import { StaticImage } from "gatsby-plugin-image"; import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; import "./css/why-software-exists.css"; -export const WhySoftwareExists = () => { +export function WhySoftwareExists() { const { modal, clickHandler } = useBookCallModal(); return ( @@ -29,17 +29,17 @@ export const WhySoftwareExists = () => { When a project is floundering, all we see is missed opportunity.

- If you're like us, you've seen this story play out: a project begins with high - aspirations and enthusiasm, and then tragically grinds to a halt when it's time to start + If you’re like us, you’ve seen this story play out: a project begins with high + aspirations and enthusiasm, and then tragically grinds to a halt when it’s time to start building.

@@ -72,4 +72,4 @@ export const WhySoftwareExists = () => { {modal}
); -}; +} diff --git a/apps/gatsby/src/components/blog-page/BlogCardList.tsx b/apps/gatsby/src/components/blog-page/BlogCardList.tsx index 8b72463..5b16a56 100644 --- a/apps/gatsby/src/components/blog-page/BlogCardList.tsx +++ b/apps/gatsby/src/components/blog-page/BlogCardList.tsx @@ -1,4 +1,5 @@ -import React, { FC } from "react"; +import React from "react"; + import { Link } from "gatsby"; import "./css/blog-card-list.css"; @@ -16,21 +17,19 @@ interface BlogCardListProps { }[]; } -export const BlogCardList: FC = ({ articles }) => { - const listItems = articles.map((article) => { - return ( +export function BlogCardList({ articles }: BlogCardListProps) { + const listItems = articles.map((article) => (
  • {article.frontmatter?.title}

    {article.excerpt}

  • - ); - }); + )); return (
    ); -}; +} diff --git a/apps/gatsby/src/components/blog-page/BlogHero.tsx b/apps/gatsby/src/components/blog-page/BlogHero.tsx index 3d02145..7c48730 100644 --- a/apps/gatsby/src/components/blog-page/BlogHero.tsx +++ b/apps/gatsby/src/components/blog-page/BlogHero.tsx @@ -2,18 +2,18 @@ import React from "react"; import "./css/blog-hero.css"; -export const BlogHero = () => { +export function BlogHero() { return (

    Blog

    - Read the latest from the team at LaunchWare. We'll discuss software development, what - we've learned, and launching your next project. + Read the latest from the team at LaunchWare. We’ll discuss software development, what + we’ve learned, and launching your next project.

    ); -}; +} diff --git a/apps/gatsby/src/components/book-call/BookCallEmbed.tsx b/apps/gatsby/src/components/book-call/BookCallEmbed.tsx index c046167..d8a7fe2 100644 --- a/apps/gatsby/src/components/book-call/BookCallEmbed.tsx +++ b/apps/gatsby/src/components/book-call/BookCallEmbed.tsx @@ -1,4 +1,12 @@ -import React, { MouseEventHandler, useCallback, useContext, useEffect, useRef, useState } from "react" +import React, { + MouseEventHandler, + useCallback, + useContext, + useEffect, + useRef, + useState, +} from "react"; + import { companyContactInformation } from "../../configuration/companyContactInformation"; import { UsercentricsContext } from "../usercentrics/UsercentricsProvider"; @@ -11,30 +19,35 @@ declare global { } } -export const BookCallEmbed = ({ enabled = true }: { enabled?: boolean }) => { - const divRef = useRef(null) +export function BookCallEmbed({ enabled = true }: { enabled?: boolean }) { + const divRef = useRef(null); const [calendlyInitialized, setCalendlyInitialized] = useState(false); const url = companyContactInformation.launchCallUrl; - const { isClientSide, isInitialized, hasServiceConsent, acceptService } = useContext(UsercentricsContext) - const [isAccepted, setIsAccepted] = useState(hasServiceConsent && hasServiceConsent("Calendly")) + const { isClientSide, isInitialized, hasServiceConsent, acceptService } = + useContext(UsercentricsContext); + const [, setIsAccepted] = useState(hasServiceConsent && hasServiceConsent("Calendly")); - const shouldInitCalendly = () => enabled && + const shouldInitCalendly = () => + enabled && isInitialized && !calendlyInitialized && hasServiceConsent && hasServiceConsent("Calendly") && isClientSide && - divRef.current + divRef.current; - const provideConsent: MouseEventHandler = useCallback((e) => { - e.preventDefault() - if (acceptService) { - acceptService("Calendly").then(() => { - setIsAccepted(true) - initCalendly() - }) - } - }, [acceptService, shouldInitCalendly()]) + const provideConsent: MouseEventHandler = useCallback( + (e) => { + e.preventDefault(); + if (acceptService) { + acceptService("Calendly").then(() => { + setIsAccepted(true); + initCalendly(); + }); + } + }, + [acceptService, shouldInitCalendly()], + ); const initCalendly = useCallback(() => { if (shouldInitCalendly()) { @@ -45,25 +58,35 @@ export const BookCallEmbed = ({ enabled = true }: { enabled?: boolean }) => { parentElement: divRef.current, }); setCalendlyInitialized(true); - window.clearInterval(interval) + window.clearInterval(interval); } - }, 500) + }, 500); } - - }, [shouldInitCalendly()]) + }, [shouldInitCalendly()]); useEffect(() => { - initCalendly() - }, [shouldInitCalendly()]) + initCalendly(); + }, [shouldInitCalendly()]); - const div =
    + const div =
    ; - const consentNotice = (!calendlyInitialized && (!hasServiceConsent || !hasServiceConsent("Calendly"))) && <> -

    We use Calendly to embed content that may collect data about your activity.

    -

    Please provide consent to connect to our partner, Calendly

    - - return <> - {consentNotice} - {div} - + const consentNotice = !calendlyInitialized && + (!hasServiceConsent || !hasServiceConsent("Calendly")) && ( + <> +

    We use Calendly to embed content that may collect data about your activity.

    +

    + Please provide{" "} + + consent + {" "} + to connect to our partner, Calendly +

    + + ); + return ( + <> + {consentNotice} + {div} + + ); } diff --git a/apps/gatsby/src/components/book-call/BookCallModal.tsx b/apps/gatsby/src/components/book-call/BookCallModal.tsx index 2aba215..1db5d2e 100644 --- a/apps/gatsby/src/components/book-call/BookCallModal.tsx +++ b/apps/gatsby/src/components/book-call/BookCallModal.tsx @@ -1,26 +1,32 @@ -import React, { RefObject } from "react"; +import React from "react"; -import "@launchware/replicator/dist/css/Modal/modal.css"; -import "./css/book-call-modal.css"; import { StaticImage } from "gatsby-plugin-image"; + import { BookCallEmbed } from "./BookCallEmbed"; import { UsercentricsProvider } from "../usercentrics/UsercentricsProvider"; -export const BookCallModal = ({ enabled = true }: { enabled?: boolean }) => ( -
    - -
    -

    Book Your Launch Call

    -

    Let's chat about your custom software development project.

    -
    -
    - - - +import "@launchware/replicator/dist/css/Modal/modal.css"; +import "./css/book-call-modal.css"; + +export function BookCallModal({ enabled = true }: { enabled?: boolean }) { + return ( +
    + +
    +

    Book Your Launch Call

    +

    + Let’s chat about your custom software development project. +

    +
    +
    + + + +
    -
    -); + ); +} diff --git a/apps/gatsby/src/components/book-call/hooks/useBookCallModal.tsx b/apps/gatsby/src/components/book-call/hooks/useBookCallModal.tsx index 8a5cbab..21a8614 100644 --- a/apps/gatsby/src/components/book-call/hooks/useBookCallModal.tsx +++ b/apps/gatsby/src/components/book-call/hooks/useBookCallModal.tsx @@ -1,10 +1,10 @@ -import React, { MouseEventHandler, useEffect, useRef, useState } from "react"; +import React, { MouseEventHandler, useEffect } from "react"; import { useModal } from "@launchware/replicator"; -import "@launchware/replicator/dist/css/Modal/modal.css"; -import { companyContactInformation } from "../../../configuration/companyContactInformation"; import { BookCallModal } from "../BookCallModal"; + +import "@launchware/replicator/dist/css/Modal/modal.css"; import "../css/book-call-modal.css"; export const useBookCallModal = () => { @@ -14,17 +14,16 @@ export const useBookCallModal = () => { setVisibility: setModalVisibility, } = useModal(() => , { scrollToTop: false, - size: "large" + size: "large", }); - useEffect(() => { window.addEventListener("message", (e) => { if (e.data.event && e.data.event.indexOf("calendly")) { setModalVisibility(false); } }); - }, []); + }, [setModalVisibility]); const clickHandler: MouseEventHandler = (event) => { event.preventDefault(); diff --git a/apps/gatsby/src/components/contact-page/ContactForm.tsx b/apps/gatsby/src/components/contact-page/ContactForm.tsx index c45a166..c9c0eeb 100644 --- a/apps/gatsby/src/components/contact-page/ContactForm.tsx +++ b/apps/gatsby/src/components/contact-page/ContactForm.tsx @@ -2,13 +2,13 @@ import React from "react"; import { SubmitHandler, useForm } from "react-hook-form"; -import { getFieldClassName } from "../general/services/getFieldClassName"; -import { useNotifications } from "../../hooks/useNotifications"; import { usePostContactInquiry } from "./hooks/usePostContactInquiry"; import { ContactInquiryFormValues } from "./models/ContactInquiryShapes"; +import { useNotifications } from "../../hooks/useNotifications"; +import { getFieldClassName } from "../general/services/getFieldClassName"; import "./css/contact-form.css"; -export const ContactForm = () => { +export function ContactForm() { const { addNotification } = useNotifications(); const { handleSubmit, @@ -26,7 +26,6 @@ export const ContactForm = () => { const { mutate: postContactInquiry, - error: backendErrors, isSuccess, isLoading, } = usePostContactInquiry(); @@ -38,7 +37,7 @@ export const ContactForm = () => { appearance: "success", }); }, - onError: (err: Error) => { + onError: () => { addNotification("There was a problem, please try again later.", { appearance: "error", }); @@ -54,6 +53,7 @@ export const ContactForm = () => { data-netlify="true" name="giantLeapInquiry" onSubmit={handleSubmit(onSubmit)} + // eslint-disable-next-line react/no-unknown-property netlify-honeypot="emailAddress" > {
    -

    - Stop Stressing. Start Shipping. -

    +

    Stop Stressing. Start Shipping.

    Fill out the form below and tell us more about your project. We’ll get back to you within a business day to start making your vision a reality.

    {isSuccess ? ( -

    - Thanks for your inquiry. We'll be in touch! -

    +

    Thanks for your inquiry. We’ll be in touch!

    ) : ( formContent )} @@ -175,4 +171,4 @@ export const ContactForm = () => {
    ); -}; +} diff --git a/apps/gatsby/src/components/contact-page/ContactUsChat.tsx b/apps/gatsby/src/components/contact-page/ContactUsChat.tsx index c9ce15e..db0024b 100644 --- a/apps/gatsby/src/components/contact-page/ContactUsChat.tsx +++ b/apps/gatsby/src/components/contact-page/ContactUsChat.tsx @@ -1,14 +1,14 @@ import React from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faArrowRight } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link } from "gatsby"; import { StaticImage } from "gatsby-plugin-image"; import "./css/contact-us-chat.css"; -export const ContactUsChat = () => ( -
    +export function ContactUsChat() { + return
    ( connect you directly with a principal engineer.

    - Let's chat + Let’s chat
    @@ -37,4 +37,4 @@ export const ContactUsChat = () => (
    -); +} diff --git a/apps/gatsby/src/components/contact-page/ContactUsHero.tsx b/apps/gatsby/src/components/contact-page/ContactUsHero.tsx index 90e3ae6..6749a50 100644 --- a/apps/gatsby/src/components/contact-page/ContactUsHero.tsx +++ b/apps/gatsby/src/components/contact-page/ContactUsHero.tsx @@ -2,11 +2,11 @@ import React from "react"; import "./css/contact-us-hero.css"; -export const ContactUsHero = () => ( -
    +export function ContactUsHero() { + return

    Contact us

    Let’s get started in making your vision a reality

    -); +} diff --git a/apps/gatsby/src/components/contact-page/GetInTouch.tsx b/apps/gatsby/src/components/contact-page/GetInTouch.tsx index d66209b..e66cc49 100644 --- a/apps/gatsby/src/components/contact-page/GetInTouch.tsx +++ b/apps/gatsby/src/components/contact-page/GetInTouch.tsx @@ -4,11 +4,11 @@ import { faEnvelope, faLocationDot, faPhone, faSms } from "@fortawesome/free-sol import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { StaticImage } from "gatsby-plugin-image"; -import { companyContactInformation } from "../../configuration/companyContactInformation"; import { ContactForm } from "./ContactForm"; +import { companyContactInformation } from "../../configuration/companyContactInformation"; import "./css/get-in-touch.css"; -export const GetInTouch = () => { +export function GetInTouch() { const { email, mailingAddress: { streetAddress, streetAddress2, city, state, zipCode }, @@ -26,7 +26,7 @@ export const GetInTouch = () => { src="../../images/decorations/alternate_circle.png" />

    Get in touch

    -

    We'd love to hear from you

    +

    We’d love to hear from you

    Traditional ways to reach out

    @@ -66,4 +66,4 @@ export const GetInTouch = () => {
    ); -}; +} diff --git a/apps/gatsby/src/components/contact-page/MediaInquiries.tsx b/apps/gatsby/src/components/contact-page/MediaInquiries.tsx index abb5e92..89b9a61 100644 --- a/apps/gatsby/src/components/contact-page/MediaInquiries.tsx +++ b/apps/gatsby/src/components/contact-page/MediaInquiries.tsx @@ -7,8 +7,8 @@ import { StaticImage } from "gatsby-plugin-image"; import "./css/media-inquiries.css"; -export const MediaInquiries = () => ( -
    +export function MediaInquiries() { + return
    ( src="../../images/contact/boom-microphone.jpg" />

    - With the media? Let's connect. + With the media? Let’s connect.

    Media and Podcast Inquiries

    @@ -35,4 +35,4 @@ export const MediaInquiries = () => (
    -); +} diff --git a/apps/gatsby/src/components/contact-page/hooks/usePostContactInquiry.ts b/apps/gatsby/src/components/contact-page/hooks/usePostContactInquiry.ts index 11d66b3..2630062 100644 --- a/apps/gatsby/src/components/contact-page/hooks/usePostContactInquiry.ts +++ b/apps/gatsby/src/components/contact-page/hooks/usePostContactInquiry.ts @@ -1,9 +1,10 @@ import { useMutation } from "@tanstack/react-query"; import axios, { AxiosError } from "axios"; + import { ContactInquiryFormValues } from "../models/ContactInquiryShapes"; -export const usePostContactInquiry = () => { - return useMutation( +export const usePostContactInquiry = () => + useMutation( async (data: ContactInquiryFormValues) => { const resp = await axios.post(`/`, data, { headers: { @@ -14,8 +15,8 @@ export const usePostContactInquiry = () => { }, { onError: (err: Error | AxiosError) => { + // eslint-disable-next-line no-console console.error(err); }, }, ); -}; diff --git a/apps/gatsby/src/components/contact-page/hooks/usePostGeneralInquiry.ts b/apps/gatsby/src/components/contact-page/hooks/usePostGeneralInquiry.ts index 07e40f5..852ed38 100644 --- a/apps/gatsby/src/components/contact-page/hooks/usePostGeneralInquiry.ts +++ b/apps/gatsby/src/components/contact-page/hooks/usePostGeneralInquiry.ts @@ -1,10 +1,9 @@ -import axios, { AxiosError } from "axios"; import { useMutation } from "@tanstack/react-query"; +import axios, { AxiosError } from "axios"; import { GetInTouchFormValues } from "../models/GetInTouchFormShapes"; -export const usePostGeneralInquiry = () => { - return useMutation( +export const usePostGeneralInquiry = () => useMutation( async (data: GetInTouchFormValues) => { const resp = await axios.post(`/`, data, { headers: { @@ -15,8 +14,8 @@ export const usePostGeneralInquiry = () => { }, { onError: (err: Error | AxiosError) => { + // eslint-disable-next-line no-console console.error(err); }, }, ); -}; diff --git a/apps/gatsby/src/components/general/Policy.tsx b/apps/gatsby/src/components/general/Policy.tsx index 3703da3..c6adf6c 100644 --- a/apps/gatsby/src/components/general/Policy.tsx +++ b/apps/gatsby/src/components/general/Policy.tsx @@ -1,29 +1,33 @@ -import React, { useEffect } from 'react'; +import React, { useEffect } from "react"; type PolicyProps = { policyKey?: string; }; -const termageddonAPIPath = 'https://app.termageddon.com/api/policy/'; +const termageddonAPIPath = "https://app.termageddon.com/api/policy/"; -export const Policy = ({ policyKey }: PolicyProps) => { +export function Policy({ policyKey }: PolicyProps) { useEffect(() => { - const policy = document.getElementById('policy'); + const policy = document.getElementById("policy"); if (policy === null || policyKey === undefined) { - console.log('Error! Could not find policy element or policy key.'); + // eslint-disable-next-line no-console + console.log("Error! Could not find policy element or policy key."); } else { + // eslint-disable-next-line camelcase const pol_key = policyKey; - const pol_extra = policy.dataset.extra ? '?' + policy.dataset.extra : ''; + // eslint-disable-next-line camelcase + const pol_extra = policy.dataset.extra ? `?${ policy.dataset.extra}` : ""; const xhr = new XMLHttpRequest(); xhr.onload = () => { policy.innerHTML = xhr.responseText; }; - xhr.onerror = function () { - policy.innerHTML = 'There has been an error loading this policy!'; + xhr.onerror = function onError() { + policy.innerHTML = "There has been an error loading this policy!"; }; - xhr.open('GET', termageddonAPIPath + pol_key + pol_extra); + // eslint-disable-next-line camelcase + xhr.open("GET", termageddonAPIPath + pol_key + pol_extra); xhr.send(); } }, [policyKey]); @@ -32,9 +36,9 @@ export const Policy = ({ policyKey }: PolicyProps) => {
    ); -}; +} diff --git a/apps/gatsby/src/components/general/Portal.tsx b/apps/gatsby/src/components/general/Portal.tsx index 048a3f3..1152505 100644 --- a/apps/gatsby/src/components/general/Portal.tsx +++ b/apps/gatsby/src/components/general/Portal.tsx @@ -5,7 +5,7 @@ import ReactDOM from "react-dom"; // Use a ternary operator to make sure that the document object is defined // const portalRoot = typeof document !== `undefined` ? document.getElementById('portal') : null -const Portal = ({ children }) => { +function Portal({ children }) { const el = useMemo(() => { if (document) { return document.createElement("div"); @@ -22,12 +22,13 @@ const Portal = ({ children }) => { portalRoot?.removeChild(el); }; } + return () => {}; }, [el]); if (el) { return ReactDOM.createPortal(children, el); } return null; -}; +} export default Portal; diff --git a/apps/gatsby/src/components/general/services/getFieldClassName.ts b/apps/gatsby/src/components/general/services/getFieldClassName.ts index 22043b7..7efb0e6 100644 --- a/apps/gatsby/src/components/general/services/getFieldClassName.ts +++ b/apps/gatsby/src/components/general/services/getFieldClassName.ts @@ -13,7 +13,7 @@ export const getFieldClassName = ({ }) => { if (errors[fieldName]) { return `${className} ${errorClassPrefix}_error`; - } else { + } return className; - } + }; diff --git a/apps/gatsby/src/components/icons/BinaryIcon.tsx b/apps/gatsby/src/components/icons/BinaryIcon.tsx index cdca890..bc8e841 100644 --- a/apps/gatsby/src/components/icons/BinaryIcon.tsx +++ b/apps/gatsby/src/components/icons/BinaryIcon.tsx @@ -1,6 +1,6 @@ import React from "react"; -export const BinaryIcon = ({ className = "", width }: { className?: string; width?: string }) => { +export function BinaryIcon({ className = "", width }: { className?: string; width?: string }) { return ( ); -}; +} diff --git a/apps/gatsby/src/components/icons/CodingScriptIcon.tsx b/apps/gatsby/src/components/icons/CodingScriptIcon.tsx index 546a540..52c0578 100644 --- a/apps/gatsby/src/components/icons/CodingScriptIcon.tsx +++ b/apps/gatsby/src/components/icons/CodingScriptIcon.tsx @@ -1,12 +1,12 @@ import React from "react"; -export const CodingScriptIcon = ({ +export function CodingScriptIcon({ className = "", width, }: { className?: string; width?: string; -}) => { +}) { return ( ); -}; +} diff --git a/apps/gatsby/src/components/icons/CommunityIcon.tsx b/apps/gatsby/src/components/icons/CommunityIcon.tsx index 859ba32..37dc215 100644 --- a/apps/gatsby/src/components/icons/CommunityIcon.tsx +++ b/apps/gatsby/src/components/icons/CommunityIcon.tsx @@ -1,12 +1,12 @@ import React from "react"; -export const CommunityIcon = ({ +export function CommunityIcon({ className = "", width = "", }: { className?: string; width?: string; -}) => { +}) { return ( - + - + - - + @@ -82,4 +90,4 @@ export const CommunityIcon = ({ ); -}; +} diff --git a/apps/gatsby/src/components/icons/DocsSignIcon.tsx b/apps/gatsby/src/components/icons/DocsSignIcon.tsx index 77ffda3..3110088 100644 --- a/apps/gatsby/src/components/icons/DocsSignIcon.tsx +++ b/apps/gatsby/src/components/icons/DocsSignIcon.tsx @@ -1,12 +1,12 @@ import React from "react"; -export const DocsSignIcon = ({ +export function DocsSignIcon({ className = "", width = "", }: { className?: string; width?: string; -}) => { +}) { return ( ); -}; +} diff --git a/apps/gatsby/src/components/icons/HiFiveIcon.tsx b/apps/gatsby/src/components/icons/HiFiveIcon.tsx index ccf4e7a..9fc6ca6 100644 --- a/apps/gatsby/src/components/icons/HiFiveIcon.tsx +++ b/apps/gatsby/src/components/icons/HiFiveIcon.tsx @@ -1,6 +1,6 @@ import React from "react"; -export const HiFiveIcon = ({ className = "", width }: { className?: string; width?: string }) => { +export function HiFiveIcon({ className = "", width }: { className?: string; width?: string }) { return ( ); -}; +} diff --git a/apps/gatsby/src/components/icons/LaptopStackIcon.tsx b/apps/gatsby/src/components/icons/LaptopStackIcon.tsx index 22fc2d3..2f043ee 100644 --- a/apps/gatsby/src/components/icons/LaptopStackIcon.tsx +++ b/apps/gatsby/src/components/icons/LaptopStackIcon.tsx @@ -1,12 +1,12 @@ import React from "react"; -export const LaptopStackIcon = ({ +export function LaptopStackIcon({ className = "", width = "", }: { className?: string; width?: string; -}) => { +}) { return ( ); -}; +} diff --git a/apps/gatsby/src/components/icons/LiftoffIcon.tsx b/apps/gatsby/src/components/icons/LiftoffIcon.tsx index ba03f5d..0dc0c84 100644 --- a/apps/gatsby/src/components/icons/LiftoffIcon.tsx +++ b/apps/gatsby/src/components/icons/LiftoffIcon.tsx @@ -1,12 +1,12 @@ import React from "react"; -export const LiftoffIcon = ({ +export function LiftoffIcon({ className = "", width = "", }: { className?: string; width?: string; -}) => { +}) { return ( ); -}; +} diff --git a/apps/gatsby/src/components/icons/RiskAssessmentIcon.tsx b/apps/gatsby/src/components/icons/RiskAssessmentIcon.tsx index 8ae0bdc..e310b58 100644 --- a/apps/gatsby/src/components/icons/RiskAssessmentIcon.tsx +++ b/apps/gatsby/src/components/icons/RiskAssessmentIcon.tsx @@ -1,12 +1,12 @@ import React from "react"; -export const RiskAssessmentIcon = ({ +export function RiskAssessmentIcon({ className = "", width = "", }: { className?: string; width?: string; -}) => { +}) { return ( - + @@ -76,4 +79,4 @@ export const RiskAssessmentIcon = ({ ); -}; +} diff --git a/apps/gatsby/src/components/icons/SendMessagesIcon.tsx b/apps/gatsby/src/components/icons/SendMessagesIcon.tsx index a4b03d1..d2b271d 100644 --- a/apps/gatsby/src/components/icons/SendMessagesIcon.tsx +++ b/apps/gatsby/src/components/icons/SendMessagesIcon.tsx @@ -1,12 +1,12 @@ import React from "react"; -export const SendMessagesIcon = ({ +export function SendMessagesIcon({ className = "", width, }: { className?: string; width?: string; -}) => { +}) { return ( ); -}; +} diff --git a/apps/gatsby/src/components/index-page/ContactForm.tsx b/apps/gatsby/src/components/index-page/ContactForm.tsx index d06117c..1563c6c 100644 --- a/apps/gatsby/src/components/index-page/ContactForm.tsx +++ b/apps/gatsby/src/components/index-page/ContactForm.tsx @@ -3,13 +3,13 @@ import React from "react"; import { StaticImage } from "gatsby-plugin-image"; import { SubmitHandler, useForm } from "react-hook-form"; -import { Tagline } from "../general/Tagline"; -import { getFieldClassName } from "../general/services/getFieldClassName"; import { useNotifications } from "../../hooks/useNotifications"; -import { usePostContactInquiry } from "./hooks/usePostContactInquiry"; -import { ContactInquiryFormValues } from "./models/ContactInquiryShapes"; +import { usePostContactInquiry } from "../contact-page/hooks/usePostContactInquiry"; +import { ContactInquiryFormValues } from "../contact-page/models/ContactInquiryShapes"; +import { getFieldClassName } from "../general/services/getFieldClassName"; +import { Tagline } from "../general/Tagline"; -export const IndexFormSection = () => { +export function IndexFormSection() { const { addNotification } = useNotifications(); const { handleSubmit, @@ -27,7 +27,6 @@ export const IndexFormSection = () => { const { mutate: postContactInquiry, - error: backendErrors, isSuccess, isLoading, } = usePostContactInquiry(); @@ -39,7 +38,7 @@ export const IndexFormSection = () => { appearance: "success", }); }, - onError: (err: Error) => { + onError: () => { addNotification("There was a problem, please try again later.", { appearance: "error", }); @@ -55,6 +54,7 @@ export const IndexFormSection = () => { data-netlify="true" name="giantLeapInquiry" onSubmit={handleSubmit(onSubmit)} + // eslint-disable-next-line react/no-unknown-property netlify-honeypot="emailAddress" > { />
    -

    - Stop Stressing. Start Shipping. -

    +

    Stop Stressing. Start Shipping.

    Fill out the form below and tell us more about your project. We’ll get back to you within a business day to start making your vision a reality.

    {isSuccess ? ( -

    - Thanks for your inquiry. We'll be in touch! -

    +

    Thanks for your inquiry. We’ll be in touch!

    ) : ( formContent )} @@ -190,4 +186,4 @@ export const IndexFormSection = () => {
    ); -}; +} diff --git a/apps/gatsby/src/components/index-page/Exasperation.tsx b/apps/gatsby/src/components/index-page/Exasperation.tsx index ea9804c..b3b4839 100644 --- a/apps/gatsby/src/components/index-page/Exasperation.tsx +++ b/apps/gatsby/src/components/index-page/Exasperation.tsx @@ -5,7 +5,7 @@ import { StaticImage } from "gatsby-plugin-image"; import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; import "./css/exasperation.css"; -export const Exasperation = () => { +export function Exasperation() { const { modal, clickHandler } = useBookCallModal(); return ( @@ -37,7 +37,7 @@ export const Exasperation = () => {

    When it comes to your software, the stakes are high. Your project should have its chance - to make lives better. That's why our custom development team collaborates with our + to make lives better. That’s why our custom development team collaborates with our clients to make sure their software solves the right problems and that they build the right products.

    @@ -48,4 +48,4 @@ export const Exasperation = () => {
    ); -}; +} diff --git a/apps/gatsby/src/components/index-page/IndexBuiltForYou.tsx b/apps/gatsby/src/components/index-page/IndexBuiltForYou.tsx index 0a2366b..c6a0080 100644 --- a/apps/gatsby/src/components/index-page/IndexBuiltForYou.tsx +++ b/apps/gatsby/src/components/index-page/IndexBuiltForYou.tsx @@ -4,8 +4,8 @@ import { StaticImage } from "gatsby-plugin-image"; import "./css/built-for-you.css"; -export const IndexBuiltForYou = () => ( -
    +export function IndexBuiltForYou() { + return
    (
    -); +} diff --git a/apps/gatsby/src/components/index-page/IndexHero.tsx b/apps/gatsby/src/components/index-page/IndexHero.tsx index 1ad684b..ec63c3c 100644 --- a/apps/gatsby/src/components/index-page/IndexHero.tsx +++ b/apps/gatsby/src/components/index-page/IndexHero.tsx @@ -1,11 +1,12 @@ import React from "react"; -import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; import { StaticImage } from "gatsby-plugin-image"; +import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; + import "./css/index-hero.css"; -export const IndexHero = () => { +export function IndexHero() { const { modal, clickHandler } = useBookCallModal(); return (
    @@ -33,4 +34,4 @@ export const IndexHero = () => { {modal}
    ); -}; +} diff --git a/apps/gatsby/src/components/index-page/IndexLaunched.tsx b/apps/gatsby/src/components/index-page/IndexLaunched.tsx index f4f8f35..94331d0 100644 --- a/apps/gatsby/src/components/index-page/IndexLaunched.tsx +++ b/apps/gatsby/src/components/index-page/IndexLaunched.tsx @@ -1,14 +1,11 @@ import React from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faArrowRight } from "@fortawesome/free-solid-svg-icons"; -import { Link } from "gatsby"; import { StaticImage } from "gatsby-plugin-image"; import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; import "./css/index-launched.css"; -export const IndexLaunched = () => { +export function IndexLaunched() { const { modal, clickHandler } = useBookCallModal(); return ( @@ -89,6 +86,6 @@ export const IndexLaunched = () => { Book My Launch Call
    -
    - ) -} \ No newline at end of file +
    + ); +} diff --git a/apps/gatsby/src/components/index-page/IndexLogos.tsx b/apps/gatsby/src/components/index-page/IndexLogos.tsx index 6fe7229..16a7d1e 100644 --- a/apps/gatsby/src/components/index-page/IndexLogos.tsx +++ b/apps/gatsby/src/components/index-page/IndexLogos.tsx @@ -3,27 +3,47 @@ import React from "react"; import "./css/index-logos.css"; import { StaticImage } from "gatsby-plugin-image"; -export const IndexLogos = () => ( -
    +export function IndexLogos() { + return
    • - +
    • - +
    • - +
    • - +
    • - +
    -); +} diff --git a/apps/gatsby/src/components/index-page/IndexPartnership.tsx b/apps/gatsby/src/components/index-page/IndexPartnership.tsx index 90985b5..443ee0c 100644 --- a/apps/gatsby/src/components/index-page/IndexPartnership.tsx +++ b/apps/gatsby/src/components/index-page/IndexPartnership.tsx @@ -1,13 +1,13 @@ import React from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCheck } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { StaticImage } from "gatsby-plugin-image"; import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; import "./css/index-partnership.css"; -export const IndexPartnership = () => { +export function IndexPartnership() { const { modal, clickHandler } = useBookCallModal(); return ( @@ -67,4 +67,4 @@ export const IndexPartnership = () => {
    ); -}; +} diff --git a/apps/gatsby/src/components/index-page/IndexScorecard.tsx b/apps/gatsby/src/components/index-page/IndexScorecard.tsx index 5a374ae..572d816 100644 --- a/apps/gatsby/src/components/index-page/IndexScorecard.tsx +++ b/apps/gatsby/src/components/index-page/IndexScorecard.tsx @@ -1,14 +1,14 @@ import React from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faArrowRight } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useModal } from "@launchware/replicator"; import { StaticImage } from "gatsby-plugin-image"; import { ScorecardModal } from "../scorecard/ScorecardModal"; import "./css/index-scorecard.css"; -export const IndexScorecard = () => { +export function IndexScorecard() { const { modal, setVisibility } = useModal(() => , { scrollToTop: false }); return ( @@ -25,7 +25,11 @@ export const IndexScorecard = () => { Success Scorecard. By answering just 21 quick questions, you’ll see if you’re set up for success – or what you need to change for you to reach your goals.

    - @@ -42,4 +46,4 @@ export const IndexScorecard = () => { ); -}; +} diff --git a/apps/gatsby/src/components/index-page/IndexShipFaster.tsx b/apps/gatsby/src/components/index-page/IndexShipFaster.tsx index 217dc0a..b0b2896 100644 --- a/apps/gatsby/src/components/index-page/IndexShipFaster.tsx +++ b/apps/gatsby/src/components/index-page/IndexShipFaster.tsx @@ -8,7 +8,7 @@ import { CommunityIcon } from "../icons/CommunityIcon"; import { DocsSignIcon } from "../icons/DocsSignIcon"; import "./css/index-ship-faster.css"; -export const IndexShipFaster = () => { +export function IndexShipFaster() { const { modal, clickHandler } = useBookCallModal(); return ( @@ -40,7 +40,7 @@ export const IndexShipFaster = () => { understanding what you have and creating a strategy for where you want to go.

    - Following our in-depth assessment, you're presented with a comprehensive + Following our in-depth assessment, you’re presented with a comprehensive report—highlighting the bottlenecks and also offering solutions, starting with the most critical areas first. With these insights, you’ll gain clarity, recapture missed opportunities, and set a definitive course for success. @@ -114,7 +114,7 @@ export const IndexShipFaster = () => {

    We’ll pull from our team of senior and junior developers to make sure we match you with the right people for your project. Then, we’ll immerse ourselves in understanding - your codebase, your unique processes, and the milestones you're aiming for. Together, + your codebase, your unique processes, and the milestones you’re aiming for. Together, we ensure that your projects not only stay on track but also achieve excellence, every single time.

    @@ -160,4 +160,4 @@ export const IndexShipFaster = () => { ); -}; +} diff --git a/apps/gatsby/src/components/index-page/IndexStopStressing.tsx b/apps/gatsby/src/components/index-page/IndexStopStressing.tsx index 08531ec..e31082a 100644 --- a/apps/gatsby/src/components/index-page/IndexStopStressing.tsx +++ b/apps/gatsby/src/components/index-page/IndexStopStressing.tsx @@ -1,15 +1,16 @@ +// TODO: This file is an orphan; delete it or resurrect it import React from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faArrowRight } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link } from "gatsby"; import { StaticImage } from "gatsby-plugin-image"; import "../../css/index.css"; import "./css/index-stop-stressing.css"; -export const IndexStopStressing = () => ( -
    +export function IndexStopStressing() { + return
    (

    We understand the challenges you may face when it comes to trusting a software development company to bring your vision to life. Delays, poor quality, and financial concerns are - valid worries. That's why we're committed to building a partnership based on trust, + valid worries. That’s why we’re committed to building a partnership based on trust, transparency, and proven results.

    When it comes to your software, the stakes are too high. Your project should have its - chance to make lives better. That's why our custom development team collaborates with our + chance to make lives better. That’s why our custom development team collaborates with our clients to make sure their software solves the right problems and that they build the right products.

    @@ -43,4 +44,4 @@ export const IndexStopStressing = () => (
    -); +} diff --git a/apps/gatsby/src/components/index-page/MoreMomentum.tsx b/apps/gatsby/src/components/index-page/MoreMomentum.tsx index f292231..d23dbb4 100644 --- a/apps/gatsby/src/components/index-page/MoreMomentum.tsx +++ b/apps/gatsby/src/components/index-page/MoreMomentum.tsx @@ -1,15 +1,16 @@ import React from "react"; +import { StaticImage } from "gatsby-plugin-image"; + import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; import { ThreeCardSection } from "../general/ThreeCardSection"; import { HiFiveIcon } from "../icons/HiFiveIcon"; import { LaptopStackIcon } from "../icons/LaptopStackIcon"; import { SendMessagesIcon } from "../icons/SendMessagesIcon"; -import decorativeSquare from ""; + import "./css/more-momentum.css"; -import { StaticImage } from "gatsby-plugin-image"; -export const MoreMomentum = () => { +export function MoreMomentum() { const { modal, clickHandler } = useBookCallModal(); const sectionContents = { @@ -55,4 +56,4 @@ export const MoreMomentum = () => {
    ); -}; +} diff --git a/apps/gatsby/src/components/layout/Footer.tsx b/apps/gatsby/src/components/layout/Footer.tsx index 06c91fd..5a7143c 100644 --- a/apps/gatsby/src/components/layout/Footer.tsx +++ b/apps/gatsby/src/components/layout/Footer.tsx @@ -1,36 +1,40 @@ -import React, { MouseEventHandler } from "react" -import { LaunchWareLogoLight } from "./LaunchWareLogoLight" -import { Link, Script } from "gatsby" -import { companySocialProfiles } from "../../configuration/getCompanySocialProfile" -import { CompanySocialIcon } from "../social/CompanySocialIcon" -import { companyContactInformation } from "../../configuration/companyContactInformation" +import React, { MouseEventHandler } from "react"; -import "./css/footer.css" -import { TrackingCodes } from "./TrackingCodes" -import { useBookCallModal } from "../book-call/hooks/useBookCallModal" -import { OptInForm } from "../opt-in/OptInForm" -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" -import { faEnvelope, faPhone, faSms } from "@fortawesome/free-solid-svg-icons" -import { UC_UI } from "../usercentrics/UsercentricsProvider" +import { faEnvelope, faPhone, faSms } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { Link } from "gatsby"; + +import { LaunchWareLogoLight } from "./LaunchWareLogoLight"; +import { TrackingCodes } from "./TrackingCodes"; +import { companyContactInformation } from "../../configuration/companyContactInformation"; +import { companySocialProfiles } from "../../configuration/getCompanySocialProfile"; +import { useBookCallModal } from "../book-call/hooks/useBookCallModal"; +import { OptInForm } from "../opt-in/OptInForm"; +import { CompanySocialIcon } from "../social/CompanySocialIcon"; +import { UC_UI } from "../usercentrics/UsercentricsProvider"; + +import "./css/footer.css"; declare global { interface Window { - UC_UI: UC_UI + UC_UI: UC_UI; } } -const Footer = () => { +function Footer() { const { modal, clickHandler } = useBookCallModal(); - const socialListItems = Object.keys(companySocialProfiles).map((network: string) => { - return
  • - }) + const socialListItems = Object.keys(companySocialProfiles).map((network: string) => ( +
  • + +
  • + )); const privacySettingsHandler: MouseEventHandler = (event) => { - event.preventDefault() + event.preventDefault(); if (window.UC_UI) { - window.UC_UI.showSecondLayer() + window.UC_UI.showSecondLayer(); } - } + }; return ( - ) + + ); } -export default Footer +export default Footer; diff --git a/apps/gatsby/src/components/layout/HeadDefaults.tsx b/apps/gatsby/src/components/layout/HeadDefaults.tsx index b746588..cab50ce 100644 --- a/apps/gatsby/src/components/layout/HeadDefaults.tsx +++ b/apps/gatsby/src/components/layout/HeadDefaults.tsx @@ -1,11 +1,20 @@ -import { Script } from "gatsby" -import React, { useEffect } from "react" -import { UsercentricsScript } from "../usercentrics/UsercentricsScript" +import React from "react"; -export const HeadDefaults = () => { - return <> - - -