Untitled

Anonymous
plain_text
04/08/2026 12:46 PM
52.8 KB
11
Indexable
const pptxgen = require("pptxgenjs");

const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Rwanda: Misconceptions, History & Kagame's Regime";

// Color palette — deep Rwanda red/black/gold
const C = {
  bg: "0A0A0A",          // near-black background
  bgLight: "111111",     // slightly lighter
  red: "C8102E",         // Rwanda red
  gold: "D4AF37",        // gold accent
  white: "F5F5F5",       // off-white text
  muted: "999999",       // muted text
  card: "1A1A1A",        // card background
  cardBorder: "2A2A2A",  // card border
  accent: "E8B84B",      // warm gold highlight
  green: "009A44",       // Rwanda flag green (subtle use)
};

const makeShadow = () => ({ type: "outer", blur: 8, offset: 3, angle: 135, color: "000000", opacity: 0.4 });

// ── TITLE SLIDE ──────────────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };

  // Top red bar
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: C.red }, line: { color: C.red } });

  // Bottom gold bar
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.545, w: 10, h: 0.08, fill: { color: C.gold }, line: { color: C.gold } });

  // Large title
  s.addText("RWANDA", {
    x: 0.5, y: 0.9, w: 9, h: 1.8,
    fontSize: 80, bold: true, color: C.white,
    fontFace: "Georgia", align: "center", charSpacing: 12, margin: 0
  });

  // Subtitle
  s.addText("MISCONCEPTIONS · HISTORY · KAGAME'S REGIME", {
    x: 0.5, y: 2.7, w: 9, h: 0.5,
    fontSize: 14, color: C.gold, fontFace: "Calibri",
    align: "center", charSpacing: 4, margin: 0
  });

  // Divider line
  s.addShape(pres.shapes.RECTANGLE, { x: 3.5, y: 3.3, w: 3, h: 0.04, fill: { color: C.red }, line: { color: C.red } });

  // Subtitle description
  s.addText("The story they don't tell you", {
    x: 0.5, y: 3.5, w: 9, h: 0.4,
    fontSize: 16, color: C.muted, fontFace: "Calibri",
    align: "center", italic: true, margin: 0
  });

  // Flag emoji text
  s.addText("🇷🇼", {
    x: 4.6, y: 4.2, w: 0.8, h: 0.6,
    fontSize: 28, align: "center", margin: 0
  });
}

// ── SECTION HEADER: MISCONCEPTIONS ──────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.red };

  s.addText("PART ONE", {
    x: 0.5, y: 1.2, w: 9, h: 0.6,
    fontSize: 18, color: "FFFFFF", fontFace: "Calibri",
    align: "center", charSpacing: 8, bold: false, margin: 0
  });
  s.addText("MISCONCEPTIONS", {
    x: 0.5, y: 1.9, w: 9, h: 1.4,
    fontSize: 64, bold: true, color: "FFFFFF",
    fontFace: "Georgia", align: "center", margin: 0
  });
  s.addText("What the West gets wrong about Rwanda", {
    x: 0.5, y: 3.5, w: 9, h: 0.5,
    fontSize: 16, color: "FFDDDD", fontFace: "Calibri",
    align: "center", italic: true, margin: 0
  });
}

// ── SLIDE: INYENZI ───────────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.red }, line: { color: C.red } });

  s.addText("MISCONCEPTION 1", { x: 0.3, y: 0.25, w: 9.4, h: 0.35, fontSize: 11, color: C.red, fontFace: "Calibri", bold: true, charSpacing: 3, margin: 0 });
  s.addText('The Word "Inyenzi"', { x: 0.3, y: 0.6, w: 9.4, h: 0.7, fontSize: 34, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });

  // Two columns
  // Left: what it actually meant
  s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 1.5, w: 4.4, h: 3.6, fill: { color: C.card }, line: { color: C.cardBorder, width: 0.5 }, shadow: makeShadow() });
  s.addText("THE REAL ORIGIN", { x: 0.5, y: 1.65, w: 4, h: 0.3, fontSize: 11, bold: true, color: C.gold, fontFace: "Calibri", charSpacing: 2, margin: 0 });
  s.addText([
    { text: "Ingangurarugo", options: { bold: true, breakLine: true } },
    { text: "One of the King's elite Tutsi warrior battalions. The full phrase — ", options: { breakLine: false } },
    { text: '"yiteze kuba Inyenzi"', options: { italic: true, breakLine: false } },
    { text: ' — meant someone who chose to become a hero. A badge of military pride.\n\n', options: { breakLine: false } },
    { text: "After 1959, Tutsi exiles ", options: { breakLine: false } },
    { text: "adopted this name themselves", options: { bold: true, breakLine: false } },
    { text: " for their armed insurgency raids into Rwanda. They chose it as an identity.", options: {} },
  ], { x: 0.5, y: 2.0, w: 4.0, h: 2.8, fontSize: 13, color: C.white, fontFace: "Calibri", margin: 0 });

  // Right: how it became a slur
  s.addShape(pres.shapes.RECTANGLE, { x: 5.3, y: 1.5, w: 4.4, h: 3.6, fill: { color: C.card }, line: { color: C.cardBorder, width: 0.5 }, shadow: makeShadow() });
  s.addText("HOW RTLM WEAPONISED IT", { x: 5.5, y: 1.65, w: 4.0, h: 0.3, fontSize: 11, bold: true, color: C.red, fontFace: "Calibri", charSpacing: 2, margin: 0 });
  s.addText([
    { text: "RTLM", options: { bold: true, breakLine: false } },
    { text: " (Radio Télévision Libre des Mille Collines) — the Hutu extremist propaganda radio — deliberately repurposed this existing nickname as a derogatory term for all Tutsis.\n\n", options: { breakLine: false } },
    { text: "The mechanism: ", options: { bold: true, breakLine: false } },
    { text: "calling Tutsis 'cockroaches' in the third person made killing feel impersonal — like pest control, not murder.\n\n", options: { breakLine: false } },
    { text: "Key point:", options: { bold: true, breakLine: false } },
    { text: " The Tutsi exile community chose that name first. RTLM turned their own identity against them.", options: {} },
  ], { x: 5.5, y: 2.0, w: 4.0, h: 2.8, fontSize: 13, color: C.white, fontFace: "Calibri", margin: 0 });
}

