Uma loja independente onde colaboradores gastam seus MeshCoins acumulados pela gamificação. Três formas de pagamento, painel admin completo e integração total com o ecossistema MeshApp.
Aplicação independente onde MeshCoins são consumidos. No futuro, acessada via SSO com domínio próprio store.meshapp.com.
Projetada como micro-frontend com deploy próprio. Fase atual: módulo interno no MeshApp. Fase futura: domínio separado com SSO via JWT compartilhado.
JWT compartilhado com claims de user_id, account_id, roles e level. Mesma chave pública para validação em ambas as aplicações.
Padrão: R$ 0,03 por MeshCoin (configurável pelo admin). Exemplo: 500 MC = R$ 15,00. Mínimo para pagamento misto: 100 MC.
Pagamento integralmente em MC. Débito direto do meshcoins_balance com consumo FIFO dos mais antigos. Itens com permite_meshcoins = true.
Pagamento integralmente em dinheiro via Pagar.me (cartão, Pix ou boleto). Apenas para itens com permite_real = true. Checkout transparente, sem redirect.
Parte em MC, parte em R$ via Pagar.me. Slider interativo para o usuário definir a proporção. Mínimo de 100 MC. Preview em tempo real do valor final.
O admin tem controle total sobre 22+ campos organizados em 6 grupos. Além do CRUD completo de categorias.
O admin cria e gerencia categorias com nome, ícone (Ant Design Icons), cor hex, ordem (drag & drop) e status ativo/inativo.
Três modos flexíveis para atender diferentes perfis de colaboradores.
permite_meshcoins = truepermite_real = truepermite_misto = trueTransparente (dentro da MeshStore, sem redirect)
Cartão de crédito, Pix (QR code), Boleto
PCI DSS via tokenização (cartão nunca toca nosso servidor)
Webhook do Pagar.me notifica quando pagamento é confirmado
| Item | MeshCoins | Real (R$) | Misto | Por quê? |
|---|---|---|---|---|
| Vale iFood R$100 | ✓ | ✗ | ✗ | Não faz sentido comprar vale com dinheiro |
| Blusa MeshApp | ✗ | ✓ | ✗ | Produto físico, apenas R$ |
| Spotify Premium | ✓ | ✗ | ✓ | MC puro ou completa com R$ |
| Curso Online R$200 | ✓ | ✓ | ✓ | Máxima flexibilidade |
Como evolução futura, propõe-se uma 4ª flag (permite_desconto_folha) que permite descontar o valor em R$ diretamente do salário do colaborador. Fluxo incluiria aprovação do gestor + RH, limite mensal configurável e exportação para o sistema de folha de pagamento.
Interface moderna com busca, filtros, carrossel de destaques e fluxo de resgate em 7 etapas.
Banner de destaques em carrossel, saldo de MC sempre visível no header, carrossel de categorias, grid responsivo (4 colunas desktop, 2 mobile), filtros por preço/nível/disponibilidade e busca full-text.
Imagem destaque 16:9, nome (2 linhas), descrição curta, preço MC e R$, badge de categoria colorido, indicador de estoque (vermelho se ≤ 3), badge de nível mínimo e ícone de pagamento misto.
Galeria de imagens (até 6), descrição rich text, tags, seletor de forma de pagamento (radio buttons), slider MC↔R$ para modo misto com preview em tempo real e botão de resgate com validações.
Se o resgate for rejeitado ou cancelado: os MeshCoins são devolvidos ao saldo. A devolução cria novos registros em gamification_meshcoin_expiry com a data de expiração original, e uma gamification_transaction de tipo STORE_REFUND para auditoria.
Dashboard com métricas em tempo real, CRUD completo de itens e fila de aprovação de resgates.
5 entidades TypeORM seguindo os padrões do MeshApp (UUID, timestamps, soft delete) + integração com entidades da gamificação.
(account_id, ativo, ordem_exibicao) em store_item — Listagem principal(category_id) em store_item — Filtro por categoria(item_id, tag) UNIQUE em store_item_tag — Tags únicas por item(user_id, item_id, created_at) em store_redemption — Cooldown e histórico(status) em store_redemption — Fila de aprovaçãoGIN(to_tsvector('portuguese', nome || descricao)) — Full-text search
MESHCOINS = 'meshcoins'
REAL = 'real'
MIXED = 'mixed'
PENDING •
APPROVED •
DELIVERED
REJECTED •
EXPIRED •
CANCELLED
MONTHLY = 'monthly'
QUARTERLY = 'quarterly'
UNLIMITED = 'unlimited'
A MeshStore não duplica dados. Ela referencia entidades existentes da gamificação via FK ou leitura direta.
| Operação na Store | Entidade da Gamificação | Ação |
|---|---|---|
| Verificar saldo | gamification_profile |
SELECT meshcoins_balance |
| Verificar nível | gamification_profile |
SELECT current_level |
| Debitar MC | gamification_profile |
UPDATE meshcoins_balance -= amount |
| Consumir FIFO | meshcoin_expiry |
UPDATE remaining -= amount (ORDER BY earned_at ASC) |
| Registrar transação | gamification_transaction |
INSERT type: STORE_REDEMPTION |
| Devolver MC (rejeição) | gamification_profile |
UPDATE meshcoins_balance += amount |
| Recriar FIFO (devolução) | meshcoin_expiry |
INSERT com expires_at original |
| Registrar refund | gamification_transaction |
INSERT type: STORE_REFUND |
store_redemption.user_id → FK para user.id (tabela de usuários do MeshApp)gamification_profile — relação via user_idstore_* no mesmo banco com prefixo separadoEstratégia de migração gradual: de módulo interno para aplicação independente com SSO.
store_*)/storestore.meshapp.comstore_* no mesmo bancostore.meshapp.comstore_* para banco próprio. 100% via API
1. Usuário acessa store.meshapp.com
2. MeshStore verifica JWT no cookie/header
3. Se não: redireciona para app.meshapp.com/auth/sso?redirect=store.meshapp.com
4. MeshApp autentica e gera JWT com claims: sub, account_id, roles, level, aud: ["meshapp","meshstore"]
5. Redireciona de volta — MeshStore valida com mesma chave pública
6. Sessão estabelecida
6 fases, estimativa de 10-14 semanas com 2 devs (1 back + 1 front).
A gamificação já gera MeshCoins. Só falta dar destino a eles. A MeshStore fecha o ciclo motivacional.