{"id":278,"date":"2025-08-09T07:23:00","date_gmt":"2025-08-09T07:23:00","guid":{"rendered":"https:\/\/paultrowler.com\/wordpress\/?page_id=278"},"modified":"2025-11-21T06:04:53","modified_gmt":"2025-11-21T06:04:53","slug":"new-methodology-advisor","status":"publish","type":"page","link":"https:\/\/paultrowler.com\/wordpress\/index.php\/new-methodology-advisor\/","title":{"rendered":"Chapter 4: Methodology advisor"},"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>Methodology Advisor<\/title>\n\n  <!-- Tailwind CSS -->\n  <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n  <!-- Inter font -->\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\n  <script>\n    tailwind.config = {\n      theme: {\n        extend: {\n          colors: {\n            primary: {50:'#eff6ff',100:'#dbeafe',200:'#bfdbfe',300:'#93c5fd',400:'#60a5fa',500:'#3b82f6',600:'#2563eb',700:'#1d4ed8',800:'#1e40af',900:'#1e3a8a'}\n          },\n          boxShadow: { soft:'0 10px 25px -10px rgba(30,64,175,0.25)' },\n          borderRadius: { '2xl':'1.25rem' }\n        }\n      }\n    }\n  <\/script>\n\n  <style>\n    body {\n      font-family: 'Inter', sans-serif;\n      line-height: 1.6;\n    }\n    .prompt-segment { border-left: 4px solid #3b82f6; padding-left: 1rem; margin-top: 1rem; margin-bottom: 1rem; }\n    .prompt-segment h4 { font-weight: 600; color: #1e40af; }\n    .prompt-gap { background-color: #fef9c3; color: #92400e; padding: 1px 5px; border-radius: 4px; font-weight: 600; font-family: monospace; }\n    .prompt-gap-filled { background-color: #dcfce7; color: #166534; }\n    .test-mode-badge { position: fixed; top: 10px; right: 10px; background: #fbbf24; color: #78350f; padding: 8px 16px; border-radius: 9999px; font-weight: 700; font-size: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); z-index: 1000; }\n    :focus-visible { outline: 3px solid #60a5fa; outline-offset: 2px; }\n    @media (prefers-reduced-motion: reduce) {\n      * { scroll-behavior: auto !important; }\n    }\n  <\/style>\n<\/head>\n<body class=\"bg-primary-50 text-slate-800 leading-relaxed\">\n<div class=\"container mx-auto max-w-7xl px-4 py-6 sm:py-8\" role=\"main\">\n\n  <!-- Header -->\n  <header class=\"mb-6 bg-white p-6 rounded-2xl shadow-soft border border-primary-200\">\n    <h1 class=\"text-2xl font-bold text-primary-800 mb-2\">Methodology Advisor<\/h1>\n    <p class=\"text-[15px] text-slate-700\">\n      This tool helps you design, refine, and defend a <strong>doctoral research methodology<\/strong>. Paste your\n      project summary below (from <em>Chapter 1<\/em>). Then use <strong>Copy &amp; Open in ChatGPT<\/strong> to run a\n      guided process inside ChatGPT. Each stage includes expert feedback plus Socratic prompts that keep you in your\n      <em>zone of proximal development<\/em>\u2014you make the decisions; the AI won&#8217;t do the work for you.\n    <\/p>\n  <\/header>\n\n  <!-- Main Grid -->\n  <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6 items-start\">\n\n    <!-- Left: Single reusable input + stages explanation -->\n    <section aria-labelledby=\"project-summary-heading\" class=\"space-y-6\">\n      <!-- Reusable Project Summary Block -->\n      <div id=\"pt-project-summary-block\" class=\"relative isolate\">\n        <div class=\"rounded-2xl border border-primary-200 bg-white shadow-soft\">\n          <div class=\"border-b border-primary-100 bg-primary-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-primary-100 text-primary-800 font-semibold\" aria-hidden=\"true\">1<\/div>\n            <h2 id=\"project-summary-heading\" class=\"m-0 text-base sm:text-lg font-semibold text-primary-900\">Paste your doctoral project summary<\/h2>\n          <\/div>\n          <div class=\"p-4 sm:p-6 space-y-3\">\n            <p class=\"text-[15px] text-primary-900\/80 leading-relaxed\">\n              Use the short summary you created in\n              <a href=\"https:\/\/paultrowler.com\/wordpress\/index.php\/helping-ai-to-understand-your-research-project\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"underline text-blue-700 hover:text-blue-900\">\n                Chapter 1 \u2014 Helping AI Understand Your Research Project\n              <\/a>. Make any updates you need to. All stages will tailor their responses using this summary.\n            <\/p>\n            <div>\n              <label for=\"pt-project-summary\" class=\"block text-[15px] font-medium text-primary-900 mb-2\">Your project summary<\/label>\n              <textarea\n                id=\"pt-project-summary\"\n                name=\"project-summary\"\n                class=\"w-full min-h-[13rem] rounded-xl border border-primary-200 focus:border-primary-500 focus:ring-2 focus:ring-primary-200\/70 px-3 py-2 text-[15px] leading-relaxed\"\n                placeholder=\"Paste or type your updated doctoral project summary here...\"\n                aria-describedby=\"summary-help\"\n                autocomplete=\"off\"\n                spellcheck=\"true\"\n              ><\/textarea>\n              <div id=\"summary-help\" class=\"mt-1 text-[15px] text-primary-900\/70\" role=\"status\" aria-live=\"polite\">Lines: 0. Characters: 0.<\/div>\n              <div class=\"mt-3 flex flex-wrap items-center gap-2 text-[15px] text-primary-900\/70\">\n                <button\n                  type=\"button\"\n                  id=\"pt-clear-summary\"\n                  class=\"inline-flex items-center gap-1 rounded-full border border-primary-200 px-3 py-1 hover:bg-primary-50 active:bg-primary-100\"\n                  aria-label=\"Clear project summary\"\n                >\n                  \ud83e\uddf9 <span>Clear<\/span>\n                <\/button>\n              <\/div>\n            <\/div>\n            <div class=\"rounded-xl border border-primary-200 bg-primary-50 px-4 py-3\">\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-primary-700 font-bold\" aria-hidden=\"true\">\u2139\ufe0e<\/div>\n                <p class=\"m-0 text-[15px] leading-relaxed text-primary-900\">\n                  <span class=\"font-medium\">Tip:<\/span> Create a <span class=\"font-semibold\">Project<\/span> in ChatGPT (e.g., &#8220;My Doctoral Research&#8221;) and run all chats inside it so your details persist across tools.\n                  <kbd class=\"text-[13px] bg-white px-1.5 py-0.5 rounded border border-primary-200\">Ctrl\/Cmd+Enter<\/kbd> to copy &amp; open.\n                <\/p>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- Stages explained (will run inside ChatGPT) -->\n      <div class=\"rounded-2xl border border-primary-200 bg-white shadow-soft p-6\" aria-labelledby=\"stages-heading\">\n        <h2 id=\"stages-heading\" class=\"text-lg font-semibold text-primary-900 mb-3\">What happens next (inside ChatGPT)<\/h2>\n        <p class=\"text-[15px] text-slate-700 mb-4\">\n          After you open the prompt in ChatGPT, it will guide you through <strong>six stages<\/strong>. Each stage provides\n          <em>short, specific feedback<\/em> and a <em>brief Socratic exchange<\/em>. At the end of each stage, the AI will:\n          <strong>(a)<\/strong> ask two quick decision questions <em>and<\/em> one open-ended &#8220;stretch&#8221; question, and\n          <strong>(b)<\/strong> explicitly state the <em>next stage by name<\/em> with a one-sentence reminder of its purpose.\n        <\/p>\n\n        <!-- Accessible diagram -->\n        <div class=\"bg-primary-50\/60 border border-primary-100 rounded-xl p-4\" role=\"img\" aria-label=\"Six-stage methodology process flows sequentially from Stage 1 through Stage 6.\">\n          <svg viewBox=\"0 0 800 280\" class=\"w-full h-auto\" aria-hidden=\"true\">\n            <defs>\n              <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n                <path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2563eb\"><\/path>\n              <\/marker>\n            <\/defs>\n            <g font-family=\"Inter, system-ui\" font-size=\"12\">\n              <g transform=\"translate(40,30)\">\n                <rect width=\"220\" height=\"70\" rx=\"12\" fill=\"#ffffff\" stroke=\"#bfdbfe\"><\/rect>\n                <text x=\"12\" y=\"24\" fill=\"#1e40af\" font-weight=\"700\">Stage 1 \u2014 Design Options<\/text>\n                <text x=\"12\" y=\"46\" fill=\"#334155\">5 viable designs + 2 to avoid<\/text>\n              <\/g>\n              <g transform=\"translate(300,30)\">\n                <rect width=\"220\" height=\"70\" rx=\"12\" fill=\"#ffffff\" stroke=\"#bfdbfe\"><\/rect>\n                <text x=\"12\" y=\"24\" fill=\"#1e40af\" font-weight=\"700\">Stage 2 \u2014 Refine (Revise or Plan)<\/text>\n                <text x=\"12\" y=\"46\" fill=\"#334155\">Revise options or plan implementation<\/text>\n              <\/g>\n              <g transform=\"translate(560,30)\">\n                <rect width=\"220\" height=\"70\" rx=\"12\" fill=\"#ffffff\" stroke=\"#bfdbfe\"><\/rect>\n                <text x=\"12\" y=\"24\" fill=\"#1e40af\" font-weight=\"700\">Stage 3 \u2014 Methods<\/text>\n                <text x=\"12\" y=\"46\" fill=\"#334155\">3\u20134 fit-for-purpose methods<\/text>\n              <\/g>\n              <g transform=\"translate(40,160)\">\n                <rect width=\"220\" height=\"70\" rx=\"12\" fill=\"#ffffff\" stroke=\"#bfdbfe\"><\/rect>\n                <text x=\"12\" y=\"24\" fill=\"#1e40af\" font-weight=\"700\">Stage 4 \u2014 Ethics<\/text>\n                <text x=\"12\" y=\"46\" fill=\"#334155\">3\u20135 key ethics questions<\/text>\n              <\/g>\n              <g transform=\"translate(300,160)\">\n                <rect width=\"220\" height=\"70\" rx=\"12\" fill=\"#ffffff\" stroke=\"#bfdbfe\"><\/rect>\n                <text x=\"12\" y=\"24\" fill=\"#1e40af\" font-weight=\"700\">Stage 5 \u2014 Summary<\/text>\n                <text x=\"12\" y=\"46\" fill=\"#334155\">Concise, structured design<\/text>\n              <\/g>\n              <g transform=\"translate(560,160)\">\n                <rect width=\"220\" height=\"70\" rx=\"12\" fill=\"#ffffff\" stroke=\"#bfdbfe\"><\/rect>\n                <text x=\"12\" y=\"24\" fill=\"#1e40af\" font-weight=\"700\">Stage 6 \u2014 Justify &amp; Defend<\/text>\n                <text x=\"12\" y=\"46\" fill=\"#334155\">Strengths, risks, defences<\/text>\n              <\/g>\n\n              <!-- arrows -->\n              <line x1=\"260\" y1=\"65\" x2=\"300\" y2=\"65\" stroke=\"#2563eb\" stroke-width=\"2\" marker-end=\"url(#arrow)\"><\/line>\n              <line x1=\"520\" y1=\"65\" x2=\"560\" y2=\"65\" stroke=\"#2563eb\" stroke-width=\"2\" marker-end=\"url(#arrow)\"><\/line>\n              <line x1=\"780\" y1=\"65\" x2=\"800\" y2=\"65\" stroke=\"#2563eb\" stroke-width=\"2\" marker-end=\"url(#arrow)\"><\/line>\n              <line x1=\"800\" y1=\"65\" x2=\"800\" y2=\"195\" stroke=\"#2563eb\" stroke-width=\"2\" marker-end=\"url(#arrow)\"><\/line>\n              <line x1=\"20\" y1=\"195\" x2=\"40\" y2=\"195\" stroke=\"#2563eb\" stroke-width=\"2\" marker-end=\"url(#arrow)\"><\/line>\n              <line x1=\"260\" y1=\"195\" x2=\"300\" y2=\"195\" stroke=\"#2563eb\" stroke-width=\"2\" marker-end=\"url(#arrow)\"><\/line>\n              <line x1=\"520\" y1=\"195\" x2=\"560\" y2=\"195\" stroke=\"#2563eb\" stroke-width=\"2\" marker-end=\"url(#arrow)\"><\/line>\n            <\/g>\n          <\/svg>\n\n          <ol class=\"sr-only\">\n            <li>Stage 1 \u2014 Design Options to Stage 2 \u2014 Refine (Revise or Plan).<\/li>\n            <li>Stage 2 \u2014 Refine (Revise or Plan) to Stage 3 \u2014 Methods.<\/li>\n            <li>Stage 3 \u2014 Methods to Stage 4 \u2014 Ethics (wrap to next row).<\/li>\n            <li>Stage 4 \u2014 Ethics to Stage 5 \u2014 Summary.<\/li>\n            <li>Stage 5 \u2014 Summary to Stage 6 \u2014 Justify &amp; Defend.<\/li>\n          <\/ol>\n        <\/div>\n\n        <p class=\"text-[15px] text-slate-600 mt-3\">\n          The AI will keep each exchange concise. You&#8217;ll make decisions at each stage before moving on. If a stage needs more depth, it will ask brief clarifiers first, then pose a third open-ended &#8220;stretch&#8221; question to build your reasoning.\n        <\/p>\n      <\/div>\n    <\/section>\n\n    <!-- Right: Prompt Preview + action -->\n    <aside class=\"bg-white p-6 rounded-2xl shadow-soft border border-primary-200 flex flex-col\" aria-labelledby=\"prompt-pane-heading\">\n      <h3 id=\"prompt-pane-heading\" class=\"text-xl font-bold mb-4 text-primary-800\">\n        This is what you\u2019ll send to ChatGPT <span class=\"text-[15px] text-slate-500\">(visible excerpt)<\/span>:\n      <\/h3>\n\n      <div\n        id=\"prompt-output-container\"\n        class=\"text-slate-800 leading-relaxed text-[15px] bg-primary-50 p-4 rounded-lg min-h-[220px] flex-grow border border-primary-200 overflow-y-auto\"\n        aria-live=\"polite\"\n        aria-atomic=\"false\"\n      ><\/div>\n\n      <!-- Single Action -->\n      <div class=\"mt-4 flex flex-col gap-2 items-start\" aria-label=\"Actions\">\n        <button\n          type=\"button\"\n          id=\"copyOpenBtn\"\n          class=\"inline-flex items-center gap-2 bg-emerald-600 hover:bg-emerald-700 disabled:opacity-50 disabled:cursor-not-allowed text-white px-4 py-2 rounded-xl shadow text-[15px]\"\n          disabled\n          aria-describedby=\"copyOpenHelp copySecurityNote\"\n        >\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16 3h5v5M8 16l13-13M4 7v13a2 2 0 0 0 2 2h13\"\/>\n          <\/svg>\n          Copy &amp; Open in ChatGPT\n        <\/button>\n\n        <p id=\"copyOpenHelp\" class=\"text-[15px] text-slate-600 leading-relaxed\">\n          This copies the full prompt (including hidden instructions) to your clipboard and opens ChatGPT in a new tab. When ChatGPT opens, <strong>paste<\/strong> with Ctrl\/Cmd+V.\n        <\/p>\n\n        <p id=\"copySecurityNote\" class=\"text-[15px] text-slate-500 leading-snug\">\n          For security reasons, ChatGPT cannot automatically paste or run prompts in your account. You stay in control of what is sent.\n        <\/p>\n\n        <p id=\"copyMsg\" class=\"text-[15px] text-green-700\" aria-live=\"polite\" role=\"status\"><\/p>\n\n        <button\n          type=\"button\"\n          id=\"clearBtn\"\n          class=\"inline-flex items-center gap-2 bg-slate-600 hover:bg-slate-700 text-white px-4 py-2 rounded-xl shadow text-[15px]\"\n        >\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\"\/>\n          <\/svg>\n          Clear Preview\n        <\/button>\n      <\/div>\n    <\/aside>\n  <\/div>\n<\/div>\n\n<script>\n  \/\/ ===== Shipping toggle =====\n  const SEED_TEST_DATA = false;\n\n  \/\/ Show test mode badge\n  if (SEED_TEST_DATA) {\n    const badge = document.createElement('div');\n    badge.className = 'test-mode-badge';\n    badge.textContent = '\u26a0\ufe0f TEST MODE';\n    badge.setAttribute('aria-label', 'Application is in test mode with sample data');\n    document.body.appendChild(badge);\n  }\n\n  \/\/ Elements\n  const summaryEl = document.getElementById('pt-project-summary');\n  const summaryHelpEl = document.getElementById('summary-help');\n  const clearSummaryBtn = document.getElementById('pt-clear-summary');\n  const previewEl = document.getElementById('prompt-output-container');\n  const copyOpenBtn = document.getElementById('copyOpenBtn');\n  const clearBtn = document.getElementById('clearBtn');\n  const copyMsgEl = document.getElementById('copyMsg');\n\n  \/\/ Character limit warning threshold\n  const CHAR_WARNING_THRESHOLD = 10000;\n\n  \/\/ Utils\n  const sanitize = (t) => (t || '')\n    .replace(\/&\/g, '&amp;')\n    .replace(\/<\/g, '&lt;')\n    .replace(\/>\/g, '&gt;')\n    .replace(\/\"\/g, '&quot;')\n    .replace(\/'\/g, '&#39;');\n\n  const setActionsEnabled = (enabled) => {\n    copyOpenBtn.disabled = !enabled;\n  };\n\n  const showMessage = (msg, isError = false) => {\n    copyMsgEl.textContent = msg;\n    copyMsgEl.className = `text-[15px] mt-2 ${isError ? 'text-red-700' : 'text-green-700'}`;\n    setTimeout(() => { copyMsgEl.textContent = ''; }, 5000);\n  };\n\n  const updateCounter = (el) => {\n    const text = (el.value || '');\n    const lines = text.split('\\n').filter(l => l.trim().length > 0).length;\n    const chars = text.length;\n\n    let helpText = `Lines: ${lines}. Characters: ${chars}.`;\n    if (chars > CHAR_WARNING_THRESHOLD) {\n      helpText += ` \u26a0\ufe0f Very long text - consider condensing.`;\n    }\n    summaryHelpEl.textContent = helpText;\n  };\n\n  \/\/ Hidden directives \u2014 staged dialogue inside ChatGPT\n  function hiddenDirectives(){\n    return [\n      \"Act as a doctoral-level research methodology expert.\",\n      \"Keep the dialogue inside this ChatGPT chat. Use short cycles: targeted feedback + questions; wait for the user's decision before moving to the next stage.\",\n      \"If a link cannot be fetched, rely on these principles: align design tightly to research questions and purpose; make philosophical stance explicit and consistent; ensure access\/feasibility\/ethics; justify sampling and data collection; be transparent about limitations; and provide a clear rationale for triangulation or single-method choices.\",\n      \"Use these exact stage titles: Stage 1 \u2014 Design Options; Stage 2 \u2014 Refine (Revise or Plan); Stage 3 \u2014 Methods; Stage 4 \u2014 Ethics; Stage 5 \u2014 Summary; Stage 6 \u2014 Justify & Defend.\",\n      \"At the END of EACH stage: (1) Ask TWO short decision-focused questions (e.g., \\\"this or that\\\", boundaries, caps, priorities) AND (2) Ask ONE open-ended STRETCH question that requires justification or trade-off reasoning (e.g., defend a choice; explain causal logic; anticipate a reviewer critique). (3) Before proceeding, explicitly name the NEXT stage by its title and include a one-sentence reminder of its purpose, e.g., \\\"Next: Stage 3 \u2014 Methods \u2014 we'll pick 3\u20134 concrete data-collection methods tied to your aims and context.\\\" Then PAUSE.\",\n      \"Stages you should facilitate here:\",\n      \"\u2022 Stage 1 \u2014 Produce a table with five viable designs [Design Name | Rationale | Strengths | Limitations] AND a short table of two designs to avoid with reasons.\",\n      \"\u2022 Stage 2 \u2014 Either (A) revise options in light of the user's rejection reasons, or (B) for any selected options, give an implementation plan (steps, sampling, tools, timeline).\",\n      \"\u2022 Stage 3 \u2014 Recommend 3\u20134 data collection methods with rationale tied to aims\/context, noting challenges and ethics.\",\n      \"\u2022 Stage 4 \u2014 List 3\u20135 specific ethics-application questions, each with a short why-note.\",\n      \"\u2022 Stage 5 \u2014 Write a concise structured summary with headings: Research Aim, Questions, Context, Purpose, Chosen Design, Data Collection Methods, Ethical Considerations.\",\n      \"\u2022 Stage 6 \u2014 Articulate strengths; likely weaknesses with defences\/mitigations; then ask up to two high-leverage Socratic questions.\",\n      \"Tone: supportive, concise, doctoral level. Avoid generic advice; ground points in the user's details.\"\n    ].join(\"\\\\n\");\n  }\n\n  \/\/ Visible prompt excerpt\n  function buildVisiblePrompt(projectSummary){\n    const contextBlock = projectSummary.trim()\n      ? `PROJECT CONTEXT\\n----------------\\n${projectSummary.trim()}\\n\\n`\n      : \"\";\n\n    const runBlock = [\n      \"Run the following staged advisory process entirely within this ChatGPT conversation.\",\n      \"\",\n      \"For each stage:\",\n      \"1) Provide tight, specific feedback (no waffle).\",\n      \"2) Ask THREE questions: (a) two short decision questions; (b) one open-ended STRETCH question that makes me justify a choice or reason about trade-offs.\",\n      \"3) State explicitly what the NEXT stage is (use the exact stage title) and give a ONE-SENTENCE reminder of its purpose before moving on.\",\n      \"4) Pause for my response and decision before proceeding.\"\n    ].join(\"\\n\");\n\n    return `${contextBlock}${runBlock}`;\n  }\n\n  function generatePreview(){\n    const summary = summaryEl.value || '';\n    const html = [\n      '<div class=\"prompt-segment\">',\n      '<h4>Project Context<\/h4>',\n      '<p><span class=\"' + (summary.trim() ? 'prompt-gap-filled' : 'prompt-gap') + '\">',\n      sanitize(summary.trim() || '...'),\n      '<\/span><\/p>',\n      '<\/div>',\n      '<p>ChatGPT will now guide a six-stage methodology process inside the chat using brief feedback, two quick decision questions, and a third open-ended &quot;stretch&quot; question. It will also name the next stage and remind you what it does before continuing.<\/p>'\n    ].join('');\n    previewEl.innerHTML = html;\n    setActionsEnabled(!!summary.trim().length);\n    copyMsgEl.textContent = '';\n  }\n\n  function combinedPrompt(){\n    const summary = (summaryEl.value || '').trim();\n    return hiddenDirectives() + \"\\n\\n\" + buildVisiblePrompt(summary);\n  }\n\n  async function copyText(text){\n    try {\n      await navigator.clipboard.writeText(text);\n      return true;\n    } catch(e) {\n      const ta = document.createElement('textarea');\n      ta.value = text;\n      ta.style.position = 'fixed';\n      ta.style.opacity = '0';\n      ta.style.left = '-9999px';\n      ta.setAttribute('readonly', '');\n      document.body.appendChild(ta);\n      ta.focus();\n      ta.select();\n      ta.setSelectionRange(0, ta.value.length);\n\n      let success = false;\n      try {\n        success = document.execCommand('copy');\n      } catch(err) {\n        console.error('Fallback copy failed:', err);\n      }\n\n      document.body.removeChild(ta);\n      return success;\n    }\n  }\n\n  async function copyAndOpen(){\n    const prompt = combinedPrompt();\n\n    \/\/ Copy first\n    const copySuccess = await copyText(prompt);\n\n    if (!copySuccess) {\n      showMessage('\u26a0\ufe0f Copy failed. Please copy the text manually before opening ChatGPT.', true);\n      return;\n    }\n\n    showMessage('\u2705 Prompt copied! Opening ChatGPT...', false);\n\n    \/\/ Open ChatGPT in new tab\n    try {\n      const newWindow = window.open('https:\/\/chatgpt.com', '_blank', 'noopener,noreferrer');\n      if (!newWindow) {\n        showMessage('\u26a0\ufe0f Prompt copied, but popup was blocked. Please allow popups or manually open ChatGPT.', true);\n      }\n    } catch(e) {\n      showMessage('\u26a0\ufe0f Prompt copied, but could not open ChatGPT. Please open it manually.', true);\n      console.error('Window open error:', e);\n    }\n  }\n\n  function clearPreview(){\n    previewEl.innerHTML = '';\n    copyMsgEl.textContent = '';\n  }\n\n  \/\/ ===== Event listeners =====\n  summaryEl.addEventListener('input', () => {\n    updateCounter(summaryEl);\n    generatePreview();\n  });\n\n  clearSummaryBtn.addEventListener('click', () => {\n    summaryEl.value = '';\n    updateCounter(summaryEl);\n    generatePreview();\n  });\n\n  copyOpenBtn.addEventListener('click', copyAndOpen);\n  clearBtn.addEventListener('click', clearPreview);\n\n  \/\/ ===== Init on load =====\n  if (SEED_TEST_DATA) {\n    summaryEl.value = \"Sample doctoral project summary goes here...\";\n  }\n  updateCounter(summaryEl);\n  generatePreview();\n<\/script>\n<\/body>\n<\/html>\n\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\">Copyright 2025 Prof. Paul Trowler<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Methodology Advisor Methodology Advisor This tool helps you design, refine, and defend a doctoral research methodology. Paste your project summary below (from Chapter 1). Then use Copy &amp; Open in ChatGPT to run a guided process inside ChatGPT. Each stage includes expert feedback plus Socratic prompts that keep you in your zone of proximal development\u2014you [&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-278","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/278","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=278"}],"version-history":[{"count":20,"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/278\/revisions"}],"predecessor-version":[{"id":1039,"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/278\/revisions\/1039"}],"wp:attachment":[{"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}