// ── SLIDE: TUTSI KINGS ───────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.gold }, line: { color: C.gold } });

  s.addText("MISCONCEPTION 2", { x: 0.3, y: 0.25, w: 9.4, h: 0.35, fontSize: 11, color: C.gold, fontFace: "Calibri", bold: true, charSpacing: 3, margin: 0 });
  s.addText("Tutsi Kings Always Ruled All of Rwanda", { x: 0.3, y: 0.6, w: 9.4, h: 0.7, fontSize: 28, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });

  // Timeline boxes
  const timelineItems = [
    { year: "1200–1300", label: "Tutsi kings consolidate central Rwanda", color: C.gold },
    { year: "1500s", label: "Hutus occupy Rwanda — largely autonomous in the north", color: C.muted },
    { year: "Pre-1895", label: "Tutsi feudal rule — forced Hutu labour (uburetwa)", color: C.red },
    { year: "1895", label: "Germans arrive — maintain Tutsi monarchy, help expand it into Hutu northern regions that had NEVER been under Tutsi rule", color: "4A90D9" },
    { year: "Post-WWI", label: "Belgium takes over — rules THROUGH Tutsi monarchy (indirect rule)", color: C.gold },
  ];

  timelineItems.forEach((item, i) => {
    const y = 1.4 + i * 0.8;
    s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: y, w: 1.8, h: 0.55, fill: { color: item.color }, line: { color: item.color } });
    s.addText(item.year, { x: 0.3, y: y, w: 1.8, h: 0.55, fontSize: 12, bold: true, color: "000000", fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
    s.addText(item.label, { x: 2.3, y: y + 0.05, w: 7.4, h: 0.45, fontSize: 13, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0 });
  });

  s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 5.2, w: 9.4, h: 0.3, fill: { color: "1C1C1C" }, line: { color: "1C1C1C" } });
  s.addText("Key: Northern regions like Gisenyi only came under Tutsi rule through Belgian-backed expansion — within living memory of the genocide", {
    x: 0.4, y: 5.2, w: 9.2, h: 0.3, fontSize: 11, color: C.gold, fontFace: "Calibri", italic: true, valign: "middle", margin: 0
  });
}

// ── SLIDE: BELGIAN IDENTITY CARDS ───────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.gold }, line: { color: C.gold } });

  s.addText("MISCONCEPTION 4", { x: 0.5, y: 0.2, w: 9, h: 0.35, fontSize: 11, color: C.gold, fontFace: "Calibri", bold: true, charSpacing: 3, align: "center", margin: 0 });
  s.addText("The Belgian Identity Cards — 1930s", { x: 0.5, y: 0.55, w: 9, h: 0.65, fontSize: 30, bold: true, color: C.white, fontFace: "Georgia", align: "center", margin: 0 });

  s.addText("The cards the Belgians introduced in the 1930s were literally used to sort people at roadblocks during the genocide sixty years later.", {
    x: 0.5, y: 1.25, w: 9, h: 0.6, fontSize: 15, color: C.accent, fontFace: "Calibri", align: "center", italic: true, margin: 0
  });

  // Before/After comparison
  s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 2.0, w: 4.3, h: 3.2, fill: { color: C.card }, line: { color: "333333", width: 0.5 }, shadow: makeShadow() });
  s.addText("BEFORE 1930s", { x: 0.5, y: 2.15, w: 3.9, h: 0.35, fontSize: 13, bold: true, color: C.muted, fontFace: "Calibri", align: "center", charSpacing: 2, margin: 0 });
  s.addText([
    { text: "• Identity was fluid and contextual\n", options: { bullet: false } },
    { text: "• No written documentation of ethnicity\n", options: { bullet: false } },
    { text: "• Wealthy Hutus could acquire Tutsi status (kwihutura)\n", options: { bullet: false } },
    { text: "• Social negotiation was possible\n", options: { bullet: false } },
    { text: "• Everyone knew the groups — but it wasn't fixed on paper", options: { bullet: false } },
  ], { x: 0.5, y: 2.6, w: 3.9, h: 2.4, fontSize: 13, color: C.white, fontFace: "Calibri", margin: 0 });

  s.addShape(pres.shapes.RECTANGLE, { x: 5.4, y: 2.0, w: 4.3, h: 3.2, fill: { color: "1C0808" }, line: { color: C.red, width: 1 }, shadow: makeShadow() });
  s.addText("AFTER THE CARDS", { x: 5.6, y: 2.15, w: 3.9, h: 0.35, fontSize: 13, bold: true, color: C.red, fontFace: "Calibri", align: "center", charSpacing: 2, margin: 0 });
  s.addText([
    { text: "• Ethnicity fixed permanently in writing\n", options: { bullet: false } },
    { text: "• Classification based on pseudoscientific 'Hamitic' theory — skull measurements\n", options: { bullet: false } },
    { text: "• Identity became heritable — your children inherited your card\n", options: { bullet: false } },
    { text: "• No more kwihutura — no exit from the system\n", options: { bullet: false } },
    { text: "• These cards were used at roadblocks in 1994 to decide who lived and who died", options: { bold: true } },
  ], { x: 5.6, y: 2.6, w: 3.9, h: 2.4, fontSize: 13, color: C.white, fontFace: "Calibri", margin: 0 });
}

