Documentação Técnica
O BP-LinkUtils não é apenas um encurtador de links. É uma plataforma SaaS (Software as a Service) construída com arquitetura MVC "Vanilla", focada em performance e segurança sem a dependência de frameworks pesados.
Esta documentação detalha as decisões técnicas tomadas durante o desenvolvimento, desde o roteamento de URLs amigáveis até a lógica de interceptação de segurança.
1. Roteamento Inteligente
Para garantir URLs limpas (ex: bp.link/minha-promo em vez de redirect.php?id=123), utilizamos o Apache Rewrite Module. O arquivo .htaccess atua como um "porteiro", direcionando tráfego de API e Views para o index.php, enquanto links curtos são enviados para o redirect.php.
RewriteEngine On
# 1. Rotas do Sistema (Dashboard, Login, APIs) -> index.php
RewriteRule ^(login|register|dashboard|api/.*)$ index.php?route=$1 [L,QSA]
# 2. Links Curtos (Qualquer outra string) -> redirect.php
RewriteRule ^([a-zA-Z0-9-_]+)$ redirect.php?code=$1 [L,QSA]
Isso permite separar completamente a lógica de renderização da aplicação da lógica de processamento de redirecionamentos de alta performance.
2. The Gatekeeper (Lógica de Redirecionamento)
O arquivo redirect.php não apenas redireciona. Ele age como um Middleware de Segurança. Antes de enviar o usuário ao destino, ele verifica:
- Se o link existe.
- Se o prazo de validade expirou (Retorna HTTP 410 Gone).
- Se o link possui senha (Bloqueia o fluxo).
Interceptação de Senha
Ao detectar uma senha, o script pausa a execução e renderiza uma view no lugar do redirecionamento, mantendo a URL original no navegador.
// redirect.php - Trecho Simplificado
if (!empty($link['password'])) {
// Verifica se já está autenticado na sessão
if (!isset($_SESSION['link_unlocked_' . $id])) {
// Se enviou o POST com a senha
if (password_verify($_POST['password'], $link['password'])) {
$_SESSION['link_unlocked_' . $id] = true;
header("Location: " . url($code)); // Recarrega para redirecionar
exit;
}
// PAUSA TUDO e mostra o formulário
include 'views/password_gate.php';
exit; // Impede o header location final
}
}
3. Motor de QR Code (JSON Storage)
Para permitir personalização avançada (cores, logotipos, estilos de pontos) sem criar dezenas de colunas no banco de dados, optamos por uma abordagem NoSQL-like dentro do MySQL.
As configurações visuais são armazenadas em uma coluna settings do tipo JSON (ou TEXT), permitindo flexibilidade total para futuras novas opções de estilo.
Estrutura de Dados
// Exemplo do que é salvo na coluna 'settings'
{
"dotsOptions": {
"color": "#4f46e5",
"type": "rounded"
},
"backgroundOptions": {
"color": "#ffffff"
},
"image": "https://minhaempresa.com/logo.png"
}
No Frontend, a biblioteca qr-code-styling lê esse objeto JSON e renderiza o Canvas em tempo real, sem necessidade de processamento de imagem no servidor (o que economiza CPU).