Native Shell
Native Shell: AI-generated UI, native in your app, on every platform. Apps on iOS, Android, macOS, Windows and Linux, GPUI apps and web pages load signed, sandboxed TSX modules at run time and draw th
Claude Code and Codex sessions that come back after a crash, a place for every project, and accounts that take turns on their own.
Developer toolsTypeScript · CSSGitHub @abaladOnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.