QrLinkki é uma plataforma full-stack para criar, gerenciar e rastrear QR codes e URLs encurtadas, com foco em uma experiência nativa para Android. Construída com princípios de Domain-Driven Design.
Funcionalidades • Como Rodar • Stack Tecnológica
- Geração de QR Codes — Crie QR codes dinâmicos a partir de qualquer URL ou texto
- Encurtamento de URLs — Gere links curtos e memoráveis com códigos personalizados
- Contagem de Cliques — Visualize quantos acessos seus links tiveram
- Gerenciamento de Usuários — Autenticação segura com tokens JWT
- Redirecionamentos Públicos — Redirecionamento transparente a partir de URLs curtas
- Android Nativo — Desenvolvido e otimizado especificamente para o ecossistema Android
- Scanner de QR — Scanner de câmera integrado para QR codes
- Dashboard — Gerencie todos os seus links em um só lugar
- Design Moderno — Interface visualmente agradável
- Suporte Offline — Cache local para melhor performance
Note
Compatibilidade: Este projeto foi desenvolvido e testado exclusivamente em dispositivos Android. Embora utilize React Native, o funcionamento em iOS ou Web não foi verificado e pode exigir adaptações.
- Autenticação JWT — Autenticação segura baseada em tokens
- Acesso Exclusivo do Proprietário — Apenas donos dos links podem modificar seu conteúdo
- Proteção de Dados — Armazenamento seguro de credenciais
QrLinkki segue os princípios de Clean Architecture e Domain-Driven Design:
┌─────────────────────────────────────────────────────────┐
│ QrLinkki.Api │
│ (Camada de Apresentação / REST API) │
│ Controllers • Swagger • Autenticação │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ QrLinkki.Application │
│ (Camada de Aplicação / Casos de Uso) │
│ Services • DTOs • Orquestração de Negócios │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ QrLinkki.Domain │
│ (Camada de Domínio / Lógica Central) │
│ Entidades • Interfaces • Regras de Negócio │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ QrLinkki.Infrastructure │
│ (Camada de Infraestrutura / Acesso a Dados) │
│ EF Core • SQLite • Repositories • Migrations │
└─────────────────────────────────────────────────────────┘
QrLinkki.Web/
├── app/ # Páginas do Expo Router
│ ├── (auth)/ # Telas de autenticação
│ ├── (tabs)/ # Telas de navegação em abas
│ └── links/ # Telas de gerenciamento de links
├── components/ # Componentes UI reutilizáveis
├── lib/ # Cliente API e utilitários
├── hooks/ # Hooks personalizados do React
└── constants/ # Tokens de tema e configurações
| Tecnologia | Versão | Finalidade |
|---|---|---|
| .NET | 8.0 | Framework principal |
| ASP.NET Core | 8.0 | Framework de API Web |
| Entity Framework Core | 9.0 | ORM e acesso a banco de dados |
| SQLite | - | Banco de dados embutido |
| JWT Bearer | 8.0 | Autenticação |
| Swagger/OpenAPI | 9.0 | Documentação da API |
| Tecnologia | Versão | Finalidade |
|---|---|---|
| Expo | ~54.0 | Framework mobile |
| React Native | 0.81 | Framework de UI |
| React | 19.1 | Biblioteca de UI |
Este projeto utiliza scripts PowerShell para facilitar o build e desenvolvimento Android.
- Node.js
- JDK 17 ou 21
- Android Studio (para emulador/SDK)
cd QrLinkki.Web
npm installPara iniciar o servidor de desenvolvimento:
npm run dev:androidSe for a primeira vez rodando, ou se adicionou novas bibliotecas nativas, gere o cliente de desenvolvimento:
npm run build:android:devPara gerar um APK de staging (instalável ao lado da versão de produção):
npm run build:android:stagingPara gerar o APK final:
npm run build:android:releasePOST /api/users # Registrar novo usuário
GET /api/users # Listar todos os usuários (autenticado)
GET /api/users/{id} # Obter usuário por ID
PUT /api/users/{id} # Atualizar usuário
DELETE /api/users/{id} # Deletar usuárioPOST /api/links # Criar link curto com QR code
GET /api/links # Obter todos os links do usuário autenticado
GET /api/links/{code} # Obter detalhes do link
PUT /api/links/{code} # Atualizar link
DELETE /api/links/{code} # Deletar link
GET /r/{code} # Redirecionamento público (rastreia cliques)Quando a API estiver rodando, visite http://localhost:5000/swagger para documentação interativa da API.
- Login/registro seguro com JWT
- Atualização automática de token
- Persistência de sessão com armazenamento seguro
- Auto-logout em respostas 401
- Visão geral visual dos links com estatísticas
- Ações rápidas: copiar, compartilhar, editar, deletar
- Rastreamento de cliques em tempo real
- Layout em grid responsivo
- Criar códigos curtos personalizados
- Gerar QR codes automaticamente
- Definir datas de expiração
- Habilitar/desabilitar links
- Integração nativa com câmera
- Detecção de QR code em tempo real
- Redirecionamento automático ao escanear
QrLinkki/
├── QrLinkki.Api/ # Camada de API REST
├── QrLinkki.Application/ # Camada de lógica de negócios
├── QrLinkki.Domain/ # Entidades de domínio e interfaces
├── QrLinkki.Infrastructure/ # Acesso a dados e serviços externos
├── QrLinkki.Web/ # Aplicativo frontend Expo
├── data/ # Banco de dados SQLite
├── api-storage/ # Uploads de arquivos e QR codes
└── docker-compose.*.yml # Configurações do Docker
# Testes do backend
dotnet test
# Testes do frontend (se configurado)
cd QrLinkki.Web
npm test# Backend
dotnet publish -c Release -o ./publish
# Frontend (Android - usa Gradle)
cd QrLinkki.Web
npm run build:android:releaseBackend não inicia:
- Certifique-se de que a porta 5000 não está em uso
- Verifique se o .NET 8.0 SDK está instalado
- Verifique as permissões do banco de dados na pasta
data/
Frontend não conecta à API:
- Verifique se a API está rodando em
http://localhost:5000 - Verifique a configuração de CORS no backend
- Em dispositivos móveis, certifique-se de que PC e celular estão na mesma rede
Problemas de conexão com Expo Go:
- Certifique-se de que os dispositivos estão na mesma rede WiFi
- Verifique as configurações do firewall
- Tente reiniciar o Metro bundler
Importante: O endpoint público de redirecionamento
/r/{code}é intencionalmente público para permitir que QR codes sejam escaneados por qualquer pessoa. Se você precisa de links privados, será necessário implementar autenticação neste endpoint (nota: isso quebrará a funcionalidade pública dos QR codes).
- Todas as operações de gerenciamento de links requerem autenticação
- Usuários só podem modificar seus próprios links e perfil
- Tokens JWT são armazenados de forma segura usando Expo SecureStore
- Rastreamento de cliques registra endereços IP para análise
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
QrLinkki é desenvolvido e mantido por:
Alex Scarano Backend (API .NET + Arquitetura) |
Wpnnt Frontend (React Native App) |
Se você achar este projeto útil, considere dar uma ⭐️ no GitHub!
Para dúvidas ou suporte, por favor abra uma issue.
Feito com ❤️ usando .NET e React Native
