Establishes the deploy baseline on main so the admin agent's publish/rollback has a clean starting point. Everything built to date: sumi-e brand system, homepage, projects (DB-driven case studies), resume, about, services + website-design detail, contact form + DB, changelog, favicon + share card. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DoFYZY9gkGPNDqZ7NuEa9a
19 lines
964 B
SQL
19 lines
964 B
SQL
-- Richer project detail pages: a photo gallery and a grouped skills breakdown.
|
|
--
|
|
-- Both are JSON, same reasoning as the categories/metrics columns already on
|
|
-- this table: small, per-row, repeating lists that never need to be queried
|
|
-- across projects. A gallery image belongs to exactly one project; normalising
|
|
-- it into cja_project_images would add a table and a join to store what is
|
|
-- effectively an ordered list.
|
|
--
|
|
-- gallery : [ { "src": "/projects/x/1.jpg", "alt": "...", "caption": "..." }, ... ]
|
|
-- skills : [ { "group": "Engineering", "items": ["API design", "..."] }, ... ]
|
|
--
|
|
-- `links` already exists and is JSON — no change needed. It now carries more
|
|
-- keys: { "live": "...", "instagram": "...", "github": "..." }.
|
|
|
|
ALTER TABLE `cja_projects`
|
|
ADD COLUMN `gallery` longtext DEFAULT NULL
|
|
CHECK (json_valid(`gallery`)) AFTER `metrics`,
|
|
ADD COLUMN `skills` longtext DEFAULT NULL
|
|
CHECK (json_valid(`skills`)) AFTER `stack`;
|