diff --git a/backend/offer_email_template/template.py b/backend/offer_email_template/template.py
new file mode 100644
index 0000000..1a8198e
--- /dev/null
+++ b/backend/offer_email_template/template.py
@@ -0,0 +1,95 @@
+from html import escape
+
+
+def _text(value):
+ """Escape user-entered text and keep its line breaks ("Maymar Office\\nOr\\nHead Office")."""
+ if value in (None, ""):
+ return ""
+ return "
".join(escape(line.strip()) for line in str(value).splitlines())
+
+
+def _salary(value):
+ if value in (None, ""):
+ return ""
+ try:
+ amount = float(str(value).replace(",", ""))
+ return f"PKR {amount:,.0f}"
+ except (TypeError, ValueError):
+ return _text(value)
+
+
+def _recruiter_names(recruiter_names):
+ names = [str(n).strip() for n in (recruiter_names or []) if n and str(n).strip()]
+ if not names:
+ return ""
+ if len(names) == 1:
+ return escape(names[0])
+ if len(names) == 2:
+ return f"{escape(names[0])} & {escape(names[1])}"
+ return ", ".join(escape(n) for n in names[:-1]) + f" & {escape(names[-1])}"
+
+
+def _package_row(label, value, bold=False):
+ cell = "border:1px solid #000000;padding:4px 8px;vertical-align:top;"
+ shown = f"{value}" if bold else value
+ return (
+ "