{"slug":"project-portfolio-viewer","total":3,"limit":100,"offset":0,"since":null,"commits":[{"hash":"c9c5cf2","date":"2026-05-19 15:14:54 -0700","author":"Steve Abrams","subject":"add sort+density controls, .bak/.pre- 404 middleware, noopener noreferrer","body":"- /api/projects and / now honor ?sort= query param via sortProjects()\n- sort <select> (newest/oldest/name/type/size) + density <input range>\n  added to filters bar, both persist to localStorage (ppv.sort/ppv.density)\n  and hydrate BEFORE first render\n- middleware 404-guard rejects any path matching .bak/.backup/.orig/.pre-\n- window.open Open-Project button passes 'noopener,noreferrer' features\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"8198e0e","date":"2026-05-19 15:13:11 -0700","author":"Steve Abrams","subject":"untrack portfolio-viewer.ts.backup + broaden .gitignore (.backup/.pre-/.orig)","body":"Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"763b975","date":"2026-05-06 10:25:45 -0700","author":"Steve Abrams","subject":"initial scaffold (gitify-all 2026-05-06)","body":""}]}