[
    {
        "type": "updated",
        "summary": "Navigation",
        "detail": "Added Services to the main menu, front and centre.",
        "entry_at": "2026-07-23T16:12"
    },
    {
        "type": "updated",
        "summary": "Contact form aligned to services",
        "detail": "Enquiry types now mirror the three core services offered.",
        "entry_at": "2026-07-23T16:10"
    },
    {
        "type": "added",
        "summary": "Services page",
        "detail": "Automation, website design, and digital marketing — built for law firms and service businesses.",
        "entry_at": "2026-07-23T16:05"
    },
    {
        "type": "added",
        "summary": "Footer service links",
        "detail": "Each service links straight to the contact form with the enquiry already selected.",
        "entry_at": "2026-07-23T15:35"
    },
    {
        "type": "updated",
        "summary": "About headline tuned for search",
        "detail": "Led with agentic AI and automation instead of the origin year — same story, better discoverability.",
        "entry_at": "2026-07-23T15:20"
    },
    {
        "type": "added",
        "summary": "This changelog",
        "detail": "The site now documents its own evolution — fittingly, an agentic website that logs itself.",
        "entry_at": "2026-07-23T15:05"
    },
    {
        "type": "added",
        "summary": "Project galleries and social rail",
        "detail": "A photo gallery with a lightbox, and a sticky Instagram rail beside each case study.",
        "entry_at": "2026-07-23T14:50"
    },
    {
        "type": "fixed",
        "summary": "About copy corrected",
        "detail": "Separated learning to code (1988) from building software professionally (1999).",
        "entry_at": "2026-07-23T14:33"
    },
    {
        "type": "added",
        "summary": "About page",
        "detail": "The story from a Commodore 64 in 1988 to agentic AI today.",
        "entry_at": "2026-07-23T13:52"
    },
    {
        "type": "fixed",
        "summary": "Menu portalled to the page root",
        "detail": "The overlay now escapes the header entirely and covers the page identically everywhere.",
        "entry_at": "2026-07-23T12:45"
    },
    {
        "type": "added",
        "summary": "Project filtering",
        "detail": "Filter by category with an animated, shareable, deep-linkable transition.",
        "entry_at": "2026-07-23T12:44"
    },
    {
        "type": "added",
        "summary": "Projects moved to the database",
        "detail": "Per-project case-study pages generated from cja_projects at build time.",
        "entry_at": "2026-07-23T12:30"
    },
    {
        "type": "added",
        "summary": "Contact form wired up",
        "detail": "Real submissions stored in the database, with validation and spam protection.",
        "entry_at": "2026-07-23T12:14"
    },
    {
        "type": "added",
        "summary": "Portraits with light/dark variants",
        "detail": "A wardrobe swap — the right shot for each theme, graded into the palette.",
        "entry_at": "2026-07-22T15:51"
    },
    {
        "type": "added",
        "summary": "Resume page",
        "detail": "Experience, ventures, a grouped skills breakdown, education, and a downloadable PDF.",
        "entry_at": "2026-07-22T15:24"
    },
    {
        "type": "bug",
        "summary": "A component import broke the build",
        "detail": "Aliasing framer-motion to its successor created a circular module reference.",
        "entry_at": "2026-07-22T15:24"
    },
    {
        "type": "fixed",
        "summary": "Motion dependency resolved",
        "detail": "Declared the real package directly instead of aliasing, ending the loop.",
        "entry_at": "2026-07-22T15:24"
    },
    {
        "type": "bug",
        "summary": "Mobile menu clipped to the header",
        "detail": "On inner pages the header's backdrop-blur trapped the fixed overlay to a thin strip.",
        "entry_at": "2026-07-22T13:44"
    },
    {
        "type": "added",
        "summary": "Full-page mobile menu",
        "detail": "A curved reveal with the hamburger morphing into a close control.",
        "entry_at": "2026-07-22T13:25"
    },
    {
        "type": "added",
        "summary": "Animated 404 page",
        "detail": "A playful full-screen 404, with a reduced-motion fallback and locally-hosted assets.",
        "entry_at": "2026-07-22T13:12"
    },
    {
        "type": "bug",
        "summary": "Hero rendered paper-on-paper in light mode",
        "detail": "A scoped colour override could not reach the already-resolved theme tokens.",
        "entry_at": "2026-07-22T12:58"
    },
    {
        "type": "fixed",
        "summary": "Ink surface scoping corrected",
        "detail": "The dark hero now overrides the compiled colour tokens directly, in both themes.",
        "entry_at": "2026-07-22T12:58"
    },
    {
        "type": "added",
        "summary": "Theme toggle",
        "detail": "Light and dark, with an ink-reveal transition that spreads from the button you click.",
        "entry_at": "2026-07-22T12:49"
    },
    {
        "type": "fixed",
        "summary": "Schema install repaired",
        "detail": "Added the standard foreign-key guard to the snapshot migration so tables load in any order.",
        "entry_at": "2026-07-22T12:42"
    },
    {
        "type": "bug",
        "summary": "Base schema failed to install",
        "detail": "A migration declared a foreign key before the table it referenced existed.",
        "entry_at": "2026-07-22T12:40"
    },
    {
        "type": "added",
        "summary": "Navigation and brand mark",
        "detail": "Header signature paired with the hanko seal; nav updated to Projects, Resume, About, Blog, Contact.",
        "entry_at": "2026-07-22T12:16"
    },
    {
        "type": "added",
        "summary": "SeedProject cloned and wired",
        "detail": "Astro frontend, PHP API, and MariaDB connected end to end.",
        "entry_at": "2026-07-22T12:05"
    },
    {
        "type": "added",
        "summary": "React added as Astro islands",
        "detail": "Interactive components hydrate only where used; the rest of the site stays static.",
        "entry_at": "2026-07-22T12:00"
    },
    {
        "type": "added",
        "summary": "Homepage built",
        "detail": "Ink hero with the signature writing itself, a typographic work index, and a full-bleed mission line.",
        "entry_at": "2026-07-22T09:15"
    },
    {
        "type": "added",
        "summary": "Brand system established",
        "detail": "Sumi-e direction — ink on washi paper, a single vermillion seal. Colour, type, and motion tokens.",
        "entry_at": "2026-07-21T16:40"
    }
]
