Applications & tools for Community-Based Organizations (CBOs) to work together more effectively
Перейти к файлу
Jonathan Marcello cd9cb99167 fix offline test lint error 2022-05-25 01:47:48 -04:00
.devcontainer update devcontainer ports 2022-03-10 20:11:18 +00:00
.github Update pull_request_template.md 2022-04-07 10:36:20 -04:00
.husky update husky.sh 2021-09-03 14:37:11 -07:00
.vim upgrade to yarn 3 2021-08-25 17:06:29 -07:00
.vscode merge main 2021-12-03 22:41:53 +00:00
.yarn library updates 2022-03-04 14:17:15 -08:00
packages fix offline test lint error 2022-05-25 01:47:48 -04:00
scripts add script for estimating localization costs 2022-03-15 11:10:04 -07:00
.eslintignore library updates 2022-03-04 14:17:15 -08:00
.eslintrc add playwright tests and update project structure to allow for it 2022-05-20 13:27:11 -04:00
.gitattributes Merged PR 53554: greenlight -> resolve in code; add robots.txt 2021-07-13 21:41:34 +00:00
.gitignore add playwright tests and update project structure to allow for it 2022-05-20 13:27:11 -04:00
.lintstagedrc.json update lintstaged 2022-03-04 15:03:34 -08:00
.prettierignore upgrade to yarn 3.2 2022-03-04 10:40:52 -08:00
.prettierrc.json update prettierrc 2021-10-01 15:46:36 -07:00
.vsts-ci.yml remove deployment onto ms infra steps 2021-09-02 10:44:15 -07:00
.yarnrc.yml upgrade to yarn 3.2 2022-03-04 10:40:52 -08:00
CODE_OF_CONDUCT.md Merged PR 54772: Rename packages 2021-08-13 00:53:05 +00:00
CONTRIBUTING.md Merged PR 54772: Rename packages 2021-08-13 00:53:05 +00:00
DEVELOPMENT.md Merged PR 54772: Rename packages 2021-08-13 00:53:05 +00:00
LICENSE Merged PR 54772: Rename packages 2021-08-13 00:53:05 +00:00
README.md Added small section on localization in the readme. 2022-03-18 16:15:04 -04:00
babel.config.js Merged PR 53235: move codeql to separate task 2021-07-02 23:01:51 +00:00
encodeFirebaseConfig.mjs remove console.log from api layer 2021-10-04 09:59:09 -07:00
package.json fix tests failing on ci 2022-05-25 01:44:43 -04:00
tsconfig.json typescript updates 2021-05-04 13:06:30 -07:00
yarn.lock fix tests failing on ci 2022-05-25 01:44:43 -04:00

README.md

Community-Based Organization Operations Suite (CBO Suite)

The CBO Suite is a case-management web application that enables CBOs and members of CBOs to work together more effectively.

Developing

Prerequisites

  • NodeJS LTS Release
  • Yarn v1 global installation (npm i -g yarn)
  • docker-compose OR a MongoDB connection string defined in the environment variable DB_CONNECTION_STRING.

If you are using GitHub Codespaces with the provided devcontainer, these prerequisites are provided.

To start the application:

> yarn
> yarn start:db // (optional) for local development
> yarn assets:
> yarn start:

Branch & Release Strategy

Environments & Mapped Branches:

  • dev branch: synchronized w/ integration environment.
  • staging branch: synchronized w/ staging environment.
  • main branch: synchronized w/ production & demo environments.

Active development is performed in feature branches and synchronized into the dev branch as it stabilizes. When a sprint completes, the dev branch is merged into the staging branch. When the release is approved, the staging branch will be merged into the main