// ── SLIDE: BAHUTU MANIFESTO & SOCIAL REVOLUTION ──────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.green }, line: { color: C.green } });

  s.addText("MISCONCEPTION 5", { x: 0.3, y: 0.2, w: 9.4, h: 0.3, fontSize: 11, color: C.green, fontFace: "Calibri", bold: true, charSpacing: 3, margin: 0 });
  s.addText("The Social Revolution Was Spontaneous", { x: 0.3, y: 0.5, w: 9.4, h: 0.65, fontSize: 28, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });

  // Three info boxes
  const boxes = [
    {
      title: "THE BAHUTU MANIFESTO (1957)",
      color: C.gold,
      text: "A group of Hutu intellectuals wrote the Manifestes des Bahutu — sent to both the UN and Belgian administration. It outlined systematic Hutu grievances about Tutsi domination and demanded political emancipation. The Tutsi elite responded with the 'Mise au Point' — dismissing all Hutu concerns as 'no problem,' 'not relevant,' 'false.'"
    },
    {
      title: "THE IMMEDIATE TRIGGER (1959)",
      color: C.red,
      text: "The assault on Dominique Mbonyumutwa — a Hutu sub-chief — by Tutsi youth sparked the mass uprising. Mbonyumutwa then became Rwanda's FIRST Prime Minister (Jan–Oct 1961) — 9 months in office. History barely mentions him, despite the revolution starting with an attack on him."
    },
    {
      title: "BELGIUM SWITCHES SIDES",
      color: "4A90D9",
      text: "Belgium — watching their Tutsi clients flee — switched support to Hutu political leaders. Grégoire Kayibanda became Rwanda's first president. July 1st, 1962: Declaration of Independence. The League of Nations reports had for a decade documented extreme disparity between Hutu and Tutsi — Belgium had been warned repeatedly."
    },
  ];

  boxes.forEach((box, i) => {
    const x = 0.2 + i * 3.25;
    s.addShape(pres.shapes.RECTANGLE, { x, y: 1.4, w: 3.1, h: 4.0, fill: { color: C.card }, line: { color: box.color, width: 1.5 }, shadow: makeShadow() });
    s.addShape(pres.shapes.RECTANGLE, { x, y: 1.4, w: 3.1, h: 0.06, fill: { color: box.color }, line: { color: box.color } });
    s.addText(box.title, { x: x + 0.15, y: 1.55, w: 2.8, h: 0.5, fontSize: 11, bold: true, color: box.color, fontFace: "Calibri", charSpacing: 1, margin: 0 });
    s.addText(box.text, { x: x + 0.15, y: 2.1, w: 2.8, h: 3.1, fontSize: 12, color: C.white, fontFace: "Calibri", margin: 0 });
  });
}

// ── SECTION HEADER: HISTORY ──────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: "0D1B0D" };

  s.addText("PART TWO", {
    x: 0.5, y: 1.2, w: 9, h: 0.6,
    fontSize: 18, color: C.green, fontFace: "Calibri",
    align: "center", charSpacing: 8, margin: 0
  });
  s.addText("THE ROAD TO GENOCIDE", {
    x: 0.5, y: 1.9, w: 9, h: 1.4,
    fontSize: 52, bold: true, color: C.white,
    fontFace: "Georgia", align: "center", margin: 0
  });
  s.addText("1990 Civil War · Arusha Accords · The Plane · The Infiltration", {
    x: 0.5, y: 3.5, w: 9, h: 0.5,
    fontSize: 14, color: C.muted, fontFace: "Calibri",
    align: "center", italic: true, margin: 0
  });
}

