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 = () => ( -
Your vision deserves to see the light of day
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.
- 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}- 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 = () => {
- 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.
- 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.
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.
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.
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.
- 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.
{article.excerpt}
- 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.
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 }) => ( -Let's chat about your custom software development project.
-+ Let’s chat about your custom software development project. +
+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 = () => {Let’s get started in making your vision a reality
We'd love to hear from you
+We’d love to hear from you
- With the media? Let's connect. + With the media? Let’s connect.
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 = () => {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 = () => {