Adicione um livro aqui e ele aparece automaticamente no Cantinho dos Livros de todas as alunas — sem precisar mexer em código.
📚 Adicionar Livro
Dica: no Google Drive, clique com botão direito no arquivo → Compartilhar → "Qualquer pessoa com o link" → copie o link. Cole ele tanto na Capa (se for uma imagem) quanto no PDF.
✦ Salvo!
Livros na biblioteca
Capa
Título
Autor
Categoria
Ações
Clique em "Biblioteca" para carregar.
⚙️ Controles do Portal
Edite aqui e as alunas veem as mudanças em tempo real, sem precisar mexer no código.
💬 Lembrete do Dia
A frase inspiracional que aparece na home de todas as alunas.
✦ Salvo!
🎯 Desafios da Semana Atual
Esses 3 desafios aparecem para todas as alunas esta semana. Se deixar em branco, o app usa os desafios automáticos do código.
Desafio 1
Desafio 2
Desafio 3
✦ Publicado!
Os desafios publicados aqui ficam ativos até você apagar ou publicar novos. Na próxima segunda-feira o app continua a rotação automática se não houver desafios salvos aqui.
📣 Mural de Avisos
Cada aviso publicado fica guardado num histórico que as alunas podem ver a qualquer momento. O mais recente (últimos 7 dias) também aparece em destaque na home.
✦ Publicado!
Histórico
Carregando...
🛠️ Setup — SQL para rodar no Supabase
Rode esses SQLs uma vez no Supabase → SQL Editor para ativar todas as funcionalidades do painel.
1. Tabela de Pedidos de Livros
CREATE TABLE IF NOT EXISTS book_requests (
id bigserial PRIMARY KEY,
titulo text NOT NULL,
autor text,
email_aluna text,
status text DEFAULT 'pendente',
created_at timestamptz DEFAULT now()
);
-- Permite que alunas autenticadas insiram pedidos
ALTER TABLE book_requests ENABLE ROW LEVEL SECURITY;
CREATE POLICY "alunas_insert" ON book_requests FOR INSERT TO authenticated WITH CHECK (true);
CREATE POLICY "admin_all" ON book_requests FOR ALL USING (true);
CREATE TABLE IF NOT EXISTS book_requests (
id bigserial PRIMARY KEY,
titulo text NOT NULL,
autor text,
email_aluna text,
status text DEFAULT 'pendente',
created_at timestamptz DEFAULT now()
);
ALTER TABLE book_requests ENABLE ROW LEVEL SECURITY;
CREATE POLICY "alunas_insert" ON book_requests FOR INSERT TO authenticated WITH CHECK (true);
CREATE POLICY "admin_all" ON book_requests FOR ALL USING (true);
0. ⚠️ Policies para o painel ver as alunas (rode PRIMEIRO se aparecer "Forbidden")
-- Permite que admin autenticada leia student_progress e achievements
CREATE POLICY IF NOT EXISTS "admin_read_progress" ON student_progress
FOR SELECT USING (true);
CREATE POLICY IF NOT EXISTS "admin_read_achievements" ON student_achievements
FOR SELECT USING (true);
-- Se as tabelas não tiverem RLS ativo:
ALTER TABLE student_progress ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_achievements ENABLE ROW LEVEL SECURITY;
CREATE POLICY IF NOT EXISTS "admin_read_progress" ON student_progress FOR SELECT USING (true);
CREATE POLICY IF NOT EXISTS "admin_read_achievements" ON student_achievements FOR SELECT USING (true);
ALTER TABLE student_progress ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_achievements ENABLE ROW LEVEL SECURITY;
2. Tabela de Controles do Portal (desafios, lembrete, aviso)
CREATE TABLE IF NOT EXISTS portal_config (
id text PRIMARY KEY,
valor jsonb,
updated_at timestamptz DEFAULT now()
);
ALTER TABLE portal_config ENABLE ROW LEVEL SECURITY;
-- Leitura pública (alunas e admin)
CREATE POLICY "leitura_publica" ON portal_config FOR SELECT USING (true);
-- Escrita para usuários autenticados (admin logada no painel)
CREATE POLICY "escrita_autenticada" ON portal_config FOR INSERT TO authenticated WITH CHECK (true);
CREATE POLICY "update_autenticado" ON portal_config FOR UPDATE TO authenticated USING (true);
CREATE POLICY "delete_autenticado" ON portal_config FOR DELETE TO authenticated USING (true);
CREATE TABLE IF NOT EXISTS portal_config (
id text PRIMARY KEY,
valor jsonb,
updated_at timestamptz DEFAULT now()
);
ALTER TABLE portal_config ENABLE ROW LEVEL SECURITY;
CREATE POLICY "leitura_publica" ON portal_config FOR SELECT USING (true);
CREATE POLICY "escrita_admin" ON portal_config FOR ALL USING (true);
3. Tabela da Biblioteca de Livros (PDFs)
CREATE TABLE IF NOT EXISTS livros_biblioteca (
id bigserial PRIMARY KEY,
categoria text NOT NULL,
categoria_label text,
titulo text NOT NULL,
autor text,
capa_url text,
pdf_url text NOT NULL,
created_at timestamptz DEFAULT now()
);
ALTER TABLE livros_biblioteca ENABLE ROW LEVEL SECURITY;
-- Leitura pública (todas as alunas veem os livros)
CREATE POLICY "leitura_publica_livros" ON livros_biblioteca FOR SELECT USING (true);
-- Escrita só para quem está logada no painel admin
CREATE POLICY "escrita_admin_livros" ON livros_biblioteca FOR INSERT TO authenticated WITH CHECK (true);
CREATE POLICY "update_admin_livros" ON livros_biblioteca FOR UPDATE TO authenticated USING (true);
CREATE POLICY "delete_admin_livros" ON livros_biblioteca FOR DELETE TO authenticated USING (true);
CREATE TABLE IF NOT EXISTS livros_biblioteca (
id bigserial PRIMARY KEY, categoria text NOT NULL, categoria_label text, titulo text NOT NULL,
autor text, capa_url text, pdf_url text NOT NULL, created_at timestamptz DEFAULT now()
);
ALTER TABLE livros_biblioteca ENABLE ROW LEVEL SECURITY;
CREATE POLICY "leitura_publica_livros" ON livros_biblioteca FOR SELECT USING (true);
CREATE POLICY "escrita_admin_livros" ON livros_biblioteca FOR INSERT TO authenticated WITH CHECK (true);
CREATE POLICY "update_admin_livros" ON livros_biblioteca FOR UPDATE TO authenticated USING (true);
CREATE POLICY "delete_admin_livros" ON livros_biblioteca FOR DELETE TO authenticated USING (true);
4. Tabela do Mural de Avisos
CREATE TABLE IF NOT EXISTS avisos_portal (
id bigserial PRIMARY KEY,
texto text NOT NULL,
arquivado boolean DEFAULT false,
created_at timestamptz DEFAULT now()
);
ALTER TABLE avisos_portal ENABLE ROW LEVEL SECURITY;
-- Leitura pública (todas as alunas veem o mural)
CREATE POLICY "leitura_publica_avisos" ON avisos_portal FOR SELECT USING (true);
-- Escrita só para quem está logada no painel admin
CREATE POLICY "escrita_admin_avisos" ON avisos_portal FOR INSERT TO authenticated WITH CHECK (true);
CREATE POLICY "update_admin_avisos" ON avisos_portal FOR UPDATE TO authenticated USING (true);
CREATE POLICY "delete_admin_avisos" ON avisos_portal FOR DELETE TO authenticated USING (true);
CREATE TABLE IF NOT EXISTS avisos_portal (
id bigserial PRIMARY KEY, texto text NOT NULL, arquivado boolean DEFAULT false, created_at timestamptz DEFAULT now()
);
ALTER TABLE avisos_portal ENABLE ROW LEVEL SECURITY;
CREATE POLICY "leitura_publica_avisos" ON avisos_portal FOR SELECT USING (true);
CREATE POLICY "escrita_admin_avisos" ON avisos_portal FOR INSERT TO authenticated WITH CHECK (true);
CREATE POLICY "update_admin_avisos" ON avisos_portal FOR UPDATE TO authenticated USING (true);
CREATE POLICY "delete_admin_avisos" ON avisos_portal FOR DELETE TO authenticated USING (true);
—
—
Adicionar XP manualmente
Use após validar a prova no grupo. O XP é somado ao total atual da aluna.