Como foi construído

Documentação técnica

Os detalhes de engenharia por trás do AirBridge: transferência híbrida — conexão direta P2P (WebRTC) ou o Cofre (upload temporário) — rodando em PHP vanilla num servidor compartilhado.

1. Visão arquitetural

O sistema opera em dois modos para garantir que a transferência sempre rola:

  • Modo Sala (WebRTC/P2P): conexão direta navegador-a-navegador via RTCPeerConnection + RTCDataChannel. O PHP é só o signaling server (troca de SDP/ICE) por polling AJAX — compatível com hospedagem compartilhada. Há STUN + um relay TURN de fallback pra redes com NAT simétrico (4G/corporativa); se ainda assim a conexão direta não fechar, a UI sugere o Cofre.
  • Modo Cofre (upload temporário): upload pro servidor com retenção curta. O arquivo é gravado com nome de hash (desacoplado do original), entregue em stream (sem carregar tudo na memória) e some sozinho em 60 min via uma rotina de limpeza.

2. Stack

Backend

PHP 8 (vanilla, MVC leve), MySQL (PDO, prepared statements), cron de limpeza.

Frontend

JavaScript (ES6+), WebRTC, Alpine.js, Tailwind CSS.

3. Confiabilidade da conexão P2P

O calcanhar de Aquiles de todo P2P em navegador é o handshake. O AirBridge cuida dos pontos que costumam quebrar:

  • O sinal de join é consumido uma única vez (sem re-emitir ofertas e derrubar o canal).
  • Candidatos ICE que chegam antes da descrição remota ficam num buffer e são aplicados depois (nada se perde).
  • Backpressure no DataChannel (controla o bufferedAmount) pra arquivo grande não estourar o buffer.
  • Fila de envio: um arquivo por vez, com barra de progresso nas duas pontas.

4. Segurança

  • Isolamento do storage: a pasta de uploads é bloqueada no .htaccess (Require all denied + execução de script desligada); os arquivos saem só via PHP, em stream.
  • Nomes desacoplados: o nome original nunca toca o disco — o arquivo vira um hash .dat. O link de download usa um id de 128 bits (não-enumerável).
  • Signaling protegido: campos validados, payload limitado, e uma sala é de dois — um 3º dispositivo é recusado (anti-interceptação).
  • Garbage collection: uma rotina apaga arquivos físicos e os registros expirados (hard-delete), mantendo o banco e o disco limpos.