// ── SLIDE: FRED RWIGEMA ──────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.red }, line: { color: C.red } });

  s.addText("THE ERASED FOUNDER", { x: 0.5, y: 0.2, w: 9, h: 0.3, fontSize: 11, color: C.red, fontFace: "Calibri", bold: true, charSpacing: 3, align: "center", margin: 0 });
  s.addText("Fred Rwigema — The Man Kagame Replaced", { x: 0.5, y: 0.55, w: 9, h: 0.65, fontSize: 28, bold: true, color: C.white, fontFace: "Georgia", align: "center", margin: 0 });

  // Left column — who he was
  s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y: 1.4, w: 4.4, h: 3.9, fill: { color: C.card }, line: { color: C.cardBorder }, shadow: makeShadow() });
  s.addText("WHO HE WAS", { x: 0.5, y: 1.55, w: 4.0, h: 0.3, fontSize: 11, bold: true, color: C.gold, fontFace: "Calibri", charSpacing: 2, margin: 0 });
  s.addText([
    { text: "• ", options: {} },{ text: "RPF founder", options: { bold: true } },{ text: " and undisputed commander\n", options: {} },
    { text: "• Earned the nickname ", options: {} },{ text: '"Mungu wa vita"', options: { italic: true } },{ text: " — God of War\n", options: {} },
    { text: "• Known for NOT committing war crimes — unusual for the region\n", options: {} },
    { text: "• Loved across ethnic lines by his soldiers\n", options: {} },
    { text: "• Open to a negotiated settlement", options: { bold: true } },{ text: " with Habyarimana\n", options: {} },
    { text: "• Deputy Minister of Defence in Uganda — Museveni's most trusted general", options: {} },
  ], { x: 0.5, y: 1.95, w: 4.0, h: 3.1, fontSize: 13, color: C.white, fontFace: "Calibri", margin: 0 });

  // Right column — his death
  s.addShape(pres.shapes.RECTANGLE, { x: 5.3, y: 1.4, w: 4.4, h: 3.9, fill: { color: "1C0808" }, line: { color: C.red, width: 1 }, shadow: makeShadow() });
  s.addText("HIS DEATH — DAY 2 OF THE WAR", { x: 5.5, y: 1.55, w: 4.0, h: 0.3, fontSize: 11, bold: true, color: C.red, fontFace: "Calibri", charSpacing: 2, margin: 0 });
  s.addText([
    { text: "October 2, 1990", options: { bold: true } },{ text: " — shot in the head on the second day of the invasion he led\n\n", options: {} },
    { text: "Official story:", options: { bold: true } },{ text: " stray bullet from a Rwandan government vehicle\n\n", options: {} },
    { text: "Historian Gérard Prunier:", options: { bold: true } },{ text: " established from ", options: {} },{ text: '"incontrovertible evidence including an eyewitness"', options: { italic: true } },{ text: " that he was killed by his own subcommander Bayingana after an argument over tactics\n\n", options: {} },
    { text: "Kagame was at Fort Leavenworth", options: { bold: true } },{ text: " when the invasion launched. After Rwigema died, he was rushed back and took sole command.\n\n", options: {} },
    { text: "Both Bayingana and Bunyenyezi — the other two senior commanders — also died mysteriously within weeks.", options: { bold: true } },
  ], { x: 5.5, y: 1.95, w: 4.0, h: 3.1, fontSize: 12, color: C.white, fontFace: "Calibri", margin: 0 });
}

// ── SLIDE: KAGAME + CIA + FORT LEAVENWORTH ───────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.red }, line: { color: C.red } });

  s.addText("THE CIA CONNECTION", { x: 0.3, y: 0.2, w: 9.4, h: 0.3, fontSize: 11, color: C.red, fontFace: "Calibri", bold: true, charSpacing: 3, margin: 0 });
  s.addText("Kagame, Fort Leavenworth & the Lumumba Precedent", { x: 0.3, y: 0.5, w: 9.4, h: 0.65, fontSize: 24, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });

  // Four evidence boxes
  const items = [
    { title: "FORT LEAVENWORTH", color: C.gold, text: "Kagame trained in psychological warfare and intelligence operations at the US Army Command and General Staff College. FBI agent Jim Lyons — who investigated the plane shooting — called him on record a 'fair-haired boy of the CIA and British MI6.'" },
    { title: "US PROTECTS KAGAME", color: C.red, text: "US Ambassador Prosper warned UN prosecutor Del Ponte she would be fired if she indicted Kagame. She was removed. Prosper then transferred ALL RPF evidence to the Rwandan government. He now works as a lawyer representing Rwanda." },
    { title: "THE LUMUMBA PATTERN", color: "4A90D9", text: "1961: CIA assassinated Congo's first elected PM Patrice Lumumba for wanting to nationalise mineral resources. Confirmed by US Senate Church Committee (1975). Replaced with CIA puppet Mobutu. Same playbook, 35 years later." },
    { title: "THE MINERAL MOTIVE", color: C.green, text: "2001 UN Report: Kagame and Museveni named as 'godfathers of illegal resource exploitation' in Congo. Rwanda's Ministry of Defence had a dedicated 'Congo Desk' — collecting taxes from mineral companies. Rwanda exports far more cobalt than its geology produces." },
  ];

  items.forEach((item, i) => {
    const col = i % 2;
    const row = Math.floor(i / 2);
    const x = 0.3 + col * 4.85;
    const y = 1.35 + row * 2.0;
    s.addShape(pres.shapes.RECTANGLE, { x, y, w: 4.6, h: 1.85, fill: { color: C.card }, line: { color: item.color, width: 1 }, shadow: makeShadow() });
    s.addText(item.title, { x: x + 0.15, y: y + 0.12, w: 4.3, h: 0.3, fontSize: 11, bold: true, color: item.color, fontFace: "Calibri", charSpacing: 2, margin: 0 });
    s.addText(item.text, { x: x + 0.15, y: y + 0.48, w: 4.3, h: 1.25, fontSize: 12, color: C.white, fontFace: "Calibri", margin: 0 });
  });
}

