Entrar

Área administrativa. Não existe registo público: apenas contas previamente autorizadas podem entrar.

A palavra-passe é validada pelo Supabase Auth e não é guardada neste HTML.
Portugal Gestão territorial
País
Mapa
A ligar ao Supabase…

Visão geral

Estado operacional do mapa selecionado, pedidos em análise e atividade recente.

—
Segmentos0Neste mapa
Ocupados0Presenças ativas
Stand by0Territórios reservados
Impérios0Aglomerados ativos
Receita no mês€0Pagamentos confirmados
Visitas no mês0Fonte futura: analytics

Pedidos prioritários

Mais recentes

Atividade recente

Audit log

Pedidos

Um pedido pendente coloca o território em stand by. Só uma aprovação cria ou altera a presença oficial.

Territórios

Gestão por código territorial. O nome é apenas descritivo; o sistema identifica cada segmento pelo seu código/UUID.

CódigoTerritórioEstadoEmpresaNívelCorTomImpérioAções

Edições & personalizações

Cada território tem um código único de edição. Se um cliente perder o código, o Owner pode consultá-lo e copiá-lo aqui. Também podes gerir os ícones e balões adicionais associados à edição.

0 edições
TerritórioCódigo de ediçãoEstadoEmpresaÍcones / balõesAções

Empresas

Entidades que podem deter presenças em um ou mais territórios.

IDEmpresaCategoriaWebsitePresençasImpériosEstado

Categorias

Fonte única das categorias admissíveis. Quando ligarmos ao Supabase, o formulário público deverá ler daqui apenas categorias ativas e públicas.

0 categorias 0 públicas Âmbito: global ou por país
Desativar uma categoria impede novas escolhas públicas, mas não apaga empresas ou pedidos históricos que já a usem. O código da categoria deve ser estável.
CódigoCategoriaÂmbitoPúblicaAtivaEmpresasAções

Receitas

Registo financeiro manual e por pedido. Os totais consideram apenas movimentos confirmados; alterações ficam no histórico.

—
Período selecionado€0,000 movimentos
Esta semana€0,00por data de pagamento
Este mês€0,00por data de pagamento
Total do país€0,00—

Por cliente / utilizador

Período selecionado

Por país

Todos os países
DataPaísClientePedidoTipoMeioQuantiaEstadoOrigemAções

Tráfego

Métricas reais do Cloudflare Web Analytics. O painel apresenta apenas dados recebidos da API, nunca valores de demonstração.

Fonte: Cloudflare Web AnalyticsAcesso Owner autenticadoA aguardar consulta…
Visitas · semana—Cloudflare Web Analytics
Visitas · mês—Cloudflare Web Analytics
Page views · mês—Cloudflare Web Analytics
País líder—0 visitas

Visitas por país

Este mês

Páginas mais vistas

Este mês
A contagem vem de eventos de carregamento de página do Cloudflare Web Analytics; não inclui automaticamente cliques em territórios nem jogadas. Os totais por país e página podem diferir das visitas únicas globais. Se a API não responder, não serão apresentados números simulados.

Estado Analytics

Registo de continuidade — o que já foi feito, o que está confirmado e o que falta para ativar o Tráfego real.

Pendente de integração
Resumo: o Cloudflare Web Analytics recolhe dados e o Worker themappp-analytics está publicado. Ainda não foi confirmado que o Worker consegue consultar as estatísticas, nem que o Backstage as apresenta. Esta página é documentação; não executa configurações automaticamente.

✓ Já realizado

✓ Cloudflare Web Analytics ativo para themappp.com; foi observada recolha de visitas e visualizações no painel da Cloudflare.

✓ Criado o Worker separado themappp-analytics, sem mexer no Worker comunidade.

✓ Criado um API Token de leitura, limitado inicialmente a Zone → Analytics → Read, e guardado como Secret CLOUDFLARE_ANALYTICS_TOKEN no Worker.

