Code Monkey home page Code Monkey logo

newjersey / dol-mcnj-main Goto Github PK

View Code? Open in Web Editor NEW
9.0 5.0 0.0 252.46 MB

One-stop shop for individuals exploring career advice, training opportunities, and funding to further their employment potential across the State of New Jersey

Home Page: https://mycareer.nj.gov/

License: MIT License

JavaScript 0.97% TypeScript 3.97% HTML 0.01% Shell 0.06% SCSS 0.73% TSQL 94.16% Python 0.09%
career career-development careers civic-tech government jobs jobsearch jobseeker labor newjersey

dol-mcnj-main's Introduction

My Career NJ

build

Overview

This repo is the home for the My Career NJ web app (mycareer.nj.gov), a one-stop shop for New Jerseyans seeking to explore training programs, in-demand career insights, and data-driven career advice custom-tailored to users’ experiences. Note that this repository does not yet include Career Navigator.

Architecture

  • The frontend is written in Typescript, a single page app built with React using the create-react-app setup.
  • The backend is written in Typescript, with an Express-based server API.
  • The databases include multiple PostgreSQL tables (which are imported from raw CSV files stored in backend/data directory). For more information on the tables, see the data_model guide.
  • The entire app is deployed to production Amazon Web Services (AWS) instances in a Node 18 environment. We use CircleCI for continuous integration/deployment.

References

Getting started

After cloning this repo, run through the following steps to run the app locally.

Install prerequisites

If you are using a newer Mac (Apple Silicon), you will likely need to install jq. Run brew install jq or install a pre-built binary here.

Install node dependencies

./scripts/install-all.sh

Set up Postgres DB

  1. If not already installed, install postgres

  2. Create postgres database on your local machine:

psql -c 'create database d4adlocal;' -U postgres
  1. Run database migrations from d4ad directory:
./scripts/db-migrate.sh

Note: If you get a key error when running the script, make sure that you have the correct DB password for the user postgres updated in the code. It assumes the password is an empty string, but it will be what you entered when you initially set up the postgres user after installation. You need to update it in database.json and the fall-back value in app.ts.

Run app locally

In one terminal window, start backend dev server:

./scripts/backend-start.sh

In another window, start frontend dev server. It should automatically open up localhost:3000 in your browser.

./scripts/frontend-start.sh

Development

Pushing changes

Always push via ship-it (why?)

./scripts/ship-it.sh

CI/CD

We use circleci for CI/CD and deploy both the user research environment to Google Cloud Platform (GCP) environments. Pipelines for AWS prod, test, dev incoming. Our pipeline is:

  1. npm install (frontend and backend)
  2. run all unit tests (frontend and backend)
  3. build code and run feature tests
  4. deploy to GCP User Research2 environment (reach out to developer for URL or look in D4AD User Research 2 App Engine settings)
  5. Manual approval step - go to CircleCI build and "prod-approval" step, and click "Approve" button.
  6. deploy to GCP User Research2 environment

Environment Variables

Amazon Web Services

TBD

Feature Flags

This will likely change as features are rolled out.

  • REACT_APP_FEATURE_MULTILANG - Enable/disable multi-language support in the React app.
  • REACT_APP_FEATURE_CAREER_PATHWAYS - Toggle the display of career pathways feature as well as any reference to it.
  • REACT_APP_FEATURE_CAREER_NAVIGATOR - Toggle the display of the Career Navigator landing page as well as any references to it.
  • REACT_APP_FEATURE_PINPOINT - Show or hide any instance of the Pinpoint email collection tool.
Database

Dev, QA, and production databases are hosted in AWS as SQL instances running PostgreSQL.

  • DB_DEV_PASS - Password for postgres user in dev environment
CareerOneStop

Dev and prod environments use a CareerOneStop account owned by NJ Office of Innovation.

  • CAREER_ONESTOP_USERID - account username used both in dev and prod
  • CAREER_ONESTOP_AUTH_TOKEN - account auth token used both in dev and prod
