{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Jhastine Macalino — Journal",
  "home_page_url": "https://jmcreativedevpro.com/journal",
  "feed_url": "https://jmcreativedevpro.com/feed.json",
  "description": "Practical writing on WordPress engineering, technical SEO, full-stack product work, QA, migrations and AI-assisted workflows.",
  "icon": "https://jmcreativedevpro.com/images/og-cover.jpg",
  "favicon": "https://jmcreativedevpro.com/favicon.svg",
  "language": "en-US",
  "authors": [
    {
      "name": "Jhastine Macalino",
      "url": "https://jmcreativedevpro.com/about",
      "avatar": "https://jmcreativedevpro.com/images/portrait.jpg"
    }
  ],
  "items": [
    {
      "id": "https://jmcreativedevpro.com/post/wedge-over-breadth",
      "url": "https://jmcreativedevpro.com/post/wedge-over-breadth",
      "title": "The wedge over breadth",
      "content_html": "<p>Most vertical SaaS tries to swallow an entire industry workflow on day one. Dentra ships the opposite — two narrow operational wedges that actually move revenue. The product brief, data model, and architecture decisions behind a SaaS that knows what it is not.</p>",
      "summary": "Most vertical SaaS tries to swallow an entire industry workflow on day one. Dentra ships the opposite — two narrow operational wedges that actually move revenue. The product brief, data model, and architecture decisions behind a SaaS that knows what it is not.",
      "image": "https://jmcreativedevpro.com/images/og-wedge.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/og-wedge.jpg",
      "date_published": "2026-06-02T09:00:00+08:00",
      "tags": [
        "Full-Stack"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/ai-agent-rules",
      "url": "https://jmcreativedevpro.com/post/ai-agent-rules",
      "title": "AGENTS.md and the architecture file you have not written yet",
      "content_html": "<p>AI coding assistants do not invent architecture — they amplify whatever rules you have already written down. AGENTS.md, CLAUDE.md, .cursor/rules and llms.txt are the new project documents, and most teams have not written them yet.</p>",
      "summary": "AI coding assistants do not invent architecture — they amplify whatever rules you have already written down. AGENTS.md, CLAUDE.md, .cursor/rules and llms.txt are the new project documents, and most teams have not written them yet.",
      "image": "https://jmcreativedevpro.com/images/og-agents.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/og-agents.jpg",
      "date_published": "2026-05-24T09:00:00+08:00",
      "tags": [
        "AI & Automation"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/live-commerce-ops",
      "url": "https://jmcreativedevpro.com/post/live-commerce-ops",
      "title": "Live commerce is an ops problem",
      "content_html": "<p>The streaming part of live selling is solved. What is not solved is the operations layer that wraps around it — Live Director run sheets, comment-driven buyer claims, stock-lock reservations, and the handoff to fulfillment.</p>",
      "summary": "The streaming part of live selling is solved. What is not solved is the operations layer that wraps around it — Live Director run sheets, comment-driven buyer claims, stock-lock reservations, and the handoff to fulfillment.",
      "image": "https://jmcreativedevpro.com/images/og-livecommerce.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/og-livecommerce.jpg",
      "date_published": "2026-05-10T09:00:00+08:00",
      "tags": [
        "Full-Stack"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/zero-downtime-wp-migrations",
      "url": "https://jmcreativedevpro.com/post/zero-downtime-wp-migrations",
      "title": "Zero-downtime WordPress migrations",
      "content_html": "<p>After 10+ live US-client migrations with no reported downtime, here is the exact pre-flight, launch and post-launch checklist I run — DNS, SSL, FTP, redirects, tracking, forms, and the small things that break sites at 3am.</p>",
      "summary": "After 10+ live US-client migrations with no reported downtime, here is the exact pre-flight, launch and post-launch checklist I run — DNS, SSL, FTP, redirects, tracking, forms, and the small things that break sites at 3am.",
      "image": "https://jmcreativedevpro.com/images/blog-2.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-2.jpg",
      "date_published": "2026-06-02T09:00:00+08:00",
      "tags": [
        "WordPress"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/monthly-seo-audit-workflow",
      "url": "https://jmcreativedevpro.com/post/monthly-seo-audit-workflow",
      "title": "My monthly SEO audit workflow",
      "content_html": "<p>Six tools, one executive-ready report, a prioritised action list the dev team can ship that sprint. The exact workflow I use every month for Signature Cleaning, Bird Dog, and the rest.</p>",
      "summary": "Six tools, one executive-ready report, a prioritised action list the dev team can ship that sprint. The exact workflow I use every month for Signature Cleaning, Bird Dog, and the rest.",
      "image": "https://jmcreativedevpro.com/images/blog-4.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-4.jpg",
      "date_published": "2026-04-04T09:00:00+08:00",
      "tags": [
        "Technical SEO"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/local-seo-pages-at-scale",
      "url": "https://jmcreativedevpro.com/post/local-seo-pages-at-scale",
      "title": "Local SEO pages at scale",
      "content_html": "<p>Building 35+ city-targeted service pages for A-TEX Roofing without falling into the \"swap the city name\" trap — the system, the QA, and the duplicate-content guardrails.</p>",
      "summary": "Building 35+ city-targeted service pages for A-TEX Roofing without falling into the \"swap the city name\" trap — the system, the QA, and the duplicate-content guardrails.",
      "image": "https://jmcreativedevpro.com/images/blog-4.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-4.jpg",
      "date_published": "2026-04-26T09:00:00+08:00",
      "tags": [
        "Technical SEO"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/bonjegs-monorepo",
      "url": "https://jmcreativedevpro.com/post/bonjegs-monorepo",
      "title": "Designing the Bonjegs monorepo",
      "content_html": "<p>Three React apps, one Node API, shared types — how the Bonjegs monorepo is structured and why npm workspaces was enough.</p>",
      "summary": "Three React apps, one Node API, shared types — how the Bonjegs monorepo is structured and why npm workspaces was enough.",
      "image": "https://jmcreativedevpro.com/images/blog-2.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-2.jpg",
      "date_published": "2026-02-28T09:00:00+08:00",
      "tags": [
        "Full-Stack"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/realtime-rider-tracking",
      "url": "https://jmcreativedevpro.com/post/realtime-rider-tracking",
      "title": "Real-time rider tracking with Socket.IO + Redis",
      "content_html": "<p>The customer wants to watch the rider move. The rider wants to broadcast their location without killing their battery. Here is how the Bonjegs delivery tracking works.</p>",
      "summary": "The customer wants to watch the rider move. The rider wants to broadcast their location without killing their battery. Here is how the Bonjegs delivery tracking works.",
      "image": "https://jmcreativedevpro.com/images/blog-2.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-2.jpg",
      "date_published": "2026-02-09T09:00:00+08:00",
      "tags": [
        "Full-Stack"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/paymongo-gcash-webhooks",
      "url": "https://jmcreativedevpro.com/post/paymongo-gcash-webhooks",
      "title": "GCash via PayMongo webhooks",
      "content_html": "<p>Idempotency is the difference between a working payments integration and a support ticket about double-charges. Here is how Bonjegs handles PayMongo webhooks safely.</p>",
      "summary": "Idempotency is the difference between a working payments integration and a support ticket about double-charges. Here is how Bonjegs handles PayMongo webhooks safely.",
      "image": "https://jmcreativedevpro.com/images/blog-3.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-3.jpg",
      "date_published": "2026-01-18T09:00:00+08:00",
      "tags": [
        "Full-Stack"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/elementor-without-templates",
      "url": "https://jmcreativedevpro.com/post/elementor-without-templates",
      "title": "Elementor without generic templates",
      "content_html": "<p>Every Elementor site I build starts from a blank canvas. Here is why generic page templates cost more time than they save, and the system I use instead.</p>",
      "summary": "Every Elementor site I build starts from a blank canvas. Here is why generic page templates cost more time than they save, and the system I use instead.",
      "image": "https://jmcreativedevpro.com/images/blog-1.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-1.jpg",
      "date_published": "2026-05-18T09:00:00+08:00",
      "tags": [
        "WordPress"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/core-web-vitals-wordpress",
      "url": "https://jmcreativedevpro.com/post/core-web-vitals-wordpress",
      "title": "Core Web Vitals on WordPress",
      "content_html": "<p>A practical optimisation pass that takes a typical Elementor site from yellow to green without ripping anything out.</p>",
      "summary": "A practical optimisation pass that takes a typical Elementor site from yellow to green without ripping anything out.",
      "image": "https://jmcreativedevpro.com/images/blog-1.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-1.jpg",
      "date_published": "2026-03-22T09:00:00+08:00",
      "tags": [
        "Performance"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/webp-images-pass",
      "url": "https://jmcreativedevpro.com/post/webp-images-pass",
      "title": "A 30-minute image pass that almost always lifts LCP",
      "content_html": "<p>When a client site is failing Core Web Vitals on mobile, the first thing I touch — almost without exception — is images. Here is the repeatable pass.</p>",
      "summary": "When a client site is failing Core Web Vitals on mobile, the first thing I touch — almost without exception — is images. Here is the repeatable pass.",
      "image": "https://jmcreativedevpro.com/images/blog-1.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-1.jpg",
      "date_published": "2025-12-14T09:00:00+08:00",
      "tags": [
        "Performance"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/ai-audit-automation",
      "url": "https://jmcreativedevpro.com/post/ai-audit-automation",
      "title": "Automating monthly audits with n8n + Python",
      "content_html": "<p>A workflow concept that turns folders of GA4 / GSC / Screaming Frog screenshots into structured DOCX reports — with a human-review checkpoint before anything ships.</p>",
      "summary": "A workflow concept that turns folders of GA4 / GSC / Screaming Frog screenshots into structured DOCX reports — with a human-review checkpoint before anything ships.",
      "image": "https://jmcreativedevpro.com/images/blog-3.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-3.jpg",
      "date_published": "2025-11-22T09:00:00+08:00",
      "tags": [
        "AI & Automation"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/cursor-ai-workflow",
      "url": "https://jmcreativedevpro.com/post/cursor-ai-workflow",
      "title": "How I use Cursor AI without shipping its mistakes",
      "content_html": "<p>Cursor accelerates the parts of development that should be fast and tedious. Architecture and review stay mine. Here is the discipline.</p>",
      "summary": "Cursor accelerates the parts of development that should be fast and tedious. Architecture and review stay mine. Here is the discipline.",
      "image": "https://jmcreativedevpro.com/images/blog-3.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-3.jpg",
      "date_published": "2025-10-30T09:00:00+08:00",
      "tags": [
        "AI & Automation"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    },
    {
      "id": "https://jmcreativedevpro.com/post/qa-as-deliverable",
      "url": "https://jmcreativedevpro.com/post/qa-as-deliverable",
      "title": "QA is part of the deliverable",
      "content_html": "<p>The pre-launch checklist that catches the bugs nobody else looks for. Forms, redirects, tracking, mobile keyboards, password managers — the unglamorous list that keeps clients happy.</p>",
      "summary": "The pre-launch checklist that catches the bugs nobody else looks for. Forms, redirects, tracking, mobile keyboards, password managers — the unglamorous list that keeps clients happy.",
      "image": "https://jmcreativedevpro.com/images/blog-1.jpg",
      "banner_image": "https://jmcreativedevpro.com/images/blog-1.jpg",
      "date_published": "2025-09-28T09:00:00+08:00",
      "tags": [
        "Craft"
      ],
      "authors": [
        {
          "name": "Jhastine Macalino",
          "url": "https://jmcreativedevpro.com/about"
        }
      ]
    }
  ]
}