Norma Sdcc Pitch

repo: ~/Projects/norma-sdcc-pitch · 17 commits · 1 in last 24h, 1 in last 7d ·

Search the build

17 commits indexed

  1. 77b4310 2026-07-27 migrate GoDaddy auth → Bearer PAT (TK-10 key rotation); sso-key fallback retained
  2. 6628681 2026-06-03 gitignore: add missing standard excludes (tmp/ dist/ build/ .next/)
  3. 536b25a 2026-05-31 Link favicon.svg in head (use branded SVG, not .ico fallback)
  4. e7cc6ea 2026-05-31 Add per-site favicon (kills /favicon.ico 404)
  5. 6be4a5a 2026-05-21 harden(auth): refuse to boot pitch deck in NODE_ENV=production when env passwords missing
  6. 88191f5 2026-05-21 fix(auth): replace plain-text password compare with scrypt + timingSafeEqual
  7. 418a7c6 2026-05-21 feat(auth): rate-limit POST /login on norma-sdcc-pitch (10/15min per IP, 30min lockout)
  8. c6eb87e 2026-05-20 add: dashboard modals — click priority cards / loop cards / cron cards opens detail modal with extended sections; +3 XP per modal opened; Vault section deployed with full token form
  9. 948a924 2026-05-20 add: section 11 Token Vault — 6 categories (AI / Email / Advocacy / Productivity / Data / Norma internals), 21 token slots, password-typed inputs with show/hide, last4 masking on read, delete + bulk save
  10. 51ce968 2026-05-20 add: browser-playable explainer video banner at top of pitch viewer — Steve's cloned voice, HTML5 <video>, served from /explainer.mp4 (17 MB)
  11. 76506bb 2026-05-20 fix: demo mode short-circuit — when NORMA_BASE=demo, /api/run-example serves canned mocks instantly (no live-fetch attempt). always returns status+ms+source so frontend never shows undefined
  12. c03fe2c 2026-05-20 fix: live demo mode — canned realistic mock responses for /api/run-example when Norma backend unreachable; UI shows ◆ DEMO MODE vs ◆ LIVE tags + explanatory note
  13. 9383603 2026-05-20 add: sdcc + steve login gate, ElevenLabs voice cloning script for explainer video, hardened DEPLOY-NOW.sh
  14. 502c282 2026-05-20 hero: lead with 'A CRM that fits SDCC's work. Not the other way around.'
  15. 16362c0 2026-05-20 add: 'Why custom CRM?' section — head-to-head vs Salesforce/EveryAction/HubSpot across 8 axes + hybrid play + honest risks + 'the real question'
  16. 2907114 2026-05-20 add: top-5 priorities, reluctant-adopter, companies-are-databases, wix integration + UX/UI principles, glossary (80 terms across 10 categories), 2 new vocab badges
  17. 43cd061 2026-05-20 initial scaffold — lecture-style SDCC pitch viewer with quizzes + XP + agent catalog + Q&A cheat-sheets

Authors

Agents used

  • none detected

Skills used

  • /login2
  • /run-example2
  • /after2
  • /favicon1
  • /proc1
  • /environ1
  • /pitch1
  • /rate-limit1
  • /hide1
  • /explainer1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

6be4a5a · 2026-05-21 · harden(auth): refuse to boot pitch deck in NODE_ENV=production when env passwords missing
Was: prod boot with unset SDCC_PASSWORD/STEVE_PASSWORD silently fell back
to hard-coded defaults (Pulse-2026 / DWSecure2024!) and logged a warning.
That's the worst kind of credential drift — nobody notices until it leaks.

Now: in NODE_ENV=production, ALL configured passwords must be set as env
vars. If any are missing, process.exit(2) with a stderr explanation of
exactly which ones to set. Dev (NODE_ENV != production) is unchanged —
defaults still allowed for convenience, single warning per default used.

Verified: prod (with env vars set) still boots clean + good-pw login
works. Negative test (env -i NODE_ENV=production node server.js) exits
with the refusal message + code 2.
88191f5 · 2026-05-21 · fix(auth): replace plain-text password compare with scrypt + timingSafeEqual
Was:
  if (LOGINS[u] && password === LOGINS[u])  ← plaintext compare, timing-leak

Now:
  scrypt-hash env-var plaintexts at module load (N=16384, keylen=64,
  random per-user salt). Compare submitted password via scrypt + the same
  salt, then crypto.timingSafeEqual against the stored hash. Plaintexts
  are scrubbed from process.env immediately after hashing so they don't
  sit in /proc/<pid>/environ for the life of the process.

No new deps — uses node built-in crypto.scryptSync. Defaults
(Pulse-2026 / DWSecure2024!) preserved for dev convenience; a stderr
warning fires when NODE_ENV=production and the env var is unset.

Verified live: 3 wrong-pw → 302 each, right-pw → 302 + Set-Cookie,
process.env no longer contains SDCC_PASSWORD/STEVE_PASSWORD.
418a7c6 · 2026-05-21 · feat(auth): rate-limit POST /login on norma-sdcc-pitch (10/15min per IP, 30min lockout)
Public pitch deck at https://pitch.sdcc.agentabrams.com/login had zero
rate-limit + plain-text password compare. The plain-text compare is a
separate concern flagged for follow-up; this commit only addresses the
brute-force vector.

Pattern matches Norma's rate-limit (lib/rate-limit.ts) but kept inline
since this project is single-file Express with no util layer:
- in-memory Map keyed by IP (X-Forwarded-For aware — nginx in front)
- 10 fails per 15-min window → 30-min lockout
- success clears counter
- 429 with Retry-After + a small HTML page when locked
- Map auto-cleans stale entries every 5 min via setInterval().unref()
2907114 · 2026-05-20 · add: top-5 priorities, reluctant-adopter, companies-are-databases, wix integration + UX/UI principles, glossary (80 terms across 10 categories), 2 new vocab badges
- priorities section ranks the 5 SDCC needs (email coordination / inbound / graphics / wix site / wix UX-UI) with pain → solution → before/after → agent-pill links
- reluctant_adopter answers 7 common objections + Tuesday-2pm before/after narrative
- companies_are_databases callout with 6-row shift table (Website → API, etc)
- wix_integration with 5 ranked integration paths (forms→webhook, velo fetch, iframe embed, structured intake, CMS write-back) + 6 UX/UI principles
- glossary with 10 categories, 80 terms, search, category chips, expand-collapse, mark-as-learned XP, 2 new badges (Vocab Starter, Vocab Champ)

File tree

13 files tracked. Click any to browse the source at HEAD.

Other build journals

← Nineoh Guide  ·  all 4 projects  ·  Nova Recolor →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 1ms