diff --git a/aleksis/apps/alsijil/migrations/0013_add_personal_note_widget.py b/aleksis/apps/alsijil/migrations/0013_add_personal_note_widget.py
new file mode 100644
index 0000000000000000000000000000000000000000..1ad991598e476925c5a84f3b1b8ac604920e617c
--- /dev/null
+++ b/aleksis/apps/alsijil/migrations/0013_add_personal_note_widget.py
@@ -0,0 +1,25 @@
+# Generated by Django 3.2 on 2021-04-30 00:07
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('alsijil', '0012_unique_relation'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='PersonalNotesDashboardWidget',
+            fields=[
+                ('dashboardwidget_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.dashboardwidget')),
+            ],
+            options={
+                'abstract': False,
+                'base_manager_name': 'objects',
+            },
+            bases=('core.dashboardwidget',),
+        ),
+    ]
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index 4eecb39f4ca4290c3d650d333a78f22d2dc76279..5dd0b97e5984bd5f219c78f209a2fafaf09ace63 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -32,7 +32,7 @@ from aleksis.apps.chronos.managers import GroupPropertiesMixin
 from aleksis.apps.chronos.mixins import WeekRelatedMixin
 from aleksis.apps.chronos.models import Event, ExtraLesson, LessonPeriod
 from aleksis.core.mixins import ExtensibleModel, GlobalPermissionModel
-from aleksis.core.models import SchoolTerm
+from aleksis.core.models import DashboardWidget, SchoolTerm
 from aleksis.core.util.core_helpers import get_site_preferences
 from aleksis.core.util.model_helpers import ICONS
 
@@ -427,3 +427,14 @@ class AlsijilGlobalPermissions(GlobalPermissionModel):
             ("register_absence", _("Can register absence")),
             ("list_personal_note_filters", _("Can list all personal note filters")),
         )
+
+
+class PersonalNotesDashboardWidget(DashboardWidget):
+    template = "alsijil/class_register/personalnote_widget.html"
+
+    def get_context(self, request):
+        context = {}
+
+        context["personal_notes"] = PersonalNote.objects.filter(absent=True, excused=False, person=request.user.person)
+
+        #TODO: limit, ordering, schoolterm
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/personalnote_widget.html b/aleksis/apps/alsijil/templates/alsijil/class_register/personalnote_widget.html
new file mode 100644
index 0000000000000000000000000000000000000000..8e3d3201647376c561a5116bba1e78383a516e58
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/class_register/personalnote_widget.html
@@ -0,0 +1,36 @@
+{# -*- engine:django -*- #}
+
+{% load i18n static %}
+
+<div class="card">
+  <div class="card-content">
+    <span class="card-title">
+      {% blocktrans %}
+        My unexcused lessons
+      {% endblocktrans %}
+    </span>
+    <ul class="collection">
+      {% for note in personal_notes %}
+        <li class="collection-item">
+          <i class="material-icons left red-text">warning</i>
+          <p class="no-margin">
+            <a href="{{ note.get_absolute_url }}">{{ note.date }}, {{ note.lesson_period }}</a>
+          </p>
+          {% if note.remarks %}
+            <p class="no-margin"><em>{{ note.remarks }}</em></p>
+          {% endif %}
+        </li>
+      {% empty %}
+        <li class="collection-item avatar valign-wrapper">
+          <i class="material-icons left materialize-circle green white-text">check</i>
+          <span class="title">{% trans "There are no unexcused lessons." %}</span>
+        </li>
+      {% endfor %}
+    </ul>
+  </div>
+
+
+  <div class="card-action">
+    <a href="{% url "overview_me" %}">{% trans "Go to personal overview" %}</a>
+  </div>
+</div>