// ── SLIDE: DEATH OF HABYARIMANA ──────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.red }, line: { color: C.red } });

  s.addText("POINT 11", { x: 0.5, y: 0.18, w: 9, h: 0.3, fontSize: 11, color: C.red, fontFace: "Calibri", bold: true, charSpacing: 3, align: "center", margin: 0 });
  s.addText("The Death of Habyarimana — April 6, 1994", { x: 0.5, y: 0.5, w: 9, h: 0.65, fontSize: 26, bold: true, color: C.white, fontFace: "Georgia", align: "center", margin: 0 });

  // Key quote
  s.addShape(pres.shapes.RECTANGLE, { x: 1, y: 1.2, w: 8, h: 0.9, fill: { color: "1C0808" }, line: { color: C.red, width: 1 } });
  s.addText('"I was a refugee for 30 years, I had the right to fight for my rights... if I had died in the same process, would this judge be asking who killed me?"', {
    x: 1.2, y: 1.25, w: 7.6, h: 0.8, fontSize: 13, color: C.accent, fontFace: "Georgia", italic: true, align: "center", valign: "middle", margin: 0
  });
  s.addText("— Kagame, BBC HARDtalk, December 6, 2006", { x: 1, y: 2.12, w: 8, h: 0.25, fontSize: 11, color: C.muted, fontFace: "Calibri", italic: true, align: "center", margin: 0 });

  // Evidence grid
  const evidenceItems = [
    { label: "19:00 STANDBY ORDER", text: "RPF units received 'stand-by one' order — full battle dress — at 7pm. Plane shot down at 8:30pm. ICTR sworn testimony.", color: C.red },
    { label: "MISSILES TRANSPORTED", text: "ICTR SIU confirmed RPF surface-to-air missile team transported missiles from northern HQ to Kigali. Named individuals who hid and fired them.", color: C.gold },
    { label: "INNER CIRCLE CONFIRMS", text: "Nyamwasa, Rudasingwa, Micombero — all former RPF commanders — testified Kagame ordered the attack. These ran Rwanda.", color: "4A90D9" },
    { label: "US BURIED EVIDENCE", text: "ICTR investigator Hourigan collected RPF plane evidence in 1997. Chief prosecutor Arbour shut it down. Del Ponte removed when she planned indictment.", color: C.green },
  ];

  evidenceItems.forEach((item, i) => {
    const col = i % 2;
    const row = Math.floor(i / 2);
    const x = 0.3 + col * 4.85;
    const y = 2.5 + row * 1.55;
    s.addShape(pres.shapes.RECTANGLE, { x, y, w: 4.6, h: 1.4, fill: { color: C.card }, line: { color: item.color, width: 0.8 }, shadow: makeShadow() });
    s.addText(item.label, { x: x + 0.15, y: y + 0.1, w: 4.3, h: 0.3, fontSize: 10, bold: true, color: item.color, fontFace: "Calibri", charSpacing: 2, margin: 0 });
    s.addText(item.text, { x: x + 0.15, y: y + 0.42, w: 4.3, h: 0.88, fontSize: 12, color: C.white, fontFace: "Calibri", margin: 0 });
  });
}

// ── SLIDE: INTERAHAMWE INFILTRATION ─────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.red }, line: { color: C.red } });

  s.addText("POINT 12", { x: 0.3, y: 0.2, w: 9.4, h: 0.3, fontSize: 11, color: C.red, fontFace: "Calibri", bold: true, charSpacing: 3, margin: 0 });
  s.addText("RPF Infiltration of the Interahamwe", { x: 0.3, y: 0.5, w: 9.4, h: 0.65, fontSize: 28, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });

  s.addText("SOURCE: Sworn testimonies of former RPF soldiers to UN Special Investigations Unit (ICTR) — leaked via Mail & Guardian", {
    x: 0.3, y: 1.2, w: 9.4, h: 0.3, fontSize: 11, color: C.gold, fontFace: "Calibri", italic: true, margin: 0
  });

  const points = [
    { icon: "DISGUISE", text: "RPF commandos — called 'technicians' — wore Rwandan Armed Forces (FAR) uniforms and used government-issued weapons to commit atrocities that would be blamed on the government" },
    { icon: "AT ROADBLOCKS", text: '"They checked IDs and killed people by machete exactly like the Interahamwe, so no one would be suspicious." — Former RPF soldier, sworn ICTR testimony' },
    { icon: "KILLED TUTSIS", text: "These operatives killed Tutsi civilians deliberately — to maximise international outrage, strengthen the Hutu extremist narrative, and build RPF moral authority in the eyes of the world" },
    { icon: "SCALE", text: "Over TWO FULL BATTALIONS of these commandos were deployed in Kigali alone during the genocide. This was not a rogue operation — it was coordinated at the highest level" },
    { icon: "PRE-GENOCIDE", text: "Before April 1994: 'The most important task was to destabilise the regime by killing civilians. Once they withdrew, they spread the rumour that the Habyarimana regime was incapable of protecting civilians.'" },
  ];

  points.forEach((point, i) => {
    const y = 1.65 + i * 0.75;
    s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y, w: 1.5, h: 0.55, fill: { color: C.red }, line: { color: C.red } });
    s.addText(point.icon, { x: 0.3, y, w: 1.5, h: 0.55, fontSize: 9, bold: true, color: "FFFFFF", fontFace: "Calibri", align: "center", valign: "middle", charSpacing: 1, margin: 0 });
    s.addText(point.text, { x: 2.0, y: y + 0.04, w: 7.7, h: 0.5, fontSize: 12, color: C.white, fontFace: "Calibri", margin: 0 });
  });
}

