Regras do produto — Mural

Product rules — Mural

Reglas del producto — Mural

← Voltar ao painel ← Back to panel ← Volver al panel

Referência operacional para a equipe. Consulte sempre que houver dúvida sobre usuários, planos, dispositivos, privacidade ou o papel do painel administrativo.

1. O que é o Mural

  • App nativo (Capacitor) para iPad: relógio, clima, fotos locais e câmeras ao vivo.
  • Público-alvo: tablets antigos (mínimo iPadOS 15).
  • Fotos não saem do aparelho — não vão para Supabase nem para admins.

2. Tabelas principais

TabelaFunção
admins Quem pode entrar no /admin (e-mail + senha).
profiles Usuários do app (nome, e-mail, idioma, etc.).
licenses Une usuário + dispositivo + plano (user_id + device_uuid + plan).

A mesma conta Auth pode estar em admins e em profiles ao mesmo tempo (ex.: Sergio admin + usuário de teste). licenses só existe para quem tem profile.

3. Como o usuário chega até nós

  1. Baixa o app na App Store (ou Google Play, quando publicado).
  2. Abre no iPad — não é necessário criar o usuário no painel admin.
  3. O aparelho gera um ID de dispositivo local.
  4. Conta: e-mail + código OTP em Configurações → Minha Conta.
  5. Premium: compra na loja (RevenueCat) → entitlement no aparelho + consolidação no Supabase via webhook.

O painel admin é só interno (SER). Clientes não usam admin.html.

4. Cadastro e uso sem conta

  • O app abre e funciona sem login (relógio, clima, slideshow).
  • Plano Free: até 50 fotos por dispositivo.
  • Cortesia: fotos ilimitadas, concedida somente pelo admin (não vem da loja).
  • Login (OTP) é necessário para conta, sync de licença e fluxo Premium completo.
  • Vários profiles podem compartilhar o mesmo e-mail no app (seletor de conta). No Auth do Supabase o e-mail continua único.

5. Planos e licença

PlanoLimiteComo obtém
Free Até 50 fotos Uso padrão no dispositivo
Cortesia Fotos ilimitadas Somente admin. No banco: premium + nota [CORTESIA] (ou enum complimentary).
Premium Fotos ilimitadas Assinatura App Store / Play (RevenueCat)
  • Multi-dispositivo: a mesma conta pode ter vários aparelhos; cada um tem sua linha em licenses (unique(user_id, device_uuid)), herdando o plano da conta.
  • Não há exclusividade 1 aparelho por conta (takeover removido).
  • Preços vêm das lojas, não do admin.
  • Offline: licença em cache por até 7 dias.
  • O frontend nunca usa service_role nem decide Premium só com localStorage.

6. Papel do painel administrativo

  • Listar usuários (profiles), planos e dispositivos.
  • Ajustar licença (Free / Premium / Cortesia).
  • Criar outros administradores (admins).
  • Trocar senha do admin logado (botão no topbar).
  • Reset de vínculo de dispositivo (quando necessário no suporte).

Não use o admin para: cadastrar cada download da loja, ver fotos dos clientes, ou substituir a App Store / RevenueCat.

7. Privacidade

  • Fotos e frames de câmera não sobem para servidor.
  • Câmera no modo noturno: só luminosidade — sem gravar/enviar frames.
  • Dados que podem sair do aparelho: e-mail, user ID, device ID, histórico de compras.
  • Admins não acessam a galeria do usuário.

8. iOS / publicação

  • App somente iPad (sem iPhone).
  • Deployment target: iOS 15.0 (ex.: iPadOS 15.8.8).
  • TestFlight exige iOS 16+ — em iPad 15.x use IPA + Sideloadly / Ad Hoc.

9. Acesso admin (equipe)

  • Login: e-mail + senha do Supabase Auth (não a senha do Gmail).
  • O usuário precisa existir em auth.users e em public.admins.
  • Se a mesma pessoa testa o app, ela também tem linha em profiles / licenses.
  • Troca de senha: no painel, botão Trocar senha.
  • Após criar usuário no Auth, rode:

insert into public.admins (id, email) select id, email from auth.users where email = '…' on conflict (id) do nothing;

