diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 342675dde81dc14b261a68040ea3887e652bd2a8..156aaea310d3c4c0a98c7b4f7503546cacdfc0ec 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,99 +1,96 @@
 variables:
   GITLAB_TOKEN: '${CI_JOB_TOKEN}'
-  NODE_IMAGE_NAME: ${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_SLUG}
-
-include:
-  - project: 'ghsc/hazdev/pipeline-build-template'
-    ref: '1.1.3'
-    file: 'templates/library.yml'
+  NODE_IMAGE_NAME: ${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_SLUG}--node
 
 stages:
+  - init
   - node-image
-  - test
+  - build
   - publish
 
-# Do not run for merge requests
-workflow:
-  rules:
-    - if: $CI_COMMIT_TAG
-    - if: $CI_COMMIT_BRANCH
-
-####
-# Template: GitLab runner tags
-####
-.dev-tags:
-  tags:
-    - development
-
 ####
-# Template: Run Node
+# Stage: init
 ####
 
-.node:
-  image: ${NODE_IMAGE_NAME}
-  extends:
-    - .tags::development
-  before_script:
+Init:
+  artifacts:
+    paths:
+      - node_modules
+  image: ${DEVOPS_REGISTRY}usgs/node:16
+  script:
     - npm ci
+  stage: init
 
 ####
 # Stage: Node Image
 ####
 
 Build Node Image:
-  extends:
-    - .dind
-    - .tags::build
+  image: ${DEVOPS_REGISTRY}docker:19.03-git
+  needs: []
   script:
     - |
       docker build \
-        --build-arg FROM_IMAGE=${DEVOPS_REGISTRY}usgs/node:latest \
+        --build-arg FROM_IMAGE=${DEVOPS_REGISTRY}usgs/node:16 \
         --file "Dockerfile" \
         --pull \
         --tag ${NODE_IMAGE_NAME} \
         .
     - docker push ${NODE_IMAGE_NAME}
+  services:
+    - alias: docker
+      name: ${DEVOPS_REGISTRY}docker:19.03-dind
   stage: node-image
+  tags:
+    - build
+  variables:
+    DOCKER_DRIVER: overlay2
 
 ####
-# Stage: test
+# Stage: Build
 ####
 
-Build Angular:
+.node:
+  image: ${DEVOPS_REGISTRY}usgs/node:16
   needs:
-    - Build Node Image
-  stage: test
-  extends: .node
+    - Init
+  stage: build
+  tags:
+    - development
+
+Build Angular:
+  extends:
+    - .node
   script:
     - cd example
     - npm i
     - npm run build
 
-Lint:
-  needs:
-    - Build Node Image
-  stage: test
-  extends: .node
+Lint Project:
+  extends:
+    - .node
   script:
-    - npm run tslint
+    - npm run lint
 
 ####
-# Stage: publish
+# Stage: Publish
 ####
 
 Publish npm:
-  needs:
-    - Build Node Image
-  stage: publish
   image: ${NODE_IMAGE_NAME}
-  extends: .dev-tags
   only:
-    - tags@ghsc/nshmp/disagg-d3
-  before_script:
-    - echo '//code.usgs.gov/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}' >> .npmrc
-    - npm ci
+    - tags
+  script:
     - git config user.email "${GITLAB_USER_EMAIL}"
     - git config user.name "${GITLAB_USER_NAME}"
-  script:
+    - npm run build
+    - |
+      cat <<-EO_CONFIG > .npmrc
+      @${CI_PROJECT_ROOT_NAMESPACE}:registry=https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/
+      //${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}
+      EO_CONFIG
     - npx standard-version --release-as ${CI_COMMIT_TAG} --skip.commit --skip.changelog
     - npm publish --access public
+  stage: publish
+  tags:
+    - development
diff --git a/package.json b/package.json
index 7b4fde1dab01b726c2c8a806d496930833ae1824..c671291e89efb78eaf4a891f502eefc7e407aebe 100644
--- a/package.json
+++ b/package.json
@@ -5,12 +5,12 @@
   "main": "src/index.js",
   "types": "types/index.d.ts",
   "scripts": {
-    "start": "cd example && npm i && npm run start",
+    "fix": "npm run tslint -- --fix",
+    "lint": "tslint -c tslint.json 'types/**/*.d.ts' 'src/**/*.d.ts'",
     "npm-cli-login": "npm-cli-login",
-    "pre-commit": "pretty-quick --staged && npm run tslint",
+    "pre-commit": "pretty-quick --staged && npm run lint",
     "pre-push": "npm run pre-commit",
-    "tslint": "tslint -c tslint.json 'types/**/*.d.ts' 'src/**/*.d.ts'",
-    "tslint:fix": "npm run tslint -- --fix",
+    "start": "cd example && npm i && npm run start",
     "test": "echo \"Error: no test specified\" && exit 1"
   },
   "repository": {