// ── SECTION HEADER: KAGAME'S REGIME ─────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: "0A0A0A" };

  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: C.red }, line: { color: C.red } });
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.545, w: 10, h: 0.08, fill: { color: C.red }, line: { color: C.red } });

  s.addText("PART THREE", {
    x: 0.5, y: 1.0, w: 9, h: 0.6,
    fontSize: 18, color: C.red, fontFace: "Calibri",
    align: "center", charSpacing: 8, margin: 0
  });
  s.addText("KAGAME'S REGIME", {
    x: 0.5, y: 1.7, w: 9, h: 1.2,
    fontSize: 58, bold: true, color: C.white,
    fontFace: "Georgia", align: "center", margin: 0
  });
  s.addText("The silencing of opponents, journalists, insiders and dissidents", {
    x: 0.5, y: 3.1, w: 9, h: 0.5,
    fontSize: 15, color: C.muted, fontFace: "Calibri",
    align: "center", italic: true, margin: 0
  });
  s.addText('"Rwandans who have dared raise their voices have been arrested, forcibly disappeared, or killed"  — Human Rights Watch', {
    x: 1, y: 3.8, w: 8, h: 0.6,
    fontSize: 13, color: C.accent, fontFace: "Calibri", italic: true,
    align: "center", margin: 0
  });
}

// ── SLIDE: VICTOIRE INGABIRE ─────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.gold }, line: { color: C.gold } });

  s.addText("OPPOSITION POLITICIAN", { x: 0.3, y: 0.2, w: 9.4, h: 0.3, fontSize: 11, color: C.gold, fontFace: "Calibri", bold: true, charSpacing: 3, margin: 0 });
  s.addText("Victoire Ingabire — Imprisoned for Opposing Kagame", { x: 0.3, y: 0.5, w: 9.4, h: 0.65, fontSize: 24, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });

  // Timeline of her persecution
  const events = [
    { year: "Jan 2010", text: "Returns from 16 years of exile in Netherlands to register her party and run for president", color: C.gold },
    { year: "Apr 2010", text: "Placed under house arrest. Her party is never allowed to register.", color: C.muted },
    { year: "Oct 2010", text: "Arrested and charged with genocide ideology, terrorism, divisionism — charges widely condemned as political", color: C.red },
    { year: "2012", text: "Sentenced to 15 years in prison. Spent 5 years in solitary confinement.", color: C.red },
    { year: "2017", text: "African Court on Human and Peoples' Rights rules Rwanda violated her freedom of expression and right to fair trial", color: "4A90D9" },
    { year: "2018", text: "Released by presidential pardon (same pardon as Kizito Mihigo). Monthly check-ins with prosecutor. Cannot travel freely.", color: C.green },
    { year: "2019", text: "Close aide Mutuyimana strangled to death. Party coordinator stabbed to death. Two members disappeared.", color: C.red },
    { year: "Jun 2025", text: "Arrested AGAIN — charged with inciting peaceful protest. Denied bail. Amnesty International and EU Parliament call for release.", color: C.red },
  ];

  events.forEach((event, i) => {
    const y = 1.35 + i * 0.52;
    s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y, w: 1.2, h: 0.38, fill: { color: event.color }, line: { color: event.color } });
    s.addText(event.year, { x: 0.3, y, w: 1.2, h: 0.38, fontSize: 10, bold: true, color: "000000", fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
    s.addText(event.text, { x: 1.65, y: y + 0.03, w: 8.0, h: 0.34, fontSize: 12, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0 });
  });
}

