# ELA Week 1 — Build Audit & Implementation Reference

> **Created:** May 2026
> **Source of truth:** `Curriculum_Plan.md` (in `~/Home_School/2nd_Grade/English_Language_Arts/`)
> **Generator:** `Week_01/generate_week1.py` → WeasyPrint → PDF

---

## Master Reference

For the full curriculum plan (Wed–Fri activity specs, 32-week outline, all phases), see:
`~/Home_School/2nd_Grade/English_Language_Arts/Curriculum_Plan.md`

This audit documents **implemented** standards for all five days (Mon–Fri) plus shared technical reference.

---

## Design Rules

- **Word List:** 12 words/week, STRICTLY 6+ letters, thematically connected
- **Pages per day:** Mon 4, Tue 3, Wed 3+, Thu 4+, Fri 3+
- **Header:** Appears ONLY on Page 1. Pages 2+ do NOT include the header.
- **Color Scheme:** Teal (#26A69A) + Coral (#FF7043)
- **Font:** Comic Neue / Comic Sans MS fallback
- **Writing Lines:** Sky / Fence / Ground (see CSS reference below)
- **Output:** `Week_01/[Day]/Week01_[Day]_[Topic].pdf`

---

## Content Correctness Checklist

**Run this BEFORE generating PDFs. Fix any failures first. This is the master checklist for all weeks.**

### Phonetic Breakdowns
- [ ] All letter-by-letter breakdowns spell the actual word (not a different word)
- [ ] Highlighted letters match the claimed vowel pattern
- [ ] Vowel labels (Long A, Short E, etc.) match actual pronunciation
- [ ] Non-standard patterns (digraphs, blends) are clearly noted as such
- [ ] No silent e examples use words that don't follow CVCe

### Grammar Instruction
- [ ] Grammar definitions are accurate and age-appropriate
- [ ] Examples demonstrate the rule correctly
- [ ] "Not a sentence" examples are actually incomplete sentences
- [ ] Punctuation marks listed are standard (., ?, !)

### Vocabulary Definitions
- [ ] All 12 word definitions are accurate
- [ ] Definitions are age-appropriate for 2nd grade
- [ ] No circular definitions (e.g., "polite means being polite")

### Story Content
- [ ] All spelling words used in their correct meaning
- [ ] Story grammar is correct (capitalization, punctuation, sentence structure)
- [ ] Story is coherent and makes logical sense
- [ ] No spelling words used incorrectly (e.g., "police" as a verb)

### Practice Activities
- [ ] Fill-in-blank answers actually fit the sentence context
- [ ] Fill-in-blank word bank contains the correct answers
- [ ] Opposite pairs are actual antonyms
- [ ] Synonym prompts have valid answers
- [ ] Spelling Detective misspellings are realistic (not correct words)
- [ ] Word Swap replacements make grammatical sense

### Cross-Reference Checks
- [ ] "Here's What We're Learning" examples match the word list
- [ ] Pattern Sort categories match the vowel labels
- [ ] Copy Practice words match the word list exactly
- [ ] Spelling Test covers all 12 words
- [ ] Friday has NO learning/remember boxes

---

## Monday — Learn It (4 pages, FINALIZED)

**Source:** `Week_01/Monday/Week01_Monday_Short_Vowels.pdf`

| Page | Content | Page Break After? |
|------|---------|-------------------|
| 1 | Header, "Here's What We're Learning", Word Cards (12, 2-col table) | YES |
| 2 | Spelling Story, Grammar: What Is a Sentence?, Capitals & Periods Practice (3) | NO |
| 3 | Short Vowel Sort (shuffled word bank + 5 columns) | YES |
| 4 | Copy Practice (12 words, 24px bold teal, 34px lines) | YES |
| 4 cont. | Fill in the Blank (4, word bank), Opposite Match-Up (2), Sentence Writing (4, 11px prompts) | - |

**Key implementation details:**
- Word Cards: `<table class="word-grid">` — 6 rows × 2 cols, each card has word + def + write_line()
- Vowel Sort: `random.Random(42).shuffle()` for consistent word bank, 5 labeled columns with 3 write_line() each
- Copy Practice: inline divs, word 24px bold teal (`#26A69A`), line 34px tall with sky/fence/ground
- Sentence Writing: prompt words 11px bold teal, write_line() after each
- NOT on Monday: Word Search, Mystery Word, "Remember This" box

---

## Tuesday — Practice It (3 pages, FINALIZED)

**Source:** `Week_01/Tuesday/Week01_Tuesday_Pattern_Practice.pdf`

| Page | Content | Page Break After? |
|------|---------|-------------------|
| 1 | Header, "Here's What We're Learning", "Remember This!" box, Word Scramble (12, 2-col table), Reading Comprehension (passage), Comprehension Questions (3) | NO |
| 2 | Vowel Pattern Hunt (12 words, checkboxes, orange highlighted vowels) | YES |
| 3 | Word Swap Challenge (3), Sentence Builder (3) | - |

**Key implementation details:**
- Word Scramble: `<table>` 6 rows × 2 cols, scrambled letters monospace 16px bold coral, `letter-spacing: 2px`, write_line() below each
- Reading Comprehension: `story-box` class (purple background `#F3E5F5`), bold spelling words
- Comprehension Questions: 3 questions, bold 12px, write_line() after each
- Vowel Pattern Hunt: 30% width inline-block cards, checkbox span, vowel highlighted via `word.replace(vowel_letter, orange-bold-span)`, teal left border
- Word Swap: 3 items, shows original with bolded words, asks student to rewrite with swapped words, orange background cards
- Sentence Builder: 3 prompts, italic instructions with keyword in teal bold, write_line() after each
- Remember This!: Uses `remember_box()` helper (green `#E8F5E9` background)
- NOT on Tuesday: Short Vowel Sort (already Monday), Fill-in-Blank Story (overlaps Monday)

---

## Wednesday — Connect It (4 pages, FINALIZED)

**Source:** `Week_01/Wednesday/Week01_Wednesday_Reading_Vocabulary.pdf`

| Page | Content | Page Break After? |
|------|---------|-------------------|
| 1 | Header, "Here's What We're Learning", Reading Comprehension (passage), Comprehension Questions (4) | YES |
| 2 | Synonyms & Antonyms (6 words, NO hints — student thinks of their own) | YES |
| 3 | Word Webs (2: animal + winter), Sentence Sort (4 jumbled sentences) | YES |
| 4 | Correct the Sentences (4), Context Clues (4), Dictation (12 words, 3-per-row table) | - |

**Key implementation details:**
- Reading passage: `story-box` (purple `#F3E5F5`), 10 spelling words bolded
- Comprehension Qs: 4 questions, each with write_line()
- Synonyms & Antonyms: 6 words (garden, kitten, winter, bubble, helmet, animal), each card has "Synonym: ___ Antonym: ___" with write_line(), green background cards. **No hints provided**
- Word Webs: 2 webs — "animal" (teal circle, coral tags) + "winter" (coral circle, teal tags). Instruction: think of more words for each web
- Sentence Sort: 3 sentences, words shuffled with `random.Random(303)`. Current sentences: (1) "the big elephant has a long trunk." (2) "in winter it is cold." (3) "i blow a soap bubble with." — uses spelling words: elephant, winter, bubble. **Note:** Thursday has its own distinct set of 4 sentence sorts.
- Correct the Sentences: 4 sentences with spelling errors, student rewrites correctly
- Context Clues: 4 sentences, student identifies which spelling word the clue describes
- Dictation: 12-word table, 3 words per row, student writes spelled word

---

## Thursday — Use It: Writing & Reading (4 pages, FINALIZED)

**Source:** `Week_01/Thursday/Week01_Thursday_Writing_Reading.pdf`

| Page | Content | Page Break After? |
|------|---------|-------------------|
| 1 | Header, "Here's What We're Learning", "Remember This!" box (paragraph structure), Spelling Story (10-sentence passage, 11 spelling words in bold), Comprehension Questions (3) | YES |
| 2 | Sentence Sort (4 jumbled sentences), Spelling Detective (passage with 5 misspelled words marked wavy red underline, fix-each list) | YES |
| 3 | Word Swap (3 items — replace bold word with synonym, write new sentence), Spelling Map (3-column table: Word \| Vowel Pattern \| What It Means — 6 words, first 2 filled as examples) | YES |
| 4 | Paragraph Builder (5 sentence starters in teal bold, each with write_line()), Write Your Own Story (creative prompt, 8 writing lines) | - |

**Key implementation details:**
- **Title:** "Week 1, Thursday -- Use It: Writing & Reading"
- **Remember This!:** Paragraph structure rule — topic sentence, 2-3 details, closing sentence, capitals + periods
- **Spelling Story:** 10 sentences using all 12 words (basket appears twice), Mia's garden-to-aquarium adventure
- **Comprehension:** 3 questions with write_line() each
- **Sentence Sort:** 4 jumbled sentences (distinct from Wednesday's), shuffled with `random.Random(401)`. Current sentences: (1) "the kitten plays in the garden." (2) "i see an animal at the zoo." (3) "the doctor checks the animal." (4) "i carry an umbrella in the rain." — uses spelling words: kitten, garden, animal, doctor, umbrella
- **Spelling Detective:** Passage with 5 wavy-red-underlined errors (bascket, helmt, inseckt, kittn, umbrela); separate fix-it list with strikethrough wrong + write_line() for correct
- **Word Swap:** 3 orange-background cards, each shows original sentence with bold word, asks student to replace with synonym (kitten→baby cat, doctor→healer, bubble→soap ball) and write new sentence
- **Spelling Map:** 3-column table with header row, 6 data rows — basket/helmet pre-filled (white bg), kitten/insect/octopus/bubble blank (light orange bg), student completes pattern + meaning
- **Paragraph Builder:** 5 sentence starters in bold teal, each followed by write_line() — topic sentence → 3 details → closing
- **Write Your Own Story:** 8 write_line() slots, prompt requires 5+ spelling words

---

## Friday — Show It: Review & Assessment (3 pages, FINALIZED)

**Source:** `Week_01/Friday/Week01_Friday_Review_Assessment.pdf`

| Page | Content | Page Break After? |
|------|---------|-------------------|
| 1 | Header, Spelling Test (12 words, write-line each) | YES |
| 2 | Review Reading (passage in story-box), Story Questions (3), Opposite Pairs (2), Sentence Builder (word rearrange) | YES |
| 3 | Show What You Know (8 words, write word + sentence), Word Journal (drawing area + 2 lines), Celebration callout | - |

**Key implementation details:**
- **Title:** "Week 1, Friday -- Review & Assessment"
- **NO** learning/remember boxes (assessment day)
- **Spelling Test:** 12 words, student writes each on a line (dictation format)
- **Review Reading:** Aquarium field trip story using spelling words (winter, basket, umbrella, octopus, doctor, animal, kitten, bubble, elephant, insect, helmet). 3 comprehension questions: (1) Where did the class go? (2) Who showed the students how she helps animals? (3) What did the student draw?
- **Opposite Pairs:** 2 words with write_line() for opposite
- **Sentence Builder:** Word chips to rearrange into correct sentence
- **Show What You Know:** First 8 words — student writes word + uses in sentence
- **Word Journal:** Dashed-border drawing area + 2 writing lines for reflection
- **Celebration:** Yellow box with "Great Job This Week!" encouragement

---

## Shared CSS Reference

```css
/* Page setup */
@page { size: letter; margin: 0.7in 0.85in; }
body { font-family: 'Comic Neue', 'Comic Sans MS', sans-serif; color: #222; line-height: 1.4; }

/* Header — Page 1 only */
header { display: flex; justify-content: space-between; align-items: baseline;
         border-bottom: 3px solid #26A69A; padding-bottom: 6px; margin-bottom: 12px; }
header h1 { font-size: 17px; color: #26A69A; }
header .subtitle { font-size: 12px; color: #666; }
header .name-line { font-size: 12px; }

/* Section headings */
h2 { font-size: 14px; color: #26A69A; margin: 14px 0 4px 0;
     border-bottom: 2px solid #B2DFDB; padding-bottom: 2px; break-after: avoid; }
h2.coral { color: #FF7043; border-bottom-color: #FFAB91; }

/* Note/instruction box */
.note { background: #E8F5E9; border-left: 4px solid #26A69A; padding: 6px 10px;
        border-radius: 4px; font-size: 11.5px; margin: 4px 0 10px 0; break-inside: avoid; }

/* Writing lines — Sky / Fence / Ground */
.write-line { position: relative; height: 22px; margin: 2px 0; }
.write-line-sky    { position: absolute; left: 0; right: 0; top: 0; border-top: 1px solid #333; }
.write-line-fence  { position: absolute; left: 0; right: 0; bottom: 12px; border-bottom: 1px dashed #ccc; }
.write-line-ground { position: absolute; left: 0; right: 0; bottom: 0; border-bottom: 1px solid #333; }

/* Story/passage box */
.story-box { background: #F3E5F5; border: 1.5px solid #CE93D8; border-radius: 8px;
             padding: 10px; font-size: 12px; line-height: 1.5; margin: 8px 0; break-inside: avoid; }

/* Fill-in blank card */
.fb-item { background: #E0F2F1; border: 1.5px solid #80CBC4; border-radius: 6px;
           padding: 6px 8px; margin-bottom: 6px; font-size: 12px; break-inside: avoid; }

/* Word bank */
.word-bank { background: #FFF3E0; border: 2px dashed #FFB74D; border-radius: 8px; padding: 8px 12px; margin: 8px 0; }
.word-bank-label { font-size: 11px; font-weight: bold; color: #FF7043; }
.word-bank-words { display: flex; flex-wrap: wrap; gap: 6px; }
.word-bank-words span { background: white; border: 1px solid #FFB74D; border-radius: 4px; padding: 2px 8px; font-size: 11px; }

/* Word cards grid */
.word-grid { width: 100%; border-collapse: separate; border-spacing: 3px; }
.word-card { border: 1.5px solid #B2DFDB; border-radius: 6px; padding: 4px 6px; background: #FAFAFA; break-inside: avoid; }
.word-card .word { font-size: 12px; font-weight: bold; color: #26A69A; }
.word-card .def  { font-size: 9px; color: #555; }

/* Misc */
.activity { break-inside: avoid; }
.divider { border-top: 1px dashed #ccc; margin: 12px 0; }
```

---

## Helper Functions (from generate_week1.py)

| Function | Output |
|----------|--------|
| `header(title, subtitle)` | Page header with title, subtitle, name line |
| `sectitle(text, color="teal")` | `<h2>` (add `color="coral"` for coral variant) |
| `secnote(text)` | Green note box with instruction text |
| `write_line()` | Sky/fence/ground writing line (22px) |
| `copy_line()` | Same style, separate class for copy practice |
| `word_bank(words, seed)` | Orange dashed box with shuffled word spans |
| `fill_blank_with_line(sentence)` | Teal card with sentence + write_line() |
| `remember_box(title, content)` | Green box (`#E8F5E9`) for "Remember This!" |
| `page_break()` | `<div style="page-break-after:always;">` |
| `word_search(words, rows, cols, seed)` | Monospace grid + word list (not used Mon/Tue) |

---

## Color Palette

| Name | Hex | Usage |
|------|-----|-------|
| TEAL | `#26A69A` | Headings, primary accents |
| TEAL_MID | `#B2DFDB` | Borders, dividers |
| TEAL_LIGHT | `#E0F2F1` | Card backgrounds |
| CORAL | `#FF7043` | Activity accents, highlights |
| CORAL_LIGHT | `#FFAB91` | Coral borders |
| ORANGE_BG | `#FFF3E0` | Word bank, swap/builder cards |
| ORANGE_BD | `#FFB74D` | Word bank/swap borders |
| PURPLE_BG | `#F3E5F5` | Story boxes |
| PURPLE_BD | `#CE93D8` | Story box borders |
| GREEN_BG | `#E8F5E9` | Note boxes, Remember This |
| DARK | `#222` | Body text |
| GRAY | `#888`–`#ccc` | Hints, fences, dividers |

---

## WeasyPrint Quirks

- **NO floats** — items stack vertically. Use `<table>` for multi-column layouts
- **NO CSS Grid** — unsupported
- **NO inline-block wrapping** — same issue as floats
- **NO ::before / ::after** — use explicit child `<div>`s instead
- **border-collapse:** must be `separate` for `border-radius` on table cells
- **Anti-bleed:** `break-inside: avoid` on cards/activities/tables, `break-after: avoid` on `<h2>`
- **Page breaks:** Use `page_break()` helper (`page-break-after: always`)
- **API:** `HTML(string=html).write_pdf(path)` — NOT `.write_pdf()` as method chain
- **f-string bug:** When template uses `""" + "".join(...) + """` concatenation, f-string terminates at first break. All `{function_call()}` after concatenation render as literal text. **Fix:** Pre-evaluate dynamic content into variables BEFORE the f-string, reference as `{variable}` inside.

---

## Week 1 Words

| # | Word | Pattern | Definition |
|---|------|---------|-----------|
| 1 | basket | short a | a container for holding things |
| 2 | garden | short a | a place where plants grow |
| 3 | animal | short a | a living creature |
| 4 | elephant | short e | a large animal with a trunk |
| 5 | helmet | short e | a hard hat for protection |
| 6 | insect | short i | a small creature with six legs |
| 7 | kitten | short i | a young cat |
| 8 | winter | short i | the coldest season |
| 9 | octopus | short o | a sea creature with eight arms |
| 10 | doctor | short o | someone who helps sick people |
| 11 | umbrella | short u | keeps rain off you |
| 12 | bubble | short u | a thin round ball of air |

**By vowel:** A: basket, garden, animal | E: elephant, helmet | I: insect, kitten, winter | O: octopus, doctor | U: umbrella, bubble