From d073df12d12744816febf4eacb76fb3b2bddb3d5 Mon Sep 17 00:00:00 2001 From: 4Ventures <4ventures@MacBook-Air-de-4Ventures.local> Date: Tue, 6 Oct 2026 16:46:17 +0200 Subject: [PATCH] Treat Brava-style SEMANA/Story/POST Excel as the official calendar template. Harden week-grid parsing (placeholders, status rows, month wrap) and ship an October-shaped plantilla for agency uploads. Co-authored-by: Cursor --- .../plantillas/calendario-rrss-oficial.xlsx | Bin 0 -> 7072 bytes src/components/CalendarUpload.tsx | 16 ++- src/lib/calendar-import.ts | 119 ++++++++++++++---- 3 files changed, 103 insertions(+), 32 deletions(-) create mode 100644 public/plantillas/calendario-rrss-oficial.xlsx diff --git a/public/plantillas/calendario-rrss-oficial.xlsx b/public/plantillas/calendario-rrss-oficial.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f7616d779cad747044af49f9bc7d2d93bd8a6967 GIT binary patch literal 7072 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

- Encaja las publicaciones por día en el mes. Acepta rejilla SEMANA / - STORIES / POST o columnas fecha + título / copy. Si el mes ya - existía, se reemplaza. + Plantilla oficial: Excel por mes con filas SEMANA / Story / POST + (como Brava Octubre). También CSV con columnas fecha + título. Si + el mes ya existía, se reemplaza.

- Descargar plantilla CSV + Plantilla Excel (oficial) + + + CSV alternativo