landing-page — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited landing-page (Agent Skill) and scored it 45/100 (orange). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Generate a new AILANG Parse documentation/landing page that follows the established site conventions, uses shared infrastructure, and targets a specific keyword or topic.
ls docs/*.html cat docs/js/site-data.js # Pricing, formats, site metadata (DP_DATA)
cat docs/js/components.js # Header, footer, data-dp, data-src, ensureHeadEvery new page MUST follow this structure. Use resources/template.html as the starting point.
<meta charset="UTF-8"> and viewport meta<title> — format: {Page Title} — AILANG Parse<link rel="icon"> pointing to img/docparse-logo.svg<meta name="description"> — 140-160 chars, include the target keyword naturallyog:title, og:description, og:type (website), og:urldesign-system.css, docparse.css, prism.css, docs-layout.css, components.css <div id="header-mount"></div> <!-- components.js injects header -->
<div class="page">
<section class="hero"> <!-- Title + subtitle -->
<div class="dp-docs-layout"> <!-- Sidebar + content -->
<aside class="dp-docs-sidebar"> <!-- Table of contents -->
<main class="dp-docs-content"> <!-- Page content -->
</div>
</div>
<div id="footer-mount"></div> <!-- components.js injects footer --> <script src="js/site-data.js"></script>
<script src="js/components.js"></script>
<script src="js/prism.min.js"></script>
<script src="js/prism-ailang.js"></script> <script>
(function() {
var links = document.querySelectorAll('.dp-docs-sidebar a');
var sections = [];
links.forEach(function(link) {
var id = link.getAttribute('href').replace('#', '');
var sec = document.getElementById(id);
if (sec) sections.push({ el: sec, link: link });
});
function update() {
var y = window.scrollY + 100;
var current = null;
sections.forEach(function(s) { if (s.el.offsetTop <= y) current = s; });
links.forEach(function(l) { l.classList.remove('active'); });
if (current) current.link.classList.add('active');
}
window.addEventListener('scroll', update, { passive: true });
update();
})();
</script>Pricing/features — never hardcode. Use data-dp attributes:
<span data-dp="pricing.tiers.free.requests_per_month">500</span> requests/month
<span data-dp="formats.input_count">13</span> input formatsThe inline text is the no-JS fallback. components.js replaces it from DP_DATA.
Available paths (check site-data.js for full list):
pricing.tiers.{free,pro,business}.{price_eur,requests_per_day,requests_per_month,ai_requests_per_month,max_file_size_mb}formats.{input_count,output_count}Code examples — use external files via data-src:
<pre><code class="language-python" data-src="examples/sdk/quickstart.py">
# Inline fallback for no-JS
from ailang_parse import DocParse
</code></pre>If the page needs a NEW code example, create the file in docs/examples/ and reference it. Existing examples:
examples/sdk/quickstart.{py,js,go,R} — SDK usage (Python, JavaScript, Go, R)examples/cli/install.sh — CLI installationexamples/cli/parse.sh — Basic parsingexamples/cli/convert.sh — Format conversionexamples/cli/ai-parse.sh — AI generationexamples/api/curl-parse.sh — curl quick startexamples/mcp/claude-desktop-config.json — MCP config<title>, <meta description>, <h1>, first <p>, at least one <h2>FAQPage JSON-LD structured datadp-config-table class with dp-preserved/dp-lost spans)<style> block for any custom CSS (use design system variables)Follow these rules for all prose on landing pages:
vs-pdf-conversion.html and benchmarks.html, (b) migrate-from-unstructured.html (inherent), (c) integrations.html (integration-specific code), (d) enhance/integration grid cards showing how to use AILANG Parse with other tools.<details> content and the JSON-LD schema answers concise and matching.vs-pdf-conversion.html. Other pages get one sentence about the architectural difference, then link to the comparison page. Don't repeat the "Unstructured converts to PDF, Docling converts to PDF" pattern on every page.Study these existing pages for inspiration:
comments.html, track-changes.html, tables.html — problem/solution/how-it-works/example-output/use-cases/try-it/FAQvs-pdf-conversion.html, migrate-from-unstructured.html — side-by-side tables, specific data loss examplesmcp.html, claude-code.html, integrations.html — step-by-step setup with code blocksUse these from the design system rather than inline styles:
.dp-docs-layout, .dp-docs-sidebar, .dp-docs-content — page layout.dp-callout — info callout box with SVG icon.dp-config-table — comparison table.dp-preserved / .dp-lost — green/red status badges in tables.dp-btn, .dp-btn--primary, .dp-btn--secondary — CTA buttons.dp-faq, .dp-faq-answer — FAQ section.reveal, .reveal-delay-1 — scroll-reveal animation.hero, .subtitle — page hero sectionlanguage-bash, language-python, language-json, language-r, etc. — Prism syntax classes cd docs && python3 -m http.server 8765
# Open http://localhost:8765/your-page.htmlcomponents.js unless it's a top-level section. Landing pages are discovered via search, not navigation.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.