O*NET
  • ONET_BASEURL - O*NET account base URL (dev + prod)
  • ONET_USERNAME- O*NET account username (dev + prod)
  • ONET_PASSWORD- O*NET account password (dev + prod)
Contentful GraphQL Content API
  • BASE_URL - Typically https://graphql.contentful.com
  • ENVIRONMENT - master, unless you have multiple environments
  • SPACE_ID - Your project's unique space ID
Sentry
General
  • IS_CI - boolean flag for whether environment is deployed using continuous integration
  • NO_COLOR
  • ZIPCODE_BASEURL
  • ZIPCODE_API_KEY

Deployment

Generally, developers won't have to do this - we have automated deploys to dev and prod via circleci.

Build frontend, build backend, compile all into one directory:

./scripts/build.sh

Start the production server (frontend & backend):

./scripts/prod-start.sh

Testing and linting

Use these two scripts below in order to run our normal testing flows, which include:

To run all jest tests, and linting:

./scripts/test-all.sh

To run cypress feature tests:

./scripts/feature-tests.sh

Tools and libraries

  • UI Components: We use a combination of Material UI React components and modular CSS from the New Jersey Web Design System, which is a customized version of the U.S. Web Design System.
  • Internationalization (i18n): We use the i18next library to implement the logic of storing English and Spanish content and switching between the two on the client-side. All the content is stored in JSON files in frontend/src/locales.
  • Routing: We add client-side routing to this single page app using the Reach Router library, similar to the more common React Router.
  • User engagement: We track user engagement using Google Analytics, including pageviews and specific event-based interactions that we implement manually in different parts of the app, such as tracking what filters a user clicks on the training search page. Please request access from the NJ Office of Innovation in order to view our analytics dashboards.
  • Accessibility: We have automated a11y tests that run as part of our Cypress feature tests using the cypress-axe package. We also use tools such as axe DevTools and WAVE Chrome extensions to do manual checks.
  • Data APIs: We fetch data from the following Web APIs: O*NET Web API, CareerOneStop. To access API keys to set as environment variables, request access for the NJInnovation Bitwarden account, and see the "Training Explorer Secrets" file in it.
  • SDKs - We use AWS SDK for JavaScript for Node.js to collect user email address signups and retrieve secrets on the back-end.

Dependency inversion

This repo uses good-fences to enforce module boundaries. Most importantly, the backend and frontend cannot import from each other.

Additionally, fences are used in the backend subdirectories to enforce dependency inversion. The routes and database folders depend on the interfaces defined in domain (only - not on each other), and domain is not allowed to import from any of these implementation directories.

Fences are enforced via a linting-like command that will fail when any violations are flagged:

npm --prefix=backend run fences
npm --prefix=frontend run fences

dol-mcnj-main's People

Contributors

aloverso avatar bodnarbm avatar chelseakr avatar cpenalosa avatar denish-fearless avatar dependabot[bot] avatar derekkinsman avatar github-actions[bot] avatar leslyrevenge avatar namanaman avatar revengeles avatar rossdakin avatar scwambach avatar skyfaerie avatar sun-mountain avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

dol-mcnj-main's Issues

Intercom Implementation and Onboarding

  • Implement FAQ pages
  • Implement Intercom Widget with Macros to FAQ pages
  • settle on number of intercom seats
  • Create FAQ content for explorers
  • Create FAQ content for counselors
  • Create FAQ content for providers
  • Product Training and Onboarding

Update Merge Credentials Script

  • updated script provides new credentialstype column
  • update documentation
  • update update etpl instructions
  • update decision log

Weekly Data Uploads

  • Upload new ETPL data to Training Explorer on weekly basis
  • Improve documentation for running data migrations
  • Investigate potential automations to reduce upload time

Project Key Learnings

Three sections to focus on: Mission, Approach, Learnings.
Explore potential co-launch with Sour and Shedlight with their Case Study

