Add presentation_creation.md — full brief for 6 PPT/PDF variants
Browse files- presentation_creation.md +689 -0
presentation_creation.md
ADDED
|
@@ -0,0 +1,689 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# TenderIQ — Presentation Creation Brief
|
| 2 |
+
|
| 3 |
+
> **Purpose of this file:** Give a fresh Claude context everything it needs to generate
|
| 4 |
+
> 5–6 distinct, high-quality presentations (PPT and/or PDF) for the CRPF Hackathon
|
| 5 |
+
> submission. The creator should produce all variants in one session so the user can
|
| 6 |
+
> pick the best one.
|
| 7 |
+
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
## 0. How to use this file
|
| 11 |
+
|
| 12 |
+
1. Read sections 1–5 carefully — they contain all project context, slide content,
|
| 13 |
+
and data.
|
| 14 |
+
2. Read section 6 — it defines exactly 6 visual styles to produce.
|
| 15 |
+
3. Read section 7 — it gives technical guidance for python-pptx and reportlab.
|
| 16 |
+
4. Produce all 6 variants, saving them to `deck/` as:
|
| 17 |
+
- `deck/TenderIQ_v1_dark_professional.pptx`
|
| 18 |
+
- `deck/TenderIQ_v2_clean_minimal.pptx`
|
| 19 |
+
- `deck/TenderIQ_v3_government_official.pptx`
|
| 20 |
+
- `deck/TenderIQ_v4_modern_gradient.pdf`
|
| 21 |
+
- `deck/TenderIQ_v5_data_forward.pptx`
|
| 22 |
+
- `deck/TenderIQ_v6_infographic.pdf`
|
| 23 |
+
5. Each variant uses the **same slide content** (section 4) but different visual
|
| 24 |
+
treatment (section 6). Do not cut content between variants.
|
| 25 |
+
|
| 26 |
+
**DO NOT** reuse the existing `deck/TenderIQ_Pitch.pdf` — it was generated by a
|
| 27 |
+
previous low-quality script and should be ignored entirely.
|
| 28 |
+
|
| 29 |
+
---
|
| 30 |
+
|
| 31 |
+
## 1. Project Summary
|
| 32 |
+
|
| 33 |
+
**Name:** TenderIQ
|
| 34 |
+
**Tagline:** Explainable AI for Government Tender Evaluation
|
| 35 |
+
**Event:** CRPF Hackathon — Theme 3: AI-Based Tender Evaluation and Eligibility
|
| 36 |
+
Analysis for Government Procurement
|
| 37 |
+
**Organisation:** Central Reserve Police Force, Ministry of Home Affairs,
|
| 38 |
+
Government of India
|
| 39 |
+
|
| 40 |
+
**One paragraph description:**
|
| 41 |
+
TenderIQ automates the eligibility evaluation of bidders against government tender
|
| 42 |
+
criteria. A procurement officer uploads a tender PDF; the system extracts each
|
| 43 |
+
eligibility criterion using an LLM, processes bidder documents through a three-tier
|
| 44 |
+
OCR pipeline (handling everything from typed PDFs to blurry scanned certificates),
|
| 45 |
+
evaluates each bidder against each criterion with combined confidence scoring, and
|
| 46 |
+
surfaces ambiguous cases for human review — all with a complete, exportable audit
|
| 47 |
+
trail. The app is built on Streamlit and is deployable to a public URL in minutes.
|
| 48 |
+
|
| 49 |
+
---
|
| 50 |
+
|
| 51 |
+
## 2. The Problem (use these facts on the problem slide)
|
| 52 |
+
|
| 53 |
+
- A procurement committee manually reading tender documents and bidder submissions
|
| 54 |
+
can spend **3–5 days per tender**
|
| 55 |
+
- Two evaluators reviewing the same bid **regularly reach different conclusions**
|
| 56 |
+
- Documents arrive in **mixed formats**: typed PDFs, scanned certificates,
|
| 57 |
+
photographs of documents taken on phones
|
| 58 |
+
- There is **no consistent audit trail** — decisions cannot be traced to specific
|
| 59 |
+
evidence
|
| 60 |
+
- Government procurement is worth **₹50 lakh crore+ annually** in India
|
| 61 |
+
- Manual evaluation is a bottleneck that **delays project execution**
|
| 62 |
+
|
| 63 |
+
---
|
| 64 |
+
|
| 65 |
+
## 3. Key Differentiators (highlight these)
|
| 66 |
+
|
| 67 |
+
1. **Three-tier OCR robustness** — most systems assume digital text; TenderIQ
|
| 68 |
+
handles scanned and photographed documents via a progressive pipeline:
|
| 69 |
+
PyMuPDF (typed PDF, instant) → Tesseract OCR (scans) → DeepSeek Vision LLM
|
| 70 |
+
(low-confidence scans, ~95% accuracy). Every page records which tier read it.
|
| 71 |
+
|
| 72 |
+
2. **Never silent disqualification** — the safety rule: if combined confidence is
|
| 73 |
+
between 0.55 and 0.80 and the verdict is `not_eligible`, it is automatically
|
| 74 |
+
downgraded to `needs_review`. A bidder is never automatically disqualified at
|
| 75 |
+
medium confidence.
|
| 76 |
+
|
| 77 |
+
3. **Criterion-level explainability** — every verdict is traceable to a specific
|
| 78 |
+
document, page number, OCR tier, extracted value, and plain-English reason.
|
| 79 |
+
Not just "pass/fail" — the officer can see exactly why.
|
| 80 |
+
|
| 81 |
+
4. **Complete audit trail** — every action (extraction, OCR invocation, evaluation,
|
| 82 |
+
human review) is logged with timestamp, model version, actor, and payload to
|
| 83 |
+
SQLite. Exportable as CSV.
|
| 84 |
+
|
| 85 |
+
5. **Works without internet** — pre-computed fallback JSON is shipped with the
|
| 86 |
+
repo. If the API goes down during a demo, the app continues seamlessly. Sidebar
|
| 87 |
+
turns amber to indicate fallback mode.
|
| 88 |
+
|
| 89 |
+
---
|
| 90 |
+
|
| 91 |
+
## 4. Slide Content (use exactly this for all 6 variants)
|
| 92 |
+
|
| 93 |
+
### SLIDE 1 — Title Slide
|
| 94 |
+
- **Main title:** TenderIQ
|
| 95 |
+
- **Subtitle:** Explainable AI for Government Tender Evaluation
|
| 96 |
+
- **Event line:** CRPF Hackathon · Theme 3
|
| 97 |
+
- **Tagline (small):** From days to minutes. Every decision traceable.
|
| 98 |
+
- **Visual suggestion:** The ⚖️ scales emoji large, or an abstract representation
|
| 99 |
+
of documents flowing through a pipeline
|
| 100 |
+
|
| 101 |
+
---
|
| 102 |
+
|
| 103 |
+
### SLIDE 2 — The Problem
|
| 104 |
+
- **Title:** The Problem with Manual Tender Evaluation
|
| 105 |
+
- **Three pain points (use as large visual callouts or icon+text cards):**
|
| 106 |
+
1. **3–5 Days** per tender evaluation by committee
|
| 107 |
+
2. **Inconsistent** — two evaluators, two different conclusions
|
| 108 |
+
3. **No audit trail** — decisions untraceably made
|
| 109 |
+
- **Supporting points (smaller text or bullets):**
|
| 110 |
+
- Mixed document formats: typed PDFs, scans, phone photographs
|
| 111 |
+
- Government procurement worth ₹50 lakh crore+ annually in India
|
| 112 |
+
- Project delays traced directly to procurement bottlenecks
|
| 113 |
+
|
| 114 |
+
---
|
| 115 |
+
|
| 116 |
+
### SLIDE 3 — Our Solution
|
| 117 |
+
- **Title:** TenderIQ — Four Stages, End to End
|
| 118 |
+
- **Four stage cards (equal weight, horizontal or 2×2 layout):**
|
| 119 |
+
|
| 120 |
+
**Stage 1 — Extract**
|
| 121 |
+
DeepSeek LLM reads the tender PDF and returns each criterion as structured JSON:
|
| 122 |
+
category, mandatory flag, threshold rule, source clause, query hints.
|
| 123 |
+
|
| 124 |
+
**Stage 2 — OCR & Index**
|
| 125 |
+
Three-tier pipeline handles any document format.
|
| 126 |
+
All text chunked and indexed for semantic retrieval.
|
| 127 |
+
|
| 128 |
+
**Stage 3 — Evaluate**
|
| 129 |
+
Vector search finds relevant evidence. LLM produces a verdict with confidence.
|
| 130 |
+
Safety rule prevents silent disqualification.
|
| 131 |
+
|
| 132 |
+
**Stage 4 — Review & Audit**
|
| 133 |
+
Borderline cases go to a human review queue. Every action logged.
|
| 134 |
+
Full audit trail exportable as CSV.
|
| 135 |
+
|
| 136 |
+
- **Bottom line (callout box):**
|
| 137 |
+
"Minutes, not days. Every verdict traceable to a document and page."
|
| 138 |
+
|
| 139 |
+
---
|
| 140 |
+
|
| 141 |
+
### SLIDE 4 — Architecture
|
| 142 |
+
- **Title:** System Architecture
|
| 143 |
+
- **Diagram description (reproduce this as a visual flow diagram):**
|
| 144 |
+
|
| 145 |
+
```
|
| 146 |
+
Tender PDF Bidder Documents
|
| 147 |
+
│ (PDFs · scans · photos)
|
| 148 |
+
▼ │
|
| 149 |
+
DeepSeek LLM 3-Tier OCR Pipeline
|
| 150 |
+
(Extract Criteria) ① PyMuPDF (typed PDF)
|
| 151 |
+
│ ② Tesseract (scans)
|
| 152 |
+
▼ ③ Vision LLM (low conf.)
|
| 153 |
+
Criteria JSON │
|
| 154 |
+
(C1–C5 structured) Vector Index (in-memory)
|
| 155 |
+
│ all-MiniLM-L6-v2 embeddings
|
| 156 |
+
└──────────────────────────────────┘
|
| 157 |
+
│
|
| 158 |
+
DeepSeek LLM
|
| 159 |
+
(Evaluate each criterion)
|
| 160 |
+
combined confidence score
|
| 161 |
+
│
|
| 162 |
+
┌─────────────┴──────────────┐
|
| 163 |
+
eligible / needs_review
|
| 164 |
+
not_eligible Human Review Queue
|
| 165 |
+
│ │
|
| 166 |
+
└───────── SQLite Audit Log ────────┘
|
| 167 |
+
```
|
| 168 |
+
|
| 169 |
+
- **Key technical facts (sidebar or footnotes on slide):**
|
| 170 |
+
- Single-process Streamlit app — no separate backend
|
| 171 |
+
- Deployable to Streamlit Cloud or HuggingFace Spaces
|
| 172 |
+
- All storage is local: SQLite + in-memory vector index
|
| 173 |
+
- Only external dependency: DeepSeek API
|
| 174 |
+
|
| 175 |
+
---
|
| 176 |
+
|
| 177 |
+
### SLIDE 5 — The OCR Demo (the centrepiece)
|
| 178 |
+
- **Title:** Three-Tier OCR — Handling Any Document Format
|
| 179 |
+
- **Three tier cards with visual progression:**
|
| 180 |
+
|
| 181 |
+
**Tier 1 — PyMuPDF**
|
| 182 |
+
- Trigger: Document is a typed/digital PDF
|
| 183 |
+
- Cost: Free, instant
|
| 184 |
+
- Confidence: 1.0 (lossless text extraction)
|
| 185 |
+
- Source label in UI: 📄 Typed PDF
|
| 186 |
+
|
| 187 |
+
**Tier 2 — Tesseract**
|
| 188 |
+
- Trigger: Scanned PDF or image file
|
| 189 |
+
- Cost: Free, local, fast
|
| 190 |
+
- Confidence: Mean of per-word OCR scores
|
| 191 |
+
- Source label in UI: 🔍 Tesseract
|
| 192 |
+
|
| 193 |
+
**Tier 3 — DeepSeek Vision LLM**
|
| 194 |
+
- Trigger: Tesseract confidence < 65%
|
| 195 |
+
- Cost: One API call
|
| 196 |
+
- Confidence: 0.95
|
| 197 |
+
- Source label in UI: 👁 Vision LLM
|
| 198 |
+
- Action: `vision_ocr_invoked` logged to audit
|
| 199 |
+
|
| 200 |
+
- **Demo scenario callout (use a highlighted box):**
|
| 201 |
+
> **Bidder C submits a blurry, rotated CA certificate scan.**
|
| 202 |
+
> Tesseract reads it at ~55% confidence.
|
| 203 |
+
> Vision LLM transcribes the turnover figure correctly.
|
| 204 |
+
> Combined confidence = 0.58 → routed to human review.
|
| 205 |
+
> This is intentional — borderline evidence requires a human.
|
| 206 |
+
|
| 207 |
+
---
|
| 208 |
+
|
| 209 |
+
### SLIDE 6 — Explainability & Compliance
|
| 210 |
+
- **Title:** Every Decision is Explainable and Auditable
|
| 211 |
+
- **Two columns:**
|
| 212 |
+
|
| 213 |
+
**Left — Criterion-Level Verdicts**
|
| 214 |
+
Each (bidder × criterion) pair shows:
|
| 215 |
+
- Which criterion was checked
|
| 216 |
+
- Which document and page provided the evidence
|
| 217 |
+
- What value was extracted (e.g. "INR 6.2 Cr")
|
| 218 |
+
- Which OCR tier read the document
|
| 219 |
+
- Combined confidence score (0–100%)
|
| 220 |
+
- Plain-English reason
|
| 221 |
+
|
| 222 |
+
**Right — Audit Trail**
|
| 223 |
+
Every action logged with:
|
| 224 |
+
- UTC timestamp
|
| 225 |
+
- Action type (criteria_extracted / bidder_processed / criterion_evaluated /
|
| 226 |
+
human_review_action / vision_ocr_invoked / precomputed_fallback_used)
|
| 227 |
+
- Model version
|
| 228 |
+
- Actor (system / officer)
|
| 229 |
+
- Full payload JSON
|
| 230 |
+
- Exportable as CSV
|
| 231 |
+
|
| 232 |
+
- **Safety rule callout (prominent, in a coloured box):**
|
| 233 |
+
> **The Safety Rule:**
|
| 234 |
+
> If combined confidence is 0.55–0.80 AND verdict is `not_eligible`,
|
| 235 |
+
> the verdict is automatically downgraded to `needs_review`.
|
| 236 |
+
> A bidder is **never silently disqualified** at medium confidence.
|
| 237 |
+
|
| 238 |
+
---
|
| 239 |
+
|
| 240 |
+
### SLIDE 7 — Demo Results
|
| 241 |
+
- **Title:** Demo: Three Bidders, Three Outcomes
|
| 242 |
+
- **Three bidder cards side by side:**
|
| 243 |
+
|
| 244 |
+
**Bidder A — Apex Constructions Pvt. Ltd.**
|
| 245 |
+
Result: ✅ ELIGIBLE
|
| 246 |
+
- C1 Turnover: INR 6.37 Cr avg (threshold: 5 Cr) — PASS
|
| 247 |
+
- C2 Projects: 5 completed including CRPF barracks �� PASS
|
| 248 |
+
- C3 GST: GSTIN 27AABCA1234F1Z5, Active — PASS
|
| 249 |
+
- C4 ISO 9001:2015: Valid June 2027 — PASS
|
| 250 |
+
- All typed PDFs, confidence ≥ 93% on all criteria
|
| 251 |
+
|
| 252 |
+
**Bidder B — BuildRight Enterprises**
|
| 253 |
+
Result: ❌ NOT ELIGIBLE
|
| 254 |
+
- C1 Turnover: INR 1.5 Cr avg (threshold: 5 Cr) — FAIL
|
| 255 |
+
"Average annual turnover of INR 1.5 Cr is below the required
|
| 256 |
+
minimum of INR 5 Cr."
|
| 257 |
+
- C2–C4: All pass
|
| 258 |
+
- Automatically disqualified with high confidence (95%)
|
| 259 |
+
|
| 260 |
+
**Bidder C — Shree Constructions & Services**
|
| 261 |
+
Result: ⚠️ NEEDS REVIEW
|
| 262 |
+
- C1 Turnover: Submitted as blurry scan
|
| 263 |
+
Tesseract ~55% → Vision LLM transcribes INR 5.4 Cr
|
| 264 |
+
Combined confidence 0.58 → needs review (safety rule)
|
| 265 |
+
- C2: Exactly 3 projects (borderline)
|
| 266 |
+
- C3–C4: Pass
|
| 267 |
+
|
| 268 |
+
- **Bottom metric strip:**
|
| 269 |
+
| Metric | Value |
|
| 270 |
+
|--------|-------|
|
| 271 |
+
| Criteria extracted | 5 |
|
| 272 |
+
| Bidder documents processed | 15 |
|
| 273 |
+
| LLM evaluation calls | 15 |
|
| 274 |
+
| Vision OCR invocations | 1 |
|
| 275 |
+
| Human review items | 1 |
|
| 276 |
+
| Total audit entries | 20+ |
|
| 277 |
+
|
| 278 |
+
---
|
| 279 |
+
|
| 280 |
+
### SLIDE 8 — Tech Stack & Future Work
|
| 281 |
+
- **Title:** Stack, Impact & What's Next
|
| 282 |
+
- **Left side — Tech Stack (as a clean table):**
|
| 283 |
+
|
| 284 |
+
| Component | Technology |
|
| 285 |
+
|-----------|------------|
|
| 286 |
+
| UI & orchestration | Streamlit 1.39 |
|
| 287 |
+
| LLM | DeepSeek API (OpenAI-compatible) |
|
| 288 |
+
| OCR Tier 1 | PyMuPDF 1.24 |
|
| 289 |
+
| OCR Tier 2 | Tesseract |
|
| 290 |
+
| OCR Tier 3 | DeepSeek Vision LLM |
|
| 291 |
+
| Semantic retrieval | sentence-transformers all-MiniLM-L6-v2 |
|
| 292 |
+
| Data validation | Pydantic v2 |
|
| 293 |
+
| Audit log | SQLite |
|
| 294 |
+
| Deployment | Streamlit Cloud / HuggingFace Spaces |
|
| 295 |
+
|
| 296 |
+
- **Right side — Future Work (as bullets):**
|
| 297 |
+
- Multi-tender workspace — same bidder pool, multiple tenders
|
| 298 |
+
- GeM portal API integration — live tender ingestion
|
| 299 |
+
- Automated bidder ranking with weighted scoring
|
| 300 |
+
- LayoutLM for complex financial tables in scanned statements
|
| 301 |
+
- Multi-evaluator workflow with role-based approval
|
| 302 |
+
- Review queue email/SMS notifications
|
| 303 |
+
- Audit PDF export for procurement oversight submissions
|
| 304 |
+
|
| 305 |
+
- **Bottom — Impact callout:**
|
| 306 |
+
> **3–5 days → minutes.**
|
| 307 |
+
> Every verdict traceable to a document, page, and model version.
|
| 308 |
+
> Built in one hackathon session. Deployable today.
|
| 309 |
+
|
| 310 |
+
---
|
| 311 |
+
|
| 312 |
+
## 5. Narrative Arc (how the slides tell a story)
|
| 313 |
+
|
| 314 |
+
The deck should flow as:
|
| 315 |
+
1. **Hook** (Slide 1) — big, confident title
|
| 316 |
+
2. **Pain** (Slide 2) — make the problem visceral with the 3 numbers
|
| 317 |
+
3. **Solution** (Slide 3) — 4 clean stages, not overwhelming
|
| 318 |
+
4. **Credibility** (Slide 4) — architecture shows it's real engineering
|
| 319 |
+
5. **Differentiator** (Slide 5) — the OCR story is unique and concrete
|
| 320 |
+
6. **Trust** (Slide 6) — explainability + audit builds confidence with judges
|
| 321 |
+
7. **Proof** (Slide 7) — real outcomes, real numbers, real bidder scenarios
|
| 322 |
+
8. **Vision** (Slide 8) — grounded stack + forward-looking future work
|
| 323 |
+
|
| 324 |
+
Every slide should have **one dominant visual** and **limited text**. Judges skim.
|
| 325 |
+
The most important information should be readable in 3 seconds.
|
| 326 |
+
|
| 327 |
+
---
|
| 328 |
+
|
| 329 |
+
## 6. The Six Visual Styles
|
| 330 |
+
|
| 331 |
+
Produce one presentation per style. All use the same slide content from section 4.
|
| 332 |
+
|
| 333 |
+
---
|
| 334 |
+
|
| 335 |
+
### Style 1 — Dark Professional (PPTX)
|
| 336 |
+
**File:** `deck/TenderIQ_v1_dark_professional.pptx`
|
| 337 |
+
|
| 338 |
+
**Palette:**
|
| 339 |
+
- Slide background: `#0D1B2A` (deep navy)
|
| 340 |
+
- Primary text: `#F1F5F9` (near white)
|
| 341 |
+
- Secondary text: `#94A3B8` (muted blue-grey)
|
| 342 |
+
- Accent / headings: `#F0A500` (gold)
|
| 343 |
+
- Eligible green: `#22C55E`
|
| 344 |
+
- Not eligible red: `#EF4444`
|
| 345 |
+
- Needs review amber: `#F59E0B`
|
| 346 |
+
- Card backgrounds: `#1E3A5F` (lighter navy)
|
| 347 |
+
- Borders: `#2D4A6B`
|
| 348 |
+
|
| 349 |
+
**Typography:**
|
| 350 |
+
- Headings: Calibri Bold or Arial Bold, 28–32pt, gold
|
| 351 |
+
- Body: Calibri or Arial, 16–18pt, near-white
|
| 352 |
+
- Captions/labels: 12–13pt, muted blue-grey
|
| 353 |
+
|
| 354 |
+
**Style rules:**
|
| 355 |
+
- Dark background on every slide
|
| 356 |
+
- Title slide: large gold ⚖️ emoji, gold title text on navy
|
| 357 |
+
- Section headings have a thin gold left border or underline
|
| 358 |
+
- Cards/boxes: slightly lighter navy background (#1E3A5F) with gold border
|
| 359 |
+
- Verdict chips: coloured filled rectangles (green/red/amber) with white text
|
| 360 |
+
- Progress/confidence: horizontal bar in gold on dark track
|
| 361 |
+
- The OCR tier cards (Slide 5): three columns, each with a different accent colour
|
| 362 |
+
(blue for Tier 1, purple for Tier 2, orange for Tier 3)
|
| 363 |
+
- Architecture diagram (Slide 4): use white-on-dark text boxes connected with
|
| 364 |
+
gold arrows
|
| 365 |
+
|
| 366 |
+
---
|
| 367 |
+
|
| 368 |
+
### Style 2 — Clean Minimal (PPTX)
|
| 369 |
+
**File:** `deck/TenderIQ_v2_clean_minimal.pptx`
|
| 370 |
+
|
| 371 |
+
**Palette:**
|
| 372 |
+
- Slide background: `#FFFFFF`
|
| 373 |
+
- Primary text: `#111827`
|
| 374 |
+
- Secondary text: `#6B7280`
|
| 375 |
+
- Accent: `#2563EB` (blue)
|
| 376 |
+
- Light accent background: `#EFF6FF`
|
| 377 |
+
- Eligible: `#059669`
|
| 378 |
+
- Not eligible: `#DC2626`
|
| 379 |
+
- Needs review: `#D97706`
|
| 380 |
+
- Dividers/borders: `#E5E7EB`
|
| 381 |
+
|
| 382 |
+
**Typography:**
|
| 383 |
+
- Headings: Inter or Calibri Light Bold, 28–32pt, #111827
|
| 384 |
+
- Body: Inter or Calibri, 15–16pt, #374151
|
| 385 |
+
- Captions: 11–12pt, #9CA3AF
|
| 386 |
+
|
| 387 |
+
**Style rules:**
|
| 388 |
+
- White background throughout
|
| 389 |
+
- Large amounts of whitespace — never fill the slide
|
| 390 |
+
- Title slide: small ⚖️ followed by large "TenderIQ" in #111827, subtitle in grey
|
| 391 |
+
- Section headings: simple left-aligned text with a 3px blue left border
|
| 392 |
+
- Cards: white with a 1px #E5E7EB border and very subtle shadow (simulate with
|
| 393 |
+
slightly off-white fill)
|
| 394 |
+
- No gradients, no heavy fills — colour used sparingly as accent only
|
| 395 |
+
- Verdict chips: light fill (green/red/amber at 15% opacity) with bold coloured text
|
| 396 |
+
- Numbers/stats (Slide 2): very large (80–96pt), blue accent colour, minimal
|
| 397 |
+
surrounding text
|
| 398 |
+
- Architecture diagram (Slide 4): use grey boxes with blue connector arrows,
|
| 399 |
+
clean and uncluttered
|
| 400 |
+
|
| 401 |
+
---
|
| 402 |
+
|
| 403 |
+
### Style 3 — Government Official (PPTX)
|
| 404 |
+
**File:** `deck/TenderIQ_v3_government_official.pptx`
|
| 405 |
+
|
| 406 |
+
**Palette:**
|
| 407 |
+
- Primary: `#003580` (deep government blue, similar to NIC / India.gov.in)
|
| 408 |
+
- Secondary: `#FFFFFF`
|
| 409 |
+
- Accent: `#FF9933` (saffron, from the Indian tricolour)
|
| 410 |
+
- Third accent: `#138808` (India green)
|
| 411 |
+
- Background: `#F5F5F0` (off-white, like a government document)
|
| 412 |
+
- Text: `#1A1A1A`
|
| 413 |
+
- Borders: `#003580`
|
| 414 |
+
|
| 415 |
+
**Typography:**
|
| 416 |
+
- Headings: Times New Roman Bold or Cambria Bold, 26–30pt, #003580
|
| 417 |
+
- Body: Arial or Calibri, 14–15pt, #1A1A1A
|
| 418 |
+
- Official labels: small caps, 11pt, #003580
|
| 419 |
+
|
| 420 |
+
**Style rules:**
|
| 421 |
+
- Header bar on every slide: deep blue (#003580) band at top with white text for
|
| 422 |
+
slide title; thin saffron line below the header band
|
| 423 |
+
- Footer on every slide: "TenderIQ · CRPF Hackathon · Theme 3" in small text
|
| 424 |
+
on the blue header colour
|
| 425 |
+
- Title slide: formal layout — emblem/logo area top left, large title centred,
|
| 426 |
+
"Ministry of Home Affairs" sub-line
|
| 427 |
+
- Slide content area: off-white background, clean margins
|
| 428 |
+
- Tables: blue header row (#003580, white text), alternating white/#F0F4FF rows
|
| 429 |
+
- Callout boxes: thin blue border, very light blue fill (#EBF0FF)
|
| 430 |
+
- Verdict indicators: use formal language labels ("ELIGIBLE", "NOT ELIGIBLE",
|
| 431 |
+
"UNDER REVIEW") in coloured text, no emoji
|
| 432 |
+
- This style should feel like an official government presentation, not a startup deck
|
| 433 |
+
|
| 434 |
+
---
|
| 435 |
+
|
| 436 |
+
### Style 4 — Modern Gradient (PDF via reportlab)
|
| 437 |
+
**File:** `deck/TenderIQ_v4_modern_gradient.pdf`
|
| 438 |
+
|
| 439 |
+
**Palette:**
|
| 440 |
+
- Gradient 1 (title slide): `#667EEA` → `#764BA2` (purple-blue)
|
| 441 |
+
- Gradient 2 (content slides background strip): `#0EA5E9` → `#2563EB`
|
| 442 |
+
- Card fills: `#FFFFFF` with coloured top accent border
|
| 443 |
+
- Text on gradient: `#FFFFFF`
|
| 444 |
+
- Text on white: `#0F172A`
|
| 445 |
+
- Eligible: `#10B981`
|
| 446 |
+
- Not eligible: `#F43F5E`
|
| 447 |
+
- Needs review: `#FBBF24`
|
| 448 |
+
|
| 449 |
+
**Typography:**
|
| 450 |
+
- Headings on gradient: white, bold, 24–28pt
|
| 451 |
+
- Body on white cards: dark, 12–14pt
|
| 452 |
+
- Stat numbers: 48–56pt, gradient-coloured
|
| 453 |
+
|
| 454 |
+
**Style rules (reportlab specific):**
|
| 455 |
+
- Title slide: full-page gradient background (use `canvas.linearGradient` if
|
| 456 |
+
available, or approximate with filled rectangles stepping from #667EEA to #764BA2)
|
| 457 |
+
- Content slides: white background with a gradient-filled header band (top 20% of
|
| 458 |
+
slide) for the slide title
|
| 459 |
+
- Cards: white rectangles with a 4px top border in a theme colour, subtle grey
|
| 460 |
+
border on other sides
|
| 461 |
+
- Stat numbers on Slide 2: very large, rendered in the gradient colours
|
| 462 |
+
- OCR tiers on Slide 5: three cards with top borders in blue, purple, orange
|
| 463 |
+
- Arrows in architecture diagram: use curved lines in gradient blue
|
| 464 |
+
- Avoid heavy outlines — use fill and spacing instead
|
| 465 |
+
- Page numbers bottom right in muted colour
|
| 466 |
+
|
| 467 |
+
---
|
| 468 |
+
|
| 469 |
+
### Style 5 — Data Forward (PPTX)
|
| 470 |
+
**File:** `deck/TenderIQ_v5_data_forward.pptx`
|
| 471 |
+
|
| 472 |
+
**Palette:**
|
| 473 |
+
- Background: `#FAFAFA`
|
| 474 |
+
- Primary: `#1E293B`
|
| 475 |
+
- Accent: `#6366F1` (indigo)
|
| 476 |
+
- Chart colours: `#22C55E`, `#EF4444`, `#F59E0B`, `#3B82F6`, `#8B5CF6`
|
| 477 |
+
- Grid lines: `#E2E8F0`
|
| 478 |
+
- Text: `#334155`
|
| 479 |
+
|
| 480 |
+
**Typography:**
|
| 481 |
+
- Data labels: 14–16pt bold, #1E293B
|
| 482 |
+
- Axis labels / captions: 10–11pt, #64748B
|
| 483 |
+
- Slide titles: 24pt bold, indigo
|
| 484 |
+
|
| 485 |
+
**Style rules:**
|
| 486 |
+
- This variant leads with data visualisation on every slide where possible
|
| 487 |
+
- Slide 2 (Problem): use a simple bar chart showing "Days per tender" comparison
|
| 488 |
+
(manual: 3–5 days, TenderIQ: minutes represented as <0.1 days)
|
| 489 |
+
- Slide 3 (Solution): use a horizontal process flow with numbered circles
|
| 490 |
+
- Slide 5 (OCR): use a stacked bar or table showing accuracy by tier
|
| 491 |
+
- Slide 7 (Demo results): use a verdicts breakdown chart — 3 bidders × 5 criteria
|
| 492 |
+
as a colour-coded matrix (green/red/amber cells)
|
| 493 |
+
- Slide 8 (Stack): use a visual table with technology icons (text-based approximation)
|
| 494 |
+
- Charts should be built with python-pptx chart objects (not images) where possible,
|
| 495 |
+
or use matplotlib to embed PNG charts
|
| 496 |
+
|
| 497 |
+
**Key chart specs:**
|
| 498 |
+
- Demo results matrix (Slide 7): 3 rows (bidders) × 5 columns (criteria), each cell
|
| 499 |
+
filled green/red/amber with a 1-letter code (E/N/R)
|
| 500 |
+
- OCR confidence comparison (Slide 5): simple bar chart showing
|
| 501 |
+
Tier 1: 100%, Tier 2: ~55–65%, Tier 3: ~95%
|
| 502 |
+
- Problem scale (Slide 2): two-bar chart, Manual vs TenderIQ, logarithmic scale
|
| 503 |
+
or just text-anchored bars
|
| 504 |
+
|
| 505 |
+
---
|
| 506 |
+
|
| 507 |
+
### Style 6 — Infographic (PDF via reportlab)
|
| 508 |
+
**File:** `deck/TenderIQ_v6_infographic.pdf`
|
| 509 |
+
|
| 510 |
+
**Palette:**
|
| 511 |
+
- Background: `#FFFFFF`
|
| 512 |
+
- Section stripe: `#F8FAFC`
|
| 513 |
+
- Primary icon colour: `#2563EB`
|
| 514 |
+
- Icon accents: `#22C55E`, `#EF4444`, `#F59E0B`, `#8B5CF6`
|
| 515 |
+
- Text: `#0F172A`
|
| 516 |
+
- Subtext: `#64748B`
|
| 517 |
+
|
| 518 |
+
**Typography:**
|
| 519 |
+
- Large numbers: 48–60pt, bold, primary colour
|
| 520 |
+
- Section labels: 10pt, all-caps, letter-spaced, muted
|
| 521 |
+
- Body: 12pt, dark
|
| 522 |
+
|
| 523 |
+
**Style rules:**
|
| 524 |
+
- Every slide is built around a large central icon or number
|
| 525 |
+
- Slide 2 (Problem): three large numbers (3–5, ✗, ?) each with a one-line label
|
| 526 |
+
- Slide 3 (Solution): four large icons (📄 → 🔍 → ⚖️ → 📋) with stage labels
|
| 527 |
+
- Slide 4 (Architecture): a vertical flow infographic, not a box diagram —
|
| 528 |
+
icon per stage, connecting lines, short labels
|
| 529 |
+
- Slide 5 (OCR): three large tier icons stacked with an arrow between them,
|
| 530 |
+
confidence % shown as a circular progress indicator (drawn with arc)
|
| 531 |
+
- Slide 7 (Demo): three large outcome icons (✅ ❌ ⚠️) each with 3 bullet points
|
| 532 |
+
- Slide 8 (Future): icon grid of 6 future directions, each with a 1-line label
|
| 533 |
+
- No heavy borders — whitespace is the separator
|
| 534 |
+
- Use reportlab's `canvas.drawString`, arcs for circular indicators, and
|
| 535 |
+
filled rectangles for bars
|
| 536 |
+
|
| 537 |
+
---
|
| 538 |
+
|
| 539 |
+
## 7. Technical Implementation Notes
|
| 540 |
+
|
| 541 |
+
### python-pptx (for Styles 1, 2, 3, 5)
|
| 542 |
+
|
| 543 |
+
```python
|
| 544 |
+
from pptx import Presentation
|
| 545 |
+
from pptx.util import Inches, Pt, Emu
|
| 546 |
+
from pptx.dml.color import RGBColor
|
| 547 |
+
from pptx.enum.text import PP_ALIGN
|
| 548 |
+
from pptx.util import Inches, Pt
|
| 549 |
+
|
| 550 |
+
# Slide size — widescreen 16:9
|
| 551 |
+
prs = Presentation()
|
| 552 |
+
prs.slide_width = Inches(13.33)
|
| 553 |
+
prs.slide_height = Inches(7.5)
|
| 554 |
+
|
| 555 |
+
# Add a blank slide
|
| 556 |
+
slide_layout = prs.slide_layouts[6] # blank
|
| 557 |
+
slide = prs.slides.add_slide(slide_layout)
|
| 558 |
+
|
| 559 |
+
# Add a filled rectangle
|
| 560 |
+
from pptx.util import Inches
|
| 561 |
+
shape = slide.shapes.add_shape(
|
| 562 |
+
MSO_SHAPE_TYPE.RECTANGLE, # or use 1
|
| 563 |
+
Inches(0), Inches(0), Inches(13.33), Inches(7.5)
|
| 564 |
+
)
|
| 565 |
+
shape.fill.solid()
|
| 566 |
+
shape.fill.fore_color.rgb = RGBColor(0x0D, 0x1B, 0x2A)
|
| 567 |
+
shape.line.fill.background() # no border
|
| 568 |
+
|
| 569 |
+
# Add text box
|
| 570 |
+
from pptx.util import Inches, Pt
|
| 571 |
+
txBox = slide.shapes.add_textbox(Inches(1), Inches(2), Inches(11), Inches(2))
|
| 572 |
+
tf = txBox.text_frame
|
| 573 |
+
tf.word_wrap = True
|
| 574 |
+
p = tf.paragraphs[0]
|
| 575 |
+
p.text = "TenderIQ"
|
| 576 |
+
p.alignment = PP_ALIGN.CENTER
|
| 577 |
+
run = p.runs[0]
|
| 578 |
+
run.font.size = Pt(54)
|
| 579 |
+
run.font.bold = True
|
| 580 |
+
run.font.color.rgb = RGBColor(0xF0, 0xA5, 0x00) # gold
|
| 581 |
+
|
| 582 |
+
# Save
|
| 583 |
+
prs.save("deck/TenderIQ_v1_dark_professional.pptx")
|
| 584 |
+
```
|
| 585 |
+
|
| 586 |
+
**Key python-pptx patterns to use:**
|
| 587 |
+
- `slide.shapes.add_shape(1, ...)` — adds a rectangle (MSO_SHAPE_TYPE.RECTANGLE = 1)
|
| 588 |
+
- `shape.fill.solid()` + `shape.fill.fore_color.rgb = RGBColor(r, g, b)` — fill colour
|
| 589 |
+
- `shape.line.fill.background()` — remove border
|
| 590 |
+
- `slide.shapes.add_textbox(left, top, width, height)` — text box
|
| 591 |
+
- `tf.paragraphs[0].runs[0].font.color.rgb` — font colour
|
| 592 |
+
- `slide.shapes.add_picture(image_path, left, top, width, height)` — embed image
|
| 593 |
+
- For tables: `slide.shapes.add_table(rows, cols, left, top, width, height)`
|
| 594 |
+
- All measurements: use `Inches()` or `Pt()` or raw `Emu` (1 inch = 914400 Emu)
|
| 595 |
+
|
| 596 |
+
**Avoid:**
|
| 597 |
+
- `pptx.chart` (complex, often renders poorly) — use coloured shapes instead
|
| 598 |
+
- Embedded images from URLs — use only local files or draw shapes
|
| 599 |
+
|
| 600 |
+
---
|
| 601 |
+
|
| 602 |
+
### reportlab (for Styles 4 and 6)
|
| 603 |
+
|
| 604 |
+
```python
|
| 605 |
+
from reportlab.pdfgen.canvas import Canvas
|
| 606 |
+
from reportlab.lib.pagesizes import A4, landscape
|
| 607 |
+
from reportlab.lib import colors
|
| 608 |
+
from reportlab.lib.units import cm, mm
|
| 609 |
+
|
| 610 |
+
W, H = landscape(A4) # 841.89 x 595.28 points (29.7 x 21 cm landscape)
|
| 611 |
+
|
| 612 |
+
c = Canvas("deck/TenderIQ_v4_modern_gradient.pdf", pagesize=landscape(A4))
|
| 613 |
+
|
| 614 |
+
# Filled rectangle
|
| 615 |
+
c.setFillColor(colors.HexColor("#0D1B2A"))
|
| 616 |
+
c.rect(0, 0, W, H, fill=1, stroke=0)
|
| 617 |
+
|
| 618 |
+
# Text
|
| 619 |
+
c.setFillColor(colors.white)
|
| 620 |
+
c.setFont("Helvetica-Bold", 48)
|
| 621 |
+
c.drawCentredString(W/2, H/2, "TenderIQ")
|
| 622 |
+
|
| 623 |
+
# Line
|
| 624 |
+
c.setStrokeColor(colors.HexColor("#F0A500"))
|
| 625 |
+
c.setLineWidth(3)
|
| 626 |
+
c.line(2*cm, H - 3*cm, W - 2*cm, H - 3*cm)
|
| 627 |
+
|
| 628 |
+
# New page
|
| 629 |
+
c.showPage()
|
| 630 |
+
|
| 631 |
+
# Save
|
| 632 |
+
c.save()
|
| 633 |
+
```
|
| 634 |
+
|
| 635 |
+
**Key reportlab patterns:**
|
| 636 |
+
- `c.rect(x, y, w, h, fill=1, stroke=0)` — filled rectangle, no border
|
| 637 |
+
- `c.roundRect(x, y, w, h, radius, fill=1, stroke=0)` — rounded rectangle
|
| 638 |
+
- `c.drawCentredString(x, y, text)` — centred text at point
|
| 639 |
+
- `c.drawString(x, y, text)` — left-aligned text
|
| 640 |
+
- `c.drawRightString(x, y, text)` — right-aligned text
|
| 641 |
+
- `c.setFont("Helvetica-Bold", size)` — font (built-in: Helvetica, Times-Roman, Courier)
|
| 642 |
+
- `c.arc(x1, y1, x2, y2, startAng, extent)` — arc (for circular indicators)
|
| 643 |
+
- `c.line(x1, y1, x2, y2)` — line
|
| 644 |
+
- `c.showPage()` — new slide/page
|
| 645 |
+
- **Coordinate system:** origin is bottom-left; y increases upward
|
| 646 |
+
- To position from top: use `H - y_from_top`
|
| 647 |
+
|
| 648 |
+
**Text wrapping in reportlab:**
|
| 649 |
+
```python
|
| 650 |
+
from reportlab.platypus import Paragraph
|
| 651 |
+
from reportlab.lib.styles import ParagraphStyle
|
| 652 |
+
|
| 653 |
+
style = ParagraphStyle('body', fontSize=12, leading=16, textColor=colors.white)
|
| 654 |
+
p = Paragraph("Long text that wraps automatically.", style)
|
| 655 |
+
p.wrapOn(c, width, height)
|
| 656 |
+
p.drawOn(c, x, y)
|
| 657 |
+
```
|
| 658 |
+
|
| 659 |
+
---
|
| 660 |
+
|
| 661 |
+
## 8. Quality Checklist
|
| 662 |
+
|
| 663 |
+
Before saving each variant, verify:
|
| 664 |
+
|
| 665 |
+
- [ ] All 8 slides are present with content from section 4
|
| 666 |
+
- [ ] Title is readable in 2 seconds on slide 1
|
| 667 |
+
- [ ] The three pain point numbers are prominent on slide 2
|
| 668 |
+
- [ ] The safety rule callout is visually distinct on slide 6
|
| 669 |
+
- [ ] The three bidder outcomes are clearly colour-coded on slide 7
|
| 670 |
+
- [ ] No slide has walls of text — maximum ~6 bullet points per slide
|
| 671 |
+
- [ ] Font sizes: headings 24–32pt, body 14–16pt minimum (readable when projected)
|
| 672 |
+
- [ ] Consistent margin — at least 1 inch (reportlab: 2.5cm) from all edges
|
| 673 |
+
- [ ] Consistent colour palette within each variant (no accidental colour mixing)
|
| 674 |
+
- [ ] File saves without error and opens cleanly
|
| 675 |
+
|
| 676 |
+
---
|
| 677 |
+
|
| 678 |
+
## 9. Output Summary
|
| 679 |
+
|
| 680 |
+
| File | Format | Style | Tool |
|
| 681 |
+
|------|--------|-------|------|
|
| 682 |
+
| `deck/TenderIQ_v1_dark_professional.pptx` | PPTX | Dark navy + gold | python-pptx |
|
| 683 |
+
| `deck/TenderIQ_v2_clean_minimal.pptx` | PPTX | White + blue, minimal | python-pptx |
|
| 684 |
+
| `deck/TenderIQ_v3_government_official.pptx` | PPTX | Government blue + saffron | python-pptx |
|
| 685 |
+
| `deck/TenderIQ_v4_modern_gradient.pdf` | PDF | Purple-blue gradient | reportlab |
|
| 686 |
+
| `deck/TenderIQ_v5_data_forward.pptx` | PPTX | Charts + data viz | python-pptx |
|
| 687 |
+
| `deck/TenderIQ_v6_infographic.pdf` | PDF | Large icons + numbers | reportlab |
|
| 688 |
+
|
| 689 |
+
All output to `deck/`. Delete `TenderIQ_Pitch.pdf` (the old bad one) after creating the new files.
|