Native Shell
Native Shell은 모든 플랫폼의 앱 안에서 만들어지는 AI UI입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.