# fernandofatech

README de perfil do GitHub: a porta de entrada para os 154 repos da org

- URL: https://fernando.moretes.com/open-source/fernandofatech

- Markdown: https://fernando.moretes.com/open-source/fernandofatech/guide.md?lang=pt

- GitHub: https://github.com/fernandofatech/fernandofatech

- Homepage: https://fernando.moretes.com

- Language: n/a

- Topics: github-profile, moretes, portfolio, profile, readme, solution-architect, solution-architecture

- Stars: 2

- Forks: 0

- Updated: 2026-09-29T16:37:27Z

---

Este repositório é o README de perfil que o GitHub mostra em github.com/fernandofatech: um único `README.md` que resume o que eu construo e aponta para os 154 repositórios que moram na organização @fernando-moretes.

## O que é e por que existe

O GitHub tem uma convenção simples: se você cria um repositório público com o **mesmo nome do seu usuário**, o `README.md` dele aparece no topo do seu perfil. Não há build, não há deploy, não há código para rodar. O repositório `fernandofatech/fernandofatech` é exatamente isso.

A pergunta útil aqui não é "o que tem nesse README?", é "por que um perfil pessoal precisa explicar onde estão os repositórios?". A resposta é que eles não estão mais aqui. Movi todo o código para a organização [@fernando-moretes](https://github.com/fernando-moretes), e o perfil virou o ponto de entrada que explica essa decisão para quem chega pelo meu usuário.

O conteúdo tem quatro partes:

- **Sobre mim e stack:** AWS, serverless, event-driven, Terraform, Node.js, TypeScript, Python, Next.js e o lado de segurança (OSINT, avaliação de redes sem fio).
- **Projetos em destaque:** uma tabela com seis repositórios, do estimador de custo AWS ao cliente SSH para o M5Cardputer.
- **A plataforma por trás:** convenção de nomes, pipeline, runners, segurança e releases da organização.
- **Estatísticas e contato:** cards gerados por serviço externo e links para LinkedIn e para a org.

É texto estático. O valor está em ser o primeiro lugar onde alguém pousa, e por isso precisa estar certo.

## O que o README documenta

- **Convenção de nomes:** oito prefixos (`app-`, `svc-`, `ref-`, `tool-`, `infra-`, `lib-`, `dot-`, `lab-`) para 154 repositórios.
- **Pipeline único:** workflows reutilizáveis em `platform-workflows`; corrigir uma regra é mudar um arquivo.
- **Runners por visibilidade:** repo privado em self-hosted (minuto grátis), repo público em GitHub-hosted (grátis e ilimitado para público).
- **Segurança:** gitleaks e trivy em todos; SonarQube e DefectDojo nos privados, que rodam dentro da rede.
- **Releases:** SemVer calculado a partir de Conventional Commits, ninguém digita número de versão.

## Por que os repositórios saíram da conta pessoal

A migração não foi estética. Foi uma limitação de API.

Conta pessoal no GitHub **não tem runner no nível da conta**. A API de self-hosted runners só expõe `/repos/{owner}/{repo}` e `/orgs/{org}`; o endpoint de usuário devolve `404`. Na prática, CI self-hosted numa conta pessoal exige um container de runner **por repositório**. Com 154 repositórios, isso são 154 processos para registrar, atualizar e monitorar.

Na organização, o runner é registrado uma vez e atende todos. O README registra o número: **dois runners servem os 154**.

A lição que fica: o custo de CI self-hosted não é o de subir o primeiro runner, é o de manter N runners atualizados quando o token expira, quando a imagem precisa de patch, quando um repo novo aparece. A organização transforma esse custo de linear em constante.

O mesmo raciocínio vale para o pipeline. Com workflows reutilizáveis num repositório central, uma regra nova de segurança entra em todos os 154 repos com um commit. Sem isso, a mesma mudança vira 154 pull requests, e na prática metade nunca é feita.

O perfil pessoal continuou existindo porque é ele que aparece em commits, issues e no LinkedIn. Ele só precisava dizer para onde o código foi.

## Como o perfil se conecta ao resto

O README é renderizado pelo GitHub, puxa imagens de dois serviços externos e encaminha o visitante para a organização, onde mora o código e o pipeline.

### 👤 Perfil pessoal

- fernandofatech/fernandofatech README.md (frontend)

### 🌐 Serviços externos

- shields.io badges (external)
- github-readme-stats cards de stats (external)

### 🔧 Org fernando-moretes

- 154 repos 8 prefixos (storage)
- platform-workflows reusable workflows (ci)
- 2 runners self-hosted (compute)

### 🔐 Segurança

- gitleaks · trivy SonarQube · DefectDojo (security)

### Fluxos

- visitor -> repo: abre o perfil
- repo -> shields: carrega badges
- repo -> stats: carrega cards
- repo -> org: links para os repos
- org -> workflows: chama workflows
- workflows -> runners: jobs privados
- workflows -> scan: varredura

## Como usar o padrão no seu perfil

1. **Crie o repositório com o seu usuário**: Repositório **público**, com nome idêntico ao seu login (ex.: `seu-usuario/seu-usuario`). Privado não aparece no perfil.

2. **Copie a estrutura, não o conteúdo**: Use as seções como esqueleto: sobre, stack, projetos, plataforma, contato. Troque cada link e cada número pelos seus.

3. **Ajuste os cards de estatística**: Nas URLs do github-readme-stats, troque `username=fernandofatech` pelo seu login. Parâmetros como `theme=tokyonight` e `langs_count=8` são opcionais.

4. **Se tiver muitos repos, documente a organização**: Com dezenas de repositórios, explique a convenção de nomes e o pipeline no próprio perfil. É o que separa um índice de uma lista de links.

5. **Faça commit em `main` e confira**: O GitHub renderiza na hora. Abra o perfil deslogado para ver o que um visitante vê.

_Clonar como ponto de partida e trocar o usuário dos cards_

```bash
# troque YOUR_USER pelo seu login no GitHub
gh repo create YOUR_USER/YOUR_USER --public
git clone https://github.com/fernandofatech/fernandofatech.git profile
cd profile
sed -i '' 's/username=fernandofatech/username=YOUR_USER/g' README.md   # macOS; no Linux use sed -i
git remote set-url origin https://github.com/YOUR_USER/YOUR_USER.git
git push -u origin main
```

> **Dependência externa que falha em silêncio:** Os cards vêm de `github-readme-stats.vercel.app`, uma instância pública mantida por terceiros. Quando ela atinge limite de taxa ou sai do ar, o GitHub mostra imagem quebrada e ninguém é avisado. Se os cards importam para você, hospede sua própria instância com token próprio; se não importam, remova.

## O custo de manter um README de perfil

Um arquivo estático parece não ter manutenção. Tem, e o próprio repositório mostra onde.

**Links que envelhecem:** a tabela de projetos aponta parte para `fernando-moretes/*` e parte para `fernandofatech/*`, porque a migração foi feita em ondas. O GitHub redireciona repositório renomeado ou transferido, mas o redirecionamento quebra no dia em que alguém cria um repositório novo com o nome antigo.

**Identidade duplicada:** o README tem dois endereços de LinkedIn diferentes, `/in/fernandofatech/` no topo e `/in/fernando-francisco-azevedo/` no rodapé. É o tipo de inconsistência que nenhum linter pega.

**Números que mudam:** "154 repos" e "dois runners" estavam certos quando escrevi. Cada repositório novo deixa o número um pouco mais errado.

O que eu faria diferente: gerar a seção de plataforma a partir da própria organização (contagem de repos via API, lista de prefixos do orquestrador) em vez de digitar. Enquanto isso não existe, o README é um documento com data implícita, e vale lê-lo assim.

## Perguntas frequentes

### Tem algo para instalar ou rodar?

Não. É um `README.md` renderizado pelo GitHub. O código que eu de fato mantenho está na organização @fernando-moretes.

### Por que não usar uma conta pessoal com um runner por repo?

Porque a API de runners não tem endpoint de usuário (`404`). Com 154 repos, seriam 154 runners para manter; na organização são dois.

### Onde está o diagrama completo da plataforma?

No perfil da organização, que tem o índice completo e o motivo de cada decisão.

## Referências

- [GitHub: fernandofatech/fernandofatech](https://github.com/fernandofatech/fernandofatech)
- [fernando.moretes.com](https://fernando.moretes.com)
- [GitHub: organização fernando-moretes](https://github.com/fernando-moretes)
- [platform-workflows](https://github.com/fernando-moretes/platform-workflows)
- [github-readme-stats](https://github.com/anuraghazra/github-readme-stats)
- [GitHub Docs: managing your profile README](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme)

## Para quem serve

Use este repositório como referência quando você tem dezenas de repositórios e precisa que o perfil explique a organização, não só liste projetos. Se você tem cinco repos numa conta pessoal, o padrão é excessivo: um parágrafo e três links bastam. E se copiar os cards de estatística, conte com a instância pública falhando de vez em quando, ou hospede a sua.

## Links

- [GitHub repository](https://github.com/fernandofatech/fernandofatech)
- [Homepage](https://fernando.moretes.com)
