{"id":53,"date":"2025-07-15T06:50:17","date_gmt":"2025-07-15T06:50:17","guid":{"rendered":"https:\/\/paultrowler.com\/wordpress\/?page_id=53"},"modified":"2025-11-21T05:58:03","modified_gmt":"2025-11-21T05:58:03","slug":"evaluating-research-questions","status":"publish","type":"page","link":"https:\/\/paultrowler.com\/wordpress\/index.php\/evaluating-research-questions\/","title":{"rendered":"Chapter 3: Developing Excellent Research Questions"},"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>Research Questions Advisor \u2014 Chapter 3<\/title>\n\n  <!-- Tailwind CSS -->\n  <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n  <script>\n    tailwind.config = {\n      theme: {\n        extend: {\n          colors: {\n            primary: {\n              50:'#eff6ff',100:'#dbeafe',200:'#bfdbfe',300:'#93c5fd',\n              400:'#60a5fa',500:'#3b82f6',600:'#2563eb',700:'#1d4ed8',\n              800:'#1e40af',900:'#1e3a8a'\n            }\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  <!-- 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  <style>\n    body {\n      font-family: 'Inter', sans-serif;\n      line-height: 1.6;\n    }\n    :focus-visible { outline: 3px solid #60a5fa; outline-offset: 2px; }\n    textarea { overflow: hidden; } \/* smoother autosize *\/\n  <\/style>\n<\/head>\n<body class=\"bg-primary-50 font-sans leading-relaxed p-6\">\n  <main class=\"max-w-4xl mx-auto bg-white rounded-2xl shadow-soft p-8 space-y-8\" role=\"main\">\n    <h1 class=\"text-2xl font-bold text-primary-800\">Research Questions Advisor<\/h1>\n    <p class=\"text-[15px] text-gray-800\">\n      Paste your <strong>Project Profile \/ short project summary<\/strong> and your\n      <strong>draft research questions<\/strong>. The generated prompt will guide an AI to give structured feedback and start a brief Socratic dialogue.\n    <\/p>\n\n    <!-- Input 1: Project Summary -->\n    <section id=\"pt-project-summary-block\" class=\"relative isolate\" aria-labelledby=\"project-summary-heading\">\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            Paste 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>.\n            Make any updates you need to. Tools on this page will tailor their feedback 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-2 text-[15px] text-primary-900\/70\">This summary is used as context for feedback.<\/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              >\n                <span aria-hidden=\"true\">\ud83e\uddf9<\/span> Clear\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> 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    <!-- Input 2: Draft RQs -->\n    <section aria-labelledby=\"rqs-heading\">\n      <h2 id=\"rqs-heading\" class=\"sr-only\">Draft Research Questions<\/h2>\n      <label for=\"drafts\" class=\"block text-[15px] font-semibold text-primary-900 mb-2\">2) Draft Research Questions (one per line)<\/label>\n      <textarea\n        id=\"drafts\"\n        name=\"draft-rqs\"\n        class=\"w-full min-h-[10rem] rounded-xl border border-primary-200 focus:border-primary-500 focus:ring-2 focus:ring-primary-200\/70 px-3 py-2 text-[15px]\"\n        rows=\"6\"\n        placeholder=\"Enter 1\u20136 draft research questions, one per line\"\n        autocomplete=\"off\"\n        spellcheck=\"true\"\n        aria-describedby=\"rq-counter\"\n      ><\/textarea>\n      <div id=\"rq-counter\" class=\"mt-1 text-[15px] text-primary-900\/80\" role=\"status\" aria-live=\"polite\">\n        Lines: 0 (aim 1\u20136). Characters: 0.\n      <\/div>\n    <\/section>\n\n    <!-- Generated prompt (visible extract) -->\n    <section aria-labelledby=\"preview-heading\">\n      <h2 id=\"preview-heading\" class=\"sr-only\">Generated Prompt Visible Extract<\/h2>\n      <label for=\"prompt\" class=\"block text-[15px] font-semibold text-primary-900 mb-2\">Generated Prompt (Visible extract)<\/label>\n      <textarea\n        id=\"prompt\"\n        name=\"prompt-preview\"\n        class=\"w-full min-h-[20rem] rounded-xl border border-primary-200 bg-primary-50\/40 focus:outline-none px-3 py-3 font-mono text-[15px] leading-6\"\n        rows=\"20\"\n        readonly\n        aria-describedby=\"prompt-help\"\n      ><\/textarea>\n      <p id=\"prompt-help\" class=\"text-[15px] text-primary-900\/70 mt-1\"><\/p>\n      <p id=\"copyMsg\" class=\"text-[15px] text-green-700 mt-1\" aria-live=\"polite\" role=\"status\"><\/p>\n    <\/section>\n\n    <!-- Actions -->\n    <div class=\"flex flex-wrap gap-3 items-center\" aria-label=\"Actions\">\n      <!-- Copy + open (with hidden directives) -->\n      <button\n        type=\"button\"\n        id=\"copyOpenBtn\"\n        class=\"inline-flex items-center gap-2 bg-emerald-600 hover:bg-emerald-700 text-white px-4 py-2 rounded-xl shadow text-[15px]\"\n      >\n        <svg\n          xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n          class=\"h-4 w-4\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          aria-hidden=\"true\"\n        >\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    <\/div>\n\n    <p class=\"text-[15px] leading-snug text-primary-900\/80 text-center max-w-xl\">\n      For security reasons many AI platforms will not allow very long pasted prompts to run automatically.\n      After you paste the prompt, just press Return \/ Send \/ Run.\n    <\/p>\n  <\/main>\n\n  <script>\n    \/\/ --- Shipping default: no seed data. Flip to true for demo mode. ---\n    const SEED_TEST_DATA = false;\n\n    const qs = (id)=>document.getElementById(id);\n    const summaryEl = qs('pt-project-summary');\n    const draftsEl  = qs('drafts');\n    const promptEl  = qs('prompt');\n    const copyMsgEl = qs('copyMsg');\n\n    function setCopyMsg(msg){ copyMsgEl.textContent = msg || ''; }\n\n    \/\/ Autosize helper\n    function autosize(el){\n      if(!el) return;\n      el.style.height = 'auto';\n      el.style.height = (el.scrollHeight + 2) + 'px';\n    }\n\n    function val(id){ return (qs(id).value || '').trim(); }\n\n    function ordinal(n){\n      const s=['th','st','nd','rd'], v=n%100;\n      return n+(s[(v-20)%10]||s[v]||s[0]);\n    }\n\n    function getDraftLines(){\n      const raw = val('drafts');\n      return raw ? raw.split('\\n').map(s=>s.trim()).filter(Boolean) : [];\n    }\n\n    \/\/ Visible prompt builder\n    function buildVisiblePrompt(profileText, draftLines){\n      const contextBlock = profileText\n        ? `PROJECT CONTEXT (optional, supplied by user)\\n------------------------------------------\\n${profileText}\\n\\n`\n        : '';\n\n      const draftBlock = draftLines.length\n        ? draftLines.map((q,i)=>`Your ${ordinal(i+1)} question: ${q}`).join('\\n')\n        : `Your first question will appear here\nYour second question will appear here\nYour third question will appear here\nYour fourth question will appear here\nYour fifth question will appear here\nYour sixth question will appear here`;\n\n      const characteristics = [\n        'Be specific with clear scope boundaries.',\n        'Progress from descriptive to analytical\/conceptual.',\n        'Be answerable\/operationalisable with success criteria.',\n        'Be realistic within time\/resources\/ethics\/access.',\n        'Be significant in scholarly and\/or practical terms.'\n      ].map(b=>`- ${b}`).join('\\n');\n\n      const structure = [\n        'Suggestions (3\u20135 bullets): concrete, targeted improvements.',\n        'Exactly 2 key questions: the two highest-leverage questions to resolve next.',\n        'Revised Research Questions: propose an improved numbered set (only if helpful).'\n      ].map(b=>`- ${b}`).join('\\n');\n\n      return `${contextBlock}This prompt is designed to help me improve the quality of my doctoral research questions.\\n\\nPlease act as a supportive, expert advisor on developing research questions. Assess my draft against these characteristics:\\n${characteristics}\\n\\nThese are my draft research questions:\\n${draftBlock}\\n\\nOutput format for your response:\\n${structure}\\n\\nPlease keep the tone supportive and concise.`.trim();\n    }\n\n    \/\/ Hidden directives (prepended only on copy)\n    function hiddenDirectives(){\n      return [\n        'Act as an expert on developing research questions for doctoral projects.',\n        'Consult these two reference documents first, then draw on other reputable sources as needed:',\n        'File 1: https:\/\/paultrowler.com\/wordpress\/wp-content\/uploads\/2025\/08\/1.-Trowler-Asking-Good-Research-Questions.pdf',\n        'File 2: https:\/\/paultrowler.com\/wordpress\/wp-content\/uploads\/2025\/08\/2.-Trowler-Mistakes-in-Asking-Research-Questions.pdf',\n        'Follow this response structure: (1) 3\u20135 concrete suggestions; (2) exactly 2 high-leverage questions; (3) if helpful, a revised numbered set of RQs consistent with the guidance; keep tone supportive and doctoral-level.'\n      ].join('\\n');\n    }\n\n    function updateRqCounter(){\n      const text = draftsEl.value || '';\n      const lines = text.split('\\n').filter(l=>l.trim().length>0).length;\n      const chars = text.length;\n      const hint = lines>6 ? ' (\u26a0 consider trimming to \u22646)' : ' (aim 1\u20136)';\n      qs('rq-counter').textContent = `Lines: ${lines}${hint}. Characters: ${chars}.`;\n    }\n\n    function generatePrompt(){\n      const profile = val('pt-project-summary');\n      const draftsLines = getDraftLines();\n      promptEl.value = buildVisiblePrompt(profile, draftsLines);\n      autosize(promptEl);\n      setCopyMsg('');\n      updateRqCounter();\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; ta.setAttribute('aria-hidden','true');\n        ta.style.position='fixed'; ta.style.opacity='0'; ta.style.inset='-9999px';\n        document.body.appendChild(ta);\n        ta.select(); ta.setSelectionRange(0, 99999);\n        let ok=false;\n        try{ ok=document.execCommand('copy'); }catch(_){}\n        document.body.removeChild(ta);\n        return ok;\n      }\n    }\n\n    function combinedPrompt(){\n      return hiddenDirectives() + '\\n\\n' + (promptEl.value || '').trim();\n    }\n\n    async function copyAndOpen(){\n      generatePrompt();\n      const ok = await copyText(combinedPrompt());\n      setCopyMsg(ok ? '' : 'Copy failed \u2014 please select and copy manually.');\n      window.open('https:\/\/chatgpt.com', '_blank', 'noopener');\n    }\n\n    \/\/ Seed data (kept for demo mode)\n    function seedTestData(){\n      const projectSummary = [\n        'Working title: From Clicks to Civic Action \u2014 Digital Activism and Youth Agency in Post-Conflict Cities (Belfast and Derry\/Londonderry, 2015\u20132025).',\n        '',\n        'Rationale: Youth political participation in post-conflict contexts is increasingly digitally mediated (hashtags, creator-led content, micro-campaigns). We lack mechanism-focused accounts explaining when\/ how online participation modifies young people\u2019s civic repertoires, and how local institutions shape these processes. This matters for theory (agency\u2013structure dynamics), practice (councils\/NGOs designing youth engagement), and policy (participation, cohesion, safety).',\n        '',\n        'Provisional design: Comparative multi-site study (Belfast, Derry\/Londonderry); mixed qualitative design (digital ethnography of activist networks + interview\/focus groups with 16\u201324 year-olds + documentary analysis of council\/NGO programs); analytic lens: social practice theory with attention to platform affordances; timeframe 2015\u20132025; ethics: safeguarding and anonymity for minors\/young adults; outputs targeted at practice and theory.',\n        '',\n        'Constraints: access to youth groups via NGOs\/schools; ethics approvals; limited travel budget; thesis deadline in 36 months.'\n      ].join('\\n');\n\n      const draftRQs = [\n        'Through what mechanisms does participation in digitally mediated activist networks shape youths\u2019 political efficacy and civic repertoires in post-conflict cities?',\n        'How do specific platform affordances (e.g., TikTok duets, Instagram stories) enable or constrain mobilisation, framing, and cross-community interaction among young people?',\n        'When, if at all, do online participatory practices translate into offline civic or political action, and what conditions mediate that translation?',\n        'How do local institutions (schools, councils, NGOs, policing) in Belfast and Derry\/Londonderry enable or inhibit these processes between 2015\u20132025?'\n      ].join('\\n');\n\n      qs('pt-project-summary').value = projectSummary;\n      qs('drafts').value = draftRQs;\n      autosize(summaryEl); autosize(draftsEl);\n    }\n\n    \/\/ Event wiring\n    qs('copyOpenBtn').addEventListener('click', copyAndOpen);\n\n    qs('pt-clear-summary').addEventListener('click', ()=>{\n      summaryEl.value=''; autosize(summaryEl); generatePrompt(); summaryEl.focus();\n    });\n\n    \/\/ Live updates + autosize\n    [summaryEl, draftsEl].forEach(el=>{\n      ['input','change'].forEach(evt=>el.addEventListener(evt, ()=>{\n        autosize(el); generatePrompt();\n      }));\n    });\n\n    \/\/ Initial render\n    if (SEED_TEST_DATA) seedTestData();\n    autosize(summaryEl); autosize(draftsEl); autosize(promptEl);\n    generatePrompt();\n\n    \/\/ Console self-tests\n    (function tests(){\n      try {\n        const sampleV = buildVisiblePrompt('Topic X', ['Q1?','Q2?']);\n        console.assert(sampleV.includes('These are my draft research questions'), 'T1: missing RQ header');\n        console.assert(sampleV.includes('Suggestions (3\u20135 bullets)'), 'T2: missing suggestions spec');\n        const hd = hiddenDirectives();\n        console.assert(hd.includes('File 1:') && hd.includes('File 2:'), 'T3: hidden directives missing refs');\n        console.info('RQ Advisor (Ch3) self-tests passed');\n      } catch(e){ console.warn('RQ Advisor (Ch3) self-tests issue:', e); }\n    })();\n  <\/script>\n\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\">Copyright 2025 Prof. Paul Trowler<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Research Questions Advisor \u2014 Chapter 3 Research Questions Advisor Paste your Project Profile \/ short project summary and your draft research questions. The generated prompt will guide an AI to give structured feedback and start a brief Socratic dialogue. 1 Paste your doctoral project summary Paste the short summary you created in Chapter 1 \u2014 [&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-53","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/53","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=53"}],"version-history":[{"count":52,"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/53\/revisions"}],"predecessor-version":[{"id":1038,"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/pages\/53\/revisions\/1038"}],"wp:attachment":[{"href":"https:\/\/paultrowler.com\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}