Project Documentation · Engineering Phase · May 2026

Technical Specification

The Louis Clergerie Letter Website  ·  michaeldbush.org/clergerie

Version 1.0  ·  May 2026  ·  Status: Approved  ·  Prerequisite: Functional Specification v1.0

0. Site Title

ContextText
Full title (H1, home page)The Louis Clergerie Letter: A Soldier's Account of the China Campaign, 1860
Browser tab / <title> tagThe Louis Clergerie Letter
Navigation barThe Clergerie Letter

1. Technology Stack

LayerTechnologyNotes
MarkupHTML5Hand-authored; no templating engine
StylingCSS3 with custom propertiesOne main stylesheet + one print stylesheet
BehaviorVanilla JavaScript ES6+Two files only: lightbox + tab switcher
FontsGoogle Fonts CDNPlayfair Display, Source Serif 4, DM Mono
ServerApache on Alabama (Raspberry Pi)Static file serving only
DevelopmentELMORE (Ubuntu 24.04)See §8 for rationale
PHP / Node.js / MySQLAvailable, not usedNo backend logic required
Build toolsNoneNo npm, no bundler, no preprocessor
Rationale for no build tools

The site is small, long-lived, and will be maintained by non-specialist family members in the future. Vanilla HTML/CSS/JS requires no toolchain to modify or understand. It will still work correctly in ten years without dependency rot.

2. File Structure

/[alabama-webroot]/clergerie/
|
|== index.html                    ← Home page
|== letter.html                   ← Letter viewer
|== context.html                  ← Historical context + SVG map
|== campaign.html                 ← China campaign document
|== research.html                 ← Genealogical research guide
|== downloads.html                ← Downloads page
|== about.html                    ← About / family connection
|
|== css/
|   |== style.css                 ← Main stylesheet (all pages)
|   \== print.css                 ← Print stylesheet
|
|== js/
|   |== lightbox.js               ← ~80 lines, no dependencies
|   \== tabs.js                   ← ~30 lines, no dependencies
|
|== images/
|   |== letter/
|   |   |== page1-thumb.jpg       ← 800px wide thumbnail
|   |   |== page2-thumb.jpg
|   |   |== page3-thumb.jpg
|   |   |== page4-thumb.jpg
|   |   |== page1-full.jpg        ← Original resolution (lightbox only)
|   |   |== page2-full.jpg
|   |   |== page3-full.jpg
|   |   \== page4-full.jpg
|   \== map/
|       \== jura-voyage.svg       ← Self-contained SVG
|
\== downloads/
    |== clergerie-transcription.docx
    |== artillerie-chine-1860.pdf
    |== clergerie-letter-pages.pdf
    \== shd-request-letter.txt

3. CSS Architecture

3.1 Custom Properties

:root {
  /* Colors */
  --color-parchment:   #F5F0E8;
  --color-text:        #2C2C2C;
  --color-text-light:  #555555;
  --color-gold:        #C9A84C;
  --color-navy:        #1F3864;
  --color-rust:        #8B3A2A;
  --color-border:      #D4C9B0;

  /* Typography */
  --font-heading:  'Playfair Display', Georgia, serif;
  --font-body:     'Source Serif 4', Georgia, serif;
  --font-mono:     'DM Mono', 'Courier New', monospace;

  /* Layout */
  --max-width:     900px;
  --gutter:        2rem;
  --section-gap:   3.5rem;
}

3.2 Stylesheet Sections

  1. Reset and base
  2. Custom properties (:root)
  3. Typography
  4. Layout — page shell, nav, main, footer
  5. Navigation (sticky header, hamburger)
  6. Home page — hero, navigation cards
  7. Letter viewer — two-column grid, thumbnails
  8. Lightbox
  9. Language tabs
  10. Historical context — pull-quotes, timeline aside
  11. Campaign page
  12. Research guide — info boxes, pre block
  13. Downloads page
  14. About page
  15. Utility classes
  16. Responsive breakpoints

3.3 Responsive Strategy

Mobile-first. Base styles target narrow viewports. Two breakpoints: @media (min-width: 700px) activates the two-column letter viewer and expands navigation; @media (min-width: 900px) applies full max-width layout.

4. The SVG Voyage Map

4.1 Confirmed Waypoints

Constructed from the letter (pages 1–3) and the Scherer military study (artillerie.asso.fr, 2026):

# Location Coordinates Source
1Toulon (departure)43.1°N, 5.9°ELetter p.1
2Strait of Gibraltar36.1°N, 5.3°WLetter p.3
3Santa Cruz de Tenerife28.5°N, 16.3°WLetter p.3 (water stop, Christmas Day)
4Cape of Good Hope34.4°S, 18.5°ELetter p.2 (letter dated here, 25 Feb 1860)
5Réunion / Mauritius20.9°S, 55.5°EStandard French colonial route
6Singapore / Strait of Malacca1.3°N, 103.8°EStandard route to Far East
7Shanghai31.2°N, 121.5°EScherer PDF — troops assembled here
8Nagasaki, Japan32.7°N, 129.9°EScherer: Jura carried 114 horses from Japan
9Shanghai (return)31.2°N, 121.5°EScherer PDF
10Tché-fou / Beitang37.5°N, 121.4°EScherer PDF — disembarkation point

Pékin (Beijing, 39.9°N, 116.4°E) marked as a non-visited reference point. The campaign's decisive battles — Palikao, the Summer Palace — are noted with smaller markers.

4.2 SVG Design Specifications

