https://github.com/kauefraga/rinhers
Conheça os participantes e suas soluções da Rinha de Back end 2025, a competição mais aguardada do ano!
https://github.com/kauefraga/rinhers
2025 competition ranking rinha-de-backend
Last synced: 11 months ago
JSON representation
Conheça os participantes e suas soluções da Rinha de Back end 2025, a competição mais aguardada do ano!
- Host: GitHub
- URL: https://github.com/kauefraga/rinhers
- Owner: kauefraga
- License: mit
- Created: 2025-07-13T02:25:34.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-08-18T11:09:23.000Z (11 months ago)
- Last Synced: 2025-08-18T11:22:59.753Z (11 months ago)
- Topics: 2025, competition, ranking, rinha-de-backend
- Language: TypeScript
- Homepage: https://rinhers.kauefraga.dev
- Size: 3.47 MB
- Stars: 13
- Watchers: 0
- Forks: 6
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Rinhers™
[](https://rinhers.kauefraga.dev)
[](https://github.com/kauefraga/rinhers/blob/main/LICENSE)
[](https://github.com/kauefraga/rinhers)
Conheça os participantes e suas soluções da [Rinha de Back end 2025](https://github.com/zanfranceschi/rinha-de-backend-2025), a competição mais aguardada do ano!

## Funcionalidades
- Conhecer os Rinhers em uma interface intuitiva, descontraída e responsiva
- Pesquisar e filtrar participantes por nome, linguagem de programação ou tecnologias usadas
- Trocar entre o tema claro e escuro
- Receber atualização automática dos participantes todo dia às 21h (horário de Brasília).
## Como rodar localmente
Tenha o [bun](https://bun.sh) instalado na sua máquina. Node.js e NPM também funciona.
Primeiro clone o projeto e instale as dependências
```sh
git clone https://github.com/kauefraga/rinhers.git
cd rinhers
bun install
```
Inicie o front end em modo de desenvolvimento
```sh
bun dev
```
Execute o script que gera o arquivo `rinhers.json`
```sh
bun gen
```
> [!WARNING]
> Para executar o script é necessário preencher a variável de ambiente `GITHUB_AUTH_TOKEN` com [um token de acesso pessoal (clássico)](https://docs.github.com/pt/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#como-criar-um-personal-access-token-classic) que tenha a permissão `public_repo`.
```sh
echo "GITHUB_AUTH_TOKEN=" > .env
```
## Funcionamento do projeto

O front end lê o arquivo `rinhers.json`, que é gerado e adicionado ao bundle da aplicação (`import`).
Analisando a trajetória até os dados foi possível definir que seria melhor gerar um arquivo com todos os dados uma única vez, ao invés de consumir a API do GitHub diretamente a cada requisição para página (mesmo com cache).
O script faz uma chamada para o endpoint `https://api.github.com/repos/zanfranceschi/rinha-de-backend-2025/contents/participantes` para conhecer todos os diretórios que existem e depois mapear eles para URLs `https://raw.githubusercontent.com/zanfranceschi/rinha-de-backend-2025/main/participantes/{submissao}/info.json`.
As URLs são separadas em chunks, depois os arquivos json são consultados usando `fetch` e `Promise.allSettled`. Os resultados são agregados em memória.
No final o resultado é convertido no arquivo `rinhers.json`.
Novas versões do arquivo são geradas automaticamente todo dia por causa de um [pipeline agendado do GitHub Action](.github/workflows/main.yml).
###### Melhorias
- **Trees API**: A API do GitHub em uso é chamada de *Contents API*, ela puxa no máximo 1000 registros por diretório, ou seja, se a Rinha vier a ter mais de 1000 participantes o excedente não vai ser incluso. Pelo que pesquisei a *Trees API* não tem essa limitação.
- **Streams**: Usar streams e escrever os resultados no arquivo `rinhers.json` sob demanda é mais eficiente e escalável do que colocar os resultados direto na memória.
### Tecnologias
- [TypeScript](https://www.typescriptlang.org/) 💙
- [Bun](https://bun.sh/)
- [GitHub API](https://docs.github.com/pt/rest)
- [React](https://react.dev/)
- [TailwindCSS](https://tailwindcss.com/)
- [Lucide](https://lucide.dev/icons/)
- [Cloudflare Pages](https://pages.cloudflare.com/)
- [GitHub Actions](https://docs.github.com/pt/actions)
O ícone do projeto foi feito usando [ray.so](https://ray.so/icon).
## Contribuições
Fique à vontade para contribuir [abrindo uma issue](https://github.com/kauefraga/rinhers/issues/new) para reportar um bug, sugerir uma alteração na interface, uma melhoria ou uma nova funcionalidade.
### Como contribuir
1. Faça um *fork* do projeto
2. Clone seu *fork* na sua máquina
3. Prepare o [ambiente de desenvolvimento](#como-rodar-localmente)
4. Faça as alterações e *commit* elas com [mensagens descritivas](https://www.conventionalcommits.org/pt-br/v1.0.0/)
5. Sincronize as alterações com o repositório do seu *fork* (`git push`)
6. Abra um *pull request* especificando o que você fez de forma geral (considerando que as alterações têm seus *commits* descritivos)
### Contribuidores e apoiadores
Meus agradecimentos a essas pessoas incríveis por ajudarem a aprimorar o projeto ou por incentivarem a continuação do projeto por meio de doações:
## Licença
Este projeto está sob a licença MIT - Veja a [LICENÇA](LICENSE) para mais informações.
