Jill Website

repo: ~/Projects/jill-website · 8 commits · 0 in last 24h, 0 in last 7d ·

Search the build

8 commits indexed

  1. db59fa4 2026-05-31 Add per-site favicon (kills /favicon.ico 404)
  2. e405522 2026-05-19 security: upgrade rel=noopener to rel=noopener noreferrer on every target=_blank
  3. 5f718fe 2026-05-19 security: 404-guard snapshot/backup paths in both server entrypoints
  4. 6087759 2026-05-19 .gitignore: broaden to exclude snapshot/backup/swap files
  5. 53b173b 2026-05-11 security: scrub hardcoded admin password from CLAUDE.md + add helmet dep
  6. 6852df5 2026-05-11 security: remove express.static('.') — was exposing .env over HTTP
  7. 6058b65 2026-05-07 tighten .gitignore: add missing standing-rule patterns (tmp/ .DS_Store build/)
  8. e97ed54 2026-05-04 [overnight] pre-debate baseline

Authors

Agents used

  • security-auditor1

Skills used

  • /backup2
  • /server2
  • /favicon1
  • /yoga1
  • /surf1
  • /tour1
  • /coverage1
  • /swap1
  • /sed1
  • /patch1
  • /lock1

Creative ideas + design notes

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

e405522 · 2026-05-19 · security: upgrade rel=noopener to rel=noopener noreferrer on every target=_blank
noopener alone prevents window.opener tampering but still leaks the
Referer header to third-party destinations. Adding noreferrer closes
that side-channel — every outbound restaurant/yoga/surf/tour link in
the inline HTML template (server.js + auto-generated index.html) and
the EJS partials (index, culinary-delights, surfing, yoga-wellness)
now ships the full noopener noreferrer pair.

60 occurrences upgraded across 6 files. Verified zero bare
rel=noopener occurrences remain outside node_modules/coverage.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5f718fe · 2026-05-19 · security: 404-guard snapshot/backup paths in both server entrypoints
Adds a defense-in-depth Express middleware (runs BEFORE express.static)
that returns 404 for any request path ending in .bak / .bak.* / .pre-* /
.orig / .rej / .swp / ~. Applied to both:

- server.js (standalone fallback)
- src/server.ts (PM2 production entrypoint via dist/server.js)

Pairs with the .gitignore broadening in 6087759 — even if a snapshot
file slips into public/ via a sloppy edit, it never serves over HTTP.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6087759 · 2026-05-19 · .gitignore: broaden to exclude snapshot/backup/swap files
Prevents editor/sed/patch artifacts (.bak, .pre-*, .orig, .rej, .swp,
~) from being staged or served — defense-in-depth alongside the
runtime 404-guard middleware.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
53b173b · 2026-05-11 · security: scrub hardcoded admin password from CLAUDE.md + add helmet dep
CLAUDE.md was committing the live admin password 'DWSecure2024!' as
plaintext doc — anyone who cloned the repo had prod credentials. Replaced
with a pointer to ADMIN_PASSWORD env var.

helmet was already require()'d in server.js but missing from
package.json/lock — npm install would fail cold. Adding it now.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6852df5 · 2026-05-11 · security: remove express.static('.') — was exposing .env over HTTP
express.static('.') on the project root was making .env, server.js, node_modules,
package.json, etc. fetchable as static files. .env contains real SMTP_PASS and
DB_PASSWORD. Anything that needs to be public must live in public/.

Found by security-auditor sweep 2026-05-11.

File tree

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

Other build journals

← Jf Fabrics Recrawl  ·  all 4 projects  ·  Jim Gravity →

Export

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

rendered in 0ms