Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
Translation pending
SISTEMA DE GESTÃO LEADS STRONIX ACADEMIA
Translation pending
BusinessJavaScript · CSSGitHub @johnnychavesOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
STRONILEAD — CRM de leads para academias SaaS multi-tenant de gestão de leads (do lead à matrícula): pipeline Kanban, meta diária, agendamentos, ficha do lead com timeline e configurações por academia. Identidade visual STRONILEAD (azul #2B59FF + laranja #FF6A2B, Space Grotesk nos títulos, Geist no corpo).Read the full README ↗
SaaS multi-tenant de gestão de leads (do lead à matrícula): pipeline Kanban,
meta diária, agendamentos, ficha do lead com timeline e configurações por
academia. Identidade visual STRONILEAD (azul #2B59FF + laranja #FF6A2B,
Space Grotesk nos títulos, Geist no corpo).
src/App.jsx. Cada tela tem endereço próprio, sem <Routes>:
a tabela de telas e a decisão de rota moram em src/lib/routes.js.api/ (Firebase Admin SDK).main). Regras do Firestore são
publicadas manualmente no console do Firebase.Cada academia é um tenant identificado por um slug (ex.: ironfit). O
isolamento é por custom claim no token do Firebase Auth — não por URL:
tenantId no token. O app resolve o tenant no login
(onAuthStateChanged) e usa appId = tenantId no path dos dados:
artifacts/{tenantId}/public/data/{coleção}.inTenant(appId) exige
request.auth.token.tenantId == appId. Não há vazamento entre tenants mesmo
com acesso direto ao Firestore.superAdmin: true e gerencia
todas as academias pela tela "Organizações".STRONILEAD (super-admin · claim superAdmin:true)
└── Tenant: Academia A (slug: academia-a)
├── Admin: [email protected] (claim tenantId=academia-a, role=admin)
│ ├── Consultor: [email protected] (role=consultant — vê só os próprios leads)
│ └── Consultor: [email protected]
└── Tenant: Academia B (slug: academia-b)
└── Admin: [email protected]
└── Consultor: [email protected]
api/ Funções serverless (Vercel) com Firebase Admin SDK
_firebaseAdmin.js Init do Admin + verifyRequest (verifica ID token)
_auth.js isTenantAdmin + veredito de tenancy do alvo pelo claim
(src/lib/tenantGuard.js) — nunca pelo doc de usuário
_tenantPrivate.js Perfil/WhatsApp do dono em /tenants/{id}/private/profile
(fora do doc raiz, que todo membro lê no login)
provision-tenant.js [super-admin] POST cria tenant+admin+seed · GET lista
tenant-status.js [super-admin] POST suspende/reativa + revoga tokens
invite-create.js [admin] cria convite (/tenants/{id}/invites)
invite-accept.js [público] aceita convite → cria conta + claim
admin-users.js [admin] cria, exclui, troca senha, e-mail e papel da equipe
... lista completa e fronteiras em docs/architecture.md
scripts/ Utilitários Admin (rodar fora do app)
set-super-admin.js Define claim superAdmin num usuário
register-tenant.js Registra um tenant legado na coleção `tenants`
backfill-tenant-claims.js Claim tenantId nos usuários DE UMA academia
(`<tenantId>` obrigatório; simula sem `--apply`)
migrate-tenant-private.js Move perfil/WhatsApp do dono para o subdoc privado
`/tenants/{id}/private/profile` (simula sem `--apply`)
src/
App.jsx Casca do app: login, menu, decisão de rota e telas
lib/routes.js Endereço de cada tela (tabela, leitura, links, decisão)
lib/tenantSlug.js Formato e palavras reservadas do identificador da academia
lib/appShell.js O que a casca do App tira do endereço e da sessão
lib/ firebase.js, leads.js, funnels.js, dates.js, constants.js, auth.js
firestore.rules Regras de isolamento por tenant (publicar manual)
npm install.env.example → .env.local e preencha (ver seção de variáveis).
O frontend funciona sem env (cai no projeto crm-stronix); a pasta api/
precisa das credenciais Admin para rodar localmente (vercel dev).npm run dev (Vite) — ou vercel dev para servir o front + as funções api/..env.example)VITE_FIREBASE_* — opcional (há fallback).FIREBASE_ADMIN_PROJECT_ID, FIREBASE_ADMIN_CLIENT_EMAIL,
FIREBASE_ADMIN_PRIVATE_KEY. No Vercel, configure em Environment Variables.Crie/escolha um usuário no Firebase Auth e defina o claim superAdmin:
FIREBASE_ADMIN_PROJECT_ID=... FIREBASE_ADMIN_CLIENT_EMAIL=... FIREBASE_ADMIN_PRIVATE_KEY="..." \
node scripts/set-super-admin.js [email protected]
Faça logout/login no app para o token pegar o claim. Você verá a aba "Organizações" no menu.
Pela UI (recomendado): logado como super-admin → Organizações → Nova
organização. Preencha nome, slug, dados do admin, plano e dias de teste.
O endpoint POST /api/provision-tenant:
[a-z0-9-], começando e terminando
com letra ou número, e fora das palavras reservadas de src/lib/tenantSlug.js,
que são as telas do app).tenantId.tenants/{slug} (status, plano, trial, settings).stronix_users.O admin acessa o app com o e-mail/senha definidos. 'Venda'/'Perda' são status
sentinela de conversão/perda — não renomeie.
POST /api/invite-create grava o convite em tenants/{id}/invites (token UUID,
validade 7 dias) e devolve um link: /?invite=<token>&t=<tenantId>.POST /api/invite-accept): conta criada, claim tenantId setado, login
automático.POST /api/tenant-status).
Ao suspender, os refresh tokens dos usuários são revogados (sessões caem).tenants/{id} no login: status: 'suspended' → tela de suspensão;
status: 'trial' com trialEndsAt vencido → tela de teste encerrado.main → Vercel faz o deploy de produção
(https://crm-stronix.vercel.app/).firestore.rules
no console do Firebase
(não via CLI). As mudanças de regra só valem após publicar.npm run dev — servidor de desenvolvimento (Vite)npm run build — build de produçãonpm run lint — ESLintnpm test — testes (Vitest)npm run verificar:sentry — confere que chave e telefone não vão ao Sentrynpm run preview — preview do buildMais documentação: PRODUCT.md (produto), AGENTS.md (comandos e acordos de
trabalho), docs/architecture.md, docs/design.md, docs/onboarding.md,
docs/quality.md e docs/setup.md.