Analyzed URL
https://polenmadrid.com/
AI-Ready Score
Fair
out of 100
Token Savings
Score Breakdown
Your site doesn't have an llms.txt file. This is the emerging standard for helping AI agents understand your site structure.
How to implement
Create an /llms.txt file following the llmstxt.org specification. Include a site description and links to your key pages.
Your page has a low ratio of actual content to total HTML. Much of the page weight is markup, scripts, or styles rather than content.
How to implement
Move CSS to external stylesheets, remove inline styles, minimize JavaScript, and ensure the HTML focuses on content structure.
Your site doesn't support Markdown for Agents. This Cloudflare standard lets AI agents request content in markdown format, reducing token usage by ~80%.
How to implement
Implement one or more: (1) Respond to Accept: text/markdown with markdown content. (2) Serve .md URLs (e.g., /page.md). (3) Add <link rel="alternate" type="text/markdown"> tags. (4) Add Link HTTP headers for markdown discovery.
No Content-Signal directives found. These tell AI agents how they may use your content (search indexing, AI input, training data). The recommended location is robots.txt.
How to implement
Add Content-Signal to your robots.txt: User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no. You can also add it as an HTTP header on markdown responses.
Your page relies heavily on <div> elements. Semantic elements like <section>, <nav>, <header>, <footer>, and <aside> provide meaningful structure for AI agents.
How to implement
Replace generic <div> containers with appropriate semantic elements. Use <section> for thematic groups, <nav> for navigation, <header>/<footer> for page/section headers and footers.
Many elements have inline style attributes. These add noise for AI agents extracting content.
How to implement
Move all inline styles to CSS classes in your stylesheet. Use utility CSS frameworks like Tailwind if you need many unique styles.
Predicción ## Estimación de niveles de polen Estimaciones para el Miércoles, 18 de febrero de 2026 basadas en datos históricos de los últimos 5 años y tendencia reciente. ### Temporada actual Cupresáceas/Taxáceas Muy alto 2.516 granos/m³ ●●● **Otros alérgenos principales** Olmos Muy alto 174 granos/m³ ●●● Fresno Alto 90 granos/m³ ●●● Populus Bajo 7 granos/m³ ●●○ Estas estimaciones son orientativas y se actualizarán automáticamente cuando lleguen los datos oficiales.
Niveles de polen hoy — PolenMadrid [🌼 PolenMadrid](https://polenmadrid.com/) Español English Français Italiano # Niveles de polen en Madrid Último dato oficial: Lunes, 16 de febrero de 2026 Última estimación: Miércoles, 18 de febrero de 2026 Predicción## Estimación de niveles de polen Estimaciones para el Miércoles, 18 de febrero de 2026 basadas en datos históricos de los últimos 5 años y tendencia reciente. ### Temporada actual Cupresáceas/Taxáceas Muy alto 2.516 granos/m³ ●●● **Otros alérgenos principales** Olmos Muy alto 174 granos/m³ ●●● Fresno Alto 90 granos/m³ ●●● Populus Bajo 7 granos/m³ ●●○ Estas estimaciones son orientativas y se actualizarán automáticamente cuando lleguen los datos oficiales. ## Temporada actual Estos alérgenos están en temporada alta ahora mismo, una media de todas las estaciones: [Cupresáceas/Taxáceas Muy alto 2.659 granos/m³](https://polenmadrid.com/tipo/cupresaceas-taxaceas) **Otros alérgenos principales** [Olmos Muy alto 288 granos/m³](https://polenmadrid.com/tipo/olmos) [Fresno Muy alto 121 granos/m³](https://polenmadrid.com/tipo/fresno) [Moreras Medio 23 granos/m³](https://polenmadrid.com/tipo/moreras) Valor máximo entre todas las estaciones del último día con datos oficiales. ## Estaciones de detección [ Alcalá de Henares Muy alto Este Cupresáceas/Taxáceas 2.659 ↑ Olmos 288 ↑ Fresno 39 ↑ ](https://polenmadrid.com/estacion/alca)[ Alcobendas Medio Norte Fresno 32 ↑ Olmos 31 ↑ Cupresáceas/Taxáceas 8 ↑ ](https://polenmadrid.com/estacion/alco)[ Aranjuez Muy alto Sur Olmos 112 ↑ Cupresáceas/Taxáceas 99 ↑ Urticáceas 11 ↑ ](https://polenmadrid.com/estacion/aran)[ Collado Villalba Muy alto Sierra Fresno 121 ↑ Cupresáceas/Taxáceas 2 ↑ PNI 1 \= ](https://polenmadrid.com/estacion/vill)[ Coslada Muy alto Este Cupresáceas/Taxáceas 298 ↑ Olmos 79 ↑ Fresno 25 ↑ ](https://polenmadrid.com/estacion/cosl)[ Getafe Muy alto Sur Cupresáceas/Taxáceas 303 ↑ Olmos 22 ↑ Fresno 14 ↑ ](https://polenmadrid.com/estacion/geta)[ Las Rozas Alto Oeste Cupresáceas/Taxáceas 156 ↑ Fresno 32 ↑ Olmos 10 ↑ ](https://polenmadrid.com/estacion/roza)[ Leganés Medio Sur Moreras 23 ↑ Pinos 15 ↑ Quercus 14 ↑ ](https://polenmadrid.com/estacion/lega)[ Madrid-Arganzuela Muy alto Capital Cupresáceas/Taxáceas 1.069 ↑ Olmos 162 ↑ Fresno 44 ↑ ](https://polenmadrid.com/estacion/aytm)[ Madrid-Barrio Salamanca Alto Capital Cupresáceas/Taxáceas 97 ↑ Fresno 70 ↑ Olmos 41 ↑ ](https://polenmadrid.com/estacion/aler)[ Madrid-Ciudad Universitaria Muy alto Capital Cupresáceas/Taxáceas 590 ↑ Olmos 111 ↑ Fresno 45 ↑ ](https://polenmadrid.com/estacion/facf) ↑ sube · ↓ baja · = sin cambios — respecto al día anterior
Upload this file as /index.md on your server so AI agents can access a clean version of your page. You can also configure Accept: text/markdown content negotiation to serve it automatically.
Generated llms.txt for this single page
# PolenMadrid > Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam). ## Main - [Niveles de polen hoy — PolenMadrid](https://polenmadrid.com/): Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red… - [Mapa](https://polenmadrid.com/mapa) - [Histórico](https://polenmadrid.com/historico) - [Calendario](https://polenmadrid.com/calendario) - [Alertas](https://polenmadrid.com/alertas) - [Acerca de](https://polenmadrid.com/acerca) - [Ayuda](https://polenmadrid.com/ayuda) ## Legal - [Aviso legal y privacidad](https://polenmadrid.com/legal)
Full llms.txt requires domain-wide analysis (coming soon)
Upload this file to https://polenmadrid.com/llms.txt at the root of your domain. AI agents like ChatGPT, Claude, and Perplexity check this file to understand your site structure.
Semantic HTML
Has <main>
Clean heading hierarchy
8 semantic elements, 88 divs (ratio: 8%)
No images found
Avg div depth: 1.6, max: 3
Content Efficiency
98% token reduction (HTML→Markdown)
Content ratio: 1.7% (482 content chars / 27899 HTML bytes)
11/458 elements with inline styles (2.4%)
HTML size: 27KB
AI Discoverability
No llms.txt found
robots.txt exists
All major AI bots allowed
Sitemap found
Structured Data
JSON-LD found but basic types: WebSite
All OG tags present
Meta description: 130 chars
Canonical URL present
lang="es"
Accessibility
Content available without JavaScript
Page size: 27KB
Main content starts at 18% of HTML
{
"url": "https://polenmadrid.com/",
"timestamp": 1771446419335,
"fetch": {
"mode": "simple",
"timeMs": 123,
"htmlSizeBytes": 27899,
"supportsMarkdown": false,
"markdownAgents": {
"contentNegotiation": false,
"mdUrl": {
"found": false,
"url": null
},
"linkTag": {
"found": false,
"url": null
},
"linkHeader": {
"found": false,
"url": null
},
"responseHeaders": {
"contentSignal": null,
"xMarkdownTokens": null,
"vary": null
},
"frontmatter": {
"present": false,
"fields": [],
"level": "none"
},
"level": "none"
},
"statusCode": 200
},
"extraction": {
"title": "Niveles de polen hoy — PolenMadrid",
"excerpt": "Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).",
"byline": null,
"siteName": "PolenMadrid",
"lang": "es",
"contentLength": 482,
"metadata": {
"description": "Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).",
"ogTitle": "Niveles de polen hoy — PolenMadrid",
"ogDescription": "Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).",
"ogImage": "https://polenmadrid.com/assets/img/og-image.png",
"ogType": "website",
"canonical": "https://polenmadrid.com/",
"lang": "es",
"schemas": [
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "PolenMadrid",
"url": "https://polenmadrid.com/",
"description": "Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).",
"inLanguage": [
"es",
"en",
"fr",
"it"
]
}
],
"robotsMeta": null,
"author": null,
"generator": null,
"markdownAlternateHref": null
}
},
"markdown": "Predicción\n\n## Estimación de niveles de polen\n\nEstimaciones para el Miércoles, 18 de febrero de 2026 basadas en datos históricos de los últimos 5 años y tendencia reciente.\n\n### Temporada actual\n\nCupresáceas/Taxáceas Muy alto 2.516 granos/m³ ●●●\n\n**Otros alérgenos principales**\n\nOlmos Muy alto 174 granos/m³ ●●●\n\nFresno Alto 90 granos/m³ ●●●\n\nPopulus Bajo 7 granos/m³ ●●○\n\nEstas estimaciones son orientativas y se actualizarán automáticamente cuando lleguen los datos oficiales.\n",
"fullPageMarkdown": "Niveles de polen hoy — PolenMadrid\n\n[🌼 PolenMadrid](https://polenmadrid.com/)\n\nEspañol English Français Italiano\n\n# Niveles de polen en Madrid\n\nÚltimo dato oficial: Lunes, 16 de febrero de 2026 Última estimación: Miércoles, 18 de febrero de 2026\n\nPredicción## Estimación de niveles de polen\n\nEstimaciones para el Miércoles, 18 de febrero de 2026 basadas en datos históricos de los últimos 5 años y tendencia reciente.\n\n### Temporada actual\n\nCupresáceas/Taxáceas Muy alto 2.516 granos/m³ ●●●\n\n**Otros alérgenos principales**\n\nOlmos Muy alto 174 granos/m³ ●●●\n\nFresno Alto 90 granos/m³ ●●●\n\nPopulus Bajo 7 granos/m³ ●●○\n\nEstas estimaciones son orientativas y se actualizarán automáticamente cuando lleguen los datos oficiales.\n\n## Temporada actual\n\nEstos alérgenos están en temporada alta ahora mismo, una media de todas las estaciones:\n\n[Cupresáceas/Taxáceas Muy alto 2.659 granos/m³](https://polenmadrid.com/tipo/cupresaceas-taxaceas)\n\n**Otros alérgenos principales**\n\n[Olmos Muy alto 288 granos/m³](https://polenmadrid.com/tipo/olmos) [Fresno Muy alto 121 granos/m³](https://polenmadrid.com/tipo/fresno) [Moreras Medio 23 granos/m³](https://polenmadrid.com/tipo/moreras)\n\nValor máximo entre todas las estaciones del último día con datos oficiales.\n\n## Estaciones de detección\n\n[\n\nAlcalá de Henares Muy alto\n\nEste\n\nCupresáceas/Taxáceas 2.659 ↑\n\nOlmos 288 ↑\n\nFresno 39 ↑\n\n](https://polenmadrid.com/estacion/alca)[\n\nAlcobendas Medio\n\nNorte\n\nFresno 32 ↑\n\nOlmos 31 ↑\n\nCupresáceas/Taxáceas 8 ↑\n\n](https://polenmadrid.com/estacion/alco)[\n\nAranjuez Muy alto\n\nSur\n\nOlmos 112 ↑\n\nCupresáceas/Taxáceas 99 ↑\n\nUrticáceas 11 ↑\n\n](https://polenmadrid.com/estacion/aran)[\n\nCollado Villalba Muy alto\n\nSierra\n\nFresno 121 ↑\n\nCupresáceas/Taxáceas 2 ↑\n\nPNI 1 \\=\n\n](https://polenmadrid.com/estacion/vill)[\n\nCoslada Muy alto\n\nEste\n\nCupresáceas/Taxáceas 298 ↑\n\nOlmos 79 ↑\n\nFresno 25 ↑\n\n](https://polenmadrid.com/estacion/cosl)[\n\nGetafe Muy alto\n\nSur\n\nCupresáceas/Taxáceas 303 ↑\n\nOlmos 22 ↑\n\nFresno 14 ↑\n\n](https://polenmadrid.com/estacion/geta)[\n\nLas Rozas Alto\n\nOeste\n\nCupresáceas/Taxáceas 156 ↑\n\nFresno 32 ↑\n\nOlmos 10 ↑\n\n](https://polenmadrid.com/estacion/roza)[\n\nLeganés Medio\n\nSur\n\nMoreras 23 ↑\n\nPinos 15 ↑\n\nQuercus 14 ↑\n\n](https://polenmadrid.com/estacion/lega)[\n\nMadrid-Arganzuela Muy alto\n\nCapital\n\nCupresáceas/Taxáceas 1.069 ↑\n\nOlmos 162 ↑\n\nFresno 44 ↑\n\n](https://polenmadrid.com/estacion/aytm)[\n\nMadrid-Barrio Salamanca Alto\n\nCapital\n\nCupresáceas/Taxáceas 97 ↑\n\nFresno 70 ↑\n\nOlmos 41 ↑\n\n](https://polenmadrid.com/estacion/aler)[\n\nMadrid-Ciudad Universitaria Muy alto\n\nCapital\n\nCupresáceas/Taxáceas 590 ↑\n\nOlmos 111 ↑\n\nFresno 45 ↑\n\n](https://polenmadrid.com/estacion/facf)\n\n↑ sube · ↓ baja · = sin cambios — respecto al día anterior\n",
"markdownStats": {
"images": 0,
"links": 0,
"tables": 0,
"codeBlocks": 0,
"headings": 2
},
"tokens": {
"htmlTokens": 8329,
"markdownTokens": 158,
"reduction": 8171,
"reductionPercent": 98
},
"score": {
"score": 69,
"grade": "C",
"dimensions": {
"semanticHtml": {
"score": 86,
"weight": 20,
"grade": "B",
"checks": {
"uses_article_or_main": {
"score": 100,
"weight": 20,
"details": "Has <main>"
},
"proper_heading_hierarchy": {
"score": 100,
"weight": 25,
"details": "Clean heading hierarchy"
},
"semantic_elements": {
"score": 28,
"weight": 20,
"details": "8 semantic elements, 88 divs (ratio: 8%)"
},
"meaningful_alt_texts": {
"score": 100,
"weight": 15,
"details": "No images found"
},
"low_div_nesting": {
"score": 100,
"weight": 20,
"details": "Avg div depth: 1.6, max: 3"
}
}
},
"contentEfficiency": {
"score": 63,
"weight": 25,
"grade": "C",
"checks": {
"token_reduction_ratio": {
"score": 100,
"weight": 40,
"details": "98% token reduction (HTML→Markdown)"
},
"content_to_noise_ratio": {
"score": 0,
"weight": 30,
"details": "Content ratio: 1.7% (482 content chars / 27899 HTML bytes)"
},
"minimal_inline_styles": {
"score": 50,
"weight": 15,
"details": "11/458 elements with inline styles (2.4%)"
},
"reasonable_page_weight": {
"score": 100,
"weight": 15,
"details": "HTML size: 27KB"
}
}
},
"aiDiscoverability": {
"score": 35,
"weight": 25,
"grade": "F",
"checks": {
"has_llms_txt": {
"score": 0,
"weight": 20,
"details": "No llms.txt found"
},
"has_robots_txt": {
"score": 100,
"weight": 10,
"details": "robots.txt exists"
},
"robots_allows_ai_bots": {
"score": 100,
"weight": 15,
"details": "All major AI bots allowed"
},
"has_sitemap": {
"score": 100,
"weight": 10,
"details": "Sitemap found"
},
"supports_markdown_negotiation": {
"score": 0,
"weight": 25,
"details": "No Markdown for Agents support detected"
},
"has_content_signals": {
"score": 0,
"weight": 20,
"details": "No Content-Signal found (robots.txt or HTTP headers)"
}
}
},
"structuredData": {
"score": 85,
"weight": 15,
"grade": "B",
"checks": {
"has_schema_org": {
"score": 50,
"weight": 30,
"details": "JSON-LD found but basic types: WebSite"
},
"has_open_graph": {
"score": 100,
"weight": 25,
"details": "All OG tags present"
},
"has_meta_description": {
"score": 100,
"weight": 20,
"details": "Meta description: 130 chars"
},
"has_canonical_url": {
"score": 100,
"weight": 15,
"details": "Canonical URL present"
},
"has_lang_attribute": {
"score": 100,
"weight": 10,
"details": "lang=\"es\""
}
}
},
"accessibility": {
"score": 100,
"weight": 15,
"grade": "A",
"checks": {
"content_without_js": {
"score": 100,
"weight": 40,
"details": "Content available without JavaScript"
},
"reasonable_page_size": {
"score": 100,
"weight": 30,
"details": "Page size: 27KB"
},
"fast_content_position": {
"score": 100,
"weight": 30,
"details": "Main content starts at 18% of HTML"
}
}
}
}
},
"recommendations": [
{
"id": "add_llms_txt",
"priority": "critical",
"category": "aiDiscoverability",
"titleKey": "rec.add_llms_txt.title",
"descriptionKey": "rec.add_llms_txt.description",
"howToKey": "rec.add_llms_txt.howto",
"effort": "quick-win",
"estimatedImpact": 10,
"checkScore": 0,
"checkDetails": "No llms.txt found"
},
{
"id": "improve_content_ratio",
"priority": "critical",
"category": "contentEfficiency",
"titleKey": "rec.improve_content_ratio.title",
"descriptionKey": "rec.improve_content_ratio.description",
"howToKey": "rec.improve_content_ratio.howto",
"effort": "moderate",
"estimatedImpact": 6,
"checkScore": 0,
"checkDetails": "Content ratio: 1.7% (482 content chars / 27899 HTML bytes)"
},
{
"id": "add_markdown_negotiation",
"priority": "critical",
"category": "aiDiscoverability",
"titleKey": "rec.add_markdown_negotiation.title",
"descriptionKey": "rec.add_markdown_negotiation.description",
"howToKey": "rec.add_markdown_negotiation.howto",
"effort": "significant",
"estimatedImpact": 6,
"checkScore": 0,
"checkDetails": "No Markdown for Agents support detected"
},
{
"id": "add_content_signals",
"priority": "critical",
"category": "aiDiscoverability",
"titleKey": "rec.add_content_signals.title",
"descriptionKey": "rec.add_content_signals.description",
"howToKey": "rec.add_content_signals.howto",
"effort": "quick-win",
"estimatedImpact": 5,
"checkScore": 0,
"checkDetails": "No Content-Signal found (robots.txt or HTTP headers)"
},
{
"id": "add_semantic_elements",
"priority": "high",
"category": "semanticHtml",
"titleKey": "rec.add_semantic_elements.title",
"descriptionKey": "rec.add_semantic_elements.description",
"howToKey": "rec.add_semantic_elements.howto",
"effort": "moderate",
"estimatedImpact": 5,
"checkScore": 28,
"checkDetails": "8 semantic elements, 88 divs (ratio: 8%)"
},
{
"id": "remove_inline_styles",
"priority": "medium",
"category": "contentEfficiency",
"titleKey": "rec.remove_inline_styles.title",
"descriptionKey": "rec.remove_inline_styles.description",
"howToKey": "rec.remove_inline_styles.howto",
"effort": "moderate",
"estimatedImpact": 3,
"checkScore": 50,
"checkDetails": "11/458 elements with inline styles (2.4%)"
}
],
"llmsTxtPreview": "# PolenMadrid\n\n> Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).\n\n## Main\n- [Niveles de polen hoy — PolenMadrid](https://polenmadrid.com/): Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red…\n- [Mapa](https://polenmadrid.com/mapa)\n- [Histórico](https://polenmadrid.com/historico)\n- [Calendario](https://polenmadrid.com/calendario)\n- [Alertas](https://polenmadrid.com/alertas)\n- [Acerca de](https://polenmadrid.com/acerca)\n- [Ayuda](https://polenmadrid.com/ayuda)\n\n## Legal\n- [Aviso legal y privacidad](https://polenmadrid.com/legal)\n\n",
"llmsTxtExisting": null,
"snippets": [
{
"id": "add_llms_txt",
"title": "Create /llms.txt",
"description": "Upload this file to your web root. It tells AI agents what your site is about and which pages matter.",
"language": "markdown",
"code": "# PolenMadrid\n\n> Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).\n\n## Main\n- [Niveles de polen hoy — PolenMadrid](https://polenmadrid.com/): Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red…\n- [Mapa](https://polenmadrid.com/mapa)\n- [Histórico](https://polenmadrid.com/historico)\n- [Calendario](https://polenmadrid.com/calendario)\n- [Alertas](https://polenmadrid.com/alertas)\n- [Acerca de](https://polenmadrid.com/acerca)\n- [Ayuda](https://polenmadrid.com/ayuda)\n\n## Legal\n- [Aviso legal y privacidad](https://polenmadrid.com/legal)\n\n",
"filename": "/llms.txt"
},
{
"id": "add_content_signals",
"title": "Add Content-Signal directives",
"description": "Content-Signal tells AI agents how they may use your content. The recommended location is robots.txt, but you can also add it as an HTTP header.",
"language": "txt",
"code": "# robots.txt (recommended, canonical location):\nUser-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no\n\n# Nginx — add to server block (optional, for HTTP header):\n# add_header Content-Signal \"search=yes, ai-input=yes, ai-train=no\" always;\n\n# Apache — add to .htaccess (optional, for HTTP header):\n# Header set Content-Signal \"search=yes, ai-input=yes, ai-train=no\"",
"filename": "/robots.txt"
},
{
"id": "add_markdown_negotiation",
"title": "Support Markdown for Agents",
"description": "Implement one or more of the 4 Markdown for Agents mechanisms to let AI agents request content in markdown format.",
"language": "html",
"code": "<!-- 1. Content negotiation: respond to Accept: text/markdown -->\n<!-- In your server/framework, check the Accept header and return markdown -->\n<!-- with Content-Type: text/markdown -->\n\n<!-- 2. Serve .md URLs (e.g., /about.md alongside /about) -->\n<!-- Generate static .md files or handle .md routes in your app -->\n\n<!-- 3. Add <link> tag in your HTML <head>: -->\n<link rel=\"alternate\" type=\"text/markdown\" href=\"/page.md\">\n\n<!-- 4. Add Link HTTP header on HTML responses: -->\n<!-- Link: </page.md>; rel=\"alternate\"; type=\"text/markdown\" -->\n\n<!-- Best practice: include Vary: Accept and X-Markdown-Tokens headers -->\n<!-- on markdown responses -->",
"filename": "<head> + server config"
}
]
}
Use our API to get this programmatically (coming soon)
This JSON is for internal use — unlike the Markdown and llms.txt files, it's not meant to be uploaded to your site. Save it as a baseline to track your score over time, share it with your dev team, or integrate it into your CI/CD pipeline.
Coming soon: Full Domain Analysis
Crawl your entire domain, generate llms.txt, and monitor your AI-readiness score over time. Join the waitlist to be notified.
You're on the list! We'll notify you when it launches.