Research: Conduct Interviews with CBOs

  • Complete CBO screening and begin conducting CBO interviews (Shedlight)
  • Compile List of member candidates identified by CBOs received during interviews (Shedlight)

Partnerships Framework

  • Sour and Shedlight to present a roadmap describing activities to build sustainable partnerships with CBOs and training seekers
  • Design principles for outreach content for end users
  • Strategies for building partnerships with CBOs on workforce-related issues

Multi-language Support

Translate FAQ pages for training seekers, counselors, and training providers.

  • NJInnovate has capability to translate Spanish, determine additional languages required

Spanish Translations

Em knows what program outcomes mean in detail

As Em,
I want know the context of the data I'm seeing,
So that I have a better understanding of how it applies to a program's outcome


GIVEN I'm on desktop
AND I'm on the individual training page
IF I click on the information icon next to an outcome
THEN I see a description of what that data means
IF I click on the X on the window that appears
THEN that description disappears

GIVEN I'm on mobile
AND I'm on the individual training page
IF I click on the information icon next to program outcome
THEN I see a description of what that program outcome means
IF I click on the X on that window
THEN that description disappears

Desktop
Mobile

Inspiration: https://navigator.business.nj.gov/onboarding then select "formed and registered"

As Em and as Cary, I want to see what worker-related benefits I may be eligible for

As Em,
I want to know what benefits I'm eligible for,
So that I can plan holistically for my training experience

As Cary,
I want to know what benefits my customers are eligible for,
So that I can help them more in the situation that they're in.

GIVEN
I'm on the Training Explorer resources page
OR
I'm on the counselor and case manager resources page
THEN
I can see a link to the Benefits Eligibility Calculator somewhere on the page

Certification Data

Credentials need to be expanded from training descriptions and credential columns into an array field with the following:

  • Degree
  • Certification
  • License
  • Industry Valued Credential

Research: Member Sessions (Virtual / In-person)

  • Conduct 14-16 member sessions, approximately 50% in person and 50% over Zoom. (Shedlight)
  • Synthesis of CBO and member interviews, problem definitions, and key insights (Crystal / NJDOL / Shedlight)

As Em, I want to able to share a training opportunity from the Training Explorer

As Em,
I want to be able to bookmark training opportunities
So that I can share them with people and look at them for later.

GIVEN I'm on the training details page
THEN I see a button that says "Copy a link to this training opportunity"
IF I click on that button
THEN The page's URL will be copied to my clipboard and I see a tooltip that lets me know

AND I see a button that says "Save and print this training opportunity"
IF I click on that button
THEN Then the page will download to user's computer

AND I see a button that says "Learn more about funding options"
IF I click on that button
THEN I am taken the Financial Support page for more information.

Desktop
Tablet
Mobile

As Em, I want to contact a support agent to answer questions about the Training Explorer or other related questions

As Em,
I want to be able to talk to someone about a training opportunity
So that I know that someone is out there to help answer my questions

GIVEN I'm on the Training Explorer
THEN I can see a chat widget in the bottom right corner
IF I click on the Intercom chat widget
THEN I will see a window open up to allow me to chat with a real person

BLOCKERS: Requires Intercom setup and Product Training

Tool Update Recommendations

  • Sour and Shedlight to provide a list of high level recommendations on the next product development cycle
  • Add existing information to persona definition and create new personas based on the pain points heard from CBOs and training seekers
  • Sour and Shedlight to present visual summaries (live illustrations) of co-creation sessions and insights.

As Em, I want to know more about this website and who made it.

As Em,
I want to learn more about the Training Explorer and who built it,
So that I can start to build trust with the information I'm seeing on the website.

GIVEN I'm on the home page
THEN I will see a link to Contact Us in the footer
IF I click on the link
THEN I will see information about how the Training Explorer website was built and how to get in touch if I have more questions.

Inspiration: https://business.nj.gov/contact-us

Desktop
Tablet
Mobile

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.