[{"id": 1, "created": "2026-02-23T23:35:11.891386", "updated": "2026-02-25T07:12:15.615414", "name": "Help Tag UPOU Email Subjects", "short_name": "upou-subject-categorization", "description": "We are building a dataset to help route and respond to  emails using a chatbot and support tools. Email subjects are often short but can already indicate what kind of concern the sender has.  \ud83e\udde0 ##Task##  You will read an email subject line and select t...", "long_description": "We are building a dataset to help route and respond to emails using a chatbot and support tools. Email subjects are often short but can already indicate what kind of concern the sender has.\r\n\r\n#### \ud83e\udde0 Task\r\n\r\nYou will read an email subject line and select the best category based only on the subject.\r\n\r\n- Subjects may be in English, Filipino, or Taglish.\r\n- Do not guess details that are not explicitly stated.\r\n- If the subject is too vague, select **Other or Unclear**.\r\n\r\n#### \ud83c\udfaf Purpose\r\n\r\nYour labels will help:\r\n\r\n- Route emails to the correct office faster\r\n- Improve response time\r\n- Train a chatbot to recognize common concerns\r\n- Support better administrative workflows\r\n\r\nEach subject will be labeled by three different volunteers to ensure reliability.\r\n\r\n#### \ud83d\uddc2 Categories\r\n\r\nYou will choose from the following categories:\r\n\r\n1. Admissions and Enrollment\r\n2. Registration and Records\r\n3. LMS and Tech Support\r\n4. Payments and Fees\r\n5. Scheduling and Appointments\r\n6. HR and Personnel\r\n7. Procurement and Logistics\r\n8. Research, Partnerships, and Grants\r\n9. Events and Communications\r\n10. Other or Unclear\r\n", "featured": false, "owner_id": 1, "category_id": 1, "info": {"container": "user_1", "thumbnail": "project_1_thumbnail_1771889856.png", "thumbnail_url": "https://crowdsource.lol/uploads/user_1/project_1_thumbnail_1771889856.png", "task_presenter": "<style>\r\n  .task-wrap {\r\n    max-width: 900px;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  .subject-box {\r\n    margin: 20px 0;\r\n    padding: 15px;\r\n    background: #f4f6f8;\r\n    border-radius: 6px;\r\n  }\r\n\r\n  #subject_text {\r\n    display: block;\r\n    font-size: 2.5rem;\r\n    line-height: 1.1;\r\n    font-weight: 600;\r\n  }\r\n\r\n  .category-grid {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 8px 20px;\r\n    margin: 15px 0;\r\n  }\r\n\r\n  .category-grid label {\r\n    display: block;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  #msg {\r\n    margin-top: 10px;\r\n    color: #b00020;\r\n  }\r\n\r\n  #progress_text {\r\n    margin-top: 12px;\r\n    color: #4f6574;\r\n    font-weight: 600;\r\n    text-align: right;\r\n  }\r\n\r\n  @media (max-width: 640px) {\r\n    .category-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    #subject_text {\r\n      font-size: 1.5rem;\r\n    }\r\n  }\r\n</style>\r\n\r\n<div class=\"container task-wrap\">\r\n  <h2>Classify the Email Subject</h2>\r\n\r\n  <p id=\"progress_text\">Tasks completed: 0</p>\r\n  \r\n  <div class=\"subject-box\">\r\n    <strong>Subject:</strong><br>\r\n    <span id=\"subject_text\"></span>\r\n  </div>\r\n\r\n  \r\n\r\n  <p>Select the best category based only on the subject line.</p>\r\n\r\n  <div class=\"category-grid\">\r\n    <label><input type=\"radio\" name=\"category\" value=\"Admissions and Enrollment\"> Admissions and Enrollment</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"Registration and Records\"> Registration and Records</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"LMS and Tech Support\"> LMS and Tech Support</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"Payments and Fees\"> Payments and Fees</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"Scheduling and Appointments\"> Scheduling and Appointments</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"HR and Personnel\"> HR and Personnel</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"Procurement and Logistics\"> Procurement and Logistics</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"Research, Partnerships, and Grants\"> Research, Partnerships, and Grants</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"Events and Communications\"> Events and Communications</label>\r\n    <label><input type=\"radio\" name=\"category\" value=\"Other or Unclear\"> Other or Unclear</label>\r\n  </div>\r\n\r\n  <div style=\"display:flex; gap:10px; align-items:center; margin-top:10px;\">\r\n    <button id=\"submitBtn\" class=\"btn btn-primary\" disabled>Submit</button>\r\n    <button id=\"exitBtn\" type=\"button\" class=\"btn btn-default\">Take a Break</button>\r\n  </div>\r\n  <p id=\"msg\"></p>\r\n</div>\r\n\r\n<script type=\"text/javascript\">\r\n(function() {\r\n  var PROGRESS_KEY = 'upou_subject_categorization_completed_count';\r\n\r\n  function getCompletedCount() {\r\n    var n = parseInt(window.localStorage.getItem(PROGRESS_KEY), 10);\r\n    return isNaN(n) ? 0 : n;\r\n  }\r\n\r\n  function setCompletedCount(n) {\r\n    window.localStorage.setItem(PROGRESS_KEY, String(n));\r\n  }\r\n\r\n  function renderCompletedCount() {\r\n    document.getElementById('progress_text').textContent = 'Tasks completed: ' + getCompletedCount();\r\n  }\r\n\r\n  function clearForm() {\r\n    document.querySelectorAll('input[name=\"category\"]').forEach(function(el) {\r\n      el.checked = false;\r\n    });\r\n    document.getElementById('submitBtn').disabled = true;\r\n    document.getElementById('msg').textContent = '';\r\n  }\r\n\r\n  function getSelectedCategory() {\r\n    var el = document.querySelector('input[name=\"category\"]:checked');\r\n    return el ? el.value : null;\r\n  }\r\n\r\n  document.addEventListener('change', function(e) {\r\n    if (e.target && e.target.name === 'category') {\r\n      document.getElementById('submitBtn').disabled = false;\r\n      document.getElementById('msg').textContent = '';\r\n    }\r\n  });\r\n\r\n  document.getElementById('exitBtn').onclick = function() {\r\n    var leave = window.confirm('Leave this task without submitting?');\r\n    if (leave) {\r\n      window.location.href = '/project/upou-subject-categorization';\r\n    }\r\n  };\r\n\r\n  pybossa.taskLoaded(function(task, deferred) {\r\n    deferred.resolve(task);\r\n  });\r\n\r\n  pybossa.presentTask(function(task, deferred) {\r\n    clearForm();\r\n    renderCompletedCount();\r\n\r\n    var subj = (task.info && task.info.subject) ? task.info.subject : '';\r\n    document.getElementById('subject_text').textContent = subj;\r\n\r\n    var btn = document.getElementById('submitBtn');\r\n    btn.onclick = function() {\r\n      var cat = getSelectedCategory();\r\n      if (!cat) {\r\n        document.getElementById('msg').textContent = 'Please select a category.';\r\n        return;\r\n      }\r\n\r\n      btn.disabled = true;\r\n\r\n      pybossa.saveTask(task.id, { category: cat })\r\n        .done(function() {\r\n          setCompletedCount(getCompletedCount() + 1);\r\n          renderCompletedCount();\r\n          deferred.resolve();\r\n        })\r\n        .fail(function() {\r\n          document.getElementById('msg').textContent = 'Failed to save. Please try again.';\r\n          btn.disabled = false;\r\n        });\r\n    };\r\n  });\r\n\r\n  renderCompletedCount();\r\n  pybossa.run('upou-subject-categorization');\r\n  // Or use: pybossa.run('{{project.short_name}}');\r\n})();\r\n</script>\r\n"}, "owners_ids": [1], "links": ["<link rel='category' title='category' href='http://crowdsource.lol/api/category/1'/>"], "link": "<link rel='self' title='project' href='http://crowdsource.lol/api/project/1'/>"}, {"id": 3, "created": "2026-02-25T07:33:07.239407", "updated": "2026-02-25T07:55:03.077487", "name": "Fake news identification", "short_name": "fake-news-id", "description": "In this task, you will be shown some news snippets and you will be asked to identify if they are fake or real.", "long_description": "In this task, you will be shown some news snippets and you will be asked to identify if they are fake or real.", "featured": false, "owner_id": 1, "category_id": 1, "info": {"task_presenter": "<div class=\"container\">\r\n\r\n  <h2>Fake News Identification</h2>\r\n\r\n  <div style=\"margin:20px 0; padding:15px; background:#f4f6f8; border-radius:6px;\">\r\n    <strong>News Article (1 paragraph)</strong><br><br>\r\n    <span id=\"news_text\"></span>\r\n  </div>\r\n\r\n  <p>\r\n    Read the paragraph and choose the best label. Use your best judgment based on plausibility, sourcing cues, and internal consistency.\r\n  </p>\r\n\r\n  <div style=\"margin: 15px 0;\">\r\n    <label><input type=\"radio\" name=\"label\" value=\"Likely Real\"> Likely Real</label><br>\r\n    <label><input type=\"radio\" name=\"label\" value=\"Likely Fake\"> Likely Fake</label><br>\r\n    <label><input type=\"radio\" name=\"label\" value=\"Misleading / Exaggerated\"> Misleading / Exaggerated</label><br>\r\n    <label><input type=\"radio\" name=\"label\" value=\"Unsure\"> Unsure</label>\r\n  </div>\r\n\r\n  <div style=\"margin: 15px 0;\">\r\n    <strong>Confidence</strong><br>\r\n    <label><input type=\"radio\" name=\"confidence\" value=\"High\"> High</label><br>\r\n    <label><input type=\"radio\" name=\"confidence\" value=\"Medium\"> Medium</label><br>\r\n    <label><input type=\"radio\" name=\"confidence\" value=\"Low\"> Low</label>\r\n  </div>\r\n\r\n  <button id=\"submitBtn\" class=\"btn btn-primary\" disabled>Submit</button>\r\n  <p id=\"msg\" style=\"margin-top:10px;\"></p>\r\n\r\n</div>\r\n\r\n<script type=\"text/javascript\">\r\n(function() {\r\n\r\n  function clearForm() {\r\n    document.querySelectorAll('input[name=\"label\"]').forEach(function(el) { el.checked = false; });\r\n    document.querySelectorAll('input[name=\"confidence\"]').forEach(function(el) { el.checked = false; });\r\n    document.getElementById('submitBtn').disabled = true;\r\n    document.getElementById('msg').textContent = '';\r\n  }\r\n\r\n  function getChecked(name) {\r\n    var el = document.querySelector('input[name=\"' + name + '\"]:checked');\r\n    return el ? el.value : null;\r\n  }\r\n\r\n  function enableIfReady() {\r\n    var label = getChecked('label');\r\n    var conf = getChecked('confidence');\r\n    document.getElementById('submitBtn').disabled = !(label && conf);\r\n  }\r\n\r\n  document.addEventListener('change', function(e) {\r\n    if (e.target && (e.target.name === 'label' || e.target.name === 'confidence')) {\r\n      enableIfReady();\r\n    }\r\n  });\r\n\r\n  pybossa.taskLoaded(function(task, deferred) {\r\n    deferred.resolve(task);\r\n  });\r\n\r\n  pybossa.presentTask(function(task, deferred) {\r\n    clearForm();\r\n\r\n    // Read the article text from common locations (CSV import varies by deployment)\r\n    var news = task.news ||\r\n               (task.info && task.info.news) ||\r\n               (task.data && task.data.news) ||\r\n               '';\r\n\r\n    document.getElementById('news_text').textContent = news;\r\n\r\n    document.getElementById('submitBtn').onclick = function() {\r\n      var label = getChecked('label');\r\n      var conf = getChecked('confidence');\r\n\r\n      if (!label || !conf) {\r\n        document.getElementById('msg').textContent = 'Please select a label and confidence.';\r\n        return;\r\n      }\r\n\r\n      var answer = {\r\n        label: label,\r\n        confidence: conf\r\n      };\r\n\r\n      pybossa.saveTask(task.id, answer).done(function() {\r\n        deferred.resolve();\r\n      });\r\n    };\r\n  });\r\n\r\n  // Replace with your project short name (URL slug), e.g. 'fake-news-demo'\r\n  pybossa.run('fake-news-id');\r\n\r\n})();\r\n</script>"}, "owners_ids": [1], "links": ["<link rel='category' title='category' href='http://crowdsource.lol/api/category/1'/>"], "link": "<link rel='self' title='project' href='http://crowdsource.lol/api/project/3'/>"}, {"id": 7, "created": "2026-03-03T05:15:56.402745", "updated": "2026-03-03T05:19:49.989452", "name": "Cebuano - English Translation", "short_name": "bis-ceb-trans", "description": "Bisaya to English Translation  This project aims to make Cebuano language more accessible, assist Cebuano speakers in learning English, and assist non-Cebuano speakers to learn the language.", "long_description": "#Bisaya to English Translation\r\n\r\nThis project aims to make Cebuano language more accessible, assist Cebuano speakers in learning English, and assist non-Cebuano speakers to learn the language.\r\n\r\n#What you will do\r\n- Read the phrases\r\n- Convert it to its equivalent English translation", "featured": false, "owner_id": 7, "category_id": 1, "info": {"task_presenter": "<div class=\"container\">\r\n\r\n  <h2>Bisaya \u2192 English Translation</h2>\r\n\r\n  <div id=\"taskArea\">\r\n\r\n    <div style=\"margin:20px 0; padding:15px; background:#f4f6f8; border-radius:6px;\">\r\n      <strong>Bisaya Phrase</strong><br><br>\r\n      <span id=\"bisaya_text\" style=\"font-size:18px;\"></span>\r\n    </div>\r\n\r\n    <p>\r\n      Translate the phrase into natural English.\r\n      Avoid word-for-word translation.\r\n    </p>\r\n\r\n    <div style=\"margin: 15px 0;\">\r\n      <textarea \r\n        id=\"translation\" \r\n        rows=\"4\" \r\n        class=\"form-control\"\r\n        placeholder=\"Type your English translation here...\"\r\n      ></textarea>\r\n    </div>\r\n\r\n    <div style=\"margin-top:15px;\">\r\n      <button id=\"submitBtn\" class=\"btn btn-primary\" disabled>Submit</button>\r\n      <button id=\"exitBtn\" class=\"btn btn-secondary\">Exit</button>\r\n    </div>\r\n\r\n    <p id=\"msg\" style=\"margin-top:10px;\"></p>\r\n\r\n  </div>\r\n\r\n  <!-- Shown when no more tasks -->\r\n  <div id=\"noTasksArea\" style=\"display:none; margin-top:20px;\">\r\n    <div style=\"padding:15px; background:#eef5ff; border-radius:6px;\">\r\n      <strong>All phrases have been translated.</strong><br><br>\r\n      Thank you for your contribution.\r\n    </div>\r\n    <button id=\"exitFinalBtn\" class=\"btn btn-secondary\" style=\"margin-top:15px;\">\r\n      Exit\r\n    </button>\r\n  </div>\r\n\r\n</div>\r\n\r\n<script type=\"text/javascript\">\r\n(function() {\r\n\r\n  function clearForm() {\r\n    document.getElementById('translation').value = '';\r\n    document.getElementById('submitBtn').disabled = true;\r\n    document.getElementById('msg').textContent = '';\r\n  }\r\n\r\n  function enableIfReady() {\r\n    var text = document.getElementById('translation').value.trim();\r\n    document.getElementById('submitBtn').disabled = (text.length === 0);\r\n  }\r\n\r\n  document.addEventListener('input', function(e) {\r\n    if (e.target && e.target.id === 'translation') {\r\n      enableIfReady();\r\n    }\r\n  });\r\n\r\n  function exitProject() {\r\n    window.location.href = '/';\r\n  }\r\n\r\n  document.getElementById('exitBtn').onclick = exitProject;\r\n  document.getElementById('exitFinalBtn').onclick = exitProject;\r\n\r\n  pybossa.taskLoaded(function(task, deferred) {\r\n    if (!task) {\r\n      document.getElementById('taskArea').style.display = 'none';\r\n      document.getElementById('noTasksArea').style.display = 'block';\r\n      return;\r\n    }\r\n    deferred.resolve(task);\r\n  });\r\n\r\n  pybossa.presentTask(function(task, deferred) {\r\n\r\n    if (!task) {\r\n      document.getElementById('taskArea').style.display = 'none';\r\n      document.getElementById('noTasksArea').style.display = 'block';\r\n      return;\r\n    }\r\n\r\n    clearForm();\r\n\r\n    var phrase = task.info.phrase || '';\r\n\r\n    document.getElementById('bisaya_text').textContent = phrase;\r\n\r\n    document.getElementById('submitBtn').onclick = function() {\r\n      var translation = document.getElementById('translation').value.trim();\r\n\r\n      if (!translation) {\r\n        document.getElementById('msg').textContent =\r\n          'Please provide a translation before submitting.';\r\n        return;\r\n      }\r\n\r\n      var answer = {\r\n        english_translation: translation\r\n      };\r\n\r\n      pybossa.saveTask(task.id, answer).done(function() {\r\n        deferred.resolve();\r\n      });\r\n    };\r\n  });\r\n\r\n  pybossa.run('bis-ceb-trans');\r\n\r\n})();\r\n</script>"}, "owners_ids": [7], "links": ["<link rel='category' title='category' href='http://crowdsource.lol/api/category/1'/>"], "link": "<link rel='self' title='project' href='http://crowdsource.lol/api/project/7'/>"}, {"id": 8, "created": "2026-03-06T06:11:16.421023", "updated": "2026-04-28T12:16:35.005473", "name": "Handwritten Medical Prescription Digitizer", "short_name": "rx_digitizer", "description": "Handwritten Medical Prescription Transcription  You will look at a small cropped image of a handwritten medical prescription and type out exactly what you see.  What you will do   Look at the image snippet shown (a drug name or dosage) Type exactly wha...", "long_description": "# Handwritten Medical Prescription Transcription\r\n\r\nYou will look at a small cropped image of a handwritten medical prescription and type out exactly what you see.\r\n\r\n## What you will do\r\n- Look at the image snippet shown (a drug name or dosage)\r\n- Type exactly what you see in the text field provided\r\n- Submit your transcription\r\n\r\n## Notes\r\nType only what is written in the image. Do not guess or auto-correct what you think the word should be. If the handwriting is completely unreadable, mark it as **Unreadable**.\r\n\r\nEach snippet will be transcribed by **three** contributors. If responses do not match, the item will be flagged for expert review.\r\n", "featured": false, "owner_id": 4, "category_id": 1, "info": {"container": "user_4", "thumbnail": "project_8_thumbnail_1772782146.png", "thumbnail_url": "https://crowdsource.lol/uploads/user_4/project_8_thumbnail_1772782146.png", "task_presenter": "<div class=\"container\">\r\n  <h2>Handwritten Medical Prescription Transcription</h2>\r\n  <div style=\"margin:20px 0; padding:15px; background:#f4f6f8; border-radius:6px;\">\r\n    <strong>Prescription Snippet</strong><br><br>\r\n    <img id=\"snippet_image\" src=\"\" alt=\"Prescription snippet\" style=\"max-width:100%; border:1px solid #ccc; border-radius:4px;\">\r\n  </div>\r\n  <p>Type exactly what you see in the image. Do not guess or auto-correct. If the handwriting is completely unreadable, type <strong>Unreadable</strong>.</p>\r\n  <div style=\"margin: 15px 0;\">\r\n    <label><strong>Your Transcription</strong></label><br><br>\r\n    <input type=\"text\" id=\"transcription_input\" placeholder=\"Type what you see here...\" style=\"width:100%; padding:10px; font-size:16px; border:1px solid #ccc; border-radius:4px;\">\r\n  </div>\r\n  <button id=\"submitBtn\" class=\"btn btn-primary\" disabled>Submit</button>\r\n  <p id=\"msg\" style=\"margin-top:10px;\"></p>\r\n</div>\r\n\r\n<script type=\"text/javascript\">\r\n(function() {\r\n  function clearForm() {\r\n    document.getElementById('transcription_input').value = '';\r\n    document.getElementById('submitBtn').disabled = true;\r\n    document.getElementById('msg').textContent = '';\r\n  }\r\n  document.getElementById('transcription_input').addEventListener('input', function() {\r\n    document.getElementById('submitBtn').disabled = this.value.trim() === '';\r\n  });\r\n  pybossa.taskLoaded(function(task, deferred) {\r\n    deferred.resolve(task);\r\n  });\r\n  pybossa.presentTask(function(task, deferred) {\r\n    clearForm();\r\n    var image_url = task.image_url ||\r\n                    (task.info && task.info.image_url) ||\r\n                    (task.data && task.data.image_url) ||\r\n                    '';\r\n    document.getElementById('snippet_image').src = image_url;\r\n    document.getElementById('submitBtn').onclick = function() {\r\n      var transcription = document.getElementById('transcription_input').value.trim();\r\n      if (!transcription) {\r\n        document.getElementById('msg').textContent = 'Please enter a transcription before submitting.';\r\n        return;\r\n      }\r\n      var answer = { transcription: transcription };\r\n      pybossa.saveTask(task.id, answer).done(function() {\r\n        deferred.resolve();\r\n      });\r\n    };\r\n  });\r\n  pybossa.run('rx_digitizer');\r\n})();\r\n</script>\r\n"}, "owners_ids": [4], "links": ["<link rel='category' title='category' href='http://crowdsource.lol/api/category/1'/>"], "link": "<link rel='self' title='project' href='http://crowdsource.lol/api/project/8'/>"}, {"id": 9, "created": "2026-03-08T21:44:56.019744", "updated": "2026-04-30T13:41:43.533421", "name": "Validate English to Filipino Translation", "short_name": "fil-eng-validator", "description": "You will be shown a short English text alongside its machine-generated Filipino translation. You will rate how accurate and natural the translation sounds, and provide a confidence score indicating how certain you are about your judgment.", "long_description": "You will be shown a short English text alongside its machine-generated Filipino translation. You will rate how accurate and natural the translation sounds, and provide a confidence score indicating how certain you are about your judgment.\r\n\r\n### Task\r\n- Texts may be from everyday topics such as news, social media, or general conversation.\r\n- Rate based on how natural the translation sounds to a native or fluent Filipino speaker.\r\n- If you are unsure about the translation, reflect that in your confidence score.\r\n\r\n### Purpose\r\n- Identify where machine translation tools succeed and fall short in Filipino.\r\n- Build a high-quality human-evaluated dataset for Filipino language research.\r\n- Improve automated translation tools for Filipino and related languages.\r\n- Make digital communication more accessible for Filipino speakers worldwide.\r\n\r\nEach translation will be evaluated by multiple volunteers to ensure reliable results.", "featured": false, "owner_id": 5, "category_id": 1, "info": {"sched": "default", "container": "user_5", "thumbnail": "project_9_thumbnail_1777526151.png", "thumbnail_url": "https://crowdsource.lol/uploads/user_5/project_9_thumbnail_1777526151.png", "task_presenter": "<div class=\"row\">\r\n  <div class=\"col-md-12\">\r\n    <div id=\"error\" class=\"alert alert-danger\" style=\"display:none;\"></div>\r\n    <div id=\"success\" class=\"alert alert-success\" style=\"display:none;\">\r\n      Saved. Loading next task...\r\n    </div>\r\n    <div id=\"finish\" class=\"alert alert-success\" style=\"display:none;\">\r\n      All available tasks are completed. Thank you!\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"row skeleton\" style=\"display:none;\">\r\n  <div class=\"col-md-12\">\r\n    <h3>Translation Quality Check</h3>\r\n    <p>Rate how accurate and natural the Filipino translation sounds.</p>\r\n\r\n    <div class=\"form-group\">\r\n      <label for=\"english-text\"><strong>English text</strong></label>\r\n      <textarea id=\"english-text\" class=\"form-control\" rows=\"4\" readonly></textarea>\r\n    </div>\r\n\r\n    <div class=\"form-group\" style=\"margin-top:12px;\">\r\n      <label for=\"filipino-text\"><strong>Machine-generated Filipino text</strong></label>\r\n      <textarea id=\"filipino-text\" class=\"form-control\" rows=\"4\" readonly></textarea>\r\n    </div>\r\n\r\n    <hr/>\r\n\r\n    <div class=\"form-group\">\r\n      <label for=\"accuracy-rating\"><strong>Accuracy/Naturalness rating</strong></label>\r\n      <select id=\"accuracy-rating\" class=\"form-control\">\r\n        <option value=\"\">Select a rating</option>\r\n        <option value=\"1\">1 - Very poor</option>\r\n        <option value=\"2\">2 - Poor</option>\r\n        <option value=\"3\">3 - Fair</option>\r\n        <option value=\"4\">4 - Good</option>\r\n        <option value=\"5\">5 - Excellent</option>\r\n      </select>\r\n    </div>\r\n\r\n    <div class=\"form-group\" style=\"margin-top:12px;\">\r\n      <label for=\"confidence-rating\"><strong>Confidence in your rating</strong></label>\r\n      <select id=\"confidence-rating\" class=\"form-control\">\r\n        <option value=\"\">Select confidence</option>\r\n        <option value=\"1\">1 - Very unsure</option>\r\n        <option value=\"2\">2 - Unsure</option>\r\n        <option value=\"3\">3 - Moderately sure</option>\r\n        <option value=\"4\">4 - Sure</option>\r\n        <option value=\"5\">5 - Very sure</option>\r\n      </select>\r\n    </div>\r\n\r\n    <div class=\"form-group\" style=\"margin-top:12px;\">\r\n      <label for=\"remarks\"><strong>Remarks (optional)</strong></label>\r\n      <textarea id=\"remarks\" class=\"form-control\" rows=\"3\" placeholder=\"Any issues, suggestions, or corrections...\"></textarea>\r\n    </div>\r\n\r\n    <button id=\"submit-answer\" class=\"btn btn-primary\" style=\"margin-top:12px;\">Submit</button>\r\n  </div>\r\n</div>\r\n\r\n<script>\r\n(function () {\r\n  function getText(info, keys) {\r\n    for (var i = 0; i < keys.length; i++) {\r\n      if (info && typeof info[keys[i]] !== 'undefined' && info[keys[i]] !== null) {\r\n        return String(info[keys[i]]);\r\n      }\r\n    }\r\n    return '';\r\n  }\r\n\r\n  function resetForm() {\r\n    $('#accuracy-rating').val('');\r\n    $('#confidence-rating').val('');\r\n    $('#remarks').val('');\r\n    $('#error').hide().text('');\r\n  }\r\n\r\n  pybossa.presentTask(function(task, deferred) {\r\n    if ($.isEmptyObject(task)) {\r\n      $('.skeleton').hide();\r\n      $('#loading').hide();\r\n      $('#finish').fadeIn(300);\r\n      return;\r\n    }\r\n\r\n    var englishText = getText(task.info, ['english_text', 'english', 'source_text', 'text_en']);\r\n    var filipinoText = getText(task.info, ['filipino_text', 'filipino', 'machine_translation', 'text_fil']);\r\n\r\n    $('#english-text').val(englishText);\r\n    $('#filipino-text').val(filipinoText);\r\n\r\n    resetForm();\r\n    $('#success').hide();\r\n    $('#loading').hide();\r\n    $('.skeleton').show();\r\n\r\n    $('#submit-answer').off('click').on('click', function() {\r\n      var accuracy = $('#accuracy-rating').val();\r\n      var confidence = $('#confidence-rating').val();\r\n      var remarks = $('#remarks').val().trim();\r\n\r\n      if (!accuracy || !confidence) {\r\n        $('#error').text('Please provide both ratings before submitting.').show();\r\n        return;\r\n      }\r\n\r\n      var answer = {\r\n        accuracy_rating: parseInt(accuracy, 10),\r\n        confidence_rating: parseInt(confidence, 10),\r\n        remarks: remarks\r\n      };\r\n\r\n      $('#error').hide().text('');\r\n      $('#loading').text('Saving answer...').show();\r\n\r\n      pybossa.saveTask(task.id, answer)\r\n        .done(function() {\r\n          $('#success').fadeIn(200);\r\n          $('#loading').text('Loading task...').show();\r\n          deferred.resolve();\r\n        })\r\n        .fail(function() {\r\n          $('#loading').hide();\r\n          $('#error').text('Could not save your answer. Please try again.').show();\r\n        });\r\n    });\r\n  });\r\n\r\n  pybossa.run('fil-eng-validator');\r\n})();\r\n</script>\r\n"}, "owners_ids": [5], "links": ["<link rel='category' title='category' href='http://crowdsource.lol/api/category/1'/>"], "link": "<link rel='self' title='project' href='http://crowdsource.lol/api/project/9'/>"}, {"id": 10, "created": "2026-03-10T04:43:41.972014", "updated": "2026-05-01T15:24:41.378150", "name": "Road Sign Identification", "short_name": "road-sign-identification", "description": "Road Sign Identification  You are going to view an image of a road sign and are asked to transcribe the text that appears on the sign.   What you will do   View the road sign on the image  Identify the road sign and choose one label: Stop sign, Speed l...", "long_description": "# Road Sign Identification\r\n\r\nYou are going to view an image of a road sign and are asked to transcribe the text that appears on the sign. \r\n\r\n## What you will do\r\n- View the road sign on the image \r\n- Identify the road sign and choose one label: Stop sign, Speed limit sign, No parking sign, Pedestrian crossing sign, Yield sign, or Other road sign\r\n- If you choose Other road sign, transcribe the text that appears on the sign\r\n\r\n## Notes\r\n\r\nIf there are multiple signs in the image, select all relevant labels.\r\n\r\nIf you select Other road sign, type the exact text that appears on the sign. Preserve the original spelling, capitalization, and numbers. If no text is visible, write \u201cNo text visible.\u201d\r\n\r\nEach image will be labeled by **three** contributors to improve reliability.", "featured": false, "owner_id": 3, "category_id": 1, "info": {"container": "user_3", "thumbnail": "project_10_thumbnail_1773117997.png", "thumbnail_url": "https://crowdsource.lol/uploads/user_3/project_10_thumbnail_1773117997.png", "task_presenter": "<div class=\"container\" style=\"max-width: 800px; margin: 0 auto; font-family: sans-serif;\">\r\n\r\n  <h2>Road Sign Identification</h2>\r\n\r\n  <div style=\"text-align: center; margin: 20px 0; padding: 15px; background: #f4f6f8; border-radius: 6px;\">\r\n    <img id=\"sign_image\" src=\"\" alt=\"Road Sign\" style=\"max-width: 100%; height: auto; max-height: 500px;\" />\r\n  </div>\r\n\r\n  <p style=\"font-size: 16px;\">\r\n    <strong>Instructions:</strong> View the road sign image above and identify the type. Make sure to read the additional instructions below.\r\n  </p>\r\n\r\n  <div style=\"margin: 15px 0;\" id=\"checkbox_group\">\r\n    <label style=\"display: block; margin-bottom: 8px;\"><input type=\"checkbox\" name=\"label\" value=\"STOP\"> STOP</label>\r\n    <label style=\"display: block; margin-bottom: 8px;\"><input type=\"checkbox\" name=\"label\" value=\"SLOW DOWN\"> SLOW DOWN</label>\r\n    <label style=\"display: block; margin-bottom: 8px;\"><input type=\"checkbox\" name=\"label\" value=\"NO LEFT TURN\"> NO LEFT TURN</label>\r\n    <label style=\"display: block; margin-bottom: 8px;\"><input type=\"checkbox\" name=\"label\" value=\"NO RIGHT TURN\"> NO RIGHT TURN</label>\r\n    <label style=\"display: block; margin-bottom: 8px;\"><input type=\"checkbox\" name=\"label\" value=\"NO PARKING ANYTIME\"> NO PARKING ANYTIME</label>\r\n    <label style=\"display: block; margin-bottom: 8px;\"><input type=\"checkbox\" name=\"label\" value=\"ALL TRAFFIC LEFT\"> ALL TRAFFIC TURN LEFT</label>\r\n    <label style=\"display: block; margin-bottom: 8px;\"><input type=\"checkbox\" name=\"label\" value=\"ALL TRAFFIC RIGHT\"> ALL TRAFFIC TURN RIGHT</label>\r\n    <label style=\"display: block; margin-bottom: 8px;\"><input type=\"checkbox\" name=\"label\" id=\"other_checkbox\" value=\"Other road sign\"> Other/Additional road sign</label>\r\n  </div>\r\n\r\n  <div id=\"other_input_container\" style=\"display: none; margin: 15px 0; padding: 15px; background: #fff3cd; border-left: 4px solid #ffeeba;\">\r\n    <label for=\"other_text\" style=\"font-weight: bold;\">Specify 'Other' Sign Text:</label><br>\r\n    <textarea id=\"other_text\" rows=\"4\" style=\"width: 100%; padding: 10px; margin-top: 5px; box-sizing: border-box; resize: vertical;\" placeholder=\"Enter exact text on the sign\"></textarea>\r\n  </div>\r\n\r\n  <div style=\"margin: 20px 0; padding: 15px; background: #e9ecef; border-left: 4px solid #007bff;\">\r\n    <strong>Notes:</strong>\r\n    <ul style=\"margin-top: 5px; margin-bottom: 0;\">\r\n      <li>If multiple signs exist, select all relevant labels.</li>\r\n      <li>If \"Other/Addititonal road sign\" is selected:\r\n        <ul style=\"margin-top: 5px;\">\r\n          <li>Preserve spelling, capitalization, and numbers.</li>\r\n          <li>If there are multiple signs not listed in the options, write a new line for every sign.</li>\r\n          <li style=\"list-style-type:none;\">Start from the leftmost. For signs with multiple lines/sentences, separate each by a period (.)</li>\r\n          \t<li style=\"list-style-type: none; margin-top: 5px; padding-left: 10px\">Ex:</li>\r\n          \t<li style=\"list-style-type: none; padding-left: 30px;\">\"NO STOPPING ANYTIME\"</li>\r\n          \t<li style=\"list-style-type: none; padding-left: 30px;\">\"SLOW DOWN. SHARP CURVE AHEAD\"</li>\r\n          <li>If the text is not readable, write: \"Not Readable.\"</li>\r\n        </ul>\r\n      </li>\r\n    </ul>\r\n  </div>\r\n\r\n  <button id=\"submitBtn\" class=\"btn btn-primary\" style=\"padding: 10px 20px; font-size: 16px; cursor: pointer;\" disabled>Submit</button>\r\n  <p id=\"msg\" style=\"margin-top: 10px; color: #d9534f; font-weight: bold;\"></p>\r\n\r\n</div>\r\n\r\n<script type=\"text/javascript\">\r\n(function() {\r\n\r\n  function clearForm() {\r\n    document.querySelectorAll('input[name=\"label\"]').forEach(function(el) { el.checked = false; });\r\n    document.getElementById('other_text').value = '';\r\n    document.getElementById('other_input_container').style.display = 'none';\r\n    document.getElementById('submitBtn').disabled = true;\r\n    document.getElementById('msg').textContent = '';\r\n  }\r\n\r\n  function getCheckedValues() {\r\n    var checked = [];\r\n    document.querySelectorAll('input[name=\"label\"]:checked').forEach(function(el) {\r\n      checked.push(el.value);\r\n    });\r\n    return checked;\r\n  }\r\n\r\n  function enableIfReady() {\r\n    var checkedLabels = getCheckedValues();\r\n    var otherChecked = checkedLabels.indexOf('Other road sign') !== -1;\r\n    var otherText = document.getElementById('other_text').value.trim();\r\n    var isValid = true;\r\n\r\n    // Show or hide the text input based on \"Other road sign\" selection\r\n    document.getElementById('other_input_container').style.display = otherChecked ? 'block' : 'none';\r\n\r\n    // Validation logic\r\n    if (checkedLabels.length === 0) {\r\n      isValid = false;\r\n    }\r\n    if (otherChecked && otherText === '') {\r\n      isValid = false;\r\n    }\r\n\r\n    document.getElementById('submitBtn').disabled = !isValid;\r\n    document.getElementById('msg').textContent = ''; // clear message when updating\r\n  }\r\n\r\n  // Event listeners for changes in checkboxes and text input\r\n  document.addEventListener('change', function(e) {\r\n    if (e.target && e.target.name === 'label') {\r\n      enableIfReady();\r\n    }\r\n  });\r\n\r\n  document.getElementById('other_text').addEventListener('input', enableIfReady);\r\n\r\n  pybossa.taskLoaded(function(task, deferred) {\r\n    deferred.resolve(task);\r\n  });\r\n\r\n  pybossa.presentTask(function(task, deferred) {\r\n    clearForm();\r\n\r\n    // Load image path from various possible data structures\r\n    var imgSrc = task.image || \r\n                 (task.info && task.info.image) || \r\n                 (task.data && task.data.image) || \r\n                 '';\r\n    \r\n    document.getElementById('sign_image').src = imgSrc;\r\n\r\n    document.getElementById('submitBtn').onclick = function() {\r\n      var checkedLabels = getCheckedValues();\r\n      var otherChecked = checkedLabels.indexOf('Other road sign') !== -1;\r\n      var otherText = document.getElementById('other_text').value.trim();\r\n\r\n      if (checkedLabels.length === 0 || (otherChecked && otherText === '')) {\r\n        document.getElementById('msg').textContent = 'Please complete all required fields before submitting.';\r\n        return;\r\n      }\r\n\r\n      var answer = {\r\n        labels: checkedLabels,\r\n        other_text: otherChecked ? otherText : \"\"\r\n      };\r\n\r\n      pybossa.saveTask(task.id, answer).done(function() {\r\n        deferred.resolve();\r\n      });\r\n    };\r\n  });\r\n\r\n  pybossa.run('road-sign-identification');\r\n\r\n})();\r\n</script>"}, "owners_ids": [3], "links": ["<link rel='category' title='category' href='http://crowdsource.lol/api/category/1'/>"], "link": "<link rel='self' title='project' href='http://crowdsource.lol/api/project/10'/>"}]