Novidades » Junho 2026
Início › Junho de 2026
Junho foi o mês de nascimento do Slide Viewer: as apresentações da V4 passaram a viver num link, e não num PDF anexado.
O que mudou para você
- oxiviewApresentações num link
Upload de decks, pastas, busca, contagem de slides, links públicos de compartilhamento com viewer isolado, tela cheia e acesso protegido por Cloudflare Access.
Na prática: Mandar uma apresentação para o cliente é mandar um link que abre no celular, com a marca da V4.
O que veio em julho de 2026
Detalhamento por sistema
Item a item, com link para a mudança no código. Clique num sistema para filtrar.
Índice
oxiview
- 1. Complete F4 share links and isolated viewer routes
- 2. Baseline F0 — frontend completo + fidelidade de marca V4
- 3. Implement phase 5 hardening
- 4. Backend Supabase + auth Cloudflare Access + middleware JWT
- 5. Upload + listagem + pastas + busca
- 6. Contar slides no upload e persistir slide_count
- 7. Suprimir hydration mismatch de data e thumbnails no fullscreen
- 8. Aceitar nomes com acentos e Unicode no validador
- 9. Allow public share deck assets under CSP
- 10. Remover inset:unset que sobrescrevia top/left no fullscreen
- 11. CSS !important + shim matchMedia para suprimir thumbnails no fullscreen
- 12. Servir conteudo real do deck a partir do Storage
- 13. Suprimir miniaturas no fullscreen; corrigir hydration error #418
- 14. Relaxar CSP para blob: em decks standalone
- 15. Remover postMessage + fixar viewport 900x506 no fullscreen
Slide Viewer
2. Baseline F0 — frontend completo + fidelidade de marca V4 Novidade
Scaffold F0 do Slide Viewer (Next.js 15 App Router + TS + Tailwind v4), com todas as rotas mockadas, design system V4 portado e expressão fiel da marca. Sem auth/Supabase/upload reais (entram no F1).
3. Implement phase 5 hardening Novidade
Endurecimento de segurança da fase 5: cabeçalhos, CSP e validações antes do uso amplo.
4. Backend Supabase + auth Cloudflare Access + middleware JWT Novidade
Backend em Supabase com autenticação por Cloudflare Access e validação de JWT no middleware.
5. Upload + listagem + pastas + busca Novidade
Upload de decks, listagem, organização em pastas e busca por nome.
6. Contar slides no upload e persistir slide_count Novidade
Parseia <section> no HTML durante o upload (funciona para Reveal.js e maioria dos exporters standalone). Persiste em decks.slide_count para exibir contagem real no card em vez de '?'.
7. Suprimir hydration mismatch de data e thumbnails no fullscreen Correção
suppressHydrationWarning em DeckCard: formatDate usa toLocaleDateString que varia por timezone (servidor UTC vs. cliente UTC-3) causando #418.
8. Aceitar nomes com acentos e Unicode no validador Correção
Trocou whitelist ASCII-only por blacklist de caracteres realmente perigosos (path traversal, null bytes, chars de controle, simbolos reservados Windows). Corrige rejeicao incorreta de arquivos com nomes em portugues (ex: "Proposta Estrategica TUM.html") que retornavam 422 unsafe_filename.
10. Remover inset:unset que sobrescrevia top/left no fullscreen Correção
11. CSS !important + shim matchMedia para suprimir thumbnails no fullscreen Correção
Dois layers de defesa: 1. CSS .viewer-stage[data-presenting] iframe com !important e variaveis CSS garante especificidade maxima sobre a regra inset:0;width:100% existente. 2. Script shim injetado no HTML do deck intercepta matchMedia(/fullscreen/) e document.fullscreenElement para que o deck nunca detecte fullscreen.
12. Servir conteudo real do deck a partir do Storage Correção
Cria GET /api/decks/[id]/content: busca storage_path no DB, faz download server-side do Supabase Storage (RF19 - sem getPublicUrl) e serve o HTML com os mesmos security headers do /raw (connect-src none, sandbox opaco).
13. Suprimir miniaturas no fullscreen; corrigir hydration error #418 Correção
14. Relaxar CSP para blob: em decks standalone Correção
Apresentacoes standalone embeddêm fontes, imagens e scripts como blob: URLs (origem null/opaca no iframe sandboxado). Adiciona blob: em default-src, script-src, style-src, img-src e font-src.
15. Remover postMessage + fixar viewport 900x506 no fullscreen Correção
O postMessage {type:deckstage:present,value:true} provavelmente ativava o painel de miniaturas do deck. Removido.