# PLANO — Montra Instagram Automatizada sobre o Vinted
**LM Shirt Revivalist · 01/08/2026 · FECHADO (respostas do David às 10 perguntas)**

## ✅ DECISÕES FECHADAS — 01/08/2026
1. **Publicação/agendamento: Composio** (não Buffer — sem limites). A biblioteca de assets vive no **Lenovo**, que gere calendário e publicação.
2. **Horários:** definidos pelos **Instagram Insights** da conta (janela de maior atividade dos seguidores).
3. **Cadência:** drop de 10 aceite + **2 publicações de "closet" por semana**.
4. **Asset 9:16:** preço + tamanho + condição + CTA **"link na bio"** (a bio já aponta ao Vinted). ➜ Sem sticker por story = **publicação pode ser 100 % automática** via API.
5. **Preço no asset:** o preço de venda do David (ex.: 105 €), **não** o total com proteção Vinted.
6. **Margens/custos:** fora de scope — geridos noutro sistema.
7. **+50 camisolas estampadas:** entram nas **próximas 2 semanas**, com **reels** (formato principal para stock novo).
8. **Idiomas:** assets e legendas em **PT e EN**.
9. **Montra:** já existe — bio → Vinted. Não se cria página nova.
10. **Vendidas:** **o David avisa manualmente** → status SOLD e sai de rotação/reels. Primeiro caso: **Benfica alternativa Aimar (id 9517349547) VENDIDA por 95 €** — já marcada na BD.

> Estas decisões substituem a tabela "Decisões que precisam do David" e a restrição do sticker mais abaixo: com CTA "link na bio", a rota passa a **totalmente automática**.

Objetivo: sistema de rotação de stories que leva clientes diretamente a cada camisola no Vinted, ensaiado com as 30 atuais e pronto a escalar para ~80 quando entrarem as +50 estampadas.

---

## Princípio de arquitetura (validado)

```
Comprar → Restaurar/Estampar → Fotografar → Anúncio Vinted
       → Asset de story 9:16 → pool AVAILABLE → rotação semanal
       → SOLD → sai do pool automaticamente
```

**Fonte de verdade = base de dados local, nunca o arquivo de stories do Instagram.**
O link do Vinted vive na BD, mapeado ao shirt_id; cada publicação recria o sticker a partir da BD.

### Restrição técnica assumida (decisão de raiz)
A Meta Graph API publica stories mas **não suporta link stickers**. Logo:
- **Rota escolhida: semi-automática.** O sistema prepara tudo (asset, legenda, link, agendamento); o passo final é uma notificação no telemóvel do David → confirmar + colar o sticker (~20 s por story, ~3 min por drop semanal).
- Automação 100% de stories com sticker só existe via bots de UI → risco de bloqueio da conta comercial. **Excluído.**
- Plano B sempre ativo: link na bio → página "montra" com todas as camisolas (ver Fase 4), para quem vê a story depois de expirar o sticker.

---

## Base de dados (ficheiro `shirts_db.json`)

Esquema por camisola:

```
shirt_id        → id Vinted (ex.: 9517339324)
title           → título do anúncio
vinted_url      → link direto
price           → preço atual
brand/size/cond → adidas / XL / Muito bom
story_asset     → caminho do 9:16 (Assets_Stories\NN.png)
status          → AVAILABLE | SOLD | RESERVED | DRAFT
entered_pool    → data de entrada
last_story_date → última vez em story
times_posted    → contador
priority        → NORMAL | NEW_IN | BOOST (parado 30+ dias) | HIGH_MARGIN
```

Arranque: gerado automaticamente do `lm_vinted_catalog.json` já existente (30 camisolas).

## Regras da rotação

- **Drop semanal (domingo):** selecionar 10 camisolas com
  `status = AVAILABLE` E `last_story_date ≥ 7 dias` (na prática ≥ 14 com pool de 30; ≥ 21–28 com pool de 80)
- **Ordenação dentro do drop:** NEW_IN primeiro → BOOST (30+ dias sem venda) → HIGH_MARGIN → menos vezes publicadas → mais favoritos no Vinted
- **Formato do drop:**
  1. Capa "VINTAGE DROP — DISPONÍVEL AGORA" (1 story)
  2. 10 stories: asset da camisola + sticker de link para o anúncio
  3. Fecho: "Todas as camisolas disponíveis → Vinted" (link do perfil)
