{"record":{"id":"3a5948912c51ce0c","repo":"remoteintech/remote-jobs","slug":"invalid-website-url-data-website-must-be","errorCode":null,"errorMessage":"Invalid `website` URL: \"${data.website}\". Must be a full URL starting with https:// or http://","messagePattern":"Invalid `website` URL: \"(.+?)\"\\. Must be a full URL starting with https:// or http://","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":".github/scripts/validate-companies.js","lineNumber":157,"sourceCode":"        );\n      }\n    }\n  }\n\n  // Validate slug matches filename\n  if (data.slug) {\n    const expectedSlug = basename(filePath, \".md\");\n    if (data.slug !== expectedSlug) {\n      errors.push(\n        `Slug \"${data.slug}\" does not match filename \"${basename(filePath)}\". The slug must be \"${expectedSlug}\".`\n      );\n    }\n  }\n\n  // Validate URL format\n  if (data.website && !isValidUrl(data.website)) {\n    errors.push(\n      `Invalid \\`website\\` URL: \"${data.website}\". Must be a full URL starting with https:// or http://`\n    );\n  }\n\n  if (data.careers_url && !isValidUrl(data.careers_url)) {\n    errors.push(\n      `Invalid \\`careers_url\\`: \"${data.careers_url}\". Must be a full URL starting with https:// or http://`\n    );\n  }\n\n  // Check required markdown sections\n  const bodyContent = content.replace(/^---[\\s\\S]*?---/, \"\");\n  for (const section of REQUIRED_SECTIONS) {\n    const sectionPattern = new RegExp(\n      `^##\\\\s+${escapeRegExp(section)}\\\\s*$`,\n      \"m\"\n    );\n    if (!sectionPattern.test(bodyContent)) {\n      errors.push(`Missing required section: \"## ${section}\"`);","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/remoteintech/remote-jobs/blob/b1dd8deb1945e5ff58f9e9c35e318f53c8871930/.github/scripts/validate-companies.js#L139-L175","documentation":"URL format check at lines 154-159 using isValidUrl (lines 192-199), which constructs `new URL(str)` and requires protocol === 'https:' or 'http:'. A website value without a scheme (`example.com`), with a non-http scheme (`ftp://`), or wrapped in angle brackets (`<https://...>`) fails. Note the `data.website &&` short-circuit means empty values are skipped here, but website is also a REQUIRED_FIELD so empty is already reported as missing.","triggerScenarios":"Bare domain (`acme.com`); URL wrapped in markdown link brackets; URL with a leading space or trailing punctuation; non-string value that String-coerces into something URL can't parse.","commonSituations":"Contributor pastes a domain copied from a browser address bar that lost the scheme; autoformatter added angle brackets; URL with a stray smart-quote from a rich-text editor.","solutions":["Ensure the value starts with `https://` (preferred) or `http://`.","Strip any wrapping angle brackets, quotes, or whitespace.","Confirm the URL resolves in a browser before committing."],"exampleFix":"// before\nwebsite: acme.com\n// after\nwebsite: https://acme.com","handlingStrategy":"validation","validationCode":"function isValidUrl(str) {\n  try {\n    const u = new URL(str);\n    return u.protocol === 'https:' || u.protocol === 'http:';\n  } catch { return false; }\n}","typeGuard":"function isHttpUrl(str) {\n  return typeof str === 'string' && isValidUrl(str);\n}","tryCatchPattern":null,"preventionTips":["Always paste URLs with the https:// scheme.","Strip angle brackets and surrounding quotes before saving.","Prefer https:// over http:// for new profiles."],"tags":["url","validation","frontmatter","website"],"backgroundTag":null,"analyzedSha":"b1dd8deb1945e5ff58f9e9c35e318f53c8871930","analyzedAt":"2026-08-13T04:09:00.804Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}