Summary
Replace the current manual setup flow (install Node → clone repo → npm install → set REACT_APP_* env vars → npm start) with a single-command installer that launches a styled web wizard in the user's browser to handle the whole first-run experience.
Why
Right now, getting up and running requires the user to:
- Confirm Git + Node 18+ are installed
- Clone the repo
- Run
npm install
- Manually set four
REACT_APP_* environment variables for Jira and Confluence
- Decide whether to load the Alma Security demo data or start clean
- Run
npm start
For the GRC / CPA-pivoting-into-cyber audience this tool is built for, steps 4–5 are the highest-friction points — a lot of those users are not comfortable in a terminal setting environment variables. A guided installer would meaningfully widen the on-ramp without changing what the tool is.
Proposed Architecture
1. Bootstrap script (install.sh / install.ps1)
- Verifies Node 18+ and Git
- Clones the repo to a chosen directory (or uses CWD if already cloned)
- Runs
npm install
- Spawns a small local Node HTTP server on a fixed port (e.g.
localhost:31338)
- Opens the user's default browser to that URL
2. Local installer server (Node, no extra runtime)
- Serves the wizard's HTML/CSS/JS
- Exposes a few JSON endpoints the wizard calls:
GET /api/system — Node version, Git presence, existing .env detection
POST /api/credentials — writes Jira/Confluence values to .env.local
POST /api/seed — loads or skips the Alma Security demo dataset
POST /api/launch — kicks off npm start and reports the dev server URL
- Shuts itself down after the wizard finishes
3. Wizard UI (HTML + minimal JS, styled to look like a desktop installer)
Steps, modeled on a typical left-rail installer pattern:
- System Detection — Node version, Git, existing install detection ("Found existing
.env.local — reuse, overwrite, or back up?")
- Prerequisites — install missing dependencies, surface errors clearly
- Atlassian Credentials (optional, skippable) — Jira instance URL + token, Confluence instance URL + token, with a "Test connection" button per pair
- Demo Data — load Alma Security case study, start blank, or import an existing assessment export (CSV / encrypted backup)
- Encryption Setup (optional) — set a default password for encrypted exports, or skip
- Validation — confirm the dev server starts, all endpoints respond, credentials work
- Done — auto-opens
http://localhost:3000 and prints next steps
Existing .env.local should auto-back-up to .env.local.backup-{ISO_TIMESTAMP} before being overwritten.
What the user types
curl -sSL https://csf-profile.example.com/install.sh | bash
…or, for users who want to inspect the script first:
git clone https://github.com/CPAtoCybersecurity/csf_profile.git
cd csf_profile && ./install.sh
Both end at the same wizard.
Why this approach over alternatives
- vs. Electron / Tauri desktop app: no notarization, no signing, no per-OS binaries, no ~100MB download. Reuses the Node toolchain the project already requires.
- vs. CLI prompts (
inquirer-style): much friendlier for non-terminal-native GRC users, supports validation/test-connection buttons, easier to add screenshots and inline help.
- vs. Docker: Docker is already noted as planned for
_future/ — a web installer is complementary, not a replacement, and unblocks users who don't want to run Docker locally.
Scope / non-goals for v1
- ✅ macOS + Linux bash bootstrap
- ✅ Windows PowerShell bootstrap
- ✅ Atlassian credentials, demo data seeding, encryption password
- ✅
.env.local backup-before-overwrite
- ❌ Auto-installing Node (instruct + link to nodejs.org if missing — same as current README)
- ❌ Continuous-monitoring / GRC platform features (out of scope for the assessment tool itself)
- ❌ Hosted / multi-user installer (this is local-only)
Acceptance criteria
References
- Current manual setup section in this repo's README
Related / follow-ups
- Could share the same installer scaffolding with the planned Docker setup (
_future/docker/) — wizard could offer "local Node" or "Docker" as an install mode in a later version.
- A
--headless flag on install.sh for power users who want to skip the wizard and pass everything as env vars / CLI args (useful for CI and reproducible setups).
Summary
Replace the current manual setup flow (install Node → clone repo →
npm install→ setREACT_APP_*env vars →npm start) with a single-command installer that launches a styled web wizard in the user's browser to handle the whole first-run experience.Why
Right now, getting up and running requires the user to:
npm installREACT_APP_*environment variables for Jira and Confluencenpm startFor the GRC / CPA-pivoting-into-cyber audience this tool is built for, steps 4–5 are the highest-friction points — a lot of those users are not comfortable in a terminal setting environment variables. A guided installer would meaningfully widen the on-ramp without changing what the tool is.
Proposed Architecture
1. Bootstrap script (
install.sh/install.ps1)npm installlocalhost:31338)2. Local installer server (Node, no extra runtime)
GET /api/system— Node version, Git presence, existing.envdetectionPOST /api/credentials— writes Jira/Confluence values to.env.localPOST /api/seed— loads or skips the Alma Security demo datasetPOST /api/launch— kicks offnpm startand reports the dev server URL3. Wizard UI (HTML + minimal JS, styled to look like a desktop installer)
Steps, modeled on a typical left-rail installer pattern:
.env.local— reuse, overwrite, or back up?")http://localhost:3000and prints next stepsExisting
.env.localshould auto-back-up to.env.local.backup-{ISO_TIMESTAMP}before being overwritten.What the user types
curl -sSL https://csf-profile.example.com/install.sh | bash…or, for users who want to inspect the script first:
Both end at the same wizard.
Why this approach over alternatives
inquirer-style): much friendlier for non-terminal-native GRC users, supports validation/test-connection buttons, easier to add screenshots and inline help._future/— a web installer is complementary, not a replacement, and unblocks users who don't want to run Docker locally.Scope / non-goals for v1
.env.localbackup-before-overwriteAcceptance criteria
localhost, never sends credentials anywhereREACT_APP_*variables can be configured through the UI and written to.env.local.env.localis backed up with timestamp before overwriteTest connectionworks for both Jira and Confluence credentialsnpm startis running when the user lands on the appinstall.shis auditable (single file, readable, no obfuscation) — users cancurland read it before piping to bashReferences
Related / follow-ups
_future/docker/) — wizard could offer "local Node" or "Docker" as an install mode in a later version.--headlessflag oninstall.shfor power users who want to skip the wizard and pass everything as env vars / CLI args (useful for CI and reproducible setups).