/agentic-portfolio — crie um portfólio agêntico e alimentado por LLM gratuito para qualquer usuário do GitHub
Esta skill estrutura o aplicativo agentic-portfolio (Next.js 15 App Router + CopilotKit +
a cadeia de sobrevivência /free-llm). A implementação de referência é
github.com/wjlgatech/agentic-portfolio — clone-o como template e depois preencha os
dados em content/ para o usuário alvo. Tudo que é pessoal são dados; o código do aplicativo é reutilizável
tal como está.
0. Entradas e pré-requisitos
- Login do GitHub (ex.:
wjlgatech). Para repositórios privados + destaques, executegh auth status— o usuário deve estar autenticado com escoporepo. Apenas público funciona sem autenticação. node >= 18,npm,gh,python3.
1. Obter os repositórios ativos (últimos 12 meses)
SINCE=$(python3 -c "import datetime as d;print((d.date.today()-d.timedelta(days=365)).isoformat())")
gh api -X GET 'user/repos?per_page=100&sort=pushed&affiliation=owner' --paginate \
--jq ".[] | select(.pushed_at >= \"$SINCE\") | {name,private,fork,lang:.language,desc:.description,pushed:.pushed_at[0:10],stars:.stargazers_count,url:.html_url}" \
> repos.ndjson
# Para os repositórios PÚBLICOS de outro usuário: gh api "users/<login>/repos?per_page=100&sort=pushed" ...
Exclua forks (fork: true) e repositórios meta (dotfiles, um portfolio existente).
2. Curar em content/projects.json
Para cada repositório mantido, emita {name, category, highlight, featured, private, language, stars, pushed, url}:
- Category — agrupe em um conjunto pequeno (ex.: Agentic OS · Frameworks & Tooling · AI Products · Faith/Family · Open Knowledge); escolha nomes que se encaixem no trabalho real do usuário.
- highlight — uma linha segura para IP. Para repositórios privados: apenas em alto nível, e defina
url: null(nunca vincule ou exponha detalhes internos). - featured — marque os ~15–18 mais fortes para a visualização padrão.
3. Preencher content/profile.ts e content/portfolio.yaml
profile.ts: nome, tagline, missão, valores, amor e as Práticas Futuras 12X (uma dúzia de disciplinas compostas). Elabore a partir da biografia do usuário + temas dos repositórios; deixe claro que é para o usuário editar.portfolio.yaml: a superfície de controle — ordem/visibilidade/rótulos das seções, tema e a lista de artigos (comece vazia). O proprietário preenche artigos conversando com o agente ("adicione meu artigo do LinkedIn …") ou manualmente. O LinkedIn é autenticado — peça ao usuário para colar suas postagens, ou aceite URLs de artigos públicos e busque cada um via WebFetch.- Defina
PORTFOLIO_OWNER_TOKENno deploy para que apenas o proprietário possa aplicar edições do agente (visitantes permanecem somente leitura). Não definido = desenvolvimento local sem restrições.
4. Código do aplicativo — copie do template, não reescreva
As partes reutilizáveis (idênticas para cada usuário):
app/page.tsx,app/layout.tsx,app/globals.cssapp/api/copilotkit/route.ts+lib/llm.ts(a cadeia free-LLM — chave apenas no servidor)components/Copilot.tsx,components/Projects.tsx,components/Articles.tsx- configurações:
package.json(fixe Next em uma versão 15.x corrigida),tailwind.config.ts,tsconfig.json,postcss.config.mjs,.env.example
5. Verificar e depois enviar
npm install && npm run build # deve estar VERDE antes de enviar
gh repo create <login>/<repo-name> --public --source=. --remote=origin --push
Depois faça o deploy no Vercel (importar repositório → adicionar uma chave gratuita, ex.: NVIDIA_API_KEY → fazer deploy).
Diretrizes
- Nunca vazar IP privado. Repositórios privados: destaque apenas,
url: null. - Chave permanece no servidor. Apenas
app/api/copilotkit/route.tslê a chave do LLM. - Camadas gratuitas primeiro. Mantenha a ordem em
lib/llm.ts: NIM → Groq → Gemini → pago. - Build deve estar verde antes de qualquer envio. Relate o status do build honestamente.
- Controle humano sobre o envio do repositório a menos que o usuário tenha dito "criar e enviar".