PropertyValue
Viewport1000 × 600px; viewBox="0 0 1000 600"; scales via CSS width:100%; height:auto
ProjectionSimple equirectangular — covers 40°W to 150°E, 45°S to 50°N
Background#EDE8DC — aged paper
CoastlinesSimplified paths, #C9B99A — no country borders
Sea areas#D6E4F0
Route lineDashed, #C9A84C (gold), stroke-width 2.5, directional arrowheads
Waypoint markersFilled circles, #1F3864 (navy), radius 5
LabelsPlayfair Display, 11px, #2C2C2C
StyleCartographic, period-appropriate; compass rose bottom-right
EmbeddingInline in context.html — no external file reference needed

5. Letter Viewer

5.1 Wide Screen Layout (≥ 900px)

CSS Grid: grid-template-columns: 1fr 1fr. Left column: active image + four thumbnail buttons. Right column: language tab switcher + active text panel (French or English). Each column scrolls independently. Active thumbnail indicated by gold border.

5.2 Narrow Screen Layout (< 900px)

Single column, top to bottom: horizontal scrolling thumbnail row → active page image (full width) → language tab switcher → active text panel.

5.3 Lightbox (js/lightbox.js)

5.4 Language Tab Switcher (js/tabs.js)

// On tab click:
// 1. Remove 'active' class from all tabs
// 2. Add 'active' to clicked tab
// 3. Set hidden attribute on all tabpanels
// 4. Remove hidden from corresponding tabpanel
// 5. Store selection: sessionStorage.setItem('lang', 'fr' | 'en')

// On page load:
// Read sessionStorage('lang') — default 'fr'
// Restore previously selected tab

6. Page Content Summary

PageKey elements
index.html Full-bleed hero (letter page 1 image + overlay text); epigraph blockquote (ocean sunset passage); two-sentence introduction; six navigation cards
letter.html Two-column / stacked viewer; transcription conventions note; four-page navigation; lightbox; language tabs (French + English)
context.html Three sections; embedded SVG voyage map (section 2); pull-quotes; key-dates aside in section 3
campaign.html Scherer findings summary; highlighted passage naming the Jura's cargo; Japan horse excursion note; PDF download card
research.html Six-step guide; SHD Vincennes and Toulon info boxes; draft request letter in <pre> block; external links
downloads.html Four download cards: Word doc, Scherer PDF, combined letter PDF, SHD request letter
about.html Family connection statement; research origin; attribution

7. Image Preparation

Source files: Clergerie-1s.jpg through Clergerie-4s.jpg. Run on ELMORE using ImageMagick:

# Install ImageMagick if needed
sudo apt install imagemagick

# Copy and rename originals
cp Clergerie-1s.jpg images/letter/page1-full.jpg
cp Clergerie-2s.jpg images/letter/page2-full.jpg
cp Clergerie-3s.jpg images/letter/page3-full.jpg
cp Clergerie-4s.jpg images/letter/page4-full.jpg

# Create 800px thumbnails
convert images/letter/page1-full.jpg -resize 800x images/letter/page1-thumb.jpg
convert images/letter/page2-full.jpg -resize 800x images/letter/page2-thumb.jpg
convert images/letter/page3-full.jpg -resize 800x images/letter/page3-thumb.jpg
convert images/letter/page4-full.jpg -resize 800x images/letter/page4-thumb.jpg

# Create combined PDF of all four pages
convert images/letter/page{1,2,3,4}-full.jpg downloads/clergerie-letter-pages.pdf

8. Development and Deployment

8.1 Why ELMORE, Not Alabama

ELMOREAlabama
CPUAMD Ryzen 7 7700XRaspberry Pi ARM
Architecturex86-64 — native for Claude CodeARM — occasional npm friction
RoleDevelopment machineWeb server
ImageMagickFull speedSlow
Claude CodeRecommendedNot recommended

8.2 Local Preview on ELMORE

cd /home/mike/clergerie
python3 -m http.server 8080
# Open browser to http://10.12.1.20:8080

8.3 Deploy to Alabama

# Adjust path to match actual CIFS mount point
cp -r /home/mike/clergerie/* /mnt/data/[alabama-webroot]/clergerie/

# Verify after deployment
curl -I https://michaeldbush.org/clergerie/
# Expected: HTTP/1.1 200 OK

No .htaccess changes needed. No virtual host modifications. Apache's DirectoryIndex handles index.html automatically.

9. Performance Budget

AssetTarget
Each thumbnail × 4≤ 300 KB each
Each full-resolution page × 4 (lightbox only)≤ 2 MB each
SVG voyage map≤ 80 KB
All HTML pages combined≤ 200 KB
CSS + JS combined≤ 40 KB
First load weight (index.html, no lightbox)~500–700 KB total

10. Accessibility Checklist

11. Build Order for Claude Code Sessions

  1. css/style.css — custom properties, base styles, typography, navigation
  2. css/print.css — print stylesheet
  3. index.html — home page; validates overall design and layout
  4. letter.html — letter viewer shell, without JavaScript
  5. js/lightbox.js + js/tabs.js — interactive behavior
  6. context.html — historical context, text content only
  7. images/map/jura-voyage.svg — voyage map SVG
  8. Embed SVG inline in context.html
  9. campaign.html, research.html, downloads.html, about.html
  10. Image preparation via ImageMagick commands (§7)
  11. Deploy to Alabama; verify with curl
Session discipline

Each Claude Code session begins by confirming the current state of the relevant file before making changes. Deviations from this specification require a conscious decision and a note — not silent improvisation.

Approved — Proceed to Coding Technical Specification v1.0  ·  May 2026