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.