Pular para o conteúdo
supastack
Explorar a documentação
WebNext.js

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /pt/docs/web/theming.md (or send Accept: text/markdown).

Temas de produto

Personaliza o chrome de produto do kit para o teu SaaS — sem modificar o tema de marca do marketing.

Instalação e configuração

Antes de qualquer etapa, leia Antes de começar e Noções básicas sobre terminal. Estas instruções presumem que você abriu o monorepo supastack completo no VS Code; sua raiz package.json marca a raiz do repositório. Nos comandos pnpm, um pacote de espaço de trabalho é um aplicativo ou uma pasta de código compartilhado; no produto, um espaço de trabalho é o contêiner de dados e o limite de segurança de uma equipe. corepack pnpm --filter ... seleciona um pacote do monorepo enquanto os comandos são executados a partir de sua raiz. Se você abriu apenas uma pasta móvel ou desktop sincronizada, ela não contém o back-end da Web, a configuração do Docker ou os scripts raiz: execute o back-end deste monorepo ou de um servidor hospedado acessível e use os próprios scripts da pasta da plataforma. Uma variável de ambiente é uma configuração nomeada armazenada em um arquivo .env local ou no painel de hospedagem; reinicie o aplicativo relevante após alterá-lo e mantenha os segredos do servidor fora dos valores NEXT_PUBLIC_ e EXPO_PUBLIC_.

1. No VS Code, abra apps/web/app/app-theme.css para telas de produtos conectados e apps/web/src/theme/catalog.ts para adicionar um pacote de cores. Não edite apps/web/app/theme.css para cores do produto; ele controla a marca de marketing.

2. Na raiz do repositório, execute corepack pnpm --filter @supastack/web dev e visite http://localhost:3000/settings/appearance.

3. Altere um token em sua filial local e atualize a visualização. Esperado: os controles do painel são atualizados enquanto a página inicial mantém o tema de marketing selecionado.

A marca de marketing e o tema de produto são ficheiros separados. Edita apps/web/app/app-theme.css para o chrome de dashboard, auth, settings, billing, chat e org. Adiciona pacotes de cores em apps/web/src/theme/catalog.ts. Estende os eixos densidade, raio, fonte e layout em apps/web/src/theme/presets.ts mais as regras html[data-*] correspondentes em app-theme.css. Escolhe a identidade de marketing em apps/web/src/theme/marketing-theme.ts (MARKETING_THEME_MODE: locked | inherit | um id de pack) em vez de editar apps/web/app/theme.css — o seu bloqueio via .marketing-theme:not(.app-theme):not([data-theme]):not([data-marketing-theme="inherit"]) mantém a marca Obsidian da página inicial do supastack por defeito.

Em tempo de execução, Configurações → Aparência → ThemePicker armazena cor, densidade, raio, fonte e layout em cookie do navegador + localStorage para que theme-boot.ts restaure todos os eixos antes da primeira pintura, e sincroniza o pacote completo de aparência do usuário conectado entre navegadores por meio de user_appearance (GET/PUT /api/account/appearance). A mesma página monta a galeria de UI do kit para que pacotes e predefinições atualizem ao vivo botões, campos, cartões, selos e diálogos. Detalhes de design e exemplos prontos para copiar estão em docs/design/kit-product-theme.md e docs/design/kit-ui-gallery.md.

/* Edit product chrome here — not theme.css */
.app-theme {
  --radius-card: 14px;
  background: var(--page);
  color: var(--text);
}
.app-theme .button-primary {
  background: var(--accent);
  color: var(--accent-ink);
}

/* catalog.ts — append a ThemeDefinition with every THEME_TOKEN_NAMES entry */
{
  id: "coral",
  name: "Coral",
  colorScheme: "light",
  tokens: { "--page": "#fff7f4", "--accent": "#e06b4f" /* …full token set… */ }
}

Comandos para copiar

Siga os comentários para ver em qual pasta um comando é executado. Se dois terminais estiverem rotulados, abra duas janelas de terminal e mantenha o primeiro comando em execução enquanto usa o segundo.

corepack pnpm --filter @supastack/web dev

# In a second terminal, after changing a theme token:
corepack pnpm test -- apps/web/src/theme/contrast.test.ts

Fluxo de implementação

Prefere var(--page|--section|--raised|--text|--muted|--border|--accent|…) nos consumidores da app (app-theme.css, aliases de globals.css, rotas WorkspaceShell). Não reintroduzas shells teal/pálidos nem hardcodes hex Obsidian na UI de produto.

Ao adicionar um pack, mantém contrast.test.ts verde. Ao adicionar um id de preset, atualiza presets.ts e os remaps html[data-density|data-radius|data-font|data-layout] em app-theme.css para que ThemePicker e o boot anti-FOUC fiquem alinhados.

