diff --git a/backend/secfit/comments/migrations/0001_initial.py b/backend/secfit/comments/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..ba7e9dea321df7562ff25ea8c5b7858835a2fe2a
--- /dev/null
+++ b/backend/secfit/comments/migrations/0001_initial.py
@@ -0,0 +1,34 @@
+# Generated by Django 3.1 on 2022-03-14 23:23
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Comment',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('content', models.TextField()),
+                ('timestamp', models.DateTimeField(auto_now_add=True)),
+            ],
+            options={
+                'ordering': ['-timestamp'],
+            },
+        ),
+        migrations.CreateModel(
+            name='Like',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('timestamp', models.DateTimeField(auto_now_add=True)),
+                ('comment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='likes', to='comments.comment')),
+            ],
+        ),
+    ]
diff --git a/backend/secfit/comments/migrations/0002_auto_20220315_0023.py b/backend/secfit/comments/migrations/0002_auto_20220315_0023.py
new file mode 100644
index 0000000000000000000000000000000000000000..6715871b402072a36d5a0d0dbec799d0e7d756e3
--- /dev/null
+++ b/backend/secfit/comments/migrations/0002_auto_20220315_0023.py
@@ -0,0 +1,34 @@
+# Generated by Django 3.1 on 2022-03-14 23:23
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('comments', '0001_initial'),
+        ('workouts', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='like',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='likes', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='workout',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='workouts.workout'),
+        ),
+    ]
diff --git a/backend/secfit/groups/migrations/0001_initial.py b/backend/secfit/groups/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..2e2c2a66bc7ce0ef4174180c5e30a8351b1c1c83
--- /dev/null
+++ b/backend/secfit/groups/migrations/0001_initial.py
@@ -0,0 +1,52 @@
+# Generated by Django 3.1 on 2022-03-14 23:23
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Comment',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('message', models.TextField()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Content',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.TextField(max_length=100)),
+                ('description', models.TextField()),
+                ('image', models.ImageField(blank=True, upload_to='media')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Group',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.TextField()),
+                ('description', models.TextField()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Like',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Membership',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberOf', to='groups.group')),
+            ],
+        ),
+    ]
diff --git a/backend/secfit/groups/migrations/0002_auto_20220315_0023.py b/backend/secfit/groups/migrations/0002_auto_20220315_0023.py
new file mode 100644
index 0000000000000000000000000000000000000000..d10a5c4c985902db89718887e8ee79c594b902aa
--- /dev/null
+++ b/backend/secfit/groups/migrations/0002_auto_20220315_0023.py
@@ -0,0 +1,66 @@
+# Generated by Django 3.1 on 2022-03-14 23:23
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('groups', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='membership',
+            name='member',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='member', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='like',
+            name='content',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='likedContent', to='groups.content'),
+        ),
+        migrations.AddField(
+            model_name='like',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='likeOwner', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='group',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='groupOwner', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='content',
+            name='creator',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='creator', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='content',
+            name='group',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ownedByGroup', to='groups.group'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='content',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='relatedContent', to='groups.content'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='commentOwner', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AlterUniqueTogether(
+            name='membership',
+            unique_together={('member', 'group')},
+        ),
+        migrations.AlterUniqueTogether(
+            name='like',
+            unique_together={('owner', 'content')},
+        ),
+    ]
diff --git a/backend/secfit/meals/migrations/0001_initial.py b/backend/secfit/meals/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..9fa46923657cf38e39428a5f446ba6b36ed284ed
--- /dev/null
+++ b/backend/secfit/meals/migrations/0001_initial.py
@@ -0,0 +1,38 @@
+# Generated by Django 3.1 on 2022-03-14 23:23
+
+from django.db import migrations, models
+import django.db.models.deletion
+import meals.models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Meal',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('date', models.DateTimeField()),
+                ('notes', models.TextField()),
+                ('calories', models.IntegerField()),
+                ('is_veg', models.BooleanField(default=False)),
+            ],
+            options={
+                'ordering': ['-date'],
+            },
+        ),
+        migrations.CreateModel(
+            name='MealFile',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('file', models.FileField(upload_to=meals.models.meal_directory_path)),
+                ('meal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='meals.meal')),
+            ],
+        ),
+    ]
diff --git a/backend/secfit/meals/migrations/0002_auto_20220315_0023.py b/backend/secfit/meals/migrations/0002_auto_20220315_0023.py
new file mode 100644
index 0000000000000000000000000000000000000000..eb5d58d0b6fc6cb1d178d936feeb556e0129b1a8
--- /dev/null
+++ b/backend/secfit/meals/migrations/0002_auto_20220315_0023.py
@@ -0,0 +1,28 @@
+# Generated by Django 3.1 on 2022-03-14 23:23
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('meals', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='mealfile',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='meal_files', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='meal',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='meals', to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/backend/secfit/requirements.txt b/backend/secfit/requirements.txt
index 88fa935213723454c324824ac92816923797c869..b31d4cd50388c0d48976b5359c2cdce5c557052e 100644
Binary files a/backend/secfit/requirements.txt and b/backend/secfit/requirements.txt differ
diff --git a/backend/secfit/users/migrations/0001_initial.py b/backend/secfit/users/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..9dda2328e23a4918394c345a4602a413090f8257
--- /dev/null
+++ b/backend/secfit/users/migrations/0001_initial.py
@@ -0,0 +1,75 @@
+# Generated by Django 3.1 on 2022-03-14 23:23
+
+from django.conf import settings
+import django.contrib.auth.models
+import django.contrib.auth.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+import users.models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('auth', '0012_alter_user_first_name_max_length'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='User',
+            fields=[
+                ('id', models.AutoField(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')),
+                ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
+                ('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')),
+                ('phone_number', models.TextField(blank=True, max_length=50)),
+                ('country', models.TextField(blank=True, max_length=50)),
+                ('city', models.TextField(blank=True, max_length=50)),
+                ('street_address', models.TextField(blank=True, max_length=50)),
+                ('age', models.PositiveIntegerField(blank=True, null=True)),
+                ('expirience', models.PositiveIntegerField(blank=True, null=True)),
+                ('favorite_dicipline', models.TextField(blank=True, max_length=50, null=True)),
+                ('bio', models.TextField(blank=True, max_length=200, null=True)),
+                ('coach', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='athletes', to=settings.AUTH_USER_MODEL)),
+                ('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='Offer',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('status', models.CharField(choices=[('a', 'Accepted'), ('p', 'Pending'), ('d', 'Declined')], default='p', max_length=8)),
+                ('timestamp', models.DateTimeField(auto_now_add=True)),
+                ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_offers', to=settings.AUTH_USER_MODEL)),
+                ('recipient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='received_offers', to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='AthleteFile',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('file', models.FileField(upload_to=users.models.athlete_directory_path)),
+                ('athlete', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='coach_files', to=settings.AUTH_USER_MODEL)),
+                ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='athlete_files', to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]
diff --git a/backend/secfit/workouts/migrations/0001_initial.py b/backend/secfit/workouts/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..d4275cc5d8e93a293e4818a430594e193ec5832d
--- /dev/null
+++ b/backend/secfit/workouts/migrations/0001_initial.py
@@ -0,0 +1,70 @@
+# Generated by Django 3.1 on 2022-03-14 23:23
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+import workouts.models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Exercise',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('description', models.TextField()),
+                ('duration', models.IntegerField(default=0)),
+                ('calories', models.IntegerField(default=0)),
+                ('muscleGroup', models.TextField(default='Legs')),
+                ('unit', models.CharField(max_length=50)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='RememberMe',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('remember_me', models.CharField(max_length=500)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Workout',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('date', models.DateTimeField()),
+                ('notes', models.TextField()),
+                ('visibility', models.CharField(choices=[('PU', 'Public'), ('CO', 'Coach'), ('PR', 'Private')], default='CO', max_length=2)),
+                ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='workouts', to=settings.AUTH_USER_MODEL)),
+            ],
+            options={
+                'ordering': ['-date'],
+            },
+        ),
+        migrations.CreateModel(
+            name='WorkoutFile',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('file', models.FileField(upload_to=workouts.models.workout_directory_path)),
+                ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='workout_files', to=settings.AUTH_USER_MODEL)),
+                ('workout', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='workouts.workout')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='ExerciseInstance',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('sets', models.IntegerField()),
+                ('number', models.IntegerField()),
+                ('exercise', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='instances', to='workouts.exercise')),
+                ('workout', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exercise_instances', to='workouts.workout')),
+            ],
+        ),
+    ]
diff --git a/requirements.txt b/requirements.txt
index 9feb375bde1e8fb7befe6c102dd29beeee7c6940..b31d4cd50388c0d48976b5359c2cdce5c557052e 100644
Binary files a/requirements.txt and b/requirements.txt differ