✓ Publicado código no Worker; o endpoint /health devolveu a resposta esperada, segundo o teste realizado.

✓ Preparados ficheiros de integração do Tráfego para o Backstage, incluindo uma versão de Worker com tentativa de autoconfiguração. Não foi confirmado que essa última versão tenha sido instalada.

○ Falta concluir

1. Validar a consulta real: obter dados Web Analytics via API GraphQL e confirmar que os campos da consulta correspondem ao esquema disponível.

2. Confirmar permissões: o token atual pode não permitir consultas ao dataset Web Analytics/RUM; pode ser necessário Account → Analytics → Read. Não alterar permissões sem confirmar o erro.

3. Identificadores: confirmar o Account ID e, se a consulta exigir, o identificador do site Web Analytics. Não foi possível encontrá-los nos ecrãs visitados.

4. Segurança: configurar e testar validação de sessão Supabase e autorização Owner no Worker, sem expor o token no HTML.

5. Backstage: instalar a versão com ligação ao endpoint /analytics, testar visitas, page views, países e páginas. Não mostrar valores fictícios.

Referências para retomar mais tarde

Worker: themappp-analytics · https://themappp-analytics.spammingfrog.workers.dev/health

Secret existente: CLOUDFLARE_ANALYTICS_TOKEN — nunca colar o valor no HTML nem numa conversa.

Endpoint pretendido: /analytics (dados privados, apenas Owner autenticado).

Ficheiros preparados nesta conversa: themappp-analytics-auto.js, THE_MAPPP_Backstage_Trafego_Cloudflare.html e pacote Analytics + Backstage. A instalação e funcionamento da versão automática não estão confirmados.

Separação essencial: pedidos HTTP da Cloudflare não são equivalentes a visitas do Web Analytics. O país do visitante também não é necessariamente a edição do mapa visitada.

Para retomar com outra IA: “No projeto THE MAPPP, consulta o separador Estado Analytics do Backstage. O Worker themappp-analytics já responde em /health e tem o Secret CLOUDFLARE_ANALYTICS_TOKEN. Verifica primeiro a consulta GraphQL e a autorização Owner, depois liga /analytics ao separador Tráfego. Não alteres o Worker comunidade nem inventes estatísticas.”

Estado documentado em 10/10/2026. Esta página não confirma alterações feitas posteriormente na Cloudflare.

Impérios

Agregações de territórios da mesma entidade. O império é independente do nível de destaque de cada território.

Utilizadores

Acessos adicionais podem ser limitados por função e por mapa/país.

Mecânica

Manual de funcionamento do THE MAPPP, por módulo. Explicações simples e instruções técnicas copiáveis para pedir alterações à IA.

Documentação do código
Este manual descreve o código analisado e a versão preparada do Backstage. Não confirma, por si só, o estado do deploy em produção. As fichas são documentação estática: atualiza-as quando a arquitetura mudar.
20 fichas
01

Arquitetura geral

Explicação simples

O site mostra o mapa e os jogos; o Backstage administra dados. O Supabase guarda informação e o Worker executa as regras do Testa-te.

Explicação técnica · pronta a copiar

Site público: HTML/JavaScript. Backstage: HTML com Supabase JS v2 e autenticação Supabase Auth. Backend do Testa-te: Worker Cloudflare em https://api.themappp.com, que comunica com Supabase REST usando credenciais apenas no servidor. Evitar alterações às rotas e tabelas existentes. Não assumir que todos os minijogos usam o Worker.

02

Seleção de país

Explicação simples

Cada edição corresponde a um país. No Backstage, o país escolhido no topo determina as localidades e os rankings consultados.

Explicação técnica · pronta a copiar

Backstage: countrySelect; país obtido por currentCountry()?.iso2, convertido para maiúsculas (PT, DE, etc.). Funções RPC recebem p_pais. Worker /testa-ronda aceita pais, com PT como valor por defeito. IMPORTANTE: verificar sempre que o HTML público envia o país correto e que todas as consultas/rankings são filtrados por pais. Não confundir 'Portugal' com 'PT'.

