Compare commits

...

12 Commits

Author SHA1 Message Date
ealmeida e7adb65d40 docs(okf): frontmatter OKF + rich abstracts nas descriptions
Normalizacao OKF dos .md: type/title/description/timestamp/layer +
descriptions factuais (rich abstracts). Apenas .md tracked; corpos intactos.
Parte da aplicacao OKF a /Dados/Dev (28-06-2026).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 22:55:40 +01:00
ealmeida 3752238699 feat(okf-hub): Fase F — converter fence-aware (path-style/acentos/pipe escapado) + validador fence-aware 2026-06-28 22:39:23 +01:00
ealmeida 0094b45bcf feat(okf-hub): adicionar okf-normalize-types.sh (normalizador taxonomia, Fase D) 2026-06-28 22:19:59 +01:00
ealmeida 88d2a7d78e fix(okf-hub): excluir ijfw/ (store memória) e .sync-conflict do validador/classify 2026-06-28 22:15:38 +01:00
ealmeida 4d3583b81a fix(okf-normalize): so tratar bloco --- como frontmatter se for mapa YAML valido
Bug: parse_frontmatter aceitava qualquer bloco ---...--- inicial como frontmatter.
Ficheiros que comecam com --- como regua/separador (ex: MEMORY.md seguido de
## heading) tinham o corpo tratado como frontmatter, e o ramo 'tem frontmatter'
injectava campos OKF la dentro -> YAML partido (5 casos no run do Cloud).

Fix: _looks_like_yaml_mapping() valida via PyYAML (isinstance dict) com fallback
heuristico (1a linha = chave, sem heading markdown no topo). Tambem: report_path
passou a escrever no dir do script (era path Hub hardcoded inexistente).

Validado: caso-bug + regressao (com/sem frontmatter) -> 0 erros, YAML valido.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 22:00:36 +01:00
ealmeida b78cc9c465 fix(okf-hub): excluir variantes MEMORY-*.md no validador e classify 2026-06-28 21:22:53 +01:00
ealmeida 8d4988ad3f fix(okf-hub): adoptar validador layer-aware (Fase D) + corrigir bugs (reserved-skip, folded-scalar desc, tr range); classify exclui index.md/log.md 2026-06-28 21:14:39 +01:00
ealmeida 6035542b67 feat: scripts de projectos vindos do Hub (podcast, alojadamaria, clip, ocr, etc.)
Movidos do vault Hub para centralizar scripts. Hub mantem symlinks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 20:53:29 +01:00
ealmeida e810bbb114 feat(okf-hub): relocar tooling OKF do Hub para Dev/Scripts (regra: scripts fora do vault) 2026-06-28 20:46:17 +01:00
ealmeida e11b237a1e fix(beszel): webhook cria tickets em tbltickets, dept 7 Tecnologia
- Tabela correcta: tbltickets (não tbltasks)
- department: 7 (Tecnologia)
- project_id: 65 (DES Stack Workflow)
- assigned: Izito (staff 28)
- userid: 0 (interno)
- Auto-fecho via tblticket_replies
2026-06-24 06:03:49 +01:00
ealmeida ab3384c961 fix(beszel): webhook cria tarefas projecto 65, milestone 355, Izito
- Renomeado 'ticket' → 'tarefa' em todo o código
- Projecto: 65 (DES Stack Workflow)
- Milestone: 355 (Sistemas de Apoio — Tecnologia)
- Atribuído: Izito (staff 28)
- Criado por: Claude/AIkTop (staff 25)
- Corrigido Content-Length header bug
2026-06-24 05:35:47 +01:00
ealmeida 8e0dbbeca0 feat(bizin): scraper final com bypass Cloudflare + monitor de auto-reinício
- bizin_scraper_final.py: scraper híbrido curl_cffi + undetected-chromedriver
  com suporte a distritos e categorias, escrita segura (fsync) e enriquecimento externo
- monitor_scraper.sh: watchdog que reinicia o processo automaticamente em crash
- IMPLEMENTADO.md + README.md: actualizados para reflectir estado Abril 2026
- GEMINI.md: instruções técnicas de automação
- test_curl.py, test_curl_clean.py, test_playwright.py: scripts de teste/diagnóstico

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 17:16:48 +01:00
179 changed files with 6889 additions and 1550 deletions
+141
View File
@@ -0,0 +1,141 @@
#!/usr/bin/env python3
"""
Captura screenshots de alojadamaria.com para auditoria visual SEO/UX
"""
from playwright.sync_api import sync_playwright
import json
import time
import os
BASE_URL = "https://alojadamaria.com/"
OUTPUT_DIR = "/media/ealmeida/Dados/Hub/03-Propostas/ALojaDaMaria/screenshots/alojadamaria"
os.makedirs(OUTPUT_DIR, exist_ok=True)
VIEWPORTS = {
"desktop": {"width": 1440, "height": 900},
"mobile": {"width": 375, "height": 812},
}
PAGES = {
"homepage": BASE_URL,
"categoria": BASE_URL + "product-category/novidades/",
"contacto": BASE_URL + "contactos/",
}
def capturar(page, url, nome, viewport):
"""Captura acima da dobra e página completa"""
print(f" -> A capturar: {nome} ({viewport['width']}x{viewport['height']})")
try:
page.goto(url, wait_until="networkidle", timeout=30000)
time.sleep(2)
# Fechar pop-ups comuns (cookie consent, newsletter)
for selector in [
"button[class*='close']",
"button[class*='dismiss']",
"[class*='cookie'] button",
"[id*='cookie'] button",
"[class*='popup-close']",
".pum-close",
"button[aria-label*='Close']",
"button[aria-label*='close']",
]:
try:
el = page.query_selector(selector)
if el and el.is_visible():
el.click()
time.sleep(0.5)
except Exception:
pass
# Above the fold (viewport apenas)
page.screenshot(
path=f"{OUTPUT_DIR}/{nome}_atf.png",
full_page=False,
clip={"x": 0, "y": 0, "width": viewport["width"], "height": viewport["height"]},
)
# Página completa
page.screenshot(
path=f"{OUTPUT_DIR}/{nome}_full.png",
full_page=True,
)
# Recolher metadados
title = page.title()
h1_els = page.query_selector_all("h1")
h1_texts = [el.inner_text().strip() for el in h1_els if el.is_visible()]
nav_visible = bool(page.query_selector("nav, [class*='nav'], [class*='menu']"))
ctas = []
for sel in ["a[class*='btn'], a[class*='button'], button[class*='btn'], .add-to-cart, [class*='cta']"]:
els = page.query_selector_all(sel)
for el in els[:5]:
try:
if el.is_visible():
ctas.append(el.inner_text().strip()[:50])
except Exception:
pass
popup_visible = bool(page.query_selector(".pum-overlay, [class*='popup'][style*='display: block'], [class*='modal'][style*='display: block']"))
# Dimensões do logo
logo = page.query_selector("img[class*='logo'], a[class*='logo'] img, header img, .site-logo img")
logo_info = None
if logo:
try:
bb = logo.bounding_box()
logo_info = bb
except Exception:
pass
return {
"url": url,
"title": title,
"h1": h1_texts,
"nav_visible": nav_visible,
"ctas_sample": ctas[:8],
"popup_detected": popup_visible,
"logo_bounding_box": logo_info,
}
except Exception as e:
print(f" ERRO: {e}")
return {"error": str(e)}
def main():
resultados = {}
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
for device_name, viewport in VIEWPORTS.items():
print(f"\n[{device_name.upper()}] {viewport['width']}x{viewport['height']}")
context = browser.new_context(
viewport=viewport,
user_agent="Mozilla/5.0 (compatible; AuditBot/1.0)",
locale="pt-PT",
)
page = context.new_page()
for page_name, url in PAGES.items():
chave = f"{device_name}_{page_name}"
print(f" Página: {page_name}")
dados = capturar(page, url, chave, viewport)
resultados[chave] = dados
context.close()
browser.close()
with open(f"{OUTPUT_DIR}/metadados.json", "w", encoding="utf-8") as f:
json.dump(resultados, f, ensure_ascii=False, indent=2)
print("\nCaptura concluída. Ficheiros em:", OUTPUT_DIR)
return resultados
if __name__ == "__main__":
main()
+122
View File
@@ -0,0 +1,122 @@
#!/usr/bin/env python3
"""
Captura detalhes adicionais: hero CTA, produto, footer, barra anúncio
"""
from playwright.sync_api import sync_playwright
import time
OUTPUT_DIR = "/media/ealmeida/Dados/Hub/03-Propostas/ALojaDaMaria/screenshots/alojadamaria"
BASE_URL = "https://alojadamaria.com/"
def crop(page, path, clip):
page.screenshot(path=path, clip=clip, full_page=False)
print(f" Guardado: {path}")
def main():
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
# --- Desktop 1440px ---
ctx = browser.new_context(viewport={"width": 1440, "height": 900}, locale="pt-PT")
page = ctx.new_page()
page.goto(BASE_URL, wait_until="networkidle", timeout=40000)
time.sleep(2)
# Hero completo com CTA visível
page.screenshot(path=f"{OUTPUT_DIR}/desktop_hero_zoom.png",
clip={"x": 0, "y": 0, "width": 1440, "height": 600})
print(" Hero desktop guardado")
# Header/nav
page.screenshot(path=f"{OUTPUT_DIR}/desktop_header.png",
clip={"x": 0, "y": 0, "width": 1440, "height": 80})
print(" Header desktop guardado")
# Barra topo (announcement bar)
page.screenshot(path=f"{OUTPUT_DIR}/desktop_announcebar.png",
clip={"x": 0, "y": 0, "width": 1440, "height": 35})
print(" Barra anúncio guardada")
# Produtos (scroll para secção)
page.evaluate("window.scrollTo(0, 700)")
time.sleep(1)
page.screenshot(path=f"{OUTPUT_DIR}/desktop_produtos.png",
clip={"x": 0, "y": 0, "width": 1440, "height": 900})
print(" Produtos desktop guardados")
# Footer
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
time.sleep(1)
page.screenshot(path=f"{OUTPUT_DIR}/desktop_footer.png",
clip={"x": 0, "y": 0, "width": 1440, "height": 900})
print(" Footer desktop guardado")
ctx.close()
# --- Mobile 375px ---
ctx_m = browser.new_context(viewport={"width": 375, "height": 812}, locale="pt-PT")
page_m = ctx_m.new_page()
page_m.goto(BASE_URL, wait_until="networkidle", timeout=40000)
time.sleep(2)
# Header mobile
page_m.screenshot(path=f"{OUTPUT_DIR}/mobile_header.png",
clip={"x": 0, "y": 0, "width": 375, "height": 120})
print(" Header mobile guardado")
# Hero mobile
page_m.screenshot(path=f"{OUTPUT_DIR}/mobile_hero.png",
clip={"x": 0, "y": 0, "width": 375, "height": 500})
print(" Hero mobile guardado")
# Produtos mobile
page_m.evaluate("window.scrollTo(0, 500)")
time.sleep(1)
page_m.screenshot(path=f"{OUTPUT_DIR}/mobile_produtos.png",
clip={"x": 0, "y": 0, "width": 375, "height": 812})
print(" Produtos mobile guardados")
# Footer mobile
page_m.evaluate("window.scrollTo(0, document.body.scrollHeight)")
time.sleep(1)
page_m.screenshot(path=f"{OUTPUT_DIR}/mobile_footer.png",
clip={"x": 0, "y": 0, "width": 375, "height": 812})
print(" Footer mobile guardado")
# Tentar obter URL de produto real
links = page_m.query_selector_all("a[href*='product']")
product_url = None
for l in links:
href = l.get_attribute("href")
if href and "product-category" not in href and "alojadamaria.com/product" in href:
product_url = href
break
if product_url:
print(f"\n URL produto encontrado: {product_url}")
page_m.goto(product_url, wait_until="networkidle", timeout=30000)
time.sleep(2)
page_m.screenshot(path=f"{OUTPUT_DIR}/mobile_produto_detalhe_atf.png",
full_page=False)
page_m.screenshot(path=f"{OUTPUT_DIR}/mobile_produto_detalhe_full.png",
full_page=True)
print(" Produto detalhe mobile guardado")
# Desktop produto
ctx_d2 = browser.new_context(viewport={"width": 1440, "height": 900}, locale="pt-PT")
page_d2 = ctx_d2.new_page()
page_d2.goto(product_url, wait_until="networkidle", timeout=30000)
time.sleep(2)
page_d2.screenshot(path=f"{OUTPUT_DIR}/desktop_produto_detalhe_atf.png",
full_page=False)
page_d2.screenshot(path=f"{OUTPUT_DIR}/desktop_produto_detalhe_full.png",
full_page=True)
print(" Produto detalhe desktop guardado")
ctx_d2.close()
ctx_m.close()
browser.close()
print("\nCapturas extra concluídas.")
if __name__ == "__main__":
main()
+246
View File
@@ -0,0 +1,246 @@
#!/usr/bin/env python3
"""
Script de captura e análise visual SEO para descomplicar.pt
Analisa: capturas desktop/mobile, above-the-fold, imagens, CTAs
"""
import json
import re
from playwright.sync_api import sync_playwright
URL = "https://descomplicar.pt"
SCREENSHOTS_DIR = "/media/ealmeida/Dados/Hub/03-Propostas/ALojaDaMaria/screenshots"
VIEWPORTS = {
"desktop": {"width": 1920, "height": 1080},
"laptop": {"width": 1366, "height": 768},
"tablet": {"width": 768, "height": 1024},
"mobile": {"width": 375, "height": 812},
}
def capture(url, output_path, viewport_width=1920, viewport_height=1080):
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page(viewport={"width": viewport_width, "height": viewport_height})
page.goto(url, wait_until="networkidle", timeout=30000)
page.screenshot(path=output_path, full_page=False)
browser.close()
def analyse_page(url):
results = {}
with sync_playwright() as p:
browser = p.chromium.launch()
# --- Desktop 1920x1080 ---
page = browser.new_page(viewport=VIEWPORTS["desktop"])
page.goto(url, wait_until="networkidle", timeout=30000)
page.screenshot(
path=f"{SCREENSHOTS_DIR}/desktop_1920.png", full_page=False
)
page.screenshot(
path=f"{SCREENSHOTS_DIR}/desktop_1920_full.png", full_page=True
)
# Dados above-the-fold (desktop)
atf = page.evaluate("""() => {
const vw = window.innerWidth;
const vh = window.innerHeight;
// H1
const h1s = Array.from(document.querySelectorAll('h1'));
const h1Visible = h1s.filter(el => {
const r = el.getBoundingClientRect();
return r.top >= 0 && r.bottom <= vh && r.width > 0;
});
// CTAs (botões e links com texto de acção)
const ctaKeywords = /contacto|falar|orçamento|começar|saber mais|ver mais|agendar|demo|serviços|get started|contact/i;
const allBtns = Array.from(document.querySelectorAll('a, button'));
const ctasAtf = allBtns.filter(el => {
const r = el.getBoundingClientRect();
return r.top >= 0 && r.bottom <= vh && r.width > 0 && ctaKeywords.test(el.textContent);
}).map(el => ({text: el.textContent.trim().substring(0,60), tag: el.tagName, top: Math.round(el.getBoundingClientRect().top)}));
// Value proposition (primeiro parágrafo/subtítulo visível)
const textEls = Array.from(document.querySelectorAll('h2, h3, p, .subtitle, .hero-text, [class*="hero"] p, [class*="tagline"]'));
const vpEl = textEls.find(el => {
const r = el.getBoundingClientRect();
return r.top >= 0 && r.bottom <= vh && el.textContent.trim().length > 30;
});
// Sinais de confiança (logos, testimonials, reviews)
const trustSelectors = '[class*="client"], [class*="partner"], [class*="logo"], [class*="review"], [class*="testim"], [class*="trust"], .stars, [class*="rating"]';
const trustEls = Array.from(document.querySelectorAll(trustSelectors));
const trustAtf = trustEls.filter(el => {
const r = el.getBoundingClientRect();
return r.top >= 0 && r.bottom <= vh && r.width > 0;
}).length;
return {
viewport: {width: vw, height: vh},
h1Count: h1s.length,
h1Texts: h1s.map(el => ({text: el.textContent.trim().substring(0,100), visible: h1Visible.includes(el)})),
h1AboveFold: h1Visible.length,
ctasAboveFold: ctasAtf,
valueProposition: vpEl ? vpEl.textContent.trim().substring(0,200) : null,
trustSignalsAboveFold: trustAtf,
};
}""")
# Análise de imagens
images = page.evaluate("""() => {
return Array.from(document.querySelectorAll('img')).map(img => ({
src: img.src.substring(0, 120),
alt: img.alt,
hasAlt: img.alt.trim().length > 0,
loading: img.loading,
width: img.width,
height: img.height,
hasWidthAttr: img.hasAttribute('width'),
hasHeightAttr: img.hasAttribute('height'),
isWebP: img.src.includes('.webp'),
isAvif: img.src.includes('.avif'),
naturalWidth: img.naturalWidth,
naturalHeight: img.naturalHeight,
rect: (() => { const r = img.getBoundingClientRect(); return {top: Math.round(r.top), visible: r.width > 0}; })()
}));
}""")
# Dados de meta SEO
meta_seo = page.evaluate("""() => {
const getMeta = (name) => {
const el = document.querySelector(`meta[name="${name}"], meta[property="${name}"]`);
return el ? el.getAttribute('content') : null;
};
return {
title: document.title,
metaDescription: getMeta('description'),
ogTitle: getMeta('og:title'),
ogDescription: getMeta('og:description'),
ogImage: getMeta('og:image'),
canonical: (() => { const l = document.querySelector('link[rel="canonical"]'); return l ? l.href : null; })(),
lang: document.documentElement.lang,
h2Count: document.querySelectorAll('h2').length,
h3Count: document.querySelectorAll('h3').length,
};
}""")
# Desempenho básico (recursos)
perf = page.evaluate("""() => {
const entries = performance.getEntriesByType('resource');
const imgs = entries.filter(e => e.initiatorType === 'img');
const scripts = entries.filter(e => e.initiatorType === 'script');
const styles = entries.filter(e => e.initiatorType === 'link' || e.initiatorType === 'css');
return {
totalResources: entries.length,
imgCount: imgs.length,
scriptCount: scripts.length,
styleCount: styles.length,
};
}""")
results["desktop_atf"] = atf
results["images"] = images
results["meta_seo"] = meta_seo
results["perf"] = perf
# --- Mobile 375x812 ---
mobile_page = browser.new_page(
viewport=VIEWPORTS["mobile"],
user_agent="Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"
)
mobile_page.goto(url, wait_until="networkidle", timeout=30000)
mobile_page.screenshot(
path=f"{SCREENSHOTS_DIR}/mobile_375.png", full_page=False
)
mobile_page.screenshot(
path=f"{SCREENSHOTS_DIR}/mobile_375_full.png", full_page=True
)
mobile_checks = mobile_page.evaluate("""() => {
const vw = window.innerWidth;
const vh = window.innerHeight;
const docWidth = document.documentElement.scrollWidth;
// Verificar overflow horizontal
const hasHorizontalScroll = docWidth > vw;
// Navegação móvel
const nav = document.querySelector('nav, [class*="nav"], [class*="menu"], header');
const navVisible = nav ? nav.getBoundingClientRect().width > 0 : false;
const hamburger = document.querySelector('[class*="hamburger"], [class*="toggle"], [class*="burger"], .menu-icon, [aria-label*="menu"], [aria-label*="Menu"]');
// Tamanho dos tap targets (mínimo 48x48px)
const allTapTargets = Array.from(document.querySelectorAll('a, button, input, select, textarea'));
const smallTargets = allTapTargets.filter(el => {
const r = el.getBoundingClientRect();
return r.width > 0 && r.height > 0 && (r.width < 44 || r.height < 44);
}).slice(0, 10).map(el => ({
tag: el.tagName,
text: el.textContent.trim().substring(0, 40),
w: Math.round(el.getBoundingClientRect().width),
h: Math.round(el.getBoundingClientRect().height)
}));
// Tamanho de fonte base
const bodyFontSize = parseFloat(window.getComputedStyle(document.body).fontSize);
// H1 visível no mobile
const h1s = Array.from(document.querySelectorAll('h1'));
const h1MobileVisible = h1s.filter(el => {
const r = el.getBoundingClientRect();
return r.top >= 0 && r.bottom <= vh && r.width > 0;
});
// CTAs mobile
const ctaKeywords = /contacto|falar|orçamento|começar|saber mais|ver mais|agendar|demo|serviços/i;
const ctasMobile = Array.from(document.querySelectorAll('a, button')).filter(el => {
const r = el.getBoundingClientRect();
return r.top >= 0 && r.bottom <= vh && r.width > 0 && ctaKeywords.test(el.textContent);
}).map(el => ({text: el.textContent.trim().substring(0,50), w: Math.round(el.getBoundingClientRect().width), h: Math.round(el.getBoundingClientRect().height)}));
return {
viewport: {width: vw, height: vh},
documentWidth: docWidth,
hasHorizontalScroll,
navVisible,
hasHamburger: !!hamburger,
hamburgerClass: hamburger ? hamburger.className.substring(0,60) : null,
smallTapTargets: smallTargets,
smallTapTargetCount: smallTargets.length,
bodyFontSize,
h1AboveFoldMobile: h1MobileVisible.length,
h1TextMobile: h1MobileVisible[0] ? h1MobileVisible[0].textContent.trim().substring(0,100) : null,
ctasMobileAtf: ctasMobile,
};
}""")
results["mobile"] = mobile_checks
# --- Laptop 1366x768 ---
laptop_page = browser.new_page(viewport=VIEWPORTS["laptop"])
laptop_page.goto(url, wait_until="networkidle", timeout=30000)
laptop_page.screenshot(
path=f"{SCREENSHOTS_DIR}/laptop_1366.png", full_page=False
)
browser.close()
return results
if __name__ == "__main__":
print("A capturar screenshots e analisar descomplicar.pt...")
data = analyse_page(URL)
output_file = f"{SCREENSHOTS_DIR}/analysis_data.json"
with open(output_file, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"Análise concluída. Dados guardados em: {output_file}")
print(f"Screenshots em: {SCREENSHOTS_DIR}/")
print("\n--- RESUMO ---")
print(json.dumps(data, ensure_ascii=False, indent=2))
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
PERFEX_URL="https://desk.descomplicar.pt"
PERFEX_API_KEY="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoibWNwIiwibmFtZSI6Im1jcCIsIkFQSV9USU1FIjoxNzQxOTY1MDQ3fQ.hNv_dMzijjbNTI9-wVxsHXUm-K8ckGN5v4f9Kgk-dPc"
CLAUDE_LOG_DIR="/home/ealmeida/.logs/claude-agent"
TASK_JSON=$1
TASK_ID=$(echo $TASK_JSON | jq -r ".task_id // .id")
TASK_NAME=$(echo $TASK_JSON | jq -r ".task_name // .name")
LOG_FILE="$CLAUDE_LOG_DIR/task-$TASK_ID-$(date +%Y%m%d).log"
echo "[$(date)] INÍCIO — Tarefa #$TASK_ID: $TASK_NAME" >> "$LOG_FILE"
curl -s -X PUT -H "authtoken: $PERFEX_API_KEY" -d "status=4" "$PERFEX_URL/api/v1/tasks/$TASK_ID" >> "$LOG_FILE" 2>&1
claude -p "És o AIkTop. Resolve a tarefa #$TASK_ID. No final, usa MCP para marcar status 5." --allowedTools Read,Edit,Write,Bash,Command --max-turns 20 --yes >> "$LOG_FILE" 2>&1
+129
View File
@@ -0,0 +1,129 @@
import json
import re
from datetime import datetime
import os
# Helper to get issues from MCP tool output, handling truncation info
def parse_mcp_output(mcp_output_string):
json_start_index = mcp_output_string.find("{")
if json_start_index == -1:
return None, "Error: No JSON content found in tool output."
clean_content = mcp_output_string[json_start_index:]
try:
parsed_content = json.loads(clean_content)
if "Result" in parsed_content:
return parsed_content["Result"], None
elif isinstance(parsed_content, list):
return parsed_content, None
else:
return None, f"Error: Unexpected JSON structure after cleaning: {clean_content[:200]}..."
except json.JSONDecodeError as e:
return None, f"Error: Could not parse JSON content after cleaning: {e} - {clean_content[:200]}..."
# Function to fetch all issues using pagination and save them to a file
def fetch_all_issues_and_save(owner, repo, state, file_path, page_size=100):
all_issues = []
page = 1
while True:
# Simulate calling mcp_gitea_list_repo_issues
# In a real scenario, this would be a direct call to the MCP tool
# For this script, we assume this function will be called with a placeholder for the actual MCP tool output
# since direct MCP tool calls are not possible within this embedded script context.
# This function needs to be invoked in a way that allows external MCP calls.
# --- THIS PART NEEDS TO BE EXECUTED OUTSIDE THIS SCRIPT OR BY A TOOL THAT CAN CALL MCP ---
# For now, this script will only process an already existing file.
# The external loop will call mcp_gitea_list_repo_issues and write the combined output to file_path
print(f"DEBUG: Placeholder for fetching page {page} from {owner}/{repo}")
break # Break as we cannot truly paginate from within this isolated script
# This part assumes file_path already contains the FULL JSON from all pages
if not os.path.exists(file_path):
print(f"Error: Issue data file not found at {file_path}. Please ensure it is created with full data.")
return
with open(file_path, "r") as f:
full_issues_content = f.read()
issues_data, error = parse_mcp_output(full_issues_content)
if error:
print(error)
return
return issues_data
def find_first_unhandled_original_issue(issues_data):
if not issues_data:
return None
delegation_prefixes = [
"[Dir. Automação]",
"[Dir. Desenvolvimento]",
"[Dir. Infraestrutura]",
"[COO]",
"[Improvement Evaluator]"
]
issues_data.sort(key=lambda x: datetime.strptime(x["created_at"], "%Y-%m-%dT%H:%M:%SZ")) # Sort by creation date in ascending order
for issue in issues_data:
if issue["state"] == "closed":
continue
is_delegated_by_prefix = False
for prefix in delegation_prefixes:
if issue["title"].startswith(prefix):
is_delegated_by_prefix = True
break
if is_delegated_by_prefix:
continue
# Check for delegation comments or if comments exist for n8n workflow issues (implying delegation)
# This check is a simplification and might need to fetch comments for accurate check
if issue["comments"] > 0 and ("Tarefa delegada ao Dir." in issue["body"] or "n8n Workflow" in issue["title"]):
continue
# If we reach here, it's an open, non-delegated, original issue
return {
"number": issue["number"],
"title": issue["title"],
"body": issue["body"]
}
return None # No unhandled original issues found.
# Main execution flow
temp_file_path = "open_issues.json"
owner = "ealmeida"
repo = "mcp-paperclip"
state = "open"
# This part needs to be handled externally to call MCP tools iteratively
# For now, let's just process the existing open_issues.json
# issues_data = fetch_all_issues_and_save(owner, repo, state, temp_file_path)
# Instead, read the pre-existing full JSON data
if not os.path.exists(temp_file_path):
print(f"Error: Issue data file not found at {temp_file_path}. Please create it manually with full data.")
exit(1)
with open(temp_file_path, "r") as f:
full_issues_content = f.read()
issues_data, error = parse_mcp_output(full_issues_content)
if error:
print(error)
exit(1)
unhandled_issue = find_first_unhandled_original_issue(issues_data)
if unhandled_issue:
print(f"Oldest unhandled original issue found:")
print(f"Issue Number: {unhandled_issue["number"]}")
print(f"Issue Title: {unhandled_issue["title"]}")
print(f"Issue Body: {unhandled_issue["body"]}")
else:
print("No unhandled original issues found in the provided data.")
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash
echo \"$(date): Validating instructionsFilePath...\"
PGPASSWORD=paperclip psql -h localhost -p 54329 -U paperclip -d paperclip -c \"SELECT name, COALESCE(adapter_config->>'instructionsFilePath', 'none') as path, status FROM agents WHERE adapter_config ? 'instructionsFilePath' ORDER BY name;\" | while IFS='|' read name path status; do name=\$(echo $name | xargs); path=\$(echo $path | xargs); if [[ \"$path\" != 'none' ]] &amp;&amp; [ -f \"$path\" ]; then echo \"OK: $name ($status) -> $path\"; else echo \"MISSING: $name ($status) -> $path\"; fi; done
echo \"---\"
+8
View File
@@ -1,3 +1,11 @@
---
type: Reference
title: Readme
description: >-
Crawler assincrono baseado em crawl4ai com profundidade configuravel
timestamp: 2026-02-07T02:51:49.121100+00:00
layer: wiki
---
# crawl4all - Async Web Crawler
Crawler assincrono baseado em crawl4ai com profundidade configuravel.
@@ -1,3 +1,11 @@
---
type: Document
title: Acompanhe Também Os Nossos Outros Canais (1)
description: >-
Listagem de canais e perfis sociais da Descomplicar® e tabela de serviços, usada como rodapé/assinatura em conteúdos publicados.
timestamp: 2025-07-03T04:09:48.311079+00:00
layer: wiki
---
**Acompanhe também os nossos outros canais:**
[Facebook](https://www.facebook.com/DescomplicarAceleracaoDigital) | [LinkedIn](https://www.linkedin.com/company/descomplicar-aceleracao-digital/) | [Instagram](https://www.instagram.com/descomplicar.pt/) | [X](https://x.com/DescomplicarMkt) | [YouTube](https://www.youtube.com/@DescomplicarAceleracaoDigital) | [Pinterest](https://pt.pinterest.com/descomplicarmktdigital/) | [MyBusiness](https://g.co/kgs/BSCYHQA) | [Medium](https://descomplicar.medium.com/) | [Blogger](https://descomplicar-marketing-digital.blogspot.com/) | [WordPress](https://descomplicarmarketingdigital.wordpress.com/) | [Tumblr](https://www.tumblr.com/descomplicar) | [Steemit](https://steemit.com/@descomplicar) | [Dev.to](https://dev.to/descomplicar) | [GitHub](https://github.com/Descomplicar-Marketing-e-Tecnologia) | [DZone](https://dzone.com/users/5352554/descomplicar.html) [|](https://hackmd.io/@descomplicar) [StoreBoard](https://www.storeboard.com/descomplicarmarketingdigital) [|| HackMD](https://hackmd.io/@descomplicar) | [Google Sites](https://sites.google.com/view/descomplicar-marketing-digital) | [Telegra.ph](http://Telegra.ph) | [Dropbox](https://www.dropbox.com/scl/fo/tx6mz3rks3buypba8yw7l/ACMLsSd7fvQP0B-xoZqpKx0?rlkey=ihkxjjczfz91ybs1xbpadah99&st=muno7x0j&dl=0) | [Google Drive](https://drive.google.com/drive/folders/1SecSFdW7RB-xFlhuuurXC0_NoaY__ew4?usp=sharing) | [Media Share](https://www.mediafire.com/folder/n8vjw4ysrx9bi/Documentos+Partilhados) | [Box](https://app.box.com/s/bc5mk1kynarfrdh3hayl3oaehjqs4rew) | [Calameo](https://www.calameo.com/accounts/7973555) | [4shared](https://www.4shared.com/u/byJWseVT/google.html) | [SlideShare](https://pt.slideshare.net/google325149) | [Scribd](https://pt.scribd.com/user/874417426/Descomplicar-Agencia-de-Aceleracao-Digital) | [Issuu](https://issuu.com/descomplicarmktdigital) | [Speaker Deck](https://speakerdeck.com/descomplicar) | [Yumpu](https://www.yumpu.com/user/Descomplicar) | [SoundCloud](https://soundcloud.com/descomplicar) | [MixCloud](https://www.mixcloud.com/descomplicar/) | [Spotify](https://creators.spotify.com/pod/show/descomplicar-digital) | [Vimeo](https://vimeo.com/descomplicar) | [Canva](https://descomplicar-marketing-digital.my.canva.site/) | [Giphy](https://giphy.com/channel/descomplicar-digital) | [Gamma](https://transformacaodigitalpmes-6e1jx6c.gamma.site/) | [Gravatar](https://gravatar.com/descomplicarmarketingdigital) | [About.me](https://about.me/descomplicar-marketing-digital) | [Academia.edu](https://independent.academia.edu/Descomplicar) | [Fiverr](https://www.fiverr.com/descomplicar) | [Demo e-Commerce](https://descomplicar-demo-ecommerce.qibspu.easypanel.host/) | [Easy](https://descomplicar-socialboost.qibspu.easypanel.host/) | [WhatSMS](https://whatsms.descomplicar.pt/) | [SocialBoost](https://socialboost.pt) | [Metta.pt](http://metta.pt) | [Jornada do Herói](https://jornadadoheroi.pt) | [Descomplicar.org](https://descomplicar.org) | [Emanuel Almeida](https://emanuelalmeida.pt)
@@ -1,6 +1,11 @@
---
type: Document
title: Copywriting para Negócios O Guia Definitivo para Converter Palavras em Lucro
description: >-
As palavras são os vendedores silenciosos da sua empresa. Trabalham 24 horas por dia, 7 dias por semana, em anúncios, no…
timestamp: 2025-07-03T04:09:46.771823+00:00
layer: wiki
---
# Copywriting para Negócios
@@ -1,7 +1,12 @@
---
type: Document
title: Grande Dicionário de Marketing
description: >-
Grande Dicionário de Marketing Digital da Descomplicar®: glossário com mais de 100 termos e acrónimos essenciais, explicados de forma simples e clara.
tags: [dicionário de marketing, glossário de marketing, termos de marketing, marketing digital, o que é]
timestamp: 2025-07-03T04:09:45.756958+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Análise Custo de Aquisição de Cliente e Lifetime Value
description: >-
title: "Guia Completo de Análise Custo de Aquisição de Cliente e Lifetime Value"
tags: [custo de aquisição de cliente, CAC, lifetime value, LTV, métricas de negócio, rentabilidade]
timestamp: 2025-07-03T04:09:45.767168+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Automação de Marketing: O Motor do Crescimento Digital'
description: >-
title: "Guia Completo de Automação de Marketing: O Motor do Crescimento Digital"
tags: [automação de marketing, marketing automation, lead nurturing, automação, funil de vendas]
timestamp: 2025-07-03T04:09:45.776255+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Branding: Como Construir uma Marca Inesquecível'
description: >-
title: "Guia Completo de Branding: Como Construir uma Marca Inesquecível"
tags: [branding, estratégia de marca, identidade visual, posicionamento de marca, guia completo]
timestamp: 2025-07-03T04:09:45.788627+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Business Intelligence para Marketing
description: >-
title: "Guia Completo de Business Intelligence para Marketing"
tags: [business intelligence, análise de dados, marketing digital, kpi, estratégia digital]
timestamp: 2025-07-03T04:09:45.798875+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de CRM: O Sistema Nervoso do Seu Negócio'
description: >-
title: "Guia Completo de CRM: O Sistema Nervoso do Seu Negócio"
tags: [crm, gestão de clientes, funil de vendas, automação, desk crm]
timestamp: 2025-07-03T04:09:45.816087+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Cibersegurança para Negócios Digitais
description: >-
title: "Guia Completo de Cibersegurança para Negócios Digitais"
tags: [cibersegurança, segurança digital, proteção de dados, ransomware, phishing]
timestamp: 2025-07-03T04:09:45.804435+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Customer Success para Negócios Digitais
description: >-
title: "Guia Completo de Customer Success para Negócios Digitais"
tags: [customer success, sucesso do cliente, retenção de clientes, LTV, churn, negócios digitais]
timestamp: 2025-07-03T04:09:45.827748+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de E-commerce: Como Criar e Gerir uma Loja Online de Sucesso'
description: >-
title: "Guia Completo de E-commerce: Como Criar e Gerir uma Loja Online de Sucesso"
tags: [e-commerce, loja online, comércio eletrónico, vender online, estratégia de e-commerce]
timestamp: 2025-07-03T04:09:45.840568+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Estratégias de Preço para Produtos e Serviços Digitais
description: >-
title: "Guia Completo de Estratégias de Preço para Produtos e Serviços Digitais"
tags: [estratégias de preço, pricing, modelo de negócio, produtos digitais, SaaS]
timestamp: 2025-07-03T04:09:45.844712+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Facebook Ads
description: >-
Guia completo de Facebook Ads (Meta Ads): criar, segmentar, gerir e optimizar campanhas no Facebook e Instagram para obter resultados de negócio.
tags: [facebook ads, meta ads, anúncios no facebook, gestão de tráfego, publicidade online]
timestamp: 2025-07-03T04:09:45.857441+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Facebook Ads: Como Criar Anúncios que Convertem'
description: >-
title: "Guia Completo de Facebook Ads: Como Criar Anúncios que Convertem"
tags: [facebook ads, meta ads, anúncios no facebook, gestão de tráfego, publicidade online]
timestamp: 2025-07-03T04:09:45.867235+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Facebook Ads: Como Criar Anúncios que Convertem'
description: >-
title: "Guia Completo de Facebook Ads: Como Criar Anúncios que Convertem"
tags: [facebook ads, meta ads, anúncios no facebook, gestão de tráfego, publicidade online]
timestamp: 2025-07-03T04:09:45.877661+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Google Ads: Como Dominar a Publicidade de Pesquisa'
description: >-
title: "Guia Completo de Google Ads: Como Dominar a Publicidade de Pesquisa"
tags: [google ads, ppc, publicidade na pesquisa, gestão de tráfego, marketing nos motores de busca]
timestamp: 2025-07-03T04:09:45.883992+00:00
layer: raw
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Growth Hacking: O Manual para um Crescimento Acelerado'
description: >-
title: "Guia Completo de Growth Hacking: O Manual para um Crescimento Acelerado"
tags: [growth hacking, crescimento acelerado, funil de marketing, aarrr, marketing digital]
timestamp: 2025-07-03T04:09:45.894706+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Inbound Marketing
description: >-
Guia de marketing da Descomplicar sobre metodologia e estratégias de inbound marketing.
tags: [inbound marketing, marketing de atração, funil de marketing, metodologia inbound, marketing de conteúdo]
timestamp: 2025-07-03T04:09:45.903111+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Instagram para Negócios: Do Perfil à Venda'
description: >-
title: "Guia Completo de Instagram para Negócios: Do Perfil à Venda"
tags: [instagram para negócios, marketing no instagram, redes sociais, estratégia de conteúdo, social media]
timestamp: 2025-07-03T04:09:45.907502+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Inteligência Artificial para Marketing e Vendas
description: >-
title: "Guia Completo de Inteligência Artificial para Marketing e Vendas"
tags: [inteligência artificial, ia para marketing, ia para vendas, automação, personalização]
timestamp: 2025-07-03T04:09:45.915310+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Internacionalização de Negócios Digitais
description: >-
title: "Guia Completo de Internacionalização de Negócios Digitais"
tags: [internacionalização de negócios, expansão internacional, marketing digital internacional, exportação digital, estratégia de internacionalização]
timestamp: 2025-07-03T04:09:45.928843+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de LinkedIn para Negócios: A Estratégia para Crescer em B2B'
description: >-
title: "Guia Completo de LinkedIn para Negócios: A Estratégia para Crescer em B2B"
tags: [linkedin para negócios, marketing b2b, social selling, geração de leads, marca pessoal]
timestamp: 2025-07-03T04:09:45.967749+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Mapeamento da Jornada do Cliente
description: >-
title: "Guia Completo de Mapeamento da Jornada do Cliente"
tags: [mapeamento da jornada do cliente, customer journey map, experiência do cliente, estratégia digital, retenção de clientes]
timestamp: 2025-07-03T04:09:46.001680+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Mapeamento da Jornada do Cliente
description: >-
title: "Guia Completo de Mapeamento da Jornada do Cliente"
tags: [mapeamento da jornada do cliente, customer journey map, experiência do cliente, estratégia digital, retenção de clientes]
timestamp: 2025-07-03T04:09:46.007277+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Marketing Digital: A Estratégia Definitiva para Crescer o Seu Negócio'
description: >-
title: "Guia Completo de Marketing Digital: A Estratégia Definitiva para Crescer o Seu Negócio"
tags: [marketing digital, estratégia digital, guia de marketing, marketing para pme, crescimento de negócio]
timestamp: 2025-07-03T04:09:46.025550+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Marketing de Conteúdo: A Estratégia para Atrair e Fidelizar Clientes'
description: >-
title: "Guia Completo de Marketing de Conteúdo: A Estratégia para Atrair e Fidelizar Clientes"
tags: [marketing de conteúdo, content marketing, estratégia de conteúdo, inbound marketing, funil de vendas]
timestamp: 2025-07-03T04:09:46.017417+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Marketing de Conteúdo: A Estratégia para Atrair e Fidelizar Clientes'
description: >-
title: "Guia Completo de Marketing de Conteúdo: A Estratégia para Atrair e Fidelizar Clientes"
tags: [marketing de conteúdo, content marketing, estratégia de conteúdo, inbound marketing, funil de vendas]
timestamp: 2025-07-03T04:09:46.021541+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Marketing no Instagram: Como Transformar Seguidores em Clientes'
description: >-
title: "Guia Completo de Marketing no Instagram: Como Transformar Seguidores em Clientes"
tags: [marketing no instagram, instagram para negócios, redes sociais, estratégia de conteúdo, social media]
timestamp: 2025-07-03T04:09:46.031567+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Marketing no LinkedIn: A Estratégia para Crescer em B2B'
description: >-
title: "Guia Completo de Marketing no LinkedIn: A Estratégia para Crescer em B2B"
tags: [marketing no linkedin, marketing b2b, social selling, geração de leads, marca pessoal]
timestamp: 2025-07-03T04:09:46.037443+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Marketing no TikTok: A Nova Fronteira do Crescimento'
description: >-
title: "Guia Completo de Marketing no TikTok: A Nova Fronteira do Crescimento"
tags: [marketing no tiktok, tiktok para negócios, redes sociais, estratégia de conteúdo, vídeos curtos]
timestamp: 2025-07-03T04:09:46.041249+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Marketing no YouTube: Como Construir uma Audiência e Gerar Negócio'
description: >-
title: "Guia Completo de Marketing no YouTube: Como Construir uma Audiência e Gerar Negócio"
tags: [marketing no youtube, youtube para negócios, vídeo marketing, seo para youtube, estratégia de conteúdo]
timestamp: 2025-07-03T04:09:46.048832+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Métricas de Marketing: Como Medir o que Realmente Importa'
description: >-
title: "Guia Completo de Métricas de Marketing: Como Medir o que Realmente Importa"
tags: [métricas de marketing, kpis de marketing, roi, análise de dados, marketing digital]
timestamp: 2025-07-03T04:09:46.058752+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Outbound Marketing: A Estratégia para Acelerar Vendas'
description: >-
title: "Guia Completo de Outbound Marketing: A Estratégia para Acelerar Vendas"
tags: [outbound marketing, prospecção, vendas, cold email, social selling]
timestamp: 2025-07-03T04:09:46.080885+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Performance Marketing: A Ciência do Crescimento Mensurável'
description: >-
title: "Guia Completo de Performance Marketing: A Ciência do Crescimento Mensurável"
tags: [performance marketing, marketing de performance, roi, cpa, marketing orientado a resultados]
timestamp: 2025-07-03T04:09:46.090810+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Podcasting para Marcas e Negócios
description: >-
title: "Guia Completo de Podcasting para Marcas e Negócios"
tags: [podcasting para negócios, marketing de conteúdo, brand awareness, produção de conteúdo, estratégia de podcast]
timestamp: 2025-07-03T04:09:46.101207+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Podcasting para Marcas e Negócios
description: >-
title: "Guia Completo de Podcasting para Marcas e Negócios"
tags: [podcasting, marketing de conteúdo, branding, estratégia digital, comunicação digital]
timestamp: 2025-07-03T04:09:46.106417+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Produtividade
description: >-
Guia completo de produtividade: métodos, ferramentas e mentalidade para optimizar o tempo, focar no que importa e acelerar resultados.
tags: [produtividade, gestão de tempo, eficiência, foco, crescimento pessoal e profissional]
timestamp: 2025-07-03T04:09:46.112479+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Programas de Fidelização e Retenção de Clientes
description: >-
title: "Guia Completo de Programas de Fidelização e Retenção de Clientes"
tags: [programas de fidelização, retenção de clientes, lealdade do cliente, marketing de fidelização, LTV]
timestamp: 2025-07-03T04:09:46.121026+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de RGPD e Privacidade de Dados para Marketers
description: >-
title: "Guia Completo de RGPD e Privacidade de Dados para Marketers"
tags: [RGPD, privacidade de dados, marketing digital, consentimento, proteção de dados]
timestamp: 2025-07-03T04:09:46.124731+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de SEO Técnico
description: >-
Guia completo de SEO Técnico: optimizar velocidade, indexação e estrutura do site para que o Google encontre, rastreie e indexe as páginas com eficiência.
tags: [SEO técnico, Core Web Vitals, otimização de sites, velocidade do site, indexação]
timestamp: 2025-07-03T04:09:46.130632+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de SEO: O Mapa para o Topo do Google'
description: >-
title: "Guia Completo de SEO: O Mapa para o Topo do Google"
tags: [seo, otimização de sites, marketing de busca, seo on-page, link building]
timestamp: 2025-07-03T04:09:46.135793+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Social Media: A Estratégia para Construir Marcas e Vender Mais'
description: >-
title: "Guia Completo de Social Media: A Estratégia para Construir Marcas e Vender Mais"
tags: [social media, redes sociais, marketing nas redes sociais, estratégia de conteúdo, gestão de comunidades]
timestamp: 2025-07-03T04:09:46.140592+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Tráfego Pago: A Estratégia para Acelerar o Crescimento'
description: >-
title: "Guia Completo de Tráfego Pago: A Estratégia para Acelerar o Crescimento"
tags: [tráfego pago, ppc, anúncios online, gestão de tráfego, performance marketing]
timestamp: 2025-07-03T04:09:46.145307+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Vendas Online
description: >-
Guia completo de vendas online: construir um funil de vendas digital, optimizar a conversão e transformar o website numa máquina de gerar receita.
tags: [vendas online, e-commerce, funil de vendas, conversão, vender online]
timestamp: 2025-07-03T04:09:46.154639+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: 'Guia Completo de Vendas Online: A Estratégia para Converter Visitantes em Clientes'
description: >-
title: "Guia Completo de Vendas Online: A Estratégia para Converter Visitantes em Clientes"
tags: [vendas online, e-commerce, funil de vendas, conversão, vender online]
timestamp: 2025-07-03T04:09:46.161217+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo de Video Marketing (Além do YouTube)
description: >-
title: "Guia Completo de Video Marketing (Além do YouTube)"
tags: [video marketing, marketing de conteúdo, redes sociais, estratégia digital, publicidade digital]
timestamp: 2025-07-03T04:09:46.172541+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo do Facebook para Negócios
description: >-
title: "Guia Completo do Facebook para Negócios"
tags: [facebook para negócios, marketing no facebook, redes sociais, estratégia de conteúdo, facebook ads]
timestamp: 2025-07-03T04:09:46.183951+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo do Google Analytics
description: >-
Guia completo sobre o Google Analytics 4: configurar, ler relatórios e usar os dados para optimizar o marketing e acelerar o crescimento do negócio.
tags: [facebook para negócios, marketing no facebook, redes sociais, estratégia de conteúdo, facebook ads, google analytics, ga4, análise de dados, métricas, web analytics]
timestamp: 2025-07-03T04:09:46.190681+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo do Google Meu Negócio
description: >-
Guia completo sobre o Google Business Profile: optimizar o perfil, gerir avaliações e dominar o SEO Local para atrair mais clientes para o negócio.
tags: [google meu negócio, google business profile, seo local, marketing local, negócios locais]
timestamp: 2025-07-03T04:09:46.201383+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo do TikTok para Negócios
description: >-
title: "Guia Completo do TikTok para Negócios"
tags: [tiktok para negócios, marketing no tiktok, vídeos curtos, estratégia de social media, crescimento de negócio]
timestamp: 2025-07-03T04:09:46.205507+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo do YouTube para Negócios
description: >-
title: "Guia Completo do YouTube para Negócios"
tags: [youtube para negócios, marketing no youtube, vídeo marketing, seo para youtube, estratégia de conteúdo]
timestamp: 2025-07-03T04:09:46.223943+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo para Construir o seu Ecossistema de Ferramentas de Marketing
description: >-
title: "Guia Completo para Construir o seu Ecossistema de Ferramentas de Marketing"
tags: [ecossistema de marketing, martech stack, ferramentas de marketing, automação de marketing, tecnologia de marketing]
timestamp: 2025-07-03T04:09:46.236192+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia Completo para Estruturar uma Equipa de Marketing Digital
description: >-
title: "Guia Completo para Estruturar uma Equipa de Marketing Digital"
tags: [equipa de marketing digital, estrutura de marketing, papéis de marketing, contratar marketers, gestão de marketing]
timestamp: 2025-07-03T04:09:46.240505+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Análise de Dados para Negócios
description: >-
title: "Guia de Análise de Dados para Negócios"
tags: [análise de dados, business intelligence, data-driven, kpis, tomada de decisão]
timestamp: 2025-07-03T04:09:46.252350+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Automação de Marketing
description: >-
Guia completo sobre automação de marketing: o que é, como funciona e como implementar uma estratégia para nutrir leads e escalar o negócio.
tags: [automação de marketing, marketing automation, lead nurturing, automação, funil de vendas]
timestamp: 2025-07-03T04:09:46.293087+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Branding para Startups
description: >-
Guia completo de branding para startups: construir uma marca forte com recursos limitados, criar uma identidade memorável e usar o branding para atrair investimento.
tags: [branding para startups, estratégia de marca, identidade de marca, startups, crescimento]
timestamp: 2025-07-03T04:09:46.301730+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de CRO (Otimização de Conversão)
description: >-
title: "Guia de CRO (Otimização de Conversão)"
tags: [cro, otimização de conversão, testes a/b, funil de vendas, experiência do utilizador]
timestamp: 2025-07-03T04:09:46.315703+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Comunicação Digital
description: >-
Guia completo de comunicação digital: criar uma estratégia integrada, dominar os canais digitais e construir uma mensagem de marca forte e coesa.
tags: [comunicação digital, estratégia de comunicação, marketing digital, redes sociais, conteúdo digital]
timestamp: 2025-07-03T04:09:46.309517+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Design para Redes Sociais
description: >-
Guia completo de design para redes sociais: princípios, ferramentas e estratégias para criar visuais que captam atenção, constroem a marca e convertem.
tags: [design para redes sociais, design gráfico, identidade visual, branding, marketing visual]
timestamp: 2025-07-03T04:09:46.321698+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Estratégia Digital
description: >-
Guia completo de estratégia digital: criar um plano integrado que alinha os objectivos de negócio com as tácticas de marketing digital certas para crescer.
tags: [estratégia digital, plano de marketing digital, transformação digital, crescimento de negócio, consultoria estratégica]
timestamp: 2025-07-03T04:09:46.331800+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Gestão de Comunidades Online
description: >-
title: "Guia de Gestão de Comunidades Online"
tags: [gestão de comunidades, comunidade online, social media, engagement, fidelização de clientes]
timestamp: 2025-07-03T04:09:46.364290+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Gestão de Crise nas Redes Sociais
description: >-
title: "Guia de Gestão de Crise nas Redes Sociais"
tags: [gestão de crise, redes sociais, reputação online, comunicação de crise, pr digital]
timestamp: 2025-07-03T04:09:46.374782+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Gestão de Leads
description: >-
Guia completo de gestão de leads: capturar, qualificar, nutrir e converter leads num processo sistemático que acelera o crescimento do negócio.
tags: [gestão de leads, lead management, funil de vendas, crm, nutrição de leads]
timestamp: 2025-07-03T04:09:46.382170+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Gestão de Marca
description: >-
Guia de marketing da Descomplicar sobre gestão de marca (brand management).
tags: [gestão de marca, brand management, estratégia de marca, branding, reputação online]
timestamp: 2025-07-03T04:09:46.392651+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Gestão de Redes Sociais
description: >-
Guia completo de gestão de redes sociais: planear, executar e optimizar a presença social para construir comunidade e gerar resultados de negócio.
tags: [gestão de redes sociais, social media management, estratégia de redes sociais, calendário de conteúdo, community management]
timestamp: 2025-07-03T04:09:46.399307+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Gestão de Reputação Online
description: >-
Guia de marketing da Descomplicar sobre gestão de reputação online (ORM) e confiança digital.
tags: [gestão de reputação online, orm, reputação digital, branding, gestão de crise]
timestamp: 2025-07-03T04:09:46.406338+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Growth Marketing
description: >-
Guia de marketing da Descomplicar sobre metodologia e táticas de growth marketing.
tags: [growth marketing, growth hacking, funil aarrr, marketing de crescimento, otimização]
timestamp: 2025-07-03T04:09:46.415983+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de KPIs para Negócios Digitais
description: >-
Guia completo de KPIs para negócios digitais: definir, medir e analisar os indicadores-chave de performance que importam para o crescimento da empresa.
tags: [kpis, métricas, análise de dados, roi, performance marketing]
timestamp: 2025-07-03T04:09:46.420282+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Landing Pages de Alta Conversão
description: >-
title: "Guia de Landing Pages de Alta Conversão"
tags: [landing pages, otimização de conversão, cro, geração de leads, funil de vendas]
timestamp: 2025-07-03T04:09:46.431212+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Link Building
description: >-
Guia completo sobre link building da Descomplicar, com estratégias para adquirir backlinks de qualidade e aumentar a autoridade de domínio no Google.
tags: [link building, backlinks, seo off-page, autoridade de domínio, estratégia de seo]
timestamp: 2025-07-03T04:09:46.463491+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing B2B
description: >-
Guia de marketing da Descomplicar sobre estratégia e geração de leads em marketing B2B.
tags: [marketing b2b, geração de leads b2b, funil de vendas, social selling, account-based marketing]
timestamp: 2025-07-03T04:09:46.472518+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing Digital para Serviços Profissionais Liberais
description: >-
title: "Guia de Marketing Digital para Serviços Profissionais Liberais"
tags: [marketing para profissionais liberais, marketing para advogados, marketing para consultores, marca pessoal, geração de leads]
timestamp: 2025-07-03T04:09:46.556358+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing Digital para o Setor Imobiliário
description: >-
title: "Guia de Marketing Digital para o Setor Imobiliário"
tags: [marketing imobiliário, marketing digital imobiliário, leads imobiliários, angariação de imóveis, tecnologia imobiliária]
timestamp: 2025-07-03T04:09:46.522547+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing Digital para o Setor do Turismo e Hotelaria
description: >-
title: "Guia de Marketing Digital para o Setor do Turismo e Hotelaria"
tags: [marketing para hotelaria, marketing para turismo, reservas diretas, marketing de destino, alojamento local]
timestamp: 2025-07-03T04:09:46.499714+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing Local
description: >-
Guia completo de marketing local: optimizar a presença no Google, atrair clientes da área e tornar o negócio numa referência na comunidade.
tags: [marketing local, seo local, google meu negócio, marketing para negócios locais, publicidade local]
timestamp: 2025-07-03T04:09:46.563149+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing de Afiliados
description: >-
Autor: Descomplicar® - Agência de Aceleração Digital
tags: [marketing de afiliados, affiliate marketing, performance marketing, parcerias, vendas online]
timestamp: 2025-07-03T04:09:46.482879+00:00
layer: wiki
---
# Guia de Marketing de Afiliados
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing de Influência
description: >-
Guia de marketing da Descomplicar sobre marketing de influência e parcerias com influenciadores.
tags: [marketing de influência, influencer marketing, redes sociais, branding, marketing de conteúdo]
timestamp: 2025-07-03T04:09:46.487543+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing para E-commerce
description: >-
Guia completo de marketing para e-commerce: estratégias de SEO, tráfego pago, email e redes sociais para atrair visitantes e converter vendas numa loja online.
tags: [marketing para e-commerce, e-commerce, vendas online, marketing digital, loja online]
timestamp: 2025-07-03T04:09:46.566398+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing para Pequenas Empresas
description: >-
title: "Guia de Marketing para Pequenas Empresas"
tags: [marketing para pequenas empresas, marketing para pme, estratégia digital, crescimento de negócio, marketing com baixo orçamento]
timestamp: 2025-07-03T04:09:46.571025+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Marketing para Startups
description: >-
Guia completo de marketing para startups: tácticas de baixo orçamento e alto impacto para validar a ideia, ganhar tracção e acelerar o crescimento.
tags: [marketing para startups, growth marketing, startups, validação de mercado, tração]
timestamp: 2025-07-03T04:09:46.578526+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Métricas de Redes Sociais
description: >-
Guia completo de métricas de redes sociais: medir, analisar e reportar os KPIs que provam o impacto real das redes sociais no negócio.
tags: [métricas de redes sociais, kpis, social media, análise de dados, roi]
timestamp: 2025-07-03T04:09:46.583982+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Métricas para E-commerce
description: >-
Guia completo de métricas para e-commerce: medir e analisar os KPIs essenciais para optimizar a loja online, aumentar vendas e maximizar a rentabilidade.
tags: [métricas para e-commerce, kpis de e-commerce, e-commerce, análise de dados, taxa de conversão]
timestamp: 2025-07-03T04:09:46.592352+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Otimização de Sites
description: >-
Guia completo de optimização de sites: melhorar velocidade, experiência do utilizador, SEO e conversão para transformar o site numa máquina de resultados.
tags: [otimização de sites, seo técnico, performance de sites, experiência do utilizador, cro]
timestamp: 2025-07-03T04:09:46.602711+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Planeamento Estratégico para PMEs
description: >-
title: "Guia de Planeamento Estratégico para PMEs"
tags: [planeamento estratégico, estratégia para pme, crescimento de negócio, swot, objetivos de negócio]
timestamp: 2025-07-03T04:09:46.619046+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Planeamento de Marketing Digital
description: >-
title: "Guia de Planeamento de Marketing Digital"
tags: [planeamento de marketing, plano de marketing digital, estratégia digital, marketing para pme, objetivos de marketing]
timestamp: 2025-07-03T04:09:46.613939+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Produção de Conteúdo
description: >-
Guia completo sobre produção e marketing de conteúdo da Descomplicar, com processo passo a passo para criar conteúdo que atrai e converte audiência.
tags: [produção de conteúdo, marketing de conteúdo, criação de conteúdo, content marketing, estratégia de conteúdo]
timestamp: 2025-07-03T04:09:46.630582+00:00
layer: wiki
---
---
+5
View File
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de SEO Local
description: >-
Guia completo de SEO Local: optimizar o negócio para aparecer no Google Maps e no Local Pack, atraindo mais clientes da comunidade local.
tags: [seo local, marketing local, google meu negócio, google business profile, negócios locais]
timestamp: 2025-07-03T04:09:46.639647+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de SEO para E-commerce
description: >-
Guia completo de SEO para e-commerce: optimizar a loja online e as páginas de produto e categoria para atrair tráfego qualificado e aumentar vendas.
tags: [seo para e-commerce, e-commerce, seo, otimização de sites, vendas online]
timestamp: 2025-07-03T04:09:46.647633+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de SEO para Pequenas Empresas
description: >-
Guia completo de SEO para pequenas empresas: estratégias de alto impacto e baixo custo para optimizar o site, ser encontrado no Google e atrair mais clientes.
tags: [seo para pme, seo para pequenas empresas, seo local, marketing para pme, otimização de sites]
timestamp: 2025-07-03T04:09:46.655260+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Storytelling para Marcas
description: >-
Guia completo de storytelling para marcas: usar histórias para criar ligação emocional com a audiência, diferenciar a marca e inspirar à acção.
tags: [storytelling, branding, estratégia de marca, marketing de conteúdo, copywriting]
timestamp: 2025-07-03T04:09:46.664524+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de UX Writing
description: >-
Guia completo de UX Writing: usar as palavras para guiar utilizadores, criar uma experiência digital intuitiva e melhorar taxas de conversão (microcopy).
tags: [ux writing, microcopy, experiência do utilizador, design de produto, copywriting]
timestamp: 2025-07-03T04:09:46.668211+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia de Vendas B2B
description: >-
Guia de marketing da Descomplicar sobre o processo de vendas B2B complexas.
tags: [vendas b2b, processo de vendas, social selling, funil de vendas, crm]
timestamp: 2025-07-03T04:09:46.672446+00:00
layer: wiki
---
---
@@ -1,7 +1,12 @@
---
type: Document
title: Guia do Empreendedor Digital
description: >-
Guia completo para o empreendedor digital da Descomplicar, das etapas de validação ao crescimento de um negócio online de sucesso.
tags: [empreendedor digital, criar negócio online, startups, empreendedorismo, estratégia de negócio]
timestamp: 2025-07-03T04:09:46.720224+00:00
layer: wiki
---
---

Some files were not shown because too many files have changed in this diff Show More