diff --git a/aleksis/core/migrations/0006_dashboard_widget_size.py b/aleksis/core/migrations/0006_dashboard_widget_size.py
new file mode 100644
index 0000000000000000000000000000000000000000..713ff1792ce87e4124025a34561cd602004ea8c7
--- /dev/null
+++ b/aleksis/core/migrations/0006_dashboard_widget_size.py
@@ -0,0 +1,36 @@
+# Generated by Django 3.1.4 on 2020-12-20 15:55
+
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0005_timestamped_activity_notification'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='dashboardwidget',
+            name='size_l',
+            field=models.PositiveSmallIntegerField(default=6, help_text='> 992 px, 12 columns', validators=[django.core.validators.MaxValueValidator(12)], verbose_name='Size on desktop devices'),
+        ),
+        migrations.AddField(
+            model_name='dashboardwidget',
+            name='size_m',
+            field=models.PositiveSmallIntegerField(default=12, help_text='> 600 px, 12 columns', validators=[django.core.validators.MaxValueValidator(12)], verbose_name='Size on tablet devices'),
+        ),
+        migrations.AddField(
+            model_name='dashboardwidget',
+            name='size_s',
+            field=models.PositiveSmallIntegerField(default=12, help_text='<= 600 px, 12 columns', validators=[django.core.validators.MaxValueValidator(12)], verbose_name='Size on mobile devices'),
+        ),
+        migrations.AddField(
+            model_name='dashboardwidget',
+            name='size_xl',
+            field=models.PositiveSmallIntegerField(default=4, help_text='> 1200 px>, 12 columns', validators=[django.core.validators.MaxValueValidator(12)], verbose_name='Size on large desktop devices'),
+        ),
+    ]
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index c99820e5123f1a2d114c41533a9ee9a6628827d3..c9d818daf98a7b34d1e124b9bf463b7d283d79b1 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -9,6 +9,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.sites.models import Site
 from django.core.exceptions import ValidationError
+from django.core.validators import MaxValueValidator
 from django.db import models, transaction
 from django.db.models import QuerySet
 from django.forms.widgets import Media
@@ -681,6 +682,31 @@ class DashboardWidget(PolymorphicModel, PureDjangoModel):
     title = models.CharField(max_length=150, verbose_name=_("Widget Title"))
     active = models.BooleanField(verbose_name=_("Activate Widget"))
 
+    size_s = models.PositiveSmallIntegerField(
+        verbose_name=_("Size on mobile devices"),
+        help_text=_("<= 600 px, 12 columns"),
+        validators=[MaxValueValidator(12)],
+        default=12,
+    )
+    size_m = models.PositiveSmallIntegerField(
+        verbose_name=_("Size on tablet devices"),
+        help_text=_("> 600 px, 12 columns"),
+        validators=[MaxValueValidator(12)],
+        default=12,
+    )
+    size_l = models.PositiveSmallIntegerField(
+        verbose_name=_("Size on desktop devices"),
+        help_text=_("> 992 px, 12 columns"),
+        validators=[MaxValueValidator(12)],
+        default=6,
+    )
+    size_xl = models.PositiveSmallIntegerField(
+        verbose_name=_("Size on large desktop devices"),
+        help_text=_("> 1200 px>, 12 columns"),
+        validators=[MaxValueValidator(12)],
+        default=4,
+    )
+
     def get_context(self):
         """Get the context dictionary to pass to the widget template."""
         raise NotImplementedError("A widget subclass needs to implement the get_context method.")
diff --git a/aleksis/core/templates/core/index.html b/aleksis/core/templates/core/index.html
index bcf0bf1b4180756d53f1519b8ee2371ee3e4e658..dc7338e83ccdce193a3974b68bfcbeb589f6ae2a 100644
--- a/aleksis/core/templates/core/index.html
+++ b/aleksis/core/templates/core/index.html
@@ -31,7 +31,7 @@
 
     <div class="row" id="live_load">
       {% for widget in widgets %}
-        <div class="col s12 m12 l6 xl4">
+        <div class="col s{{ widget.size_s }} m{{ widget.size_m }} l{{ widget.size_l }} xl{{ widget.size_xl }}">
           {% include_widget widget %}
         </div>
       {% endfor %}