03

Origem das localidades do Testa-te

Explicação simples

As localidades do jogo vêm de uma tabela no Supabase. Quando começa uma ronda, o jogo pede ao servidor uma localidade elegível.

Explicação técnica · pronta a copiar

Fonte principal: public.povoacoes. Worker consulta Supabase REST com filtro pais=eq.<ISO2> e ativa=eq.true e campos id,nome,desambig,lon,lat,regiao. Função places(env,pais) mantém cache de 10 minutos. O endpoint POST /testa-ronda seleciona a localidade e devolve nome e token de ronda. O HTML público contém também LOC_PLACES como lista local usada em modos/fallbacks; não a tratar como base de dados oficial.

04

Rondas e resposta do jogador

Explicação simples

O jogador recebe uma localidade e marca no mapa onde pensa que ela fica. O servidor compara a escolha com a localização correta.

Explicação técnica · pronta a copiar

Fluxo confirmado: POST /testa-ronda com dispositivo, sessao opcional, pais e ilhas; devolve token e nome. POST /testa envia token e coordenadas do clique, permitindo calcular distância e pontuação no Worker. Token da ronda expira ao fim de 15 minutos. Não enviar coordenadas verdadeiras no payload público da ronda. Verificar nomes exatos dos campos no código antes de alterar.

05

Pontuação e tolerância

Explicação simples

Quanto mais perto do ponto correto, mais pontos o jogador recebe. Um erro de um quilómetro quase não altera a pontuação.

Explicação técnica · pronta a copiar

No Worker: pontos = Math.round(100 * Math.exp(-km/60)). Um erro de 1 km vale aproximadamente 98 pontos. A tolerância de 1 km para validação das coordenadas é uma política de qualidade dos dados, NÃO um raio de pontuação máxima. Não alterar fórmula sem pedido explícito.

06

Limites de jogadas e sessões

Explicação simples

O jogo limita tentativas para evitar abuso. Quem inicia sessão tem um limite diário diferente de quem joga sem conta.

Explicação técnica · pronta a copiar

No Worker analisado: 3 jogadas gratuitas por dispositivo, 20/dia para utilizadores autenticados, limite adicional por IP de 12/24 h; sessão validada pelo backend. Há hashes de dispositivo/IP e token de ronda. Não retirar limites nem confiar exclusivamente em validações feitas no navegador.

07

Onde ficam guardados os palpites

Explicação simples

Os palpites ficam registados na base de dados, permitindo calcular estatísticas e rankings.

Explicação técnica · pronta a copiar

Tabela public.testa_jogadas: guarda identificadores de jogador/concelho/localidade, coordenadas do palpite, distância, pontos e metadados antiabuso/nonce conforme implementação do Worker. A fonte persistente é Supabase, não localStorage do browser. Alterar coordenadas de uma localidade não recalcula automaticamente jogadas antigas.

08

Rankings do Testa-te

Explicação simples

É possível ver as localidades mais fáceis e mais difíceis e comparar os resultados dos jogadores.

Explicação técnica · pronta a copiar

Novo Backstage consulta RPC testa_estatisticas_publicas(p_pais). Rankings de localidades: mínimo de 20 jogadas; acerto definido como distância até 10 km no módulo implementado. O jogo existente tem GET /testa-ranking para ranking de concelhos, cuja consulta original a testa_media_concelho não inclui filtro de país explícito: verificar isolamento antes de usar em múltiplos países. As estatísticas públicas não devem expor identificadores pessoais.

09

Mapa de calor dos palpites

Explicação simples

Quando há dados suficientes, é possível mostrar em que zonas os jogadores costumam clicar para uma localidade.

Explicação técnica · pronta a copiar

