Index: backend/auth_form/admin.py
===================================================================
--- backend/auth_form/admin.py	(revision 4bc55a50ed2c05a97163ab7df7ebcbf0d26b3c92)
+++ backend/auth_form/admin.py	(revision f4279e09cdf8ab57f06260f1016df31dfa5e2207)
@@ -1,5 +1,6 @@
 from django.contrib import admin
+from django.contrib.auth.admin import UserAdmin
 from .models import User, Student
 # Register your models here.
-admin.site.register(User)
+admin.site.register(User, UserAdmin)
 admin.site.register(Student)
Index: backend/auth_form/migrations/0001_initial.py
===================================================================
--- backend/auth_form/migrations/0001_initial.py	(revision f4279e09cdf8ab57f06260f1016df31dfa5e2207)
+++ backend/auth_form/migrations/0001_initial.py	(revision f4279e09cdf8ab57f06260f1016df31dfa5e2207)
@@ -0,0 +1,67 @@
+# Generated by Django 5.1.7 on 2025-04-28 19:34
+
+import django.contrib.auth.models
+import django.contrib.auth.validators
+import django.contrib.postgres.fields
+import django.db.models.deletion
+import django.utils.timezone
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('auth', '0012_alter_user_first_name_max_length'),
+        ('subjects', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='User',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('password', models.CharField(max_length=128, verbose_name='password')),
+                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
+                ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
+                ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
+                ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
+                ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
+                ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
+                ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
+                ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
+                ('user_type', models.CharField(choices=[('student', 'Student'), ('admin', 'Admin'), ('superadmin', 'Superadmin')], default='student', max_length=20)),
+                ('full_name', models.CharField(max_length=255)),
+                ('email', models.EmailField(max_length=254, unique=True)),
+                ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
+                ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
+            ],
+            options={
+                'verbose_name': 'user',
+                'verbose_name_plural': 'users',
+                'abstract': False,
+            },
+            managers=[
+                ('objects', django.contrib.auth.models.UserManager()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Student',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('index', models.CharField(max_length=20, unique=True)),
+                ('study_track', models.CharField(choices=[('SIIS23', 'SIIS'), ('SEIS23', 'SEIS'), ('KI23', 'KI'), ('KN23', 'KN'), ('IMB23', 'IMB'), ('PIT23', 'PIT')], max_length=20)),
+                ('current_year', models.PositiveIntegerField()),
+                ('study_effort', models.PositiveIntegerField(help_text='Hours per week')),
+                ('preferred_domains', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=64), size=None)),
+                ('preferred_technologies', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=64), size=None)),
+                ('preferred_evaluation', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=16), size=None)),
+                ('favorite_professors', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=16), size=None)),
+                ('enrolled_subjects', models.ManyToManyField(related_name='enrolled_subjects', to='subjects.subject')),
+                ('passed_subjects', models.ManyToManyField(related_name='passed_subjects', to='subjects.subject')),
+                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='student_profile', to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]
Index: backend/auth_form/models.py
===================================================================
--- backend/auth_form/models.py	(revision 4bc55a50ed2c05a97163ab7df7ebcbf0d26b3c92)
+++ backend/auth_form/models.py	(revision f4279e09cdf8ab57f06260f1016df31dfa5e2207)
@@ -1,4 +1,5 @@
 from django.db import models
 from django.contrib.auth.models import AbstractUser
+from django.contrib.postgres.fields import ArrayField
 # Create your models here.
 class User(AbstractUser):
@@ -10,5 +11,11 @@
     user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICES, default='student')
     full_name = models.CharField(max_length=255)
+    email = models.EmailField(unique=True)
 
+    USERNAME_FIELD = 'email'
+    REQUIRED_FIELDS = []
+
+    def __str__(self):
+        return self.email
     def get_user_type(self):
         return self.user_type
@@ -19,11 +26,10 @@
 
     STUDY_TRACK_CHOICES = [
-        ('SIIS', 'SIIS'),
-        ('SEIS', 'SEIS'),
-        ('KI', 'KI'),
-        ('KN', 'KN'),
-        ('IMB', 'IMB'),
-        ('PIT', 'PIT'),
-        ('SSP', 'SSP')
+        ('SIIS23', 'SIIS'),
+        ('SEIS23', 'SEIS'),
+        ('KI23', 'KI'),
+        ('KN23', 'KN'),
+        ('IMB23', 'IMB'),
+        ('PIT23', 'PIT'),
     ]
     study_track = models.CharField(max_length=20, choices=STUDY_TRACK_CHOICES)
@@ -31,12 +37,12 @@
     current_year = models.PositiveIntegerField()
     study_effort = models.PositiveIntegerField(help_text="Hours per week")
+    preferred_domains = ArrayField(models.CharField(max_length=64))
+    preferred_technologies = ArrayField(models.CharField(max_length=64))
+    preferred_evaluation = ArrayField(models.CharField(max_length=16))
+    favorite_professors = ArrayField(models.CharField(max_length=16))
 
-    preferred_domains = models.JSONField(default=list)
-    preferred_technologies = models.JSONField(default=list)
-    preferred_evaluation = models.JSONField(default=list)
-    favorite_professors = models.JSONField(default=list)
-
-    # finish the subjects relation logic
+    
     passed_subjects = models.ManyToManyField('subjects.subject', related_name="passed_subjects")
+    enrolled_subjects = models.ManyToManyField('subjects.subject', related_name="enrolled_subjects")
 
     def update_info(self, new_preferences):
Index: backend/backend/settings.py
===================================================================
--- backend/backend/settings.py	(revision 4bc55a50ed2c05a97163ab7df7ebcbf0d26b3c92)
+++ backend/backend/settings.py	(revision f4279e09cdf8ab57f06260f1016df31dfa5e2207)
@@ -153,2 +153,3 @@
 
 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+AUTH_USER_MODEL = 'auth_form.User'
