diff --git a/inc/API.php b/inc/API.php
index 1eac89f..7a8acc0 100644
--- a/inc/API.php
+++ b/inc/API.php
@@ -88,6 +88,21 @@
         ]);
         break;
 
+      case 'getStartupData':
+        self::checkRequestMethod('GET');
+
+        $payload = [];
+        $payload['user'] = [];
+        $payload['user']['signedIn'] = \DAFME\Covid\Users::isSignedIn();
+        $payload['user']['email'] = ($payload['user']['signedIn'] ? Users::getUserData('email') : null);
+
+        $auth = new Auth();
+        $payload['authUrl'] = $auth->getAuthUrl();
+        $payload['subjects'] = \DAFME\Covid\Subjects::getStartupSubjects();
+
+        self::returnPayload($payload);
+        break;
+
       case 'signOut':
         self::checkRequestMethod('POST');
         \DAFME\Covid\Users::signOut();
diff --git a/inc/Classes.php b/inc/Classes.php
index f174393..f080d56 100644
--- a/inc/Classes.php
+++ b/inc/Classes.php
@@ -53,13 +53,7 @@
     if (!$query->execute($query_params)) return false;
     $classes = $query->fetchAll(\PDO::FETCH_ASSOC);
 
-    foreach ($classes as &$class) {
-      if (!$isSignedIn)
-        $class['user_subject_id'] = null;
-
-      $class['user_selected'] = $class['user_subject_id'] !== null;
-    }
-
+    Subjects::addIsUserSelected($classes);
     return $classes;
   }
 }
diff --git a/inc/Subjects.php b/inc/Subjects.php
index 1578398..6b4ec70 100644
--- a/inc/Subjects.php
+++ b/inc/Subjects.php
@@ -12,6 +12,43 @@
     return $query->fetchAll(\PDO::FETCH_ASSOC);
   }
 
+  public static function addIsUserSelected(&$entries, $doIfSignedOut = true) {
+    $isSignedIn = Users::isSignedIn();
+
+    if (!$doIfSignedOut) return;
+
+    foreach ($entries as &$entry) {
+      if (!$isSignedIn)
+        $entry['user_subject_id'] = null;
+
+      $entry['user_selected'] = $entry['user_subject_id'] !== null;
+    }
+  }
+
+  public static function getStartupSubjects() {
+    global $con;
+    $isSignedIn = Users::isSignedIn();
+
+    $query = $con->prepare('SELECT s.id, s.friendly_name'.($isSignedIn ? ', us.id user_subject_id' : '').'
+      FROM subjects s'.($isSignedIn ? '
+      LEFT JOIN user_subjects us
+        ON s.id = us.subject_id
+      WHERE
+        us.user_id = :user_id OR
+        us.user_id IS NULL' : '').'
+      ORDER BY s.friendly_name ASC');
+
+    $query_params = [
+      "user_id" => Users::getUserId()
+    ];
+
+    if (!$query->execute($query_params)) return false;
+    $subjects = $query->fetchAll(\PDO::FETCH_ASSOC);
+
+    self::addIsUserSelected($subjects, false);
+    return $subjects;
+  }
+
   public static function exists(int $subject): bool {
     global $con;
     $query = $con->prepare('SELECT id FROM subjects WHERE id = ?');
diff --git a/inc/Users.php b/inc/Users.php
index b91737f..a13d1e9 100644
--- a/inc/Users.php
+++ b/inc/Users.php
@@ -53,4 +53,15 @@
     global $_SESSION;
     return (self::isSignedIn() ? $_SESSION['userId'] : -1);
   }
+
+  public static function getUserData(string $field) {
+    global $con;
+    if (!self::isSignedIn()) return false;
+    $userId = self::getUserId();
+
+    $query = $con->prepare('SELECT '.$field.' FROM users WHERE id = ?');
+    if (!$query->execute([$userId])) return false;
+
+    return $query->fetchColumn();
+  }
 }
