Mono Repo Overview

The digital mono-repo drives several front-end and backend applications build on Node.js, Next.js, Hapi.js and deployed and hosted on AWS EC2. Applications built by the monorepo share many utilities, configs, UI elements, build processes. The repo is primarily divided by:

  • Utilities & UI/UX: The Modules-js directory host utilities and UX, each directory in the ./modules-js/ is an (internal) NPM module[1].

  • Services: The core application, web apps and servers live in the ./services-js directory. These services use many of the internal node modules on the ./modules-js directory, they are imported into each services as node dependencies.

  • Deprecated/Decommissioned Services:

    • official header: old header banner scrapper script written in the Ruby programming language.

    • deploy process: Deploy process (scripts, configs, etc.) used to deploy each services to AWS using Travis and Percy

      • Percy: deprecated

      • Travis: deprecated

(Internal) Node Modules

  • config-babel

    • Config files/setting for babel ... Babel is a JS compiler that allows the use of newer versions of JavaScript (ES6+) that also supports older browsers.

      • Allows the use of syntax transformations, polyfills, JSX, TypeScript, etc.

  • config-typescript

    • Configs for TypeScript, import these to use the same settings as other services in the monorepo.

  • deploy-tools

    • (DEPRECATED) Scripts used to deploy the monorepo services to AWS

  • form-common

    • Utilities and helpers for HTML forms and validation. Imported by several services, but only commissions-app is the only one left make use of it.

  • graphql-typescript

    • GraphQL typing utilities, provides compatibility with older versions of GraphQL and TypeScript.

  • hapi-common

    • Common Hapi helpers for our servers. These are middleware and methods used for routing assets, handling HTTP Headers, error reporting (through rollbar), etc.

  • hapi-next

    • Helpers for running Next from Hapi. Directs server routes to Next.js routes/app pages.

  • mssql-common

    • Common utilities for connecting to SQL Server Databases.

      • Used in:

        • registry-certs

        • commissions-app

  • mssql-typescript

    • Wrapper for SQL-TypeScript to handle version dependencies

      • Used in:

        • commissions-app

  • next-client-common

    • Utilities for Next.js client apps. This is part of the _app.tsx main app entry point for the services it is used in. It has helpers for Analytics, Fetching from GraphQL, Screen Reader, RouterListeners,

      • Used in:

        • access-boston

        • permit-finder

        • registry-certs

  • percy-common (NO IN USE)

    • Utilities for running Percy snapshots.

      • Used in:

        • react-fleet

        • access-boston

        • commissions-app

        • permit-finder

        • public-notices

        • registry-certs

  • srv-decrypt-env

    • KMS decryption for our environment variables. Used in all our services.

  • storybook-common

    • Common configuration for our projects' Storybooks.

  • react-fleet

    • Components for using Fleet in our webapps. This is the UI/UX components library used in all our apps.

General App Architecture

The web apps, in ./services-js, make use of the some or most of the modules above to some degree. For UX

Services (Web App + Services/Servers)

  • Access-Boston

  • Registry-Certs

[1] Internal node modules are js that are not hosted by NPM.org, they only require the package.json created by npm init, setup the project entry-point, usually ./src/main.js. The code can be used as a regular npm module by using the project's name on the package.json to use it as dependancy on your projects package.json.

Last updated

Was this helpful?