diff --git a/web/src/padelnomics/admin/templates/admin/partials/pipeline_catalog.html b/web/src/padelnomics/admin/templates/admin/partials/pipeline_catalog.html
new file mode 100644
index 0000000..beb556f
--- /dev/null
+++ b/web/src/padelnomics/admin/templates/admin/partials/pipeline_catalog.html
@@ -0,0 +1,74 @@
+
+
+{% if serving_meta %}
+
+
No serving tables found. Run the pipeline to generate them.
+
+{% endif %}
+
+
diff --git a/web/src/padelnomics/admin/templates/admin/partials/pipeline_table_detail.html b/web/src/padelnomics/admin/templates/admin/partials/pipeline_table_detail.html
new file mode 100644
index 0000000..7aade3c
--- /dev/null
+++ b/web/src/padelnomics/admin/templates/admin/partials/pipeline_table_detail.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
Schema
+
+ {% for col in columns %}
+
+ {{ col.column_name }}
+ {{ col.data_type | upper }}
+
+ {% endfor %}
+
+
+
+
+ {% if sample %}
+
+
+ Sample (first {{ sample | length }} rows)
+
+
+
+
+
+ {% for col in columns %}
+ | {{ col.column_name }} |
+ {% endfor %}
+
+
+
+ {% for row in sample %}
+
+ {% for col in columns %}
+ |
+ {% set val = row[col.column_name] %}
+ {% if val is none %}
+ null
+ {% elif val | string | length > 40 %}
+ {{ val | string | truncate(40, true) }}
+ {% else %}
+ {{ val }}
+ {% endif %}
+ |
+ {% endfor %}
+
+ {% endfor %}
+
+
+
+
+ {% else %}
+
Table is empty.
+ {% endif %}
+
+