// ── SLIDE: KILLED / DISAPPEARED — INSIDERS ───────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.red }, line: { color: C.red } });

  s.addText("CATEGORY 1: FORMER RPF/MILITARY INSIDERS", { x: 0.5, y: 0.18, w: 9, h: 0.3, fontSize: 11, color: C.red, fontFace: "Calibri", bold: true, charSpacing: 3, align: "center", margin: 0 });
  s.addText("The People Who Knew Too Much", { x: 0.5, y: 0.5, w: 9, h: 0.6, fontSize: 28, bold: true, color: C.white, fontFace: "Georgia", align: "center", margin: 0 });

  const insiders = [
    { name: "Seth Sendashonga", year: "1998", role: "Interior Minister — fell out over RPF massacres of Hutu civilians", fate: "Shot dead in Nairobi, Kenya. Survived one earlier attempt on his life." },
    { name: "Patrick Karegeya", year: "2014", role: "Former head of external intelligence. Co-founded RNC opposition from South Africa.", fate: 'Strangled in Johannesburg hotel. Kabarebe: "When you choose to be a dog, you die like a dog."' },
    { name: "Kayumba Nyamwasa", year: "2010+", role: "Former Army Chief of Staff. Named in ICTR testimonies. Fled to South Africa.", fate: "Multiple assassination attempts. South African court convicted Rwandan agents. US Congress told: $1M offered to kill him." },
    { name: "Theogene Turatsinze", year: "2012", role: "Former head of Rwanda Development Bank. Had secret list of clandestine government payments.", fate: "Found dead in river near Maputo days after disappearing." },
    { name: "Theoneste Lizinde", year: "1996", role: "Former intelligence official", fate: "Found dead in Nairobi, Kenya." },
  ];

  insiders.forEach((person, i) => {
    const y = 1.25 + i * 0.85;
    s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y, w: 9.4, h: 0.75, fill: { color: C.card }, line: { color: "2A2A2A", width: 0.5 } });
    s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y, w: 0.06, h: 0.75, fill: { color: C.red }, line: { color: C.red } });
    s.addText(person.name, { x: 0.55, y: y + 0.04, w: 2.5, h: 0.3, fontSize: 13, bold: true, color: C.white, fontFace: "Calibri", margin: 0 });
    s.addText(person.year, { x: 0.55, y: y + 0.38, w: 0.8, h: 0.28, fontSize: 11, color: C.red, fontFace: "Calibri", bold: true, margin: 0 });
    s.addText(person.role, { x: 3.2, y: y + 0.04, w: 3.3, h: 0.65, fontSize: 11, color: C.muted, fontFace: "Calibri", margin: 0 });
    s.addText(person.fate, { x: 6.6, y: y + 0.04, w: 3.0, h: 0.65, fontSize: 11, color: C.accent, fontFace: "Calibri", margin: 0 });
  });
}

// ── SLIDE: JOURNALISTS + CULTURAL FIGURES ────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.gold }, line: { color: C.gold } });

  s.addText("CATEGORIES 2 & 3: JOURNALISTS + CULTURAL FIGURES", { x: 0.3, y: 0.2, w: 9.4, h: 0.3, fontSize: 11, color: C.gold, fontFace: "Calibri", bold: true, charSpacing: 3, margin: 0 });
  s.addText("Killed for Speaking, Reporting, or Singing the Truth", { x: 0.3, y: 0.5, w: 9.4, h: 0.65, fontSize: 24, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });

  const people = [
    { name: "Kizito Mihigo", type: "GOSPEL SINGER", color: C.red, text: "Rwanda's most famous cultural figure. Released a song honouring ALL genocide victims — including Hutu victims of RPF. First arrested 2014, sentenced to 10 years, pardoned 2018, state banned all his music. Rearrested Feb 2020 — reported death threats to HRW days before arrest. Found dead in cell after 3 days. Police: 'He strangled himself.'" },
    { name: "Jean-Leonard Rugambage", type: "JOURNALIST", color: C.gold, text: "Shot dead in 2010 immediately after publishing an article about the assassination attempt on General Nyamwasa. One of Rwanda's leading independent journalists." },
    { name: "Charles Ingabire", type: "JOURNALIST", color: C.gold, text: "Founded Inyenyeri News — critical of the RPF government. Shot and killed in Uganda where he was living as a political refugee, 2011." },
    { name: "Peter Erlinder", type: "DEFENCE LAWYER", color: "4A90D9", text: "American law professor. Travelled to Rwanda to defend Victoire Ingabire. Immediately arrested and charged with 'genocide ideology' — i.e. questioning the official narrative. Released only after an international campaign by bar associations worldwide." },
  ];

  people.forEach((person, i) => {
    const col = i % 2;
    const row = Math.floor(i / 2);
    const x = 0.3 + col * 4.85;
    const y = 1.35 + row * 2.1;
    s.addShape(pres.shapes.RECTANGLE, { x, y, w: 4.6, h: 1.95, fill: { color: C.card }, line: { color: person.color, width: 1 }, shadow: makeShadow() });
    s.addText(person.type, { x: x + 0.15, y: y + 0.1, w: 4.3, h: 0.28, fontSize: 10, bold: true, color: person.color, fontFace: "Calibri", charSpacing: 2, margin: 0 });
    s.addText(person.name, { x: x + 0.15, y: y + 0.38, w: 4.3, h: 0.38, fontSize: 15, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });
    s.addText(person.text, { x: x + 0.15, y: y + 0.78, w: 4.3, h: 1.05, fontSize: 11, color: C.white, fontFace: "Calibri", margin: 0 });
  });
}