- **Sync Vinted (antes de cada drop):** re-ler a wardrobe API do perfil 97806751; artigo desaparecido/`is_closed` → `SOLD` e sai do pool; artigo novo → `NEW_IN`, entra no próximo drop com sequência dedicada "NEW IN" antes da rotação normal
- **Preços:** o sync também atualiza preços na BD → assets com preço desatualizado são regenerados automaticamente

---

## Fases de execução

### Fase 1 — Ensaio com as 30 atuais (esta semana)
1. Gerar `shirts_db.json` a partir do catálogo existente ✔ dados prontos
2. Gerar 30 assets 9:16 (1080×1920): foto principal + clube/época + preço + "toca no link ↗" — template consistente com a marca LM
3. **1º drop manual completo (validação):** David publica 10 stories à mão com os assets + stickers, confirmando que cada asset abre o anúncio certo. Marcar `last_story_date` e `times_posted`
4. Critério de sucesso: 10/10 links certos + medir toques no link por story

### Fase 2 — Semi-automação (semana 2)
5. Script `rotation.py` (ou PS1): sync Vinted → seleção do drop → pasta `Drops\2026-08-XX\` com assets numerados + `legendas.txt` + `links.txt` na ordem de publicação
6. Agendamento: tarefa domingo 17h que corre o script e envia o pacote para o telemóvel (Buffer/Postiz como reminder de story, ou simplesmente pasta no telemóvel via OneDrive/Drive)
7. Rotina do David ao domingo: abrir notificação → publicar as 10 na ordem → colar sticker de cada uma (o link vem no `links.txt` na mesma ordem) → ~5 min

### Fase 3 — Entrada das +50 estampadas
8. Por cada camisola nova: anúncio Vinted primeiro → correr sync → entra como NEW_IN → asset gerado automaticamente do anúncio (foto + descrição, como fizemos com as 30)
9. Lançamento faseado: NÃO listar as 50 de uma vez. Lotes de 8–10/semana ("NEW IN Thursday"), cada lote com sequência de stories dedicada. Mantém o perfil Vinted "Anuncia Frequentemente" e dá 5–6 semanas de conteúdo novo garantido
10. Com pool de ~80: drop de 10–12/domingo → cada camisola reaparece a cada 7–8 semanas + boosts

### Fase 4 — Montra permanente (paralelo, sem pressa)
11. Página web gerada do `shirts_db.json`: grelha de camisolas AVAILABLE, botão "Comprar no Vinted" por artigo → é o destino do link na bio e resolve o problema das stories expirarem
12. Regeneração automática da página em cada sync (SOLD desaparece sozinho)

### Melhorias posteriores (já previstas no desenho, não bloqueiam nada)
- BOOST automático: 30+ dias sem venda → prioridade + sugestão de baixar preço 10 %
- HIGH_MARGIN: campo custo na BD → margem calculada → prioridade no drop
- Métricas: toques no link por story (Instagram Insights) → camisolas com muitos toques e zero vendas = problema de preço; zero toques = problema de foto/asset

---

## Decisões que precisam do David
| Decisão | Recomendação |
|---|---|
| Ferramenta de reminder | Buffer (já ligado ao Claude) ou pasta partilhada simples — testar Buffer primeiro |
| Dia/hora do drop | Domingo 18h–20h (pico de engagement PT) |
| Tamanho do drop | 10 stories + capa + fecho |
| "NEW IN" dia próprio? | Sim — quinta-feira, separado do drop de domingo |

## Riscos e mitigação
- **Instagram nunca vai deixar automatizar o sticker** → desenho já assume passo manual de 5 min/semana; se a Meta abrir a API, o sistema fica 100 % automático sem mudar nada (o link já está na BD)
- **Vinted muda a API/rate limits** → o sync usa o método já validado (wardrobe API + JSON-LD, lotes de 6, tratar 429); pior caso: sync manual mensal
- **Crescimento do pool torna a rotação lenta** → parâmetros (tamanho do drop, intervalo mínimo) são config, não código