Worker consulta view testa_celulas por povoacao_id e agrega coordenadas em células. A implementação analisada usa limiar de 10 palpites para apresentar esta funcionalidade. Preservar anonimização/agregação; não publicar coordenadas associadas a utilizadores individuais.

10

Backstage: localidades

Explicação simples

O separador Testa-te permite consultar, editar, ativar e desativar localidades do país escolhido.

Explicação técnica · pronta a copiar

O HTML do Backstage usa Supabase Auth e RPCs backstage_testa_listar(p_pais), backstage_testa_importar e funções de edição definidas no SQL de instalação. O carregamento atualiza de 30 em 30 segundos quando a página está aberta. Só Owner vê o separador. A segurança efetiva depende das permissões/RLS e das funções SECURITY DEFINER no Supabase, não de esconder botões.

11

Importação em blocos por IA

Explicação simples

É possível pedir à IA dezenas ou centenas de localidades e colá-las de uma vez, sem as introduzir uma a uma.

Explicação técnica · pronta a copiar

Formato preferido: CSV delimitado por ponto e vírgula, com cabeçalho nome;desambig;lon;lat;regiao;ativa. Também aceita TSV/JSON no Backstage preparado. País vem do cabeçalho, não do bloco. Coordenadas WGS84 decimais, longitude antes da latitude, ponto decimal. Até 200 registos por bloco. Pré-visualização, validação e identificação de possíveis duplicados antes de gravar. Nunca substituir localidades existentes automaticamente.

12

Qualidade das coordenadas

Explicação simples

As coordenadas devem representar bem cada localidade. Uma diferença até 1 km entre fontes pode ser aceite, mas nomes ambíguos exigem revisão.

Explicação técnica · pronta a copiar

Preferência operacional: OSM ou GeoNames; confirmar município pela CAOP quando disponível. 1 km é a tolerância de validação aceite pelo projeto, não uma garantia de precisão da fonte. Sedes de concelho não devem ser confundidas com centroides dos polígonos. Confirmar país, município e longitude/latitude antes de ativar.

13

Regiões e ilhas

Explicação simples

O jogo pode incluir ou excluir ilhas de acordo com a seleção do jogador.

Explicação técnica · pronta a copiar

Worker filtra regiao, incluindo 'continente' ou 'principal', e ilhas indicadas em POST /testa-ronda. No HTML PT há seleção de 'acores' e 'madeira'. Preservar os valores de regiao esperados pela implementação; não criar etiquetas incompatíveis sem atualizar Worker e dados.

14

Comunidade e identidade

Explicação simples

A comunidade e o jogo podem partilhar a identificação de um utilizador, mas não são a mesma funcionalidade.

Explicação técnica · pronta a copiar

Worker 'comunidade' gere autenticação/sessões e rotas do Testa-te. O HTML público envia sessao quando o jogador está autenticado. Algumas rotas antigas da comunidade e do ranking têm valores PT fixos; não presumir isolamento multi-país total. Antes de adaptar para DE, NL ou IE, auditar todos os filtros por pais.

15

Backstage: autenticação e permissões

Explicação simples

Só contas autorizadas entram no Backstage. O Owner dispõe de ferramentas administrativas adicionais.

Explicação técnica · pronta a copiar

Supabase Auth via createClient(SUPABASE_URL,SUPABASE_PUBLISHABLE_KEY), signInWithPassword e sessão persistente. A chave publishable é pública; a service role NÃO deve ser embutida no HTML. O separador Testa-te e este separador Mecânica são Owner-only na interface. Restrições reais de escrita devem ser impostas no Supabase.

16

Outros módulos do Backstage

Explicação simples

O Backstage também gere territórios, pedidos, empresas, categorias, edições, receitas, tráfego, impérios e histórico.

Explicação técnica · pronta a copiar

Páginas presentes no HTML: dashboard, requests, territories, editions, businesses, categories, revenue, traffic, empires, users, community, audit. O Backstage usa state e funções de renderização próprias por módulo. Tráfego indica explicitamente dados de demonstração e integração futura com analytics; não afirmar que é telemetria real. Consultar os nomes das tabelas e funções existentes antes de alterar módulos não relacionados.

