diff --git a/.env b/.env new file mode 100644 index 0000000..0596c6c --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +VITE_SUPABASE_PROJECT_ID="mebgazuntzkcnkifftbe" +VITE_SUPABASE_PUBLISHABLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1lYmdhenVudHprY25raWZmdGJlIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Nzg3Mzg3NTMsImV4cCI6MjA5NDMxNDc1M30.lf3sYc11q9Rl7yk77rIOkacHytG_VKcOBu5kqw0CgcY" +VITE_SUPABASE_URL="https://mebgazuntzkcnkifftbe.supabase.co" diff --git a/.lovable/plan.md b/.lovable/plan.md index 0cf1cc4..c6bdee8 100644 --- a/.lovable/plan.md +++ b/.lovable/plan.md @@ -1,96 +1,118 @@ -## Objetivo +# Plano — Compartilhar tela do Quest 3 via link público -Adicionar um botão **"Escala"** com presets de redução (1:2, 1:4, 1:8, 1:10, 1:20, 1:33, 1:50, 1:100, 1:200) e ampliação (2:1, 4:1, 10:1), disponível tanto no Viewer 2D quanto no XR. Ao mudar a escala, o app ajusta automaticamente as ferramentas que dependem de tamanho real (medições, sensibilidade do ajuste fino, snap, hover auto-detect), mantendo todos os números exibidos em **mm reais da peça**. +Permitir que o inspetor no Quest gere um link tipo `tracksteelxr.lovable.app/watch/AB12CD`, mande no WhatsApp/email, e até 3 espectadores assistam ao vivo (vídeo + áudio do Quest) em qualquer celular ou PC. -## Conceito chave +## Como vai funcionar para o usuário -- "1:N" significa: o modelo é renderizado **N vezes menor** que o real (renderScale = 1/N). -- "N:1" significa: renderizado N vezes maior (renderScale = N). -- Os dados do modelo continuam em mm reais. Só o `scale` aplicado ao `` muda. -- **Medições, sensibilidades, indicadores e relatório PDF continuam exibindo mm REAIS** — o app multiplica/divide pelo fator quando necessário. +**No Quest (broadcaster):** +1. No HUD do `/xr` aparece novo botão **"Compartilhar"** (ícone Share/Cast) +2. Ao clicar: app gera código de 6 caracteres, mostra QR + link encurtado +3. Botões "Copiar link" e "Compartilhar" (Web Share API → abre WhatsApp/email do sistema) +4. Indicador vermelho 🔴 LIVE fica visível enquanto transmite, com contador de viewers +5. Botão "Encerrar" para parar -## Mudanças +**No celular/PC (viewer):** +1. Abre o link → tela cheia com vídeo da sessão XR +2. Sem login, sem instalar nada +3. Mostra "Aguardando inspetor…" se a sala não estiver ativa +4. Read-only: só assiste -### 1. Store (`useModelStore.ts`) - -Adicionar: -```ts -scaleRatio: { label: '1:1', factor: 1 } // factor = renderScale -setScaleRatio: (r) => void -``` -Lista de presets exportada (label + factor). - -`fineTuning.scale` continua existindo para o gesto two-hand do XR; o novo `scaleRatio` é aplicado **por cima** (multiplicado) no grupo do modelo. - -### 2. Cálculo de medições (`addMeasurePoint`) - -Pontos A/B vêm em coordenadas world já escaladas. Para reportar mm reais: -``` -distanceMM_real = distanciaWorld_mm / scaleRatio.factor -``` -Atualizar a função `addMeasurePoint` para dividir pela escala atual antes de salvar `distanceMM`. Tooltips e PDF continuam usando o valor salvo (sem mudança). - -### 3. Ajuste fino (`FineTuningControls` + XRHud joystick) - -`POSITION_STEP` deve representar **1 mm real**. Aplicar: -``` -worldStep = POSITION_STEP * scaleRatio.factor -``` -Isso garante que clicar "+" desloca visualmente proporcional à escala (em escala 1:100, mexer "1 mm real" desloca 0,01 mm na cena — coerente). - -Mesmo tratamento para o joystick no XR (incremento por frame multiplicado por `scaleRatio.factor`). - -### 4. Auto-detect (hover hole/edge) e snap - -Os limiares de detecção de furo/aresta e raio de snap são em metros world. Multiplicar pelo `scaleRatio.factor` para que continuem capturando os mesmos elementos físicos da peça. - -### 5. ModelViewer - -No `` do modelo, multiplicar o scale final: -``` -finalScale = fineTuning.scale * scaleRatio.factor -``` - -### 6. UI — novo componente `ScaleSelector` - -Botão com ícone de régua + label atual ("1:1", "1:50"…). Ao clicar abre um Popover/Sheet com grid: +## Arquitetura técnica ```text -Reduzir Ampliar -[1:1*] [1:2] [1:4] [1:8] [2:1] -[1:10] [1:20] [1:33] [1:50] [4:1] -[1:100] [1:200] [10:1] + Quest 3 (broadcaster) Lovable Cloud Viewers (celular/PC) + ┌──────────────────┐ ┌─────────────────────┐ ┌──────────────────┐ + │ /xr │ │ Supabase Realtime │ │ /watch/AB12CD │ + │ - canvas WebXR │ ──SDP──▶│ (signaling channel) │◀──SDP── │ -