On the production deploy, DEPLOY_PRIME_URL is the branch permalink
(main--qdrant-skills.netlify.app) rather than the custom domain, so
preferring it produced links to the Netlify subdomain instead of
skills.qdrant.tech. Key off Netlify's CONTEXT: use URL (the custom
domain) on production, and only prefer DEPLOY_PRIME_URL on deploy
previews and branch deploys so those stay self-consistent.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
build.sh strips the search.qdrant.tech domain off /md/ links, leaving
them root-relative; make_absolute then skipped all "/"-prefixed URLs, so
those links never had the skills.qdrant.tech domain re-attached. Treat
root-relative links as relative-to-site-root and resolve them to an
absolute URL, leaving only in-page anchors and scheme-carrying links
(http, https, mailto) untouched.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Read BASE_URL from Netlify's DEPLOY_PRIME_URL/URL env vars (falling back
to the production domain for local builds) instead of hard-coding it, so
branch deploys and deploy previews produce self-consistent links. Apply
the same fallback chain in the sitemap generator.
Build absolute links with urllib.parse.urljoin/urlsplit, which correctly
resolves relative paths and preserves fragments and query strings.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* add scripts/generate_sitemap.sh that discovers all .md files and
produces a standard sitemap.xml in public/
* call the script from build.sh after copying skills
* scope the text/markdown content-type header to /*.md so sitemap.xml
is served as application/xml
Made-with: Cursor
old grader matched by substring (first 40 chars of assertion text),
which silently failed when the grader rephrased assertions. new
approach uses numbered assertions for unambiguous matching.
Co-authored-by: thierrypdamiba <thierrypdamiba@users.noreply.github.com>