17

Edições, territórios e pedidos

Explicação simples

Os territórios podem ser ocupados ou reservados e os pedidos passam por aprovação.

Explicação técnica · pronta a copiar

No Backstage há páginas requests e territories, estados pending/approved/rejected para pedidos e available/reserved/occupied para territórios. Edições incluem códigos e personalizações. Estas estruturas são independentes das localidades de public.povoacoes. Não reutilizar IDs de territórios como IDs de povoações.

18

Receitas e tráfego

Explicação simples

Receitas registam movimentos financeiros; tráfego mostra métricas de visitas quando houver fonte de dados.

Explicação técnica · pronta a copiar

A página Receitas distingue pagamentos/donativos e movimentos confirmados. A página Tráfego atual declara dados locais de demonstração e futura fonte Cloudflare. Não apresentar números simulados como reais nem modificar dados financeiros ao alterar o jogo.

19

Atualizações e cache

Explicação simples

Alterações administrativas não aparecem necessariamente no jogo no mesmo segundo.

Explicação técnica · pronta a copiar

Backstage Testa-te: consulta a cada 30 s quando aberto; módulo público de rankings preparado para atualização periódica. Worker: cache de localidades de até 10 min. Uma localidade recém-ativada pode demorar até expirar a cache a entrar nas rondas. Não chamar 'tempo real' absoluto a dados sujeitos a cache.

20

Como pedir alterações a outra IA

Explicação simples

Copia a ficha técnica do módulo pretendido e pede uma alteração específica, mantendo tudo o resto.

Explicação técnica · pronta a copiar

Instruções de segurança para a IA: trabalhar sobre o ficheiro atual completo; não reconstruir o site; preservar CSS, seletores, endpoints, autenticação e dados existentes; indicar ficheiros alterados, migrações SQL e passos de deploy; nunca inserir service_role ou segredos no browser; distinguir código existente de proposta; testar sintaxe e regressões; fazer alterações reversíveis.

Testa-te —

Localidades reais do Supabase, por país selecionado no cabeçalho. Consulta, edição, importação de blocos e rankings do jogo.

Por atualizar
Aguardando abertura do separador. É necessário instalar primeiro as funções SQL de administração.
Localidades registadas—No país selecionado
Ativas no jogo—Visíveis após atualização da cache
Inativas—Não entram nas novas rondas
Palpites realizados—Jogadas registadas no país

Adicionar localidades em bloco · copiar e colar da IA

Máximo 200 por bloco

O país é atribuído automaticamente a partir do cabeçalho. Cola CSV com ponto e vírgula ou tabulações, incluindo o cabeçalho, ou um array JSON. As coordenadas são decimais WGS84: longitude primeiro, latitude depois. Usa o botão Pré-visualizar antes de gravar.

Localidades do país

—
NomeMunicípio / desambig.RegiãoLongitudeLatitudeJogadasMédiaEstadoEditar
Abre este separador para carregar as localidades.

Top 20 · localidades mais acertadas

Acerto: até 10 km · mínimo 20 jogadas
A carregar…

Top 20 · localidades mais difíceis

Acerto: até 10 km · mínimo 20 jogadas
A carregar…

Atualiza automaticamente de 30 em 30 segundos enquanto este separador estiver aberto. Os rankings públicos usam estatísticas agregadas, sem dados pessoais.

Comunidade

Habitantes registados no site público: concelho, tipo de conta, liderança, cubo, pontos e atividade. Só o Owner vê esta página.

—
HabitanteConcelhoContaLíderCubo PontosSequênciaÚltimo loginRegisto Convidado porNovidadesEstadoAções

Histórico

Registo de quem alterou o quê. Em produção, este histórico deve ser imutável para utilizadores operacionais.