10. Checklist rápido de suporte

  1. App abre? → rede / iPadOS ≥ 15.
  2. Fotos limitadas? → Free (50) ou Premium/Cortesia não ativo — restore / login OTP / conferir no admin.
  3. Não entra no admin? → senha Auth + linha em admins.
  4. Cliente em 2 iPads? → permitido; cada aparelho sincroniza sua licença com a mesma conta.
  5. Badge do plano no app: toque no nome/badge para atualizar a licença.

Operational reference for the team. Use whenever there is doubt about users, plans, devices, privacy, or the admin panel role.

1. What Mural is

  • Native app (Capacitor) for iPad: clock, weather, local photos, and live cameras.
  • Target: older tablets (minimum iPadOS 15).
  • Photos never leave the device — not to Supabase, not to admins.

2. Main tables

TableRole
admins Who can sign in to /admin (email + password).
profiles App users (name, email, language, etc.).
licenses Links user + device + plan (user_id + device_uuid + plan).

The same Auth account may exist in both admins and profiles (e.g. admin who also tests the app). licenses only exist for profiles.

3. How users reach us

  1. Download from the App Store (or Google Play when published).
  2. Open on iPad — no need to create the user in the admin panel.
  3. The device generates a local device ID.
  4. Account: email + OTP code under Settings → My Account.
  5. Premium: store purchase (RevenueCat) → on-device entitlement + Supabase webhook consolidation.

The admin panel is internal only. Customers never use admin.html.

4. Sign-up and guest use

  • The app opens and works without login (clock, weather, slideshow).
  • Free plan: up to 50 photos per device.
  • Complimentary: unlimited photos, granted only by admin (not from the store).
  • OTP login is required for account, license sync, and full Premium flow.
  • Multiple profiles may share the same email in the app (account picker). Supabase Auth emails remain unique.

5. Plans and license

PlanLimitHow obtained
Free Up to 50 photos Default on device
Complimentary Unlimited photos Admin only. In DB: premium + note [CORTESIA] (or complimentary enum).
Premium Unlimited photos App Store / Play subscription (RevenueCat)
  • Multi-device: one account may have several devices; each has its own licenses row (unique(user_id, device_uuid)) and inherits the account plan.
  • No 1-device exclusivity / takeover.
  • Prices come from the stores, not admin.
  • Offline: cached license for up to 7 days.
  • Frontend never uses service_role or decides Premium from localStorage alone.

6. Admin panel role

  • List users (profiles), plans, and devices.
  • Adjust license (Free / Premium / Complimentary).
  • Create other admins (admins).
  • Change the logged-in admin password (topbar button).
  • Reset device binding when support needs it.

Do not use admin to: register every store download, view customer photos, or replace App Store / RevenueCat.

7. Privacy

  • Photos and camera frames do not upload to the server.
  • Night-mode camera: brightness only — no frame capture/upload.
  • Data that may leave the device: email, user ID, device ID, purchase history.
  • Admins cannot access the user gallery.

8. iOS / publishing

  • iPad only (no iPhone).
  • Deployment target: iOS 15.0 (e.g. iPadOS 15.8.8).
  • TestFlight needs iOS 16+ — on iPad 15.x use IPA + Sideloadly / Ad Hoc.

9. Admin access (team)

  • Login: email + Supabase Auth password (not the Gmail password).
  • User must exist in auth.users and public.admins.
  • If the same person tests the app, they also have profiles / licenses rows.
  • Password change: panel button Change password.
  • After creating an Auth user, run:

insert into public.admins (id, email) select id, email from auth.users where email = '…' on conflict (id) do nothing;

10. Quick support checklist

  1. App opens? → network / iPadOS ≥ 15.
  2. Photo limit? → Free (50) or Premium/Complimentary not active — restore / OTP login / check admin.
  3. Cannot enter admin? → Auth password + row in admins.
  4. Customer on 2 iPads? → allowed; each device syncs its license under the same account.
  5. Plan badge in app: tap name/badge to refresh the license.

Referencia operativa para el equipo. Consúltala cuando haya dudas sobre usuarios, planes, dispositivos, privacidad o el rol del panel administrativo.

1. Qué es Mural

  • App nativa (Capacitor) para iPad: reloj, clima, fotos locales y cámaras en vivo.
  • Público: tablets antiguos (mínimo iPadOS 15).
  • Las fotos no salen del aparato — ni a Supabase ni a los admins.

