AutoCua
macOS·Windows·Linux·브라우저·iOS·Android용 컴퓨터 사용 에이전트(CUA)로 자동화
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Plataforma de estudos com Pomodoro, registro real de horas por registro e tema, XP por ciclo concluído e (nas próximas etapas) ranking competitivo com assinatura.
Planejamento completo: docs/01-planejamento.md.
Requisitos: Node.js 22+ (testado com Node 24). Não precisa de Docker nem de banco instalado: em desenvolvimento o Postgres roda embutido (PGlite) e grava em .data/pglite.
npm install
npm run dev
Abra http://localhost:3000, crie uma conta, cadastre um registro e um tema e comece a estudar.
npm run dev..data/pglite..data/backups/ (uma por dia, as 5 últimas). Para restaurar, pare o servidor, renomeie .data/pglite e rode node -e "const {PGlite}=require('@electric-sql/pglite');const fs=require('fs');(async()=>{const db=new PGlite('.data/pglite',{loadDataDir:new Blob([fs.readFileSync(process.argv[1])])});await db.waitReady;await db.close()})()" .data/backups/ARQUIVO.tar.gz.npm run build com o npm run dev ligado usando o banco local: o PGlite aceita um processo por vez. Em produção o banco é um Postgres de verdade e isso não se aplica.src/i18n/dictionaries/; mensagens de erro do servidor em src/i18n/errors.ts. Para um idioma novo, crie o dicionário e inclua-o em src/i18n/config.ts.public/sounds/alarm.mp3. Para trocar, substitua o arquivo (upload pelo admin virá na Etapa 7).npm run premium:grant -- [email protected] --days 30
Revogar: acrescente --revoke. Também exige o servidor parado no PGlite.
Depois de criar sua conta, com o servidor parado (o PGlite aceita um processo por vez):
npm run admin:grant -- [email protected]
O admin analisa em /admin/organizacoes os cadastros de instituições/empresas que não passaram em todas as checagens automáticas.
Para ver todas as telas com dados (alunos aceitos e pendentes, professor-gestor, instituição e empresa verificadas, funcionários, pessoas sem vínculo, amigos, projetos e 6 semanas de histórico), com o servidor parado:
npm run demo:seed
As contas usam o domínio @focus.demo; a senha e a lista com o papel de cada uma ficam em data/demo/CONTAS-DEMO.md (fora do Git). npm run demo:seed -- --reset apaga as contas de demonstração e recria.
O catálogo já nasce com uma base curada (escola, vestibular/ENEM e faculdade). Para incluir a Tabela de Áreas do Conhecimento do CNPq/CAPES (áreas, subáreas e especialidades), com o servidor parado:
npm run catalog:import-cnpq -- data/cnpq/tabela-areas-2022.doc
Use --dry-run para só conferir a leitura. Rodar de novo não duplica temas.
Com CNPJ_API_KEY no .env.local, o cadastro de organizações usa a API comercial da CNPJá; sem a chave, a API pública (com limite por minuto). Para conferir a chave sem exibi-la:
node --env-file=.env.local scripts/check-cnpja.mjs
npm test
Rodam contra um Postgres real em memória (PGlite), com relógio simulado. Hoje são 135 testes em 18 arquivos.
| # | Cenário obrigatório | Status |
|---|---|---|
| 1 | Sessão de 30 min concede 30 XP | ✅ automatizado |
| 2 | Sessão de 37 min concede 37 XP | ✅ automatizado |
| 3 | Excedente contabilizado corretamente (sem XP extra) | ✅ automatizado |
| 4 | Intervalo não conta como estudo | ✅ automatizado |
| 5 | Intervalo excedido aplica no máximo uma penalidade | ✅ automatizado |
| 6 | Intervalo dentro da tolerância não penaliza | ✅ automatizado |
| 7 | Atualizar a página não reinicia nem duplica a sessão | ✅ automatizado |
| 8 | Finalizar duas vezes não duplica registros nem XP | ✅ automatizado |
| 9 | Usuário não altera o XP pelo frontend | ✅ automatizado (camada de serviço) |
| 10 | Usuário não consulta dados de outro | ✅ automatizado |
| 11 | Admin acessa o ranking sem assinatura | ✅ automatizado |
| 12 | Gratuito não acessa ranking via API | ✅ automatizado |
| 13 | Assinatura liberada/bloqueada pelo status | ✅ automatizado (status manual; webhooks do Stripe na Etapa 7) |
| 14 | Totais do dashboard = registros persistidos | ✅ automatizado |
| 15 | Tempo diário respeita o fuso horário | ✅ automatizado |
src/
domain/ regras puras: métodos e XP, configurações, datas e fuso
server/
db/ schema Drizzle, conexão (PGlite/Postgres), dados de referência
auth/ Better Auth + requireUser()
services/ timer, xp, categorias, estatísticas, perfil
app/
actions/ Server Actions (validação Zod, usuário sempre da sessão)
(auth)/ login, cadastro, recuperação de senha
(app)/ estudar (Foque), registro, dashboard (Painel), histórico, ranking, organizacao, conquistas, perfil
api/ rotas do Better Auth e de manutenção (cron)
drizzle/ migrações SQL versionadas
tests/ testes de regras de negócio
scripts/ migração e concessão de admin
DATABASE_URL.BETTER_AUTH_URL, BETTER_AUTH_SECRET, CRON_SECRET e, para e-mails, RESEND_API_KEY + MAIL_FROM (veja .env.example).npm run db:migrate (aplica migrações e dados de referência).npm run build && npm start — ou deploy na Vercel.GET /api/cron/maintenance com Authorization: Bearer $CRON_SECRET a cada 10 min (fecha sessões abandonadas de quem não voltou ao app).Edite src/server/db/schema.ts e rode npm run db:generate.