Tudo o que é legível por máquina
Este site é o lar público de Vini Silveira. Para facilitar a vida de quem constrói agentes, agregadores de conteúdo, leitores RSS ou qualquer ferramenta que precise de dados estruturados, toda a informação está exposta em formatos abertos, sem precisar executar JavaScript. Esta página é o índice.
llms.txt
Markdown manifest for LLM crawlers
agents.txt / agents.json
Endpoint index for AI agents
RSS 2.0
Full feed of blog posts
JSON-LD
Person, WebSite, BlogPosting, AboutPage
Endpoints públicos
Tudo abaixo é GET, público, sem rate limit agressivo, sem autenticação. Se algo aqui quebrar, é bug — abra uma issue no GitHub ou mande email.
| Método | Caminho | Formato | Descrição |
|---|---|---|---|
| GET | /api/openapi.json curl https://vmsilveira.dev/api/openapi.json | application/json | Especificação OpenAPI 3.1 completa: 3 rotas de API + 6 arquivos para crawlers. Use para gerar clientes, validar requests ou wirear um gateway de agentes. Cache: 1h com SWR de 24h |
| GET | /llms.txt curl https://vmsilveira.dev/llms.txt | text/plain | Manifesto do site em Markdown para LLMs (llms.txt spec). Cache: 1h com SWR de 24h |
| GET | /agents.txt curl https://vmsilveira.dev/agents.txt | text/plain | Lista canônica de endpoints para AI agents. Cache: 1h com SWR de 24h |
| GET | /api/agents.json curl https://vmsilveira.dev/api/agents.json | application/json | Manifesto JSON com endpoints, páginas, sinais e contato. Cache: 1h com SWR de 24h |
| GET | /sitemap.xml curl https://vmsilveira.dev/sitemap.xml | application/xml | Sitemap dinâmico com posts e projetos do Notion. Cache: Regenerado a cada 1h |
| GET | /rss.xml curl https://vmsilveira.dev/rss.xml | application/rss+xml | Feed RSS 2.0 com os posts do blog, incluindo categoria e guid. Cache: 1h com SWR de 24h |
| GET | /robots.txt | text/plain | Diretrizes de crawling + Content-Signal header para AI. Cache: Estático |
| GET | /humans.txt | text/plain | Créditos humanos e stack do site (convenção humans.txt). Cache: 1h com SWR de 24h |
| JSON-LD | /#person | application/ld+json | schema.org/Person com sameAs, knowsAbout, jobTitle. Cache: Embutido em cada página |
| JSON-LD | /#website | application/ld+json | schema.org/WebSite com SearchAction e publisher. Cache: Embutido em cada página |
Dados estruturados
Todo post do blog, todo projeto e as páginas About/Contact/Privacy emitem JSON-LD próprio. Abaixo, amostras reais do que o crawler recebe.
Person (schema.org/Person)
JSON-LD embutido em cada página
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://vmsilveira.dev/#person",
"name": "Vinicius de Moura Silveira",
"alternateName": ["Vini Silveira", "vmsilveira"],
"url": "https://vmsilveira.dev",
"jobTitle": "Tech Lead Frontend",
"worksFor": { "@type": "Organization", "name": "Unicred do Brasil" },
"address": { "@type": "PostalAddress", "addressLocality": "São Paulo", "addressRegion": "SP", "addressCountry": "BR" },
"knowsAbout": ["React", "Next.js", "TypeScript", "Frontend Architecture", "Microfrontends", "Team Leadership"],
"sameAs": [
"https://github.com/vmsilveira",
"https://www.linkedin.com/in/silveira-vinicius",
"https://x.com/vinny__silveira"
]
}
WebSite (schema.org/WebSite)
JSON-LD embutido em cada página
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://vmsilveira.dev/#website",
"name": "vmsilveira.dev",
"alternateName": "Vini Silveira - Tech Lead Frontend",
"url": "https://vmsilveira.dev",
"inLanguage": "pt-BR",
"publisher": { "@id": "https://vmsilveira.dev/#person" },
"author": { "@id": "https://vmsilveira.dev/#person" },
"potentialAction": {
"@type": "SearchAction",
"target": { "@type": "EntryPoint", "urlTemplate": "https://vmsilveira.dev/blog?q={search_term_string}" },
"query-input": "required name=search_term_string"
}
}
llms.txt (manifest para LLMs)
text/plain — https://vmsilveira.dev/llms.txt
# Vini Silveira — vmsilveira.dev
> Personal site and blog of Vini Silveira (Vinicius de Moura Silveira),
> Tech Lead Frontend at Unicred do Brasil. 11+ years writing production
> frontend: React, TypeScript, Next.js, microfrontends, design systems...
## Identity & canonical URLs
- [Canonical domain](https://vmsilveira.dev/)
- [Author](https://vmsilveira.dev/about)
agents.json (manifest para agents)
application/json — https://vmsilveira.dev/api/agents.json
{
"name": "vmsilveira.dev agents manifest",
"canonical": "https://vmsilveira.dev",
"endpoints": {
"llms_txt": "https://vmsilveira.dev/llms.txt",
"rss": "https://vmsilveira.dev/rss.xml",
"sitemap": "https://vmsilveira.dev/sitemap.xml",
"api_index": "https://vmsilveira.dev/api/agents.json"
},
"signals": { "ai_train": "no", "ai_search": "yes", "ai_input": "yes" }
}
Quickstart
Os snippets abaixo usam o que há de mais simples. Funcionam em qualquer runtime com fetch — Node 20+, Bun, Deno, navegadores e workers.
Listar todos os endpoints (uma chamada)
bash
curl -s https://vmsilveira.dev/api/agents.json | jq .endpoints
Assinar o feed RSS em um agregador qualquer
bash
# RSS URL:
https://vmsilveira.dev/rss.xml
Ler o manifesto LLM e processar no Node
ts
import { readFile } from "node:fs/promises";
const llmsTxt = await fetch("https://vmsilveira.dev/llms.txt").then((r) => r.text());
const lines = llmsTxt.split("\\n");
const sections = lines
.filter((l) => l.startsWith("## "))
.map((l) => l.replace("## ", ""));
console.log("Seções:", sections);
Buscar os 5 posts mais recentes via RSS
ts
import Parser from "rss-parser";
const parser = new Parser();
const feed = await parser.parseURL("https://vmsilveira.dev/rss.xml");
for (const item of feed.items.slice(0, 5)) {
console.log(`- ${item.title}`);
console.log(` ${item.link}`);
console.log(` ${item.pubDate}\n`);
}
Verificar todos os endpoints com uma chamada
bash
curl -s https://vmsilveira.dev/api/agents.json | jq .endpoints
CLI oficial (em breve)
Um CLI empacotado para consumir este site está nos planos, mas ainda não foi publicado. Até lá, curl + jq + o Swagger UI do /api/openapi.json resolvem qualquer caso de uso.
Status
Não publicado
Substitui por
curl + jq + Swagger UI
Doc canônica
/api/openapi.json
Quando lançar, vai expor
planejado
vmsilveira manifestImprime o agents.json localmente
vmsilveira posts --limit 5Lista os 5 posts mais recentes
vmsilveira projectsLista projetos publicados
vmsilveira aboutMostra os dados estruturados de Person
vmsilveira rss --jsonConverte o RSS para JSON
Para consumir os dados hoje, use `curl` direto nos endpoints documentados em /api/openapi.json — vale para shell scripts, Node, Python, Go, qualquer coisa com fetch. Quando o CLI for publicado, será anunciado aqui e no RSS.