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 | /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", "dev.cozy"],
"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`);
}
Usar o CLI oficial (recomendado)
bash
npx @vmsilveira/cli@latest posts --limit 3
npx @vmsilveira/cli@latest projects
npx @vmsilveira/cli@latest manifest
CLI oficial
O pacote `@vmsilveira/cli` é a forma mais simples de puxar dados deste site sem precisar manter um scraper. Zero dependências externas em runtime, código aberto, MIT.
Registro
npm (em breve)
Runtime
Node 20+ / Bun / Deno
Licença
MIT
Comandos disponíveis
v1.0.0
npx @vmsilveira/cli manifestImprime o agents.json localmente
npx @vmsilveira/cli posts --limit 5Lista os 5 posts mais recentes
npx @vmsilveira/cli projectsLista projetos publicados
npx @vmsilveira/cli aboutMostra os dados estruturados de Person
npx @vmsilveira/cli rss --jsonConverte o RSS para JSON
O scaffold do CLI está versionado em /cli na raiz deste repositório. A publicação no npm requer uma decisão de produto (escopo, nome do pacote, modelo de versionamento) e credenciais — enquanto isso não acontece, os snippets acima usam npx apontando para o source direto.