2. Tablas principales

TablaFunción
admins Quién puede entrar a /admin (correo + contraseña).
profiles Usuarios de la app (nombre, correo, idioma, etc.).
licenses Une usuario + dispositivo + plan (user_id + device_uuid + plan).

La misma cuenta Auth puede estar en admins y en profiles (p. ej. admin que también prueba la app). licenses solo existe para profiles.

3. Cómo llega el usuario

  1. Descarga en la App Store (o Google Play, cuando esté publicada).
  2. Abre en el iPad — no hace falta crearlo en el panel admin.
  3. El aparato genera un ID de dispositivo local.
  4. Cuenta: correo + código OTP en Ajustes → Mi Cuenta.
  5. Premium: compra en la tienda (RevenueCat) → entitlement en el aparato + webhook en Supabase.

El panel admin es solo interno. Los clientes no usan admin.html.

4. Registro y uso sin cuenta

  • La app abre y funciona sin login (reloj, clima, slideshow).
  • Plan Free: hasta 50 fotos por dispositivo.
  • Cortesía: fotos ilimitadas, solo la concede el admin (no viene de la tienda).
  • El login OTP es necesario para cuenta, sync de licencia y flujo Premium completo.
  • Varios profiles pueden compartir el mismo correo en la app (selector). En Auth de Supabase el correo sigue siendo único.

5. Planes y licencia

PlanLímiteCómo se obtiene
Free Hasta 50 fotos Uso estándar en el dispositivo
Cortesía Fotos ilimitadas Solo admin. En DB: premium + nota [CORTESIA] (o enum complimentary).
Premium Fotos ilimitadas Suscripción App Store / Play (RevenueCat)
  • Multi-dispositivo: la misma cuenta puede tener varios aparatos; cada uno tiene su fila en licenses (unique(user_id, device_uuid)) e hereda el plan de la cuenta.
  • No hay exclusividad de 1 aparato por cuenta (takeover eliminado).
  • Los precios vienen de las tiendas, no del admin.
  • Offline: licencia en caché hasta 7 días.
  • El frontend nunca usa service_role ni decide Premium solo con localStorage.

6. Rol del panel administrativo

  • Listar usuarios (profiles), planes y dispositivos.
  • Ajustar licencia (Free / Premium / Cortesía).
  • Crear otros administradores (admins).
  • Cambiar la contraseña del admin conectado (botón en el topbar).
  • Reset de vínculo de dispositivo cuando el soporte lo necesite.

No uses el admin para: registrar cada descarga de la tienda, ver fotos de clientes o sustituir App Store / RevenueCat.

7. Privacidad

  • Fotos y frames de cámara no suben al servidor.
  • Cámara en modo nocturno: solo luminosidad — sin grabar/enviar frames.
  • Datos que pueden salir del aparato: correo, user ID, device ID, historial de compras.
  • Los admins no acceden a la galería del usuario.

8. iOS / publicación

  • App solo iPad (sin iPhone).
  • Deployment target: iOS 15.0 (p. ej. iPadOS 15.8.8).
  • TestFlight exige iOS 16+ — en iPad 15.x usa IPA + Sideloadly / Ad Hoc.

9. Acceso admin (equipo)

  • Login: correo + contraseña de Supabase Auth (no la del Gmail).
  • El usuario debe existir en auth.users y en public.admins.
  • Si la misma persona prueba la app, también tiene filas en profiles / licenses.
  • Cambio de contraseña: botón Cambiar contraseña en el panel.
  • Tras crear usuario en Auth, ejecuta:

insert into public.admins (id, email) select id, email from auth.users where email = '…' on conflict (id) do nothing;

10. Checklist rápido de soporte

  1. ¿Abre la app? → red / iPadOS ≥ 15.
  2. ¿Fotos limitadas? → Free (50) o Premium/Cortesía inactivo — restore / OTP / revisar admin.
  3. ¿No entra al admin? → contraseña Auth + fila en admins.
  4. ¿Cliente en 2 iPads? → permitido; cada aparato sincroniza su licencia con la misma cuenta.
  5. Badge del plan en la app: toca el nombre/badge para actualizar la licencia.