{"id":403,"date":"2025-08-27T07:42:40","date_gmt":"2025-08-27T07:42:40","guid":{"rendered":"https:\/\/paultrowler.com\/wordpress\/?page_id=403"},"modified":"2025-10-27T09:56:19","modified_gmt":"2025-10-27T09:56:19","slug":"chapter-2-feasibility-checker","status":"publish","type":"page","link":"https:\/\/paultrowler.com\/wordpress\/index.php\/chapter-2-feasibility-checker\/","title":{"rendered":"Chapter 2: Feasibility Checker"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <title>Feasibility Checker<\/title>\n  <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin \/>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;display=swap\" rel=\"stylesheet\" \/>\n  <style>\n    body { font-family: 'Inter', sans-serif; }\n    .prompt-segment { border-left: 4px solid #3b82f6; padding-left: 1rem; margin: 1rem 0; }\n    .prompt-segment h4 { font-weight: 600; color: #1e40af; }\n    .prompt-segment-content { color: #334155; } \/* darker for contrast; no italics *\/\n    .sr-only {\n      position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;\n      clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;\n    }\n    .skip-link {\n      position: absolute; left: 0; top: 0; transform: translateY(-120%);\n      background: #1d4ed8; color: #fff; padding: .5rem .75rem; border-radius: .5rem;\n    }\n    .skip-link:focus { transform: translateY(0); outline: 3px solid #93c5fd; }\n    .ring-error { box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.35); border-color: #ef4444 !important; }\n    .btn-disabled { opacity: .6; cursor: not-allowed; }\n  <\/style>\n<\/head>\n<body class=\"bg-blue-50 text-slate-800\">\n<!-- Skip link removed -->\n\n<header class=\"bg-white shadow-sm border-b border-blue-200\" role=\"banner\">\n  <div class=\"container mx-auto max-w-7xl px-4 py-6 sm:py-8\">\n    <h1 class=\"text-2xl font-bold text-blue-800 mb-2\">Feasibility Checker<\/h1>\n    <p class=\"text-sm text-slate-800\">\n      This tool helps you assess the practical feasibility of your doctoral project before committing to design decisions.\n      Paste your project summary first, then add any constraints and context. The prompt on the right updates as you type.\n    <\/p>\n  <\/div>\n<\/header>\n\n<main id=\"main\" class=\"container mx-auto max-w-7xl px-4 py-6 sm:py-8\" role=\"main\">\n  <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6\" role=\"region\" aria-label=\"Feasibility checker workspace\">\n\n    <!-- Left column -->\n    <div class=\"bg-white p-6 rounded-xl shadow-md border border-blue-200 space-y-6\" role=\"region\" aria-labelledby=\"proj-sum-heading\">\n\n      <!-- Project Summary -->\n      <section id=\"pt-project-summary-block\" class=\"relative isolate\" role=\"region\" aria-labelledby=\"proj-sum-heading\">\n        <div class=\"rounded-2xl border border-blue-200 bg-white shadow-sm\">\n          <div class=\"border-b border-blue-100 bg-blue-50\/60 rounded-t-2xl px-4 sm:px-6 py-3 flex items-center gap-3\">\n            <div class=\"h-8 w-8 flex items-center justify-center rounded-full bg-blue-100 text-blue-800 font-semibold\" aria-hidden=\"true\">1<\/div>\n            <h2 id=\"proj-sum-heading\" class=\"m-0 text-base sm:text-lg font-semibold text-blue-900\">Paste your doctoral project summary<\/h2>\n          <\/div>\n          <div class=\"p-4 sm:p-6 space-y-3\">\n            <p class=\"text-sm text-blue-900 leading-relaxed\">\n              Paste the short summary you created in\n              <a href=\"https:\/\/paultrowler.com\/wordpress\/index.php\/helping-ai-to-understand-your-research-project\"\n                 target=\"_blank\" rel=\"noopener noreferrer\"\n                 class=\"underline text-blue-700 hover:text-blue-900\"\n                 aria-label=\"Chapter 1 \u2014 Helping AI Understand Your Research Project (opens in a new tab)\">\n                Chapter 1 \u2014 Helping AI Understand Your Research Project\n              <\/a>\n              <span class=\"sr-only\">(opens in a new tab)<\/span>.\n              Tools on this page will tailor their feedback using this summary.\n            <\/p>\n            <div>\n              <label for=\"pt-project-summary\" class=\"block text-sm font-medium text-blue-900 mb-2\">Your project summary<\/label>\n              <textarea id=\"pt-project-summary\"\n                        class=\"w-full min-h[13rem] min-h-[13rem] rounded-xl border border-blue-300 focus:border-blue-600 focus:ring-2 focus:ring-blue-300 px-3 py-2 text-[15px] leading-relaxed\"\n                        placeholder=\"Paste or type your updated doctoral project summary here...\"\n                        aria-describedby=\"pt-project-summary-help\"><\/textarea>\n              <!-- Help sentence removed; keep empty container so aria-describedby remains valid -->\n              <div id=\"pt-project-summary-help\" class=\"mt-2 text-xs text-slate-700\"><\/div>\n              <div class=\"mt-3 flex flex-wrap items-center gap-2 text-sm text-blue-900\/90\">\n                <button type=\"button\" id=\"pt-clear-summary\"\n                        class=\"inline-flex items-center gap-2 rounded-full border border-blue-300 px-3 py-1 hover:bg-blue-50 active:bg-blue-100 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n                        aria-controls=\"pt-project-summary\">\n                  <svg class=\"h-4 w-4\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n                    <path d=\"M6 18L18 6M6 6l12 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                  <\/svg>\n                  Clear\n                <\/button>\n              <\/div>\n            <\/div>\n            <div class=\"rounded-xl border border-blue-200 bg-blue-50 px-4 py-3\" role=\"note\" aria-labelledby=\"tip-heading\">\n              <div class=\"flex items-start gap-3\">\n                <div class=\"mt-0.5 h-5 w-5 flex items-center justify-center rounded-full bg-white text-blue-700 font-bold\" aria-hidden=\"true\">\u2139\ufe0e<\/div>\n                <p id=\"tip-heading\" class=\"m-0 text-[13.5px] leading-relaxed text-blue-900\">\n                  <span class=\"font-medium\">Tip:<\/span> For cross-session memory, create a <span class=\"font-semibold\">Project<\/span> in ChatGPT (e.g., \u201cMy Doctoral Research\u201d) and run all chats inside it. Your project details will then persist across tools.\n                <\/p>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <!-- Constraints -->\n      <section class=\"relative isolate\" role=\"region\" aria-labelledby=\"constraints-heading\">\n        <div class=\"rounded-2xl border border-blue-200 bg-white shadow-sm\">\n          <div class=\"border-b border-blue-100 bg-blue-50\/60 rounded-t-2xl px-4 sm:px-6 py-3 flex items-center gap-3\">\n            <div class=\"h-8 w-8 flex items-center justify-center rounded-full bg-blue-100 text-blue-800 font-semibold\" aria-hidden=\"true\">2<\/div>\n            <h2 id=\"constraints-heading\" class=\"m-0 text-base sm:text-lg font-semibold text-blue-900\">Deadline &amp; constraints<\/h2>\n          <\/div>\n          <div class=\"p-4 sm:p-6 space-y-3\">\n            <p class=\"text-sm text-blue-900 leading-relaxed\">\n              Add any known limits (time, access, ethics, data availability, skills, costs, permissions, travel, languages, etc.).\n            <\/p>\n            <label for=\"feasibility-details\" class=\"block text-sm font-medium text-blue-900 mb-2\">Deadline, constraints, and assumptions<\/label>\n            <textarea id=\"feasibility-details\"\n                      class=\"w-full min-h-[10rem] rounded-xl border border-blue-300 focus:border-blue-600 focus:ring-2 focus:ring-blue-300 px-3 py-2 text-[15px] leading-relaxed\"\n                      placeholder=\"e.g., submission deadline: 30 June; part-time over 3 years; one university site; ethics panel meets monthly; likely n\u224824 interviews; limited transcription budget; GDPR constraints; gatekeeper in student services is supportive.\"\n                      aria-describedby=\"feasibility-details-help\"><\/textarea>\n            <div id=\"feasibility-details-help\" class=\"mt-2 text-xs text-slate-700\">\n              Be specific: include dates, numbers, costs, known risks, and any dependencies.\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/section>\n\n    <\/div>\n\n    <!-- Right column -->\n    <aside class=\"bg-white p-6 rounded-xl shadow-md border border-blue-200 flex flex-col\" role=\"complementary\" aria-labelledby=\"prompt-preview-heading\">\n      <h2 id=\"prompt-preview-heading\" class=\"text-xl font-bold mb-4 text-blue-800\">Prompt to the AI (Visible excerpt)<\/h2>\n\n      <!-- Live region so SR users hear updates as they type -->\n      <div id=\"prompt-output\"\n           class=\"text-slate-800 leading-relaxed text-base bg-blue-50 p-4 rounded-lg min-h-[200px] flex-grow border border-blue-200 overflow-y-auto\"\n           role=\"region\" aria-live=\"polite\" aria-atomic=\"false\" aria-labelledby=\"prompt-preview-heading\">\n      <\/div>\n\n      <!-- Inline error\/status -->\n      <div id=\"action-status\"\n           class=\"mt-3 hidden rounded-md border border-red-300 bg-red-50 px-3 py-2 text-sm text-red-800\"\n           role=\"alert\"><\/div>\n\n      <!-- Single combined action button -->\n      <div class=\"mt-4\">\n        <button id=\"copy-open-button\"\n                type=\"button\"\n                class=\"w-full flex items-center justify-center gap-2 py-2 px-4 rounded-md shadow-sm text-sm font-medium text-white bg-blue-700 hover:bg-blue-800 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-600 btn-disabled\"\n                aria-describedby=\"copy-status copy-security-note\"\n                aria-disabled=\"true\"\n                title=\"Fill in both fields to enable\">\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" \/>\n          <\/svg>\n          <span id=\"copy-button-text\">Copy &amp; open in ChatGPT<\/span>\n        <\/button>\n\n        <!-- Security \/ clipboard note (visible) -->\n        <p id=\"copy-security-note\" class=\"mt-2 text-[11px] leading-snug text-slate-600\">\n          For security reasons, the browser can only copy the text to your clipboard. You still need to paste it manually into ChatGPT after the new tab opens.\n        <\/p>\n\n        <!-- SR-only live status for copy feedback -->\n        <div id=\"copy-status\" class=\"sr-only\" role=\"status\" aria-live=\"polite\"><\/div>\n      <\/div>\n    <\/aside>\n  <\/div>\n<\/main>\n\n<footer class=\"container mx-auto max-w-7xl px-4 pb-8 text-xs text-slate-700\" role=\"contentinfo\">\n  \u00a9 2025 Professor Paul Trowler. All rights reserved. For personal use only for educational purposes; no part of this code to be copied, reused, or sold.\n<\/footer>\n\n<script>\n  const summaryEl   = document.getElementById('pt-project-summary');\n  const detailsEl   = document.getElementById('feasibility-details');\n  const outputEl    = document.getElementById('prompt-output');\n  const copyOpenBtn = document.getElementById('copy-open-button');\n  const copyBtnTxt  = document.getElementById('copy-button-text');\n  const copyStatus  = document.getElementById('copy-status');\n  const actionStatus= document.getElementById('action-status');\n\n  \/\/ Clear summary\n  document.getElementById('pt-clear-summary').addEventListener('click', () => {\n    summaryEl.value = '';\n    summaryEl.focus();\n    renderPrompt();\n    updateActionState();\n  });\n\n  [summaryEl, detailsEl].forEach(el => {\n    el.addEventListener('input', () => { renderPrompt(); updateActionState(); });\n    el.addEventListener('change', () => { renderPrompt(); updateActionState(); });\n  });\n\n  function sanitize(text){\n    return (text || '').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;');\n  }\n\n  function visiblePrompt(){\n    const summary  = sanitize(summaryEl.value).replace(\/\\n\/g,'<br>') || '<em>(no project summary provided yet)<\/em>';\n    const details  = sanitize(detailsEl.value).replace(\/\\n\/g,'<br>') || '<em>(no constraints\/context provided yet)<\/em>';\n\n    return `\n<p>Please act as a feasibility-only advisor. Your task is to judge whether the project, as currently framed, is practically <strong>doable<\/strong> within the stated constraints. Focus on scope, access\/permissions &amp; ethics, data availability\/quality, skills, timeline, costs, and risk management. Do not give general \u2018quality\u2019 advice unless it directly affects feasibility.<\/p>\n\n<p><em>Differentiate between factors the researcher can modify versus those largely outside their control, and prioritise issues by severity. Order recommendations from High \u2192 Medium \u2192 Low severity.<\/em><\/p>\n\n<div class=\"prompt-segment\">\n  <h4>My project summary<\/h4>\n  <div class=\"prompt-segment-content\">${summary}<\/div>\n<\/div>\n\n<div class=\"prompt-segment\">\n  <h4>Deadline &amp; constraints<\/h4>\n  <div class=\"prompt-segment-content\">${details}<\/div>\n<\/div>\n\n<p><strong>Output format (feasibility-focused):<\/strong><\/p>\n<ol class=\"list-decimal ml-6\">\n  <li><strong>Feasibility recommendations (3\u20135 bullets):<\/strong> <em>Order by severity (High\/Medium\/Low)<\/em>. Begin each bullet with <code>[Controllable]<\/code> or <code>[Uncontrollable]<\/code>, then write \u201c<em>Recommendation \u2014 because &lt;explicit feasibility reason&gt;<\/em>\u201d. Reasons must reference feasibility factors (e.g., scope vs time, access\/ethics, data viability, cost, skills).<\/li>\n\n  <li><strong>Exactly 2 feasibility-critical questions:<\/strong> The two uncertainties that most affect feasibility if unresolved.<\/li>\n\n  <li><strong>Feasibility snapshot:<\/strong> Verdict (likely \/ borderline \/ unlikely) + a 2\u20133 sentence justification tied to the constraints above.<\/li>\n\n  <li><strong>Revised Project Summary (feasibility-adjusted, \u2248 original length):<\/strong> Only change elements necessary to make it feasible (state the key adjustments).<\/li>\n\n  <li><strong>Socratic follow-up (2 probing feasibility questions back to the researcher):<\/strong> Ask only after giving the evaluation above, and keep them tightly focused on feasibility blockers (access, timescale, ethics, data sufficiency).<\/li>\n<\/ol>\n`; }\n\n  function hiddenDirectives(){\n    \/\/ Feasibility-only internal guidance (prepended on copy).\n    return [\n      'Act strictly as a feasibility advisor for doctoral research (no general quality\/editing unless it affects feasibility).',\n      'Differentiate controllable vs uncontrollable factors; label each recommendation [Controllable] or [Uncontrollable].',\n      'Prioritise by severity and order recommendations High \u2192 Medium \u2192 Low.',\n      'Anchor all recommendations to explicit feasibility reasons: scope\/time, access\/permissions & ethics, data availability\/quality, skills, timeline, costs, risks.',\n      'Use the exact phrasing pattern for bullets: \"Recommendation \u2014 because <explicit feasibility reason>\".',\n      'Response structure: (1) 3\u20135 feasibility recommendations with reasons; (2) exactly 2 feasibility-critical questions; (3) feasibility snapshot + short justification; (4) Revised Project Summary (feasibility-adjusted).',\n      'Tone: supportive, concise, action-oriented. Avoid overwhelming the user.',\n      'After delivering the four sections above, then and only then ask two short Socratic-style feasibility follow-up questions aimed at surfacing hidden risks in access, ethics, or timeline.'\n    ].join('\\\\n');\n  }\n\n  function renderPrompt(){\n    outputEl.innerHTML = visiblePrompt();\n  }\n\n  function fieldsFilled(){\n    return summaryEl.value.trim().length > 0 && detailsEl.value.trim().length > 0;\n  }\n\n  function updateActionState(){\n    const ok = fieldsFilled();\n    if (ok) {\n      copyOpenBtn.classList.remove('btn-disabled');\n      copyOpenBtn.removeAttribute('aria-disabled');\n      copyOpenBtn.removeAttribute('title');\n      actionStatus.classList.add('hidden');\n      summaryEl.classList.remove('ring-error');\n      detailsEl.classList.remove('ring-error');\n    } else {\n      copyOpenBtn.classList.add('btn-disabled');\n      copyOpenBtn.setAttribute('aria-disabled', 'true');\n      copyOpenBtn.setAttribute('title', 'Fill in both fields to enable');\n    }\n  }\n\n  async function copyAndOpen(){\n    \/\/ Failsafe: block if fields are empty\n    if (!fieldsFilled()) {\n      actionStatus.textContent = 'Please complete both fields (project summary and constraints) before proceeding.';\n      actionStatus.classList.remove('hidden');\n      copyStatus.textContent = 'Action blocked: missing required input.';\n      if (summaryEl.value.trim().length === 0) {\n        summaryEl.classList.add('ring-error');\n        summaryEl.focus();\n      } else {\n        detailsEl.classList.add('ring-error');\n        detailsEl.focus();\n      }\n      return;\n    }\n\n    \/\/ Clear any previous error styles\n    actionStatus.classList.add('hidden');\n    summaryEl.classList.remove('ring-error');\n    detailsEl.classList.remove('ring-error');\n\n    const combined = hiddenDirectives() + '\\n\\n' + outputEl.innerText.trim();\n\n    try {\n      if (navigator.clipboard && window.isSecureContext) {\n        await navigator.clipboard.writeText(combined);\n      } else {\n        const ta = document.createElement('textarea');\n        ta.value = combined;\n        document.body.appendChild(ta);\n        ta.select();\n        ta.setSelectionRange(0, 99999);\n        document.execCommand('copy');\n        document.body.removeChild(ta);\n      }\n      copyBtnTxt.textContent = 'Copied!';\n      copyStatus.textContent = 'Prompt copied to clipboard.';\n      copyOpenBtn.classList.remove('bg-blue-700','hover:bg-blue-800','focus:ring-blue-600');\n      copyOpenBtn.classList.add('bg-green-700','hover:bg-green-800','focus:ring-green-600');\n\n      \/\/ Open ChatGPT in a new tab after successful copy\n      const win = window.open('https:\/\/chatgpt.com', '_blank', 'noopener');\n      if (!win) {\n        \/\/ Pop-up blocked: we silently do nothing here; no user-facing warning message injected\n      }\n\n      setTimeout(()=>{\n        copyBtnTxt.textContent='Copy & open in ChatGPT';\n        copyStatus.textContent = '';\n        copyOpenBtn.classList.remove('bg-green-700','hover:bg-green-800','focus:ring-green-600');\n        copyOpenBtn.classList.add('bg-blue-700','hover:bg-blue-800','focus:ring-blue-600');\n      }, 1400);\n    } catch(e){\n      copyBtnTxt.textContent = 'Copy failed';\n      copyStatus.textContent = 'Copy failed. Select and copy manually.';\n      actionStatus.textContent = 'Copy failed. Please select and copy manually, then open chatgpt.com.';\n      actionStatus.classList.remove('hidden');\n      setTimeout(()=>{\n        copyBtnTxt.textContent='Copy & open in ChatGPT';\n        copyStatus.textContent = '';\n      }, 1400);\n    }\n  }\n\n  copyOpenBtn.addEventListener('click', copyAndOpen);\n\n  \/\/ --- Self-tests (console) ---\n  (function tests(){\n    try {\n      const vp = visiblePrompt();\n      console.assert(vp.includes('feasibility-only advisor'), 'T1 fail: not feasibility-only');\n      console.assert(vp.includes('Differentiate between factors the researcher can modify'), 'T2 fail: missing controllable\/uncontrollable instruction');\n      console.assert(vp.includes('Order recommendations from High \u2192 Medium \u2192 Low') || vp.includes('Order by severity'), 'T3 fail: missing severity ordering');\n      console.assert(vp.includes('[Controllable]') || vp.includes('[Uncontrollable]'), 'T4 fail: missing labels requirement');\n      console.assert(vp.includes('Feasibility recommendations'), 'T5 fail: missing recommendations section');\n      console.assert(vp.includes('Exactly 2 feasibility-critical questions'), 'T6 fail: missing exactly-2 feasibility questions');\n      console.assert(vp.includes('Feasibility snapshot'), 'T7 fail: missing snapshot');\n      console.assert(vp.includes('Revised Project Summary'), 'T8 fail: missing revised summary');\n      console.assert(vp.includes('Socratic follow-up'), 'T9 fail: Socratic step missing \/ out of order');\n\n      \/\/ DOM exists\n      console.assert(document.getElementById('pt-project-summary'), 'T10 fail: missing summary textarea');\n      console.assert(document.getElementById('feasibility-details'), 'T11 fail: missing details textarea');\n      console.assert(document.getElementById('copy-open-button'), 'T12 fail: missing combined button');\n\n      \/\/ Render works\n      renderPrompt();\n      console.assert(outputEl.innerHTML && outputEl.innerHTML.length > 0, 'T13 fail: output not rendered');\n\n      \/\/ Button disabled initially\n      updateActionState();\n      console.assert(copyOpenBtn.getAttribute('aria-disabled') === 'true', 'T14 fail: button should be disabled when empty');\n\n      console.info('Feasibility Checker: self-tests passed');\n    } catch(err){\n      console.warn('Feasibility Checker: self-tests error', err);\n    }\n  })();\n\n  \/\/ Initial render + button state\n  renderPrompt();\n  updateActionState();\n<\/script>\n<!-- Copyright 2025 Professor Paul Trowler. All rights reserved. For personal use only for educational purposes, no part of this code to be copied, reused or sold. -->\n<\/body>\n<\/html>\n\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Feasibility Checker Feasibility Checker This tool helps you assess the practical feasibility of your doctoral project before committing to design decisions. Paste your project summary first, then add any constraints and context. The prompt on the right updates as you type. 1 Paste your doctoral project summary Paste the short summary you created in Chapter [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-403","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=403"}],"version-history":[{"count":22,"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/403\/revisions"}],"predecessor-version":[{"id":852,"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/403\/revisions\/852"}],"wp:attachment":[{"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}