Preserva a geometria de marca de quatro mosaicos partilhada em marketing/brand-geometry.ts para superfícies de marketing. As marcas de cabeçalho ficam transparentes; os assets de favicon e ícone de app mantêm o fundo negro arredondado. Páginas puramente de marketing ficam Obsidian enquanto MARKETING_THEME_MODE for "locked" (o defeito do kit); os produtos podem fixar outro pack ou herdar a escolha do visitante.

Verificação e resolução de problemas

Se uma mudança de cor afetar a página inicial de marketing, verifique se você editou app-theme.css e revise apps/web/src/theme/marketing-theme.ts.. Se o texto ficar difícil de ler, restaure o valor anterior e execute corepack pnpm test -- apps/web/src/theme/contrast.test.ts a partir da raiz antes de tentar novamente.

Depois de modificar tokens ou packs de tema do kit, verifica que ThemePicker em /settings/appearance atualiza a galeria de UI do kit mais /dashboard, /auth, /billing, /chat e os shells de org. Confirma que / permanece no bloqueio Obsidian de marketing (a menos que MARKETING_THEME_MODE diga outra coisa). Corre os contratos unitários de tema (catalog, presets, contrast, theme-ownership, kit-ui-gallery) e o Playwright application-theme quando disponível. Verifica foco de teclado, contraste, 320 px e movimento reduzido.

Perguntas frequentes

14 perguntas

O que é o supastack?

O supastack é uma base modular para construir produtos SaaS com IA. Reúne a infraestrutura comum para que possas concentrar-te nas funcionalidades próprias do teu produto.

Suporta web e mobile?

Sim. O supastack inclui apps Next.js e Expo como pontos de partida para experiências web e mobile.

Que autenticação está incluída?

O Better Auth cobre email/palavra-passe, OTP e login social. Os workspaces pessoais são aprovisionados com a conta para que os registos fiquem delimitados desde o primeiro dia.

Como é suportada a IA?

O supastack inclui IA multi-fornecedor configurável, registo de utilização, orçamentos e suporte encriptado de chaves próprias (BYOK).

Como são geridas as subscrições?

Para produtos construídos sobre o kit, a faturação Stripe, as subscrições e as permissões formam a base do acesso pago. Os segredos de fornecedor ficam no servidor.

Onde vive o código próprio do meu produto?

As funcionalidades próprias do produto ficam num codebase separado, enquanto o produto configura e integra os módulos base do supastack.

Como funciona o preço do supastack?

O kit é uma compra única com atualizações vitalícias: Uma framework por 249 $ (preço de lançamento temporário — 100 $ de desconto sobre o preço normal de 349 $) ou Todas as frameworks (Next.js, iOS, Android) por 499 $ (preço de lançamento temporário — 100 $ de desconto sobre o preço normal de 599 $), mais 75 $ por lugar de programador adicional. Sem subscrição do kit. O checkout neste site entrega a tua chave de licença por email, com acesso ao repo por convite GitHub.

Como é que os workspaces delimitam os meus dados?

Os registos do utilizador são delimitados por workspaceId. Identidade, permissões, utilização de IA, eventos de faturação e entradas de auditoria ficam dentro do limite do workspace pessoal.

Como funcionam os jobs em segundo plano?

O Trigger.dev é o runtime de jobs explícito. O contrato JobRunner só promete enqueue, status e cancel — a semântica de workflow permanece específica e explícita do Trigger.dev.

Como difere o email da divulgação?

O email transacional cobre fluxos de produto como avisos de conclusão de tarefas. A divulgação fria e as campanhas pertencem ao próprio produto, fora do módulo de email deste kit.

Como funcionam as compras no aplicativo móvel?

O aplicativo móvel inclui compras nativas e restauração via RevenueCat, com acesso verificado pelo servidor. Configure as contas das lojas e conclua os testes em dispositivos antes de publicar. A cobrança web permanece separada.

Onde residem as chaves dos fornecedores de IA?

As credenciais BYOK são encriptadas e ficam no servidor. As chaves são higienizadas nos logs; a utilização e os orçamentos ficam visíveis ao nível do workspace.

Quais métodos de pagamento o checkout aceita?

O checkout hospedado na Stripe aceita cartões e também pode oferecer Alipay e WeChat Pay quando essas carteiras estiverem ativadas na conta Stripe — útil para compradores na China. As autorizações de carteira são confirmadas de forma assíncrona, então a página da licença é atualizada assim que o pagamento é liquidado.

Posso solicitar um reembolso?

Depois de obter acesso ao repositório, o supastack é seu para sempre, portanto não pode ser reembolsado. Mas fique tranquilo: você recebe o código-fonte completo com atualizações vitalícias para criar e lançar produtos ilimitados para você ou seus clientes. Você apenas não pode revender o código nem redistribuir o repositório como starter kit ou modelo.

PT
Tema