diff --git a/gerrit/acls/openstack-infra/js-generator-openstack.config b/gerrit/acls/openstack-infra/js-generator-openstack.config
new file mode 100644
index 0000000000..43fd358784
--- /dev/null
+++ b/gerrit/acls/openstack-infra/js-generator-openstack.config
@@ -0,0 +1,15 @@
+[access "refs/heads/*"]
+abandon = group infra-javascript-core
+create = group infra-javascript-release
+label-Code-Review = -2..+2 group infra-javascript-core
+label-Workflow = -1..+1 group infra-javascript-core
+
+[access "refs/tags/*"]
+pushSignedTag = group infra-javascript-release
+
+[receive]
+requireChangeId = true
+requireContributorAgreement = true
+
+[submit]
+mergeContent = true
diff --git a/gerrit/projects.yaml b/gerrit/projects.yaml
index 4f78c5b4d2..55d39ea217 100755
--- a/gerrit/projects.yaml
+++ b/gerrit/projects.yaml
@@ -185,6 +185,12 @@
   description: An implementation of fs-blob-store for OpenStack's afs-based mirrors.
   groups:
     - openstack-ci
+- project: openstack-infra/js-generator-openstack
+  use-storyboard: true
+  description: Yeoman Project Management template for JavaScript Projects.
+  upstream: https://github.com/krotscheck/js-generator-openstack.git
+  groups:
+    - openstack-ci
 - project: openstack-infra/js-openstack-registry-hooks
   use-storyboard: true
   description: registry-static procedural hooks for OpenStack's NPM mirror.
diff --git a/gerritbot/channels.yaml b/gerritbot/channels.yaml
index ffc52a2d74..c3b78a274a 100755
--- a/gerritbot/channels.yaml
+++ b/gerritbot/channels.yaml
@@ -917,6 +917,7 @@ openstack-javascript:
     - x-vrif-minus-2
   projects:
     - openstack-infra/js-afs-blob-store
+    - openstack-infra/js-generator-openstack
     - openstack-infra/js-openstack-registry-hooks
     - openstack/eslint-config-openstack
   branches:
@@ -1034,6 +1035,7 @@ openstack-merges:
     - openstack-infra/jeepyb
     - openstack-infra/jenkins-job-builder
     - openstack-infra/js-afs-blob-store
+    - openstack-infra/js-generator-openstack
     - openstack-infra/js-openstack-registry-hooks
     - openstack-infra/lodgeit
     - openstack-infra/meetbot
diff --git a/jenkins/jobs/projects.yaml b/jenkins/jobs/projects.yaml
index 7f67fe50e1..363bf74b10 100644
--- a/jenkins/jobs/projects.yaml
+++ b/jenkins/jobs/projects.yaml
@@ -2766,6 +2766,15 @@
       - javascript-jobs
       - publish-to-npm
 
+- project:
+    name: js-generator-openstack
+    tarball-site: tarballs.openstack.org
+    doc-publisher-site: docs.openstack.org
+
+    jobs:
+      - javascript-jobs
+      - publish-to-npm
+
 - project:
     name: js-openstack-registry-hooks
     tarball-site: tarballs.openstack.org
diff --git a/zuul/layout.yaml b/zuul/layout.yaml
index c7e449e3d8..4025c9f386 100755
--- a/zuul/layout.yaml
+++ b/zuul/layout.yaml
@@ -3313,6 +3313,12 @@ projects:
       - name: javascript-jobs
       - name: publish-to-npm
 
+  - name: openstack-infra/js-generator-openstack
+    template:
+      - name: merge-check
+      - name: javascript-jobs
+      - name: publish-to-npm
+
   - name: openstack-infra/js-openstack-registry-hooks
     template:
       - name: merge-check