Um projeto simples e eficiente para gerenciamento de links, com sistema de proteção contra bots através de captcha. Desenvolvido para compartilhar links de forma segura, evitando a extração automatizada por crawlers e bots maliciosos.
- Vite - Build tool e servidor de desenvolvimento
- TypeScript - Superset JavaScript com tipagem estática
- React - Biblioteca JavaScript para construção de interfaces
- shadcn-ui - Componentes UI reutilizáveis
- Tailwind CSS - Framework CSS utilitário
- Cloudflare Turnstile - Proteção contra bots
- Node.js (versão 18 ou superior)
- npm ou yarn
- Conta no Cloudflare Turnstile para obter as chaves de API
- Clone o repositório:
git clone https://github.com/whitestonedev/link-vault.git
cd link-vault- Copie o arquivo de exemplo das variáveis de ambiente:
cp .env.example .env- Configure as variáveis de ambiente no arquivo
.env:
# Chave do site do Cloudflare Turnstile
VITE_TURNSTILE_SITE_KEY=sua_chave_aqui- Para deploy no GitHub Pages, adicione a variável
TURNSTILE_SITE_KEYnas secrets do repositório:- Vá para Settings > Secrets and variables > Actions
- Clique em "New repository secret"
- Nome:
TURNSTILE_SITE_KEY - Valor: Sua chave do Turnstile
- Instale as dependências:
npm install
# ou
yarn install- Inicie o servidor de desenvolvimento:
npm run dev
# ou
yarn devO projeto estará disponível em http://localhost:8080
- Navegue até o arquivo
src/data/links.json - Edite o arquivo seguindo o formato:
[
{
"slug": "identificador-unico",
"name": "Nome do Link",
"link": "https://exemplo.com",
"image_link": "https://exemplo.com/imagem.png",
"icon_name": "NomeDoIcone",
"icon_link": "https://exemplo.com/icone.png",
"position": 0,
"visible": true
}
]slug: Identificador único para o linkname: Nome exibido do linklink: URL de destinoimage_link: URL da imagem principalicon_name: Nome do ícone (opcional)icon_link: URL do íconeposition: Posição na ordem de exibiçãovisible: Se o link deve ser exibido (true/false)
-
Prioridade de Ícones:
- Se
icon_linkestiver presente, ele será usado como ícone principal - Se
icon_linknão estiver presente, o sistema tentará usar oicon_name - Se nenhum dos dois estiver presente, será exibido apenas o
image_link
- Se
-
Ordenação dos Links:
- Links são ordenados primariamente pelo campo
position - Links com
positionnulo ou não definido são movidos para o final da lista - Em caso de
positionduplicado, a ordem será mantida conforme a sequência no arquivo JSON - Links com
visible: falsenão são exibidos
- Links são ordenados primariamente pelo campo
A ordenação é feita da seguinte forma:
- Primeiro, filtra apenas os links visíveis (
visible: true) - Em seguida, ordena os links baseado no campo
position - Links sem
positionválido (não numérico) recebemInfinitycomo valor - A ordem original do JSON é mantida para links com
positionigual - Links com
position: nullou sempositionsão movidos para o final
link-vault-beams/
├── src/
│ ├── components/ # Componentes React reutilizáveis
│ ├── data/ # Dados e configurações
│ │ └── links.json # Arquivo de configuração dos links
│ ├── pages/ # Páginas da aplicação
│ │ └── Home.tsx # Página principal com lógica de ordenação
│ └── App.tsx # Componente principal
├── public/ # Arquivos estáticos
└── ...
- Faça um Fork do projeto
- Crie uma Branch para sua Feature (
git checkout -b feature/AmazingFeature) - Faça o Commit das suas mudanças (
git commit -m 'Add some AmazingFeature') - Faça o Push para a Branch (
git push origin feature/AmazingFeature) - Abra um Pull Request