Dance • Experience • Movement

O De Paula

Program

Transformando movimento em experiência. Workshops, formações e residências que tratam o corpo como matéria de precisão.

Conheça mais
Dançarina em movimento sob luz dura

Fig. 01 — Estúdio / luz dura

Agenda

Próximos eventos

Junho 2026

Dançarino em ensaio
28JUN
Workshop

Movimento intencional

Hora14:00 LocalSão Paulo — SP Vagas24
Saiba mais
Salto em performance de dança
12JUL
Intensivo

Corpo e estrutura

Hora09:00 LocalBelo Horizonte — MG Vagas18
Saiba mais
Dupla de dançarinos em cena
03AGO
Residência

Metal & matéria

Hora19:30 LocalCuritiba — PR Vagas12
Saiba mais

Validação

Seu certificado

Consulte a autenticidade do seu certificado através da chave de validação.

Exemplo: ODP-2026-A7K92X

Contato

Vamos conversar?

Entre em contato para parcerias, eventos, workshops ou qualquer outra dúvida.

Mensagem enviada. Respondemos em até 24 horas.

Inscreva-se

Inscrição enviada! Nossa equipe confirma sua vaga em breve — fique de olho no e-mail e no WhatsApp informados.

Acesso administrativo

Painel

Dashboard

Próximos eventos

Atividades recentes

Agenda

Eventos

EventoTipoDataLocalInscritosStatus

Base

Participantes

NomeCPFContatoCidade/UFStatus

Relação participante + evento

Inscrições

NúmeroParticipanteEventoDataTipoStatus

Controle

Presença

ParticipanteInscriçãoCheck-inEntradaCheck-outSaídaPermanênciaStatusCertificado

Lei de incentivo à cultura

Frequência

Emissão e validação

Certificados

ChaveNúmeroParticipanteEventoCargaConsultasStatus

Prestação de contas

Comprovação cultural

Formulário do site

Contatos

DataContatoMensagemStatus

Auditoria

Logs

QuandoAçãoDetalheUsuário

Projeto

Configurações

Redes sociais

Banco de dados

Só o administrador faz login. O site público lê eventos e certificados sem autenticação e grava apenas contatos e consultas.

Regras do Realtime Database

{
  "rules": {
    "odp": {
      "events":        { ".read": true, ".write": "auth != null" },
      "certificates":  { ".read": true, ".write": "auth != null" },
      "settings":      { ".read": true, ".write": "auth != null" },

      "adminMeta": {
        ".read": true,
        "created": { ".write": "auth != null && !data.exists()" }
      },

      "participants": {
        ".read": "auth != null", ".write": "auth != null",
        "$pid": {
          "cpf":   { ".write": "auth != null || newData.val() == data.val()" },
          "email": { ".write": "auth != null || newData.parent().child('cpf').val() == data.parent().child('cpf').val()" },
          "whats": { ".write": "auth != null || newData.parent().child('cpf').val() == data.parent().child('cpf').val()" }
        }
      },
      "registrations": { ".read": "auth != null", ".write": "auth != null" },
      "attendance":    { ".read": "auth != null", ".write": "auth != null" },
      "evidence":      { ".read": "auth != null", ".write": "auth != null" },
      "auditLogs":     { ".read": "auth != null", ".write": "auth != null" },

      "contacts":  { ".read": "auth != null",
                     "$id": { ".write": "!data.exists()" } },
      "consultas": { ".read": "auth != null",
                     "$id": { ".write": "!data.exists()" } },
      "regRequests": { ".read": "auth != null", ".write": "auth != null",
                        "$id": { ".write": "!data.exists()" } },

      "certsByCpf": {
        "$cpf": { ".read": true, ".write": "auth != null",
          "status": { ".write": true }
        }
      }
    }
  }
}

O nó adminMeta/created controla o primeiro acesso: enquanto estiver vazio, a tela de login mostra "criar conta administradora"; a regra !data.exists() permite gravá-lo uma única vez, e só por quem acabou de se autenticar — depois disso o cadastro fecha sozinho. Dados pessoais de participantes, inscrições e presença ficam fechados: só quem está autenticado lê. Em contacts e consultas, a mesma regra !data.exists() permite criar um registro novo, mas nunca ler, alterar ou apagar os que já existem. Em regRequests (pedidos de inscrição feitos pelo formulário público de eventos) a mesma regra !data.exists() libera a criação sem login, mas quem está autenticado (o admin) também pode ler, atualizar e apagar — é assim que a tela de Inscrições consegue aprovar ou recusar um pedido. Em certsByCpf a leitura só é liberada por CPF específico ($cpf) — dá para ler quem já sabe o CPF, mas não listar o nó inteiro; a escrita continua exigindo login, feita automaticamente ao emitir um certificado (exceto status, o sinalizador de cadastro completo, que qualquer um pode gravar sabendo o CPF). Em participants/$pid, e-mail e WhatsApp também podem ser gravados sem login — mas só numa escrita que reenvie, junto, o CPF exatamente igual ao que já está salvo naquele registro: isso é o que garante que só quem já sabe o CPF certo da pessoa consegue completar e-mail/WhatsApp dela pela consulta pública, e nunca alterar nome, status ou qualquer outro campo. Nome, CPF (para criar/alterar) e todo o resto continuam fechados para quem não está logado.