Seu painel de conteúdo

Vamos publicar? ✦

Organize fotos, textos e horários em um só lugar.
●
Verificando conta...
Publicações salvas0
Agendadas0
Redes conectadas0

Nova publicação

Prepare o conteúdo e escolha quando pretende publicar.

0/5000 caracteres
Selecione uma foto ou vídeo para enviar junto com a legenda. Prévia da imagem Fotos: JPG, PNG, WEBP ou GIF. Vídeos: MP4, MOV ou WEBM. A disponibilidade depende da rede social.

O salvamento e a publicação automática precisam de uma API de servidor configurada. O navegador não pode guardar chaves secretas de provedores com segurança.

return; } const objectUrl = URL.createObjectURL(file); if (file.type.startsWith('video/')) { video.src = objectUrl; video.style.display = 'block'; } else if (file.type.startsWith('image/')) { image.src = objectUrl; image.style.display = 'block'; } else { event.target.value = ''; toast('Formato não aceito. Use uma foto ou vídeo compatível.'); } }); async function loadPosts() { const list = $('#post-list'); try { const response = await apiFetch(API); if (response.status === 401) { list.innerHTML = '
A API recusou a sessão. É necessário adaptar a API para validar tokens do Supabase.
'; return; } if (!response.ok) { throw new Error(`A API respondeu com status ${response.status}.`); } const data = await response.json(); posts = data.posts || []; $('#count-all').textContent = posts.length; $('#count-scheduled').textContent = posts.filter(post => String(post.status || '').startsWith('Agendado') ).length; list.innerHTML = posts.length ? posts.map(post => `
${escapeHtml(post.target)} · ${escapeHtml(post.status)}${post.scheduled_at ? ' · ' + new Date(post.scheduled_at).toLocaleString('pt-BR') : ''}

${escapeHtml(post.content)}

${post.image_url ? (post.media_type === 'VIDEO' ? `