// ── SECTION HEADER: PAPA'S TIMELINE ─────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: "0A0F0A" };

  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: C.green }, line: { color: C.green } });
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.545, w: 10, h: 0.08, fill: { color: C.green }, line: { color: C.green } });

  s.addText("PART FOUR", {
    x: 0.5, y: 1.0, w: 9, h: 0.6,
    fontSize: 18, color: C.green, fontFace: "Calibri",
    align: "center", charSpacing: 8, margin: 0
  });
  s.addText("OUR FAMILY'S STORY", {
    x: 0.5, y: 1.7, w: 9, h: 1.2,
    fontSize: 50, bold: true, color: C.white,
    fontFace: "Georgia", align: "center", margin: 0
  });
  s.addText("What it meant to survive 1994 — and what came after", {
    x: 0.5, y: 3.1, w: 9, h: 0.5,
    fontSize: 15, color: C.muted, fontFace: "Calibri",
    align: "center", italic: true, margin: 0
  });
}

// ── SLIDE: PAPA'S TIMELINE ───────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.green }, line: { color: C.green } });

  s.addText("Papa's Timeline — April 1994 to UK", { x: 0.3, y: 0.2, w: 9.4, h: 0.65, fontSize: 28, bold: true, color: C.white, fontFace: "Georgia", margin: 0 });

  const timeline = [
    { date: "6 April 1994", event: "Habyarimana's plane shot down. Killing begins in Kigali within hours.", color: C.red },
    { date: "7 April", event: "Papa in Kigali. People starting to die. RPF advancing.", color: C.red },
    { date: "10 April", event: "Mum goes to Butare with sister. Brother-in-law killed. Children left behind.", color: C.red },
    { date: "April–May", event: "Papa stays in Kigali until May — some protection as an MDR member. Nat and Mum in the south for one month, then 6 weeks of not knowing if Papa was alive.", color: C.gold },
    { date: "May", event: "Mugenzi tells Papa to come south to Butare. 2-hour journey. Used a Jeep and Toyota.", color: C.gold },
    { date: "End of June", event: "Mugenzi's son comes close to death in Butare. Zone Turquoise provides some cover.", color: C.green },
    { date: "June–July", event: "Movement southwest toward Congo. Pa walks for TWO WEEKS to reach the Congo border.", color: C.green },
    { date: "1996–1998", event: "Rwanda invades Congo (First Congo War). Family in Congo, Tanzania, then Kenya. Cannot claim Kenyan nationality — treated as illegal immigrants.", color: "4A90D9" },
    { date: "Later", event: "Dad and sister go first — to UK. Mum follows with papers. If not — same fate as those still in Kigali in 2003/2004.", color: C.muted },
  ];

  timeline.forEach((item, i) => {
    const y = 1.0 + i * 0.515;
    s.addShape(pres.shapes.RECTANGLE, { x: 0.3, y, w: 1.6, h: 0.38, fill: { color: item.color }, line: { color: item.color } });
    s.addText(item.date, { x: 0.3, y, w: 1.6, h: 0.38, fontSize: 10, bold: true, color: "000000", fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
    s.addText(item.event, { x: 2.1, y: y + 0.03, w: 7.6, h: 0.34, fontSize: 12, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0 });
  });
}

// ── CLOSING SLIDE ────────────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.background = { color: C.bg };
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: C.red }, line: { color: C.red } });
  s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.545, w: 10, h: 0.08, fill: { color: C.gold }, line: { color: C.gold } });

  s.addText('"You cannot betray Rwanda and get away with it.\nThere are consequences."', {
    x: 0.8, y: 0.9, w: 8.4, h: 1.5,
    fontSize: 22, color: C.white, fontFace: "Georgia", italic: true,
    align: "center", margin: 0
  });
  s.addText("— Paul Kagame, public speech, days after Patrick Karegeya was strangled", {
    x: 0.8, y: 2.5, w: 8.4, h: 0.4,
    fontSize: 12, color: C.muted, fontFace: "Calibri", italic: true,
    align: "center", margin: 0
  });

  s.addShape(pres.shapes.RECTANGLE, { x: 3, y: 3.1, w: 4, h: 0.04, fill: { color: C.red }, line: { color: C.red } });

  s.addText("The full story of Rwanda has never been told in the West.\nThis presentation is a start.", {
    x: 0.8, y: 3.3, w: 8.4, h: 0.9,
    fontSize: 16, color: C.accent, fontFace: "Calibri",
    align: "center", margin: 0
  });

  s.addText("Key Sources: Judi Rever — In Praise of Blood · GAHUNDE/ICTR leaked testimonies · UN Panel of Experts (DRC 2001) · HRW Repression Across Borders · Siddharth Kara — Cobalt Red · US Senate Church Committee · Carla Del Ponte memoir · BBC HARDtalk Dec 2006", {
    x: 0.5, y: 4.4, w: 9, h: 0.9,
    fontSize: 9, color: C.muted, fontFace: "Calibri",
    align: "center", margin: 0
  });
}

// Write file
pres.writeFile({ fileName: "/home/claude/Rwanda_Presentation.pptx" })
  .then(() => console.log("DONE"))
  .catch(e => console.error("ERROR:", e));
Editor is loading...
Leave a Comment