diff --git a/pgmanage/app/migrations/0026_erdlayout.py b/pgmanage/app/migrations/0026_erdlayout.py
new file mode 100644
index 000000000..1f8c74d21
--- /dev/null
+++ b/pgmanage/app/migrations/0026_erdlayout.py
@@ -0,0 +1,26 @@
+# Generated by Django 4.2.19 on 2025-04-30 13:59
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('app', '0025_monwidgetsconnections_position_and_more'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ERDLayout',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=200)),
+ ('layout', models.JSONField()),
+ ('connection', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app.connection')),
+ ],
+ options={
+ 'unique_together': {('connection', 'name')},
+ },
+ ),
+ ]
diff --git a/pgmanage/app/models/main.py b/pgmanage/app/models/main.py
index 32f1d7620..3ab63d8dd 100644
--- a/pgmanage/app/models/main.py
+++ b/pgmanage/app/models/main.py
@@ -238,3 +238,12 @@ class Job(models.Model):
utility_pid = models.IntegerField(null=True)
process_state = models.IntegerField(null=True)
connection = models.ForeignKey(Connection, on_delete=models.CASCADE, null=True)
+
+
+class ERDLayout(models.Model):
+ connection = models.ForeignKey(Connection, on_delete=models.CASCADE)
+ name = models.CharField(max_length=200)
+ layout = models.JSONField()
+
+ class Meta:
+ unique_together = ["connection", "name"]
diff --git a/pgmanage/app/static/pgmanage_frontend/src/components/ERDTab.vue b/pgmanage/app/static/pgmanage_frontend/src/components/ERDTab.vue
index 4fa5da22b..91a93bb02 100644
--- a/pgmanage/app/static/pgmanage_frontend/src/components/ERDTab.vue
+++ b/pgmanage/app/static/pgmanage_frontend/src/components/ERDTab.vue
@@ -1,5 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+