Analyzed URL
https://rodrigocastilho.com
Measured 17 hours ago
AI-Ready Score
Excellent
out of 100
Token Savings
Score Breakdown
Emerging protocols
6 of 6 detectedWell-known endpoints AI agents look for. Detected here means an agent can discover and connect to your service automatically.
-
OAuth Protected Resource RFC 9728
/.well-known/oauth-protected-resource- resource: https://rodrigocastilho.com/
- 1 authorization server(s)
-
OAuth Discovery RFC 8414
/.well-known/oauth-authorization-server- issuer: https://rodrigocastilho.com
- token_endpoint: https://rodrigocastilho.com/oauth/token
- 2 grant type(s)
-
MCP Server Card SEP-1649 draft
/.well-known/mcp/server-card.json -
A2A Agent Card A2A v1.0
/.well-known/agent-card.json- name: Rodrigo Castilho Personal Website Agent
- v1.0.0
- 2 capabilities
- 4 skill(s)
-
API Catalog RFC 9727
/.well-known/api-catalog- 1 API(s)
- media type: application/octet-stream (expected application/linkset+json)
-
Agent Skills index Discovery RFC v0.2.0 draft
/.well-known/agent-skills/index.json- 5 skill(s)
- api-discovery, markdown-negotiation, auth-discovery, webmcp-tools, web-bot-auth
Doesn't stay fixed by itself. Monitoring isn't built yet — join the list and we'll tell you when it is.
You're on the list! We'll notify you when it launches.
What we measured No Content-Signal found (robots.txt or HTTP headers)
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.
What we measured Content ratio: 8.7% (2441 content chars / 28062 HTML bytes)
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.
## My repositories on GitHub 1. [rodcast.github.io](https://github.com/rodcast/rodcast.github.io "rodcast.github.io")💀 Rodrigo Castilho | Personal website built with Next.js 16, TypeScript, GitHub API, Medium API, GitHub Pages, and Vercel #rodrigocastilho 2. [chrome-extension-filter-by-videos-shorts-subscriptions-youtube](https://github.com/rodcast/chrome-extension-filter-by-videos-shorts-subscriptions-youtube "chrome-extension-filter-by-videos-shorts-subscriptions-youtube")⚙️ This extension helps you to filter your Subscriptions by either Videos or Shorts on Youtube. 3. [slickmap](https://github.com/rodcast/slickmap "slickmap")🌲 SlickMap is inspired on SlickMap CSS: Create site map with base JSON tree. [View all repositories →](https://github.com/rodcast "View all repositories on GitHub") ## My articles on Medium 1. [Fetch API — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/fetch-api-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-96ae79f9a0d4?source=rss-105526889e2f------2 "Fetch API — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")May 15, 2023The Fetch API is a powerful and flexible tool for making HTTP requests in the browser. 2. [Async/Await — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/async-await-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-7e42af034f5?source=rss-105526889e2f------2 "Async/Await — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")May 8, 2023Make your asynchronous code more readable and easier to understand. 3. [Promises — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/promises-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-178f1277cb88?source=rss-105526889e2f------2 "Promises — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")May 1, 2023A powerful feature of JavaScript that makes it easier to write Asynchronous code. 4. [Synchronous and Asynchronous — Understanding JavaScript API Requests and Responses in the Data…](https://medium.com/@rodcast/synchronous-and-asynchronous-understanding-javascript-api-requests-and-responses-in-the-data-64fa9e8cd319?source=rss-105526889e2f------2 "Synchronous and Asynchronous — Understanding JavaScript API Requests and Responses in the Data…")April 24, 2023Two different types of programming implementations can confuse. 5. [AJAX and XMLHttpRequest — Understanding JavaScript API Requests and Responses in the Data Fetching…](https://medium.com/@rodcast/ajax-and-xmlhttprequest-understanding-javascript-api-requests-and-responses-in-the-data-fetching-507a7959330e?source=rss-105526889e2f------2 "AJAX and XMLHttpRequest — Understanding JavaScript API Requests and Responses in the Data Fetching…")April 17, 2023You can create web applications that are more responsive and user-friendly by using AJAX and XMLHttpRequest. 6. [Callbacks — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/callbacks-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-499cdeb026ee?source=rss-105526889e2f------2 "Callbacks — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")April 10, 2023A callback is a programming technique in which a function is passed as an argument to another function and is executed. 7. [V8 JavaScript engine — Understanding JavaScript API Requests and Responses in the Data Fetching…](https://medium.com/@rodcast/v8-javascript-engine-understanding-javascript-api-requests-and-responses-in-the-data-fetching-311481bdae6a?source=rss-105526889e2f------2 "V8 JavaScript engine — Understanding JavaScript API Requests and Responses in the Data Fetching…")April 3, 2023V8 is the most popular JavaScript engine and was developed by Google. 8. [Introduction — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/introduction-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-9eae22fd3d16?source=rss-105526889e2f------2 "Introduction — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")March 27, 2023It’s important to note that using client-side data fetching can affect the performance of your application. 9. [Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/understanding-javascript-api-requests-and-responses-in-thedata-fetching-lifecycle-539bf96b2293?source=rss-105526889e2f------2 "Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")March 20, 2023In this article series <strong>Introduction, V8 JavaScript engine, Callbacks, AJAX/XMLHttpRequest, Synchronous/Asynchronous, Promises, Async/Await, Fetch API, and Conclusion</strong>. 10. [Just Let Me Say — Be Yourself](https://medium.com/@rodcast/just-let-me-say-be-yourself-b2f5cedeb5a1?source=rss-105526889e2f------2 "Just Let Me Say — Be Yourself")February 12, 2020I want to say something to you and would like you never forget. [Read all articles →](https://medium.com/@rodcast "Read all articles on Medium")
Rodrigo Castilho - Staff Frontend Software Engineer # Rodrigo CastilhoRODCAST Toggle between light and dark theme. Currently in light mode. ## Rodrigo Castilho Staff Frontend Software Engineer at [Wellhub](https://github.com/gympass) specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO. In a committed relationship with code and the gym. - [GitHub](https://github.com/rodcast "Follow me on GitHub") - [Twitter](https://twitter.com/rodcast "Follow me on Twitter") - [LinkedIn](https://www.linkedin.com/in/rodcast "Follow me on LinkedIn") - [Medium](https://medium.com/@rodcast "Follow me on Medium") ## My repositories on GitHub 1. [rodcast.github.io](https://github.com/rodcast/rodcast.github.io "rodcast.github.io")💀 Rodrigo Castilho | Personal website built with Next.js 16, TypeScript, GitHub API, Medium API, GitHub Pages, and Vercel #rodrigocastilho 2. [chrome-extension-filter-by-videos-shorts-subscriptions-youtube](https://github.com/rodcast/chrome-extension-filter-by-videos-shorts-subscriptions-youtube "chrome-extension-filter-by-videos-shorts-subscriptions-youtube")⚙️ This extension helps you to filter your Subscriptions by either Videos or Shorts on Youtube. 3. [slickmap](https://github.com/rodcast/slickmap "slickmap")🌲 SlickMap is inspired on SlickMap CSS: Create site map with base JSON tree. [View all repositories →](https://github.com/rodcast "View all repositories on GitHub") ## My articles on Medium 1. [Fetch API — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/fetch-api-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-96ae79f9a0d4?source=rss-105526889e2f------2 "Fetch API — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")May 15, 2023The Fetch API is a powerful and flexible tool for making HTTP requests in the browser. 2. [Async/Await — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/async-await-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-7e42af034f5?source=rss-105526889e2f------2 "Async/Await — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")May 8, 2023Make your asynchronous code more readable and easier to understand. 3. [Promises — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/promises-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-178f1277cb88?source=rss-105526889e2f------2 "Promises — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")May 1, 2023A powerful feature of JavaScript that makes it easier to write Asynchronous code. 4. [Synchronous and Asynchronous — Understanding JavaScript API Requests and Responses in the Data…](https://medium.com/@rodcast/synchronous-and-asynchronous-understanding-javascript-api-requests-and-responses-in-the-data-64fa9e8cd319?source=rss-105526889e2f------2 "Synchronous and Asynchronous — Understanding JavaScript API Requests and Responses in the Data…")April 24, 2023Two different types of programming implementations can confuse. 5. [AJAX and XMLHttpRequest — Understanding JavaScript API Requests and Responses in the Data Fetching…](https://medium.com/@rodcast/ajax-and-xmlhttprequest-understanding-javascript-api-requests-and-responses-in-the-data-fetching-507a7959330e?source=rss-105526889e2f------2 "AJAX and XMLHttpRequest — Understanding JavaScript API Requests and Responses in the Data Fetching…")April 17, 2023You can create web applications that are more responsive and user-friendly by using AJAX and XMLHttpRequest. 6. [Callbacks — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/callbacks-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-499cdeb026ee?source=rss-105526889e2f------2 "Callbacks — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")April 10, 2023A callback is a programming technique in which a function is passed as an argument to another function and is executed. 7. [V8 JavaScript engine — Understanding JavaScript API Requests and Responses in the Data Fetching…](https://medium.com/@rodcast/v8-javascript-engine-understanding-javascript-api-requests-and-responses-in-the-data-fetching-311481bdae6a?source=rss-105526889e2f------2 "V8 JavaScript engine — Understanding JavaScript API Requests and Responses in the Data Fetching…")April 3, 2023V8 is the most popular JavaScript engine and was developed by Google. 8. [Introduction — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/introduction-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-9eae22fd3d16?source=rss-105526889e2f------2 "Introduction — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")March 27, 2023It’s important to note that using client-side data fetching can affect the performance of your application. 9. [Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/understanding-javascript-api-requests-and-responses-in-thedata-fetching-lifecycle-539bf96b2293?source=rss-105526889e2f------2 "Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle")March 20, 2023In this article series <strong>Introduction, V8 JavaScript engine, Callbacks, AJAX/XMLHttpRequest, Synchronous/Asynchronous, Promises, Async/Await, Fetch API, and Conclusion</strong>. 10. [Just Let Me Say — Be Yourself](https://medium.com/@rodcast/just-let-me-say-be-yourself-b2f5cedeb5a1?source=rss-105526889e2f------2 "Just Let Me Say — Be Yourself")February 12, 2020I want to say something to you and would like you never forget. [Read all articles →](https://medium.com/@rodcast "Read all articles on Medium")
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.
Our recommendation
# rodrigocastilho.com > Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO. ## Main - [Rodrigo Castilho - Staff Frontend Software Engineer](https://rodrigocastilho.com): Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems… - [About](https://rodrigocastilho.com/) - [RSS Feed](https://rodrigocastilho.com/feed.xml) - [Sitemap](https://rodrigocastilho.com/sitemap.xml)
Full llms.txt requires domain-wide analysis (coming soon)
Upload this file to https://rodrigocastilho.com/llms.txt at the root of your domain. AI agents like ChatGPT, Claude, and Perplexity check this file to understand your site structure.
This site already has a llms.txt file.
Valid format# Rodrigo Castilho > Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO. Personal site exposing public profile, projects, and articles as agent-friendly content. The site is a statically exported Next.js application. Project and article data are fetched at build time from the GitHub REST API and the Medium RSS feed. The Markdown homepage is available directly at `/index.md`. Accept-based content negotiation on `/` works only on hosts that honor the repository's rewrite and header configuration; GitHub Pages does not. ## Content - [Homepage (Markdown)](https://rodrigocastilho.com/index.md): Profile summary, projects, and articles with embedded schema.org JSON-LD. - [RSS Feed](https://rodrigocastilho.com/feed.xml): Site feed. - [Sitemap](https://rodrigocastilho.com/sitemap.xml): List of indexable URLs. ## API - [OpenAPI Specification](https://rodrigocastilho.com/docs/api/openapi.json): OpenAPI 3.1 description of the public endpoints. - [API Documentation](https://rodrigocastilho.com/docs/api/): Human-readable API docs. - [API Documentation (Markdown)](https://rodrigocastilho.com/docs/api.md): Agent-friendly API docs. - [API Catalog](https://rodrigocastilho.com/.well-known/api-catalog): RFC 9727 linkset advertising API discovery endpoints. ## Agents - [Agent Card](https://rodrigocastilho.com/.well-known/agent-card.json): Agent metadata for this site. - [Agent Skills Index](https://rodrigocastilho.com/.well-known/agent-skills/index.json): Catalog of agent skills (markdown negotiation, API discovery, WebMCP tools, auth). - [MCP Server Card](https://rodrigocastilho.com/.well-known/mcp/server-card.json): Model Context Protocol server descriptor. ## Social - [GitHub](https://github.com/rodcast) - [Twitter](https://twitter.com/rodcast) - [LinkedIn](https://www.linkedin.com/in/rodcast) - [Medium](https://medium.com/@rodcast)
Accessibility
Content available without JavaScript
Main content starts at 29% of HTML
Page size: 27KB
AI Discoverability
All major AI search bots allowed
Discoverable, but not negotiable: an agent that reads your HTML finds the .md version; one that requests the page directly still receives HTML. Answering Accept: text/markdown covers both.
Sitemap found
robots.txt exists
llms.txt exists and is valid
Structured Data
JSON-LD found: Person, WebSite, WebPage, ProfilePage
All OG tags present
Meta description: 146 chars
Canonical URL present
lang="en"
Semantic HTML
Clean heading hierarchy
Has both <article> and <main>
19 semantic elements, 4 divs (ratio: 83%)
1/1 images with meaningful alt text
Avg div depth: 1.3, max: 2
Content Efficiency
82% token reduction (HTML→Markdown)
Content ratio: 8.7% (2441 content chars / 28062 HTML bytes)
HTML size: 27KB
1/198 elements with inline styles (0.5%)
{
"url": "https://rodrigocastilho.com",
"timestamp": 1791417511665,
"fetch": {
"mode": "simple",
"timeMs": 154,
"htmlSizeBytes": 28062,
"supportsMarkdown": false,
"markdownAgents": {
"contentNegotiation": false,
"mdUrl": {
"found": true,
"url": "https://rodrigocastilho.com/index.md"
},
"linkTag": {
"found": true,
"url": "/index.md"
},
"linkHeader": {
"found": false,
"url": null
},
"responseHeaders": {
"contentSignal": null,
"xMarkdownTokens": null,
"vary": "Accept-Encoding"
},
"frontmatter": {
"present": true,
"fields": [
"title",
"description",
"image",
"dateModified"
],
"level": "enriched"
},
"level": "application",
"mdUrlMediaType": "text/markdown",
"mdUrlProperMediaType": true
},
"statusCode": 200
},
"extraction": {
"title": "Rodrigo Castilho - Staff Frontend Software Engineer",
"excerpt": "Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.",
"byline": "Rodrigo Castilho",
"siteName": null,
"lang": "en",
"contentLength": 2441,
"metadata": {
"description": "Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.",
"ogTitle": "Rodrigo Castilho - Staff Frontend Software Engineer",
"ogDescription": "Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.",
"ogImage": "https://rodrigocastilho.com/rodrigo-castilho-rodcast_card.jpg",
"ogType": "profile",
"canonical": "https://rodrigocastilho.com/",
"lang": "en",
"schemas": [
{
"@type": "Person",
"@id": "https://rodrigocastilho.com/#person",
"name": "Rodrigo Castilho",
"alternateName": "RODCAST",
"description": "Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.",
"url": "https://rodrigocastilho.com/",
"image": {
"@type": "ImageObject",
"@id": "https://rodrigocastilho.com/#image",
"url": "https://rodrigocastilho.com/rodrigo-castilho-rodcast_photo.jpg",
"contentUrl": "https://rodrigocastilho.com/rodrigo-castilho-rodcast_photo.jpg",
"width": 400,
"height": 400,
"caption": "Rodrigo Castilho - Staff Frontend Software Engineer"
},
"jobTitle": "Staff Frontend Software Engineer",
"worksFor": {
"@type": "Organization",
"@id": "https://www.wellhub.com/#organization",
"name": "Wellhub",
"url": "https://www.wellhub.com/"
},
"alumniOf": {
"@type": "CollegeOrUniversity",
"name": "Unisanta: Universidade Santa Cecília"
},
"knowsLanguage": [
"English",
"Portuguese"
],
"knowsAbout": [
"JavaScript",
"TypeScript",
"React",
"Next.js",
"Frontend Development",
"Web Development",
"CSS",
"HTML",
"AWS",
"Design Systems",
"Web Performance",
"SEO"
],
"sameAs": [
"https://twitter.com/rodcast",
"https://github.com/rodcast",
"https://medium.com/@rodcast",
"https://www.linkedin.com/in/rodcast"
]
},
{
"@type": "WebSite",
"@id": "https://rodrigocastilho.com/#website",
"url": "https://rodrigocastilho.com/",
"name": "Rodrigo Castilho",
"description": "Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.",
"publisher": {
"@id": "https://rodrigocastilho.com/#person"
},
"inLanguage": "en-US"
},
{
"@type": "WebPage",
"@id": "https://rodrigocastilho.com/#webpage",
"url": "https://rodrigocastilho.com/",
"name": "Rodrigo Castilho - Staff Frontend Software Engineer",
"description": "Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.",
"isPartOf": {
"@id": "https://rodrigocastilho.com/#website"
},
"about": {
"@id": "https://rodrigocastilho.com/#person"
},
"primaryImageOfPage": {
"@id": "https://rodrigocastilho.com/#image"
},
"datePublished": "2023-01-01",
"dateModified": "2026-09-29",
"inLanguage": "en-US"
},
{
"@type": "ProfilePage",
"@id": "https://rodrigocastilho.com/#profilepage",
"url": "https://rodrigocastilho.com/",
"name": "Rodrigo Castilho - Staff Frontend Software Engineer",
"description": "Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.",
"isPartOf": {
"@id": "https://rodrigocastilho.com/#website"
},
"mainEntity": {
"@id": "https://rodrigocastilho.com/#person"
},
"inLanguage": "en-US"
}
],
"robotsMeta": "index, follow",
"author": "Rodrigo Castilho",
"generator": null,
"markdownAlternateHref": "/index.md"
}
},
"markdown": "## My repositories on GitHub\n\n1. [rodcast.github.io](https://github.com/rodcast/rodcast.github.io \"rodcast.github.io\")💀 Rodrigo Castilho | Personal website built with Next.js 16, TypeScript, GitHub API, Medium API, GitHub Pages, and Vercel #rodrigocastilho\n2. [chrome-extension-filter-by-videos-shorts-subscriptions-youtube](https://github.com/rodcast/chrome-extension-filter-by-videos-shorts-subscriptions-youtube \"chrome-extension-filter-by-videos-shorts-subscriptions-youtube\")⚙️ This extension helps you to filter your Subscriptions by either Videos or Shorts on Youtube.\n3. [slickmap](https://github.com/rodcast/slickmap \"slickmap\")🌲 SlickMap is inspired on SlickMap CSS: Create site map with base JSON tree.\n\n[View all repositories →](https://github.com/rodcast \"View all repositories on GitHub\")\n\n## My articles on Medium\n\n1. [Fetch API — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/fetch-api-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-96ae79f9a0d4?source=rss-105526889e2f------2 \"Fetch API — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")May 15, 2023The Fetch API is a powerful and flexible tool for making HTTP requests in the browser.\n2. [Async/Await — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/async-await-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-7e42af034f5?source=rss-105526889e2f------2 \"Async/Await — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")May 8, 2023Make your asynchronous code more readable and easier to understand.\n3. [Promises — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/promises-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-178f1277cb88?source=rss-105526889e2f------2 \"Promises — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")May 1, 2023A powerful feature of JavaScript that makes it easier to write Asynchronous code.\n4. [Synchronous and Asynchronous — Understanding JavaScript API Requests and Responses in the Data…](https://medium.com/@rodcast/synchronous-and-asynchronous-understanding-javascript-api-requests-and-responses-in-the-data-64fa9e8cd319?source=rss-105526889e2f------2 \"Synchronous and Asynchronous — Understanding JavaScript API Requests and Responses in the Data…\")April 24, 2023Two different types of programming implementations can confuse.\n5. [AJAX and XMLHttpRequest — Understanding JavaScript API Requests and Responses in the Data Fetching…](https://medium.com/@rodcast/ajax-and-xmlhttprequest-understanding-javascript-api-requests-and-responses-in-the-data-fetching-507a7959330e?source=rss-105526889e2f------2 \"AJAX and XMLHttpRequest — Understanding JavaScript API Requests and Responses in the Data Fetching…\")April 17, 2023You can create web applications that are more responsive and user-friendly by using AJAX and XMLHttpRequest.\n6. [Callbacks — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/callbacks-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-499cdeb026ee?source=rss-105526889e2f------2 \"Callbacks — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")April 10, 2023A callback is a programming technique in which a function is passed as an argument to another function and is executed.\n7. [V8 JavaScript engine — Understanding JavaScript API Requests and Responses in the Data Fetching…](https://medium.com/@rodcast/v8-javascript-engine-understanding-javascript-api-requests-and-responses-in-the-data-fetching-311481bdae6a?source=rss-105526889e2f------2 \"V8 JavaScript engine — Understanding JavaScript API Requests and Responses in the Data Fetching…\")April 3, 2023V8 is the most popular JavaScript engine and was developed by Google.\n8. [Introduction — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/introduction-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-9eae22fd3d16?source=rss-105526889e2f------2 \"Introduction — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")March 27, 2023It’s important to note that using client-side data fetching can affect the performance of your application.\n9. [Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/understanding-javascript-api-requests-and-responses-in-thedata-fetching-lifecycle-539bf96b2293?source=rss-105526889e2f------2 \"Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")March 20, 2023In this article series <strong>Introduction, V8 JavaScript engine, Callbacks, AJAX/XMLHttpRequest, Synchronous/Asynchronous, Promises, Async/Await, Fetch API, and Conclusion</strong>.\n10. [Just Let Me Say — Be Yourself](https://medium.com/@rodcast/just-let-me-say-be-yourself-b2f5cedeb5a1?source=rss-105526889e2f------2 \"Just Let Me Say — Be Yourself\")February 12, 2020I want to say something to you and would like you never forget.\n\n[Read all articles →](https://medium.com/@rodcast \"Read all articles on Medium\")\n",
"fullPageMarkdown": "Rodrigo Castilho - Staff Frontend Software Engineer\n\n# Rodrigo CastilhoRODCAST\n\nToggle between light and dark theme. Currently in light mode.\n\n## Rodrigo Castilho\n\nStaff Frontend Software Engineer at [Wellhub](https://github.com/gympass) specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.\n\nIn a committed relationship with code and the gym.\n\n- [GitHub](https://github.com/rodcast \"Follow me on GitHub\")\n- [Twitter](https://twitter.com/rodcast \"Follow me on Twitter\")\n- [LinkedIn](https://www.linkedin.com/in/rodcast \"Follow me on LinkedIn\")\n- [Medium](https://medium.com/@rodcast \"Follow me on Medium\")\n\n## My repositories on GitHub\n\n1. [rodcast.github.io](https://github.com/rodcast/rodcast.github.io \"rodcast.github.io\")💀 Rodrigo Castilho | Personal website built with Next.js 16, TypeScript, GitHub API, Medium API, GitHub Pages, and Vercel #rodrigocastilho\n2. [chrome-extension-filter-by-videos-shorts-subscriptions-youtube](https://github.com/rodcast/chrome-extension-filter-by-videos-shorts-subscriptions-youtube \"chrome-extension-filter-by-videos-shorts-subscriptions-youtube\")⚙️ This extension helps you to filter your Subscriptions by either Videos or Shorts on Youtube.\n3. [slickmap](https://github.com/rodcast/slickmap \"slickmap\")🌲 SlickMap is inspired on SlickMap CSS: Create site map with base JSON tree.\n\n[View all repositories →](https://github.com/rodcast \"View all repositories on GitHub\")\n\n## My articles on Medium\n\n1. [Fetch API — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/fetch-api-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-96ae79f9a0d4?source=rss-105526889e2f------2 \"Fetch API — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")May 15, 2023The Fetch API is a powerful and flexible tool for making HTTP requests in the browser.\n2. [Async/Await — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/async-await-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-7e42af034f5?source=rss-105526889e2f------2 \"Async/Await — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")May 8, 2023Make your asynchronous code more readable and easier to understand.\n3. [Promises — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/promises-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-178f1277cb88?source=rss-105526889e2f------2 \"Promises — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")May 1, 2023A powerful feature of JavaScript that makes it easier to write Asynchronous code.\n4. [Synchronous and Asynchronous — Understanding JavaScript API Requests and Responses in the Data…](https://medium.com/@rodcast/synchronous-and-asynchronous-understanding-javascript-api-requests-and-responses-in-the-data-64fa9e8cd319?source=rss-105526889e2f------2 \"Synchronous and Asynchronous — Understanding JavaScript API Requests and Responses in the Data…\")April 24, 2023Two different types of programming implementations can confuse.\n5. [AJAX and XMLHttpRequest — Understanding JavaScript API Requests and Responses in the Data Fetching…](https://medium.com/@rodcast/ajax-and-xmlhttprequest-understanding-javascript-api-requests-and-responses-in-the-data-fetching-507a7959330e?source=rss-105526889e2f------2 \"AJAX and XMLHttpRequest — Understanding JavaScript API Requests and Responses in the Data Fetching…\")April 17, 2023You can create web applications that are more responsive and user-friendly by using AJAX and XMLHttpRequest.\n6. [Callbacks — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/callbacks-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-499cdeb026ee?source=rss-105526889e2f------2 \"Callbacks — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")April 10, 2023A callback is a programming technique in which a function is passed as an argument to another function and is executed.\n7. [V8 JavaScript engine — Understanding JavaScript API Requests and Responses in the Data Fetching…](https://medium.com/@rodcast/v8-javascript-engine-understanding-javascript-api-requests-and-responses-in-the-data-fetching-311481bdae6a?source=rss-105526889e2f------2 \"V8 JavaScript engine — Understanding JavaScript API Requests and Responses in the Data Fetching…\")April 3, 2023V8 is the most popular JavaScript engine and was developed by Google.\n8. [Introduction — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/introduction-understanding-javascript-api-requests-and-responses-in-the-data-fetching-lifecycle-9eae22fd3d16?source=rss-105526889e2f------2 \"Introduction — Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")March 27, 2023It’s important to note that using client-side data fetching can affect the performance of your application.\n9. [Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle](https://medium.com/@rodcast/understanding-javascript-api-requests-and-responses-in-thedata-fetching-lifecycle-539bf96b2293?source=rss-105526889e2f------2 \"Understanding JavaScript API Requests and Responses in the Data Fetching lifecycle\")March 20, 2023In this article series <strong>Introduction, V8 JavaScript engine, Callbacks, AJAX/XMLHttpRequest, Synchronous/Asynchronous, Promises, Async/Await, Fetch API, and Conclusion</strong>.\n10. [Just Let Me Say — Be Yourself](https://medium.com/@rodcast/just-let-me-say-be-yourself-b2f5cedeb5a1?source=rss-105526889e2f------2 \"Just Let Me Say — Be Yourself\")February 12, 2020I want to say something to you and would like you never forget.\n\n[Read all articles →](https://medium.com/@rodcast \"Read all articles on Medium\")\n",
"markdownStats": {
"images": 0,
"links": 15,
"tables": 0,
"codeBlocks": 0,
"headings": 2
},
"tokens": {
"htmlTokens": 7847,
"markdownTokens": 1379,
"reduction": 6468,
"reductionPercent": 82
},
"score": {
"score": 92,
"grade": "A",
"rubricVersion": 3,
"dimensions": {
"accessibility": {
"score": 94,
"weight": 30,
"grade": "A",
"checks": {
"content_without_js": {
"score": 100,
"weight": 55,
"evidence": "proven",
"details": "Content available without JavaScript"
},
"fast_content_position": {
"score": 75,
"weight": 25,
"evidence": "plausible",
"details": "Main content starts at 29% of HTML"
},
"reasonable_page_size": {
"score": 100,
"weight": 20,
"evidence": "plausible",
"details": "Page size: 27KB"
}
}
},
"aiDiscoverability": {
"score": 82,
"weight": 25,
"grade": "B",
"checks": {
"robots_allows_ai_bots": {
"score": 100,
"weight": 35,
"evidence": "proven",
"details": "All major AI search bots allowed"
},
"supports_markdown_negotiation": {
"score": 60,
"weight": 20,
"evidence": "plausible",
"details": "Application level — .md URL (https://rodrigocastilho.com/index.md), <link> tag",
"mechanisms": {
"negotiation": false,
"mdUrl": true,
"linkTag": true,
"linkHeader": false
}
},
"has_sitemap": {
"score": 100,
"weight": 15,
"evidence": "plausible",
"details": "Sitemap found"
},
"has_robots_txt": {
"score": 100,
"weight": 10,
"evidence": "plausible",
"details": "robots.txt exists"
},
"has_llms_txt": {
"score": 100,
"weight": 10,
"evidence": "speculative",
"details": "llms.txt exists and is valid"
},
"has_content_signals": {
"score": 0,
"weight": 10,
"evidence": "speculative",
"details": "No Content-Signal found (robots.txt or HTTP headers)",
"mechanisms": {
"robotsTxt": false,
"httpHeader": false,
"policy": false
}
}
}
},
"structuredData": {
"score": 100,
"weight": 20,
"grade": "A",
"checks": {
"has_schema_org": {
"score": 100,
"weight": 35,
"evidence": "proven",
"details": "JSON-LD found: Person, WebSite, WebPage, ProfilePage"
},
"has_open_graph": {
"score": 100,
"weight": 20,
"evidence": "plausible",
"details": "All OG tags present"
},
"has_meta_description": {
"score": 100,
"weight": 20,
"evidence": "plausible",
"details": "Meta description: 146 chars"
},
"has_canonical_url": {
"score": 100,
"weight": 15,
"evidence": "plausible",
"details": "Canonical URL present"
},
"has_lang_attribute": {
"score": 100,
"weight": 10,
"evidence": "plausible",
"details": "lang=\"en\""
}
}
},
"semanticHtml": {
"score": 100,
"weight": 15,
"grade": "A",
"checks": {
"proper_heading_hierarchy": {
"score": 100,
"weight": 30,
"evidence": "plausible",
"details": "Clean heading hierarchy"
},
"uses_article_or_main": {
"score": 100,
"weight": 25,
"evidence": "plausible",
"details": "Has both <article> and <main>"
},
"semantic_elements": {
"score": 100,
"weight": 20,
"evidence": "plausible",
"details": "19 semantic elements, 4 divs (ratio: 83%)"
},
"meaningful_alt_texts": {
"score": 100,
"weight": 15,
"evidence": "plausible",
"details": "1/1 images with meaningful alt text"
},
"low_div_nesting": {
"score": 100,
"weight": 10,
"evidence": "speculative",
"details": "Avg div depth: 1.3, max: 2"
}
}
},
"contentEfficiency": {
"score": 78,
"weight": 10,
"grade": "B",
"checks": {
"token_reduction_ratio": {
"score": 100,
"weight": 40,
"evidence": "speculative",
"details": "82% token reduction (HTML→Markdown)"
},
"content_to_noise_ratio": {
"score": 25,
"weight": 30,
"evidence": "speculative",
"details": "Content ratio: 8.7% (2441 content chars / 28062 HTML bytes)"
},
"reasonable_page_weight": {
"score": 100,
"weight": 20,
"evidence": "speculative",
"details": "HTML size: 27KB"
},
"minimal_inline_styles": {
"score": 100,
"weight": 10,
"evidence": "speculative",
"details": "1/198 elements with inline styles (0.5%)"
}
}
}
}
},
"recommendations": [
{
"id": "add_content_signals",
"priority": "high",
"category": "aiDiscoverability",
"titleKey": "rec.add_content_signals.title",
"descriptionKey": "rec.add_content_signals.description",
"howToKey": "rec.add_content_signals.howto",
"howToStepKeys": null,
"effort": "quick-win",
"estimatedImpact": 2.5,
"maxImpact": 2.5,
"evidence": "speculative",
"checkScore": 0,
"checkDetails": "No Content-Signal found (robots.txt or HTTP headers)"
},
{
"id": "improve_content_ratio",
"priority": "medium",
"category": "contentEfficiency",
"titleKey": "rec.improve_content_ratio.title",
"descriptionKey": "rec.improve_content_ratio.description",
"howToKey": "rec.improve_content_ratio.howto",
"howToStepKeys": null,
"effort": "moderate",
"estimatedImpact": 2.3,
"maxImpact": 3,
"evidence": "speculative",
"checkScore": 25,
"checkDetails": "Content ratio: 8.7% (2441 content chars / 28062 HTML bytes)"
}
],
"llmsTxtPreview": "# rodrigocastilho.com\n\n> Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO.\n\n## Main\n- [Rodrigo Castilho - Staff Frontend Software Engineer](https://rodrigocastilho.com): Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems…\n- [About](https://rodrigocastilho.com/)\n- [RSS Feed](https://rodrigocastilho.com/feed.xml)\n- [Sitemap](https://rodrigocastilho.com/sitemap.xml)\n\n",
"llmsTxtExisting": "# Rodrigo Castilho\n\n> Staff Frontend Software Engineer at Wellhub specializing in React, Next.js, JavaScript, TypeScript, AWS, design systems, web performance, and SEO. Personal site exposing public profile, projects, and articles as agent-friendly content.\n\nThe site is a statically exported Next.js application. Project and article data are fetched at build time from the GitHub REST API and the Medium RSS feed. The Markdown homepage is available directly at `/index.md`. Accept-based content negotiation on `/` works only on hosts that honor the repository's rewrite and header configuration; GitHub Pages does not.\n\n## Content\n\n- [Homepage (Markdown)](https://rodrigocastilho.com/index.md): Profile summary, projects, and articles with embedded schema.org JSON-LD.\n- [RSS Feed](https://rodrigocastilho.com/feed.xml): Site feed.\n- [Sitemap](https://rodrigocastilho.com/sitemap.xml): List of indexable URLs.\n\n## API\n\n- [OpenAPI Specification](https://rodrigocastilho.com/docs/api/openapi.json): OpenAPI 3.1 description of the public endpoints.\n- [API Documentation](https://rodrigocastilho.com/docs/api/): Human-readable API docs.\n- [API Documentation (Markdown)](https://rodrigocastilho.com/docs/api.md): Agent-friendly API docs.\n- [API Catalog](https://rodrigocastilho.com/.well-known/api-catalog): RFC 9727 linkset advertising API discovery endpoints.\n\n## Agents\n\n- [Agent Card](https://rodrigocastilho.com/.well-known/agent-card.json): Agent metadata for this site.\n- [Agent Skills Index](https://rodrigocastilho.com/.well-known/agent-skills/index.json): Catalog of agent skills (markdown negotiation, API discovery, WebMCP tools, auth).\n- [MCP Server Card](https://rodrigocastilho.com/.well-known/mcp/server-card.json): Model Context Protocol server descriptor.\n\n## Social\n\n- [GitHub](https://github.com/rodcast)\n- [Twitter](https://twitter.com/rodcast)\n- [LinkedIn](https://www.linkedin.com/in/rodcast)\n- [Medium](https://medium.com/@rodcast)",
"emergingProtocols": {
"oauthProtectedResource": {
"exists": true,
"url": "https://rodrigocastilho.com/.well-known/oauth-protected-resource",
"resource": "https://rodrigocastilho.com/",
"authorizationServers": [
"https://rodrigocastilho.com"
],
"scopesSupported": [
"profile:read",
"content:read"
]
},
"oauthDiscovery": {
"exists": true,
"url": "https://rodrigocastilho.com/.well-known/oauth-authorization-server",
"issuer": "https://rodrigocastilho.com",
"authorizationEndpoint": null,
"tokenEndpoint": "https://rodrigocastilho.com/oauth/token",
"grantTypesSupported": [
"urn:ietf:params:oauth:grant-type:jwt-bearer",
"urn:workos:agent-auth:grant-type:claim"
],
"scopesSupported": [
"profile:read",
"content:read"
]
},
"mcpServerCard": {
"exists": true,
"url": "https://rodrigocastilho.com/.well-known/mcp/server-card.json",
"draft": true,
"name": null,
"version": null,
"description": null,
"transport": null,
"tools": null,
"resources": null,
"prompts": null
},
"a2aAgentCard": {
"exists": true,
"url": "https://rodrigocastilho.com/.well-known/agent-card.json",
"name": "Rodrigo Castilho Personal Website Agent",
"version": "1.0.0",
"description": "A read-only agent that provides information about Rodrigo Castilho's profile, public GitHub repositories, and Medium articles via WebMCP browser tools.",
"capabilities": 2,
"skills": 4,
"endpoint": null
},
"apiCatalog": {
"exists": true,
"url": "https://rodrigocastilho.com/.well-known/api-catalog",
"contentType": "application/octet-stream",
"validMediaType": false,
"apis": 1
},
"agentSkills": {
"exists": true,
"url": "https://rodrigocastilho.com/.well-known/agent-skills/index.json",
"draft": true,
"schema": "https://agentskills.io/schemas/agent-skills-index.v0.2.0.json",
"skills": 5,
"names": [
"api-discovery",
"markdown-negotiation",
"auth-discovery",
"webmcp-tools",
"web-bot-auth"
]
},
"count": 6,
"total": 6
},
"botAccess": {
"probed": true,
"bot": "OAI-SearchBot",
"controlStatus": 200,
"botStatus": 200,
"discriminates": false,
"refusedAsBot": false,
"edge": "Fastly",
"verifiable": false,
"detail": "This origin answers OAI-SearchBot exactly as it answers any other client (200). No edge-level filtering of AI crawlers observed."
},
"snippets": [
{
"id": "add_content_signals",
"title": "Add Content-Signal directives",
"description": "Content-Signal tells AI agents how they may use your content. The canonical location is robots.txt, but you can also expose it as an HTTP header from any stack.",
"language": "txt",
"code": "User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no",
"filename": "/robots.txt",
"stacks": [
{
"id": "robots",
"label": "robots.txt",
"language": "txt",
"filename": "/robots.txt",
"code": "User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no"
},
{
"id": "nginx",
"label": "Nginx",
"language": "nginx",
"filename": "server block",
"code": "# Inside your server { } block:\nadd_header Content-Signal \"search=yes, ai-input=yes, ai-train=no\" always;"
},
{
"id": "apache",
"label": "Apache",
"language": "apache",
"filename": ".htaccess",
"code": "# In .htaccess (or VirtualHost):\nHeader set Content-Signal \"search=yes, ai-input=yes, ai-train=no\""
},
{
"id": "wordpress",
"label": "WordPress",
"language": "php",
"filename": "functions.php",
"code": "<?php\n// In your theme's functions.php or a small mu-plugin\nadd_action('send_headers', function () {\n header('Content-Signal: search=yes, ai-input=yes, ai-train=no');\n});\n\n// Optional: also append the directive to the dynamic robots.txt\nadd_filter('robots_txt', function ($output) {\n return $output . \"\\nContent-Signal: search=yes, ai-input=yes, ai-train=no\\n\";\n}, 10, 1);"
},
{
"id": "nextjs",
"label": "Next.js",
"language": "typescript",
"filename": "middleware.ts",
"code": "// middleware.ts (Next.js 13+ App Router or Pages Router)\nimport { NextResponse } from 'next/server';\nexport function middleware() {\n const res = NextResponse.next();\n res.headers.set(\n 'Content-Signal',\n 'search=yes, ai-input=yes, ai-train=no'\n );\n return res;\n}\nexport const config = { matcher: '/:path*' };"
},
{
"id": "cloudflare",
"label": "Cloudflare Workers",
"language": "javascript",
"filename": "worker.js",
"code": "// Cloudflare Worker that proxies your origin and adds the header\nexport default {\n async fetch(request, env, ctx) {\n const res = await fetch(request);\n const newRes = new Response(res.body, res);\n newRes.headers.set(\n 'Content-Signal',\n 'search=yes, ai-input=yes, ai-train=no'\n );\n return newRes;\n },\n};"
},
{
"id": "express",
"label": "Express / Fastify",
"language": "javascript",
"filename": "server.js",
"code": "// Express\napp.use((req, res, next) => {\n res.setHeader('Content-Signal', 'search=yes, ai-input=yes, ai-train=no');\n next();\n});\n\n// Fastify\nfastify.addHook('onSend', (request, reply, payload, done) => {\n reply.header('Content-Signal', 'search=yes, ai-input=yes, ai-train=no');\n done();\n});"
}
]
}
]
}
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.
Share your results
Or ask an AI to help you fix it
Want a second opinion?
Cloudflare runs a free scanner too, and it asks a different question. It scores what your site publishes for agents to call — MCP server cards, Agent Skills, API catalogs, DNS records. We score whether an agent can reach, read and understand your content. A site can do well on one and poorly on the other, so expect two different numbers: they are answers to two different questions, and both are worth knowing.
Scan rodrigocastilho.com with CloudflareEmbed your badge
Add this badge to your site. It updates automatically as your AI-readiness score changes.
<script src="https://agentready.md/badge.js" data-id="407916de-53c1-4656-ab49-8f27cbfb5682" data-domain="rodrigocastilho.com"></script>
[](https://agentready.md/r/rodrigocastilho.com)
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.