Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Ateliê de Cerâmica — Central de Gestão PWA em Next.js 14 (App Router) + TypeScript + Tailwind + Supabase. Crie o primeiro usuário admin manualmente: cadastre-se pela tela de login (isso cria o registro em auth.users) e depois, no SQL editor do Supabase, rode: Stack: Next.js (App Router, Server Components por padrão) · TypeScript · Tailwind · Supabase (Auth + Postgres + Storage) · next-pwa para o manifesto e service worker · Recharts para o gráfico de queima · date-fns para datas.README 전문 보기 ↗
PWA em Next.js 14 (App Router) + TypeScript + Tailwind + Supabase.
npm install
cp .env.local.example .env.local # preencha com as chaves do seu projeto Supabase
# no SQL editor do Supabase, rode nesta ordem:
# 1. supabase/schema.sql
npm run dev
Crie o primeiro usuário admin manualmente: cadastre-se pela tela de login (isso
cria o registro em auth.users) e depois, no SQL editor do Supabase, rode:
update profiles set role = 'admin' where email = '[email protected]';
Stack: Next.js (App Router, Server Components por padrão) · TypeScript ·
Tailwind · Supabase (Auth + Postgres + Storage) · next-pwa para o manifesto
e service worker · Recharts para o gráfico de queima · date-fns para datas.
Por que essa combinação: Server Components buscam dados direto do Supabase sem expor lógica de query no cliente; RLS no Postgres garante que um aluno nunca leia dados de outro aluno mesmo se a UI tiver bug; Client Components ficam só onde há interação/tempo-real (o timer do forno, os formulários).
Papéis: dois únicos perfis (admin, aluno) definidos em
profiles.role. O middleware.ts bloqueia rotas administrativas para quem
não é admin, e o RLS faz a mesma checagem no banco (defesa em profundidade —
nunca confie só no middleware).
Rotas:
/login pública
/(admin)/dashboard admin
/(admin)/turmas/[turmaId] admin
/(admin)/alunos admin — a implementar (ver abaixo)
/(admin)/oficinas admin — a implementar
/(admin)/forno admin
/(admin)/solicitacoes admin — a implementar
/(admin)/pagamentos admin — a implementar
/(admin)/relatorios admin — a implementar
/(admin)/configuracoes admin — a implementar
/(aluno)/aluno aluno — a implementar
Banco de dados: ver supabase/schema.sql — cobre turmas, pacotes,
matrículas, aulas/presenças, reposições, oficinas, queimas (+ conteúdo do
forno e leituras) e notificações, todas com RLS. É o schema completo do
sistema descrito no briefing, incluindo as tabelas das telas que ainda não
têm UI pronta.
Regra de negócio mais sensível — o forno: toda a previsão (temperatura
estimada, % até a máxima, horário previsto da máxima, horário seguro para
abrir) é pura função de (parâmetros da queima, agora) — ver
src/lib/forno.ts. Quando o admin informa uma temperatura real, ela vira o
novo ponto de partida do cálculo (ultimaLeitura), recalibrando toda a curva
sem precisar de outra lógica: é a mesma função, só com outro parâmetro. Isso
é o que a tela chama de "recalcular toda a previsão".
Componentes reutilizáveis: src/components/ui/* (Button, Card, Badge,
Avatar, ProgressRing) são a base de todas as telas — nenhuma tela deve
estilizar botão/card do zero. ProgressRing é o elemento-assinatura visual
do produto (o arco de progresso do forno), reaproveitado no Dashboard e no
Forno.
supabase/schema.sql)tailwind.config.ts, globals.css)src/lib/forno.ts)Card, Avatar, Badge.oficinas.data e cria notificacoes do tipo
oficina_amanha um dia antes (a tabela já está pronta para plugar
WhatsApp: notificacoes.canal_whatsapp_enviado).matriculas.status = 'pendente'
e reposicoes.status = 'solicitada', com os botões Aprovar/Recusar que já
existem como exemplo na tela de Turmas.pacotes), histórico e oficinas.notificacoes do usuário logado,
Supabase Realtime (supabase.channel(...).on('postgres_changes', ...))
para atualizar sem polling.oficina_participantes.pagamento,
queima_conteudo.pagamento)./(admin) herda a Sidebar/MobileNav automaticamente.src/components/ui."use server") próximas da tela que as usa, para
manter a lógica de negócio fora dos componentes de UI.notificacao_tipo do
schema e no NotificacaoTipo de src/types/database.ts.