diff --git a/README.md b/README.md
index 8aee7d6..91983b6 100644
--- a/README.md
+++ b/README.md
@@ -234,6 +234,13 @@ Adapt paths to your chosen structure. This repo currently contains planning docu
- At least two templates with instant switching by M6
- Accessibility AA and test coverage by M7
+## User Journey
+- User starts by selecting a template from the gallery.
+- They then navigate through the stepper to fill out their personal information, work experience, education, skills, and summary.
+- Photo upload should only show if the selected template has a placeholder for a profile photo.
+- After completing the steps, they can preview their CV in real-time with the selected template.
+- If they are satisfied with the preview, they can export their CV as a PDF file.
+
## Glossary
- ATS: Applicant Tracking System; favors semantic, minimal styling.
- Parity: Inline preview and exported PDF display equivalent content/layout.
diff --git a/cv-engine/src/assets/templates/ats.svg b/cv-engine/src/assets/templates/ats.svg
new file mode 100644
index 0000000..4efd718
--- /dev/null
+++ b/cv-engine/src/assets/templates/ats.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/cv-engine/src/assets/templates/classic.svg b/cv-engine/src/assets/templates/classic.svg
new file mode 100644
index 0000000..ecd4302
--- /dev/null
+++ b/cv-engine/src/assets/templates/classic.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/cv-engine/src/assets/templates/minimal.svg b/cv-engine/src/assets/templates/minimal.svg
new file mode 100644
index 0000000..744aeba
--- /dev/null
+++ b/cv-engine/src/assets/templates/minimal.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/cv-engine/src/assets/templates/modern.svg b/cv-engine/src/assets/templates/modern.svg
new file mode 100644
index 0000000..f8c3df2
--- /dev/null
+++ b/cv-engine/src/assets/templates/modern.svg
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/cv-engine/src/components/ExportControls.tsx b/cv-engine/src/components/ExportControls.tsx
index b5a01ef..c717cdd 100644
--- a/cv-engine/src/components/ExportControls.tsx
+++ b/cv-engine/src/components/ExportControls.tsx
@@ -1,5 +1,6 @@
import React, { useRef, useState } from 'react';
import { useCvStore } from '../store/cvStore';
+import { templatesRegistry } from '../templates/registry';
import { exportPdf, requestExportJob, pollJobStatus, downloadJob, cancelJob } from '../api/export';
interface ExportControlsProps {
@@ -87,8 +88,9 @@ const ExportControls: React.FC = ({ endpoint = 'http://loca
onChange={e => updateTemplateId(e.target.value)}
disabled={status === 'exporting'}
>
-
-
+ {templatesRegistry.map(t => (
+
+ ))}
diff --git a/cv-engine/src/components/PreviewPanel.tsx b/cv-engine/src/components/PreviewPanel.tsx
index 043345f..671c86d 100644
--- a/cv-engine/src/components/PreviewPanel.tsx
+++ b/cv-engine/src/components/PreviewPanel.tsx
@@ -1,9 +1,9 @@
import React, { useMemo, useState } from 'react';
import { useCvStore } from '../store/cvStore';
-import ATSTemplate from '../templates/ATSTemplate';
-import ClassicTemplate from '../templates/ClassicTemplate';
+import { templatesMap } from '../templates/registry';
import { buildPrintableHtml } from '../utils/printable';
import ExportControls from './ExportControls';
+import TemplateGallery from './TemplateGallery';
interface PreviewPanelProps {
className?: string;
@@ -13,7 +13,7 @@ const PreviewPanel: React.FC = ({ className = '' }) => {
const cv = useCvStore(state => state.cv);
const templateId = useCvStore(state => state.cv.templateId);
const [mode, setMode] = useState<'inline' | 'printable'>('inline');
- const printableHtml = useMemo(() => buildPrintableHtml(cv), [cv]);
+ const printableHtml = useMemo(() => buildPrintableHtml(cv, templateId), [cv, templateId]);
return (