Native Shell
Native Shell:AI 生成的 UI,在你的应用中原生呈现,覆盖每个平台。iOS、Android、macOS、Windows 与 Linux 上的应用、GPUI 应用与网页在运行时加载已签名、沙箱隔离的 TSX 模块并绘制 th
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Site público do Persisty: Home, Preços, Download, Docs, Changelog, conta do Persisty Cloud e páginas de privacidade, segurança e termos, em português (padrão), inglês e espanhol.
Next.js 16 (App Router) com next-intl, publicado na Vercel. As páginas são estáticas; a conta roda no navegador contra o Supabase do Persisty Cloud.
pnpm install
pnpm dev # http://localhost:3000
pnpm test # Vitest: mensagens, preços, conta, conteúdo, rotas de idioma
pnpm lint # ESLint + TypeScript
pnpm build
O pnpm dev só enxerga arquivos de mensagens que existiam quando ele subiu: ao criar um namespace novo em messages/<idioma>/, reinicie o servidor.
| O quê | Onde |
|---|---|
| Textos da interface (3 idiomas) | messages/<idioma>/<namespace>.json, lista em src/i18n/messages.ts |
| Docs | content/docs/<idioma>/<slug>.md (mesmos slugs nos 3 idiomas) |
| Changelog | content/changelog/<idioma>/<data>-<id>.md |
| Privacidade, segurança, termos | content/legal/<idioma>/*.md ({{contact}} vira o e-mail de contato) |
| Planos e preços | src/lib/plans.ts |
| Liberar um download | src/lib/releases.ts (status: "available", url, version) |
| Assinatura (Stripe) | subscribe() em src/lib/site.ts, hoje sem ação |
| Tokens visuais | src/styles/tokens.css, copiados de packages/design-tokens do app |
Os testes garantem que os três idiomas têm as mesmas chaves, as mesmas Docs e as mesmas entradas de Changelog.
Veja .env.example. Sem nenhuma variável o site funciona com os valores públicos do Persisty Cloud.
scripts/e2e/account.mjs entra pelo formulário real do site com uma conta descartável do Persisty Cloud e apaga a conta no fim. O envio do e-mail é o único passo simulado (o código vem da API admin). Precisa da chave secreta do projeto só no ambiente:
SECRET=$(supabase projects api-keys --project-ref ytmpopebhdtnucdznfsz --reveal -o json | …) \
node scripts/e2e/account.mjs http://localhost:3000 /tmp
scripts/release/announce.mjs manda o e-mail de uma versão nova para quem ligou o aviso (notify_release nos metadados do usuário), no idioma em que o site gravou o aviso (locale; sem ele, português). Só com ok do usuário, e só por pedido: nada é automático.
SECRET=… RESEND_API_KEY=… node scripts/release/announce.mjs 0.8.0 # conta e mostra os e-mails mascarados; não envia
RESEND_API_KEY=… node scripts/release/announce.mjs 0.8.0 --test # um por idioma para [email protected]
SECRET=… RESEND_API_KEY=… node scripts/release/announce.mjs 0.8.0 --send # lotes de 100, até 100 por dia (--skip retoma)
O e-mail do código de acesso sai pelo Resend ("Persisty [email protected]", domínio verificado na região de São Paulo), configurado no Supabase pela integração do Resend em 2026-10-22. No plano gratuito do Resend o teto é de 100 e-mails por dia; o Supabase limita a 25 por hora.
NEXT_PUBLIC_CONTACT_EMAIL.src/data/releases.json, escrito pelo passo "publicar" do app (scripts/release/publish.mjs), nunca à mão. Download, Todas as versões e /download/latest/<mac|windows|linux> saem dele.