Development Branches: The following branch naming patterns are utilized for different kinds of efforts within the project. All branches should target the dev branch, except for hotfix branches, which may target both dev and main.

  • Bugfixes: fix/*
  • Features: feature/*
  • Hotfix: hotfix/*
  • CI: ci/*
  • Documentation: docs/*
  • Testing: test/*
  • Refactoring: refactor/*

Localization

The application is developed to support multiple locales. Text displayed to the user, either directly on the site or through emails (ex: password reset) will use the locale selected by the user to determine the language. To achieve this, all text displayed to the user must be read from asset files and must not be hardcoded in the application.

There are two places in the application where localized strings exist:

Both of those projects have a locales subfolder (src/locales). In turn, each supported locale will have a subfolder in the locale folder. The text to display is captured in JSON files structured by locale folder. The JSON files are heirarchical key -> value pairs that map keys to their display text values. For example, the following details basic text keys for the page title and account header.

{
  "pageTitle": "My Profile",
  "_pageTitle.comment": "Page title displayed in the browser tab",
  "account": {
    "header": {
      "title": "My Profile",
      "_title.comment": "Header title text",
      "userName": "Username",
      "_userName.comment": "Username field label",
      "userSince": "User since",
      "_userSince.comment": "User since field label",
      "numOfAssignedEngagements": "# of Currently Assigned Requests",
      "_numOfAssignedEngagements.comment": "# of Currently Assigned Requests for Assistance field label",
      "totalEngagementCompleted": "Total Requests Completed",
      "_totalEngagementCompleted.comment": "Total Requests Completed field label"
    }
  }
}

A few things to note from the above:

  • account.header.title would be used in the application to display My Profile
  • The keys starting with an _ and ending with .comment do not need to be translated as they are informational only

When it comes time to display text to the user, the application will use the specified locale to lookup the text to use by key. The locale will default to en-US if not otherwise specified. Furthermore, if a key does not exist for the specified locale, then the text will be taken from the en-US locale file.

To update the displayed text, it is sufficient to update the locale JSON files. Once these files have been updated and pushed to the appropriate branch, the updated text will be picked up by the application.

Operations & Deployment

The GitHub Actions CI workflow is used to automate the deployment of the app in accordance with the branching strategy described above. The infrastructure required for an instance of the application is:

  1. A MongoDB compatible database. We use CosmosDB with MongoDB driver.
  2. A NodeJS web-server environment for the GraphQL API.
  3. A static website deployment (Azure Blob Storage/S3) for the web application. This may be CDN-hosted or self-hosted in static storage.
  4. A SendGrid account for sending automated emails (e.g. password reset emails).
  5. (optional) A Firebase account for In-App Notifications.

Configuration

The application uses the config package to manage configuration settings per hosted environment. The following environment variables may be defined to override configuration settings:

  • API environment variables

    • DB_CONNECTION_STRING (required): The MongoDB connection string for the database.
    • JWT_SECRET (strongly recommended): A secret, random string used for salting JWT tokens.
    • SENDGRID_API_KEY (required for email): The SendGrid API key.
    • EMAIL_FROM (required for email): The email address used for sending automated emails.
    • CONTACT_US_EMAIL (required for email): The email address used for customer support.
    • PORT (optional): the port the application is running on. This is provided by default from the Azure App Service runtime.
    • FIREBASE_AUTH_URI (optional): The Firebase Auth URI for the Firebase account.
    • FIREBASE_TOKEN_URI (optional): The Firebase Token URI for the Firebase account.
    • FIREBASE_AUTH_PROVIDER_X509_CERT_URL (optional): The Firebase Auth Provider X509 Cert URL for the Firebase account.
    • FIREBASE_TYPE (optional): The Firebase type for the Firebase account.
    • FIREBASE_PROJECT_ID (optional): The Firebase project ID for the Firebase account.
    • FIREBASE_PRIVATE_KEY_ID (optional): The Firebase private key ID for the Firebase account.
    • FIREBASE_PRIVATE_KEY (optional): The Firebase private key for the Firebase account.
    • FIREBASE_CLIENT_EMAIL (optional): The Firebase client email for the Firebase account.
    • FIREBASE_CLIENT_ID (optional): The Firebase client ID for the Firebase account.
    • FIREBASE_CLIENT_X509_CERT_URL (optional): The Firebase client X509 Cert URL for the Firebase account.
  • Web App environment variables

    • API_URL (required): The URL of the GraphQL API this webapp will communicate with.
    • SOCKET_URL (required): The URL of the sockets API this webapp will communicate with.