Index: src/app/students/profile/page.tsx
===================================================================
--- src/app/students/profile/page.tsx	(revision 4fe4582e6255b2244fa2c6ce9ae837ab03e74a58)
+++ src/app/students/profile/page.tsx	(revision 8496f3c2ae490dee80fdf71af9fe30c63996efaf)
@@ -21,4 +21,5 @@
 import { IconDefinition } from '@fortawesome/fontawesome-svg-core';
 import { useTranslation } from 'react-i18next';
+import { apiUrl } from '@/lib/api';
 
 type PersonalInfo = {
@@ -154,5 +155,5 @@
 
       try {
-        const response = await fetch('https://iknow-api.onrender.com/api/user/getUser', {
+        const response = await fetch(apiUrl('/api/user/getUser'), {
           method: 'GET',
           headers: {
Index: src/app/students/semesters/page.tsx
===================================================================
--- src/app/students/semesters/page.tsx	(revision 4fe4582e6255b2244fa2c6ce9ae837ab03e74a58)
+++ src/app/students/semesters/page.tsx	(revision 8496f3c2ae490dee80fdf71af9fe30c63996efaf)
@@ -15,4 +15,6 @@
 import { getAccessToken } from '@/lib/auth';
 import { useTranslation } from 'react-i18next';
+import { apiUrl } from '@/lib/api';
+import EnrollSemesterDialog from '@/components/enroll-semester-dialog';
 
 type Semester = {
@@ -113,4 +115,7 @@
   const [isLoading, setIsLoading] = useState(true);
   const [errorMessage, setErrorMessage] = useState<string | null>(null);
+  const [enrollOpen, setEnrollOpen] = useState(false);
+  // Bumped after a successful enrolment so the table reloads.
+  const [reloadKey, setReloadKey] = useState(0);
   const { t } = useTranslation();
 
@@ -130,5 +135,5 @@
 
       try {
-        const response = await fetch('https://iknow-api.onrender.com/api/user/getSemesters', {
+        const response = await fetch(apiUrl('/api/user/getSemesters'), {
           method: 'GET',
           headers: {
@@ -158,5 +163,5 @@
       cancelled = true;
     };
-  }, []);
+  }, [reloadKey]);
 
   if (isLoading) {
@@ -184,14 +189,23 @@
       {/* Header */}
       <div className="bg-primary text-white rounded-xl p-8 mb-8">
-        <div className="flex items-center gap-4">
-          <div className="bg-white rounded-full p-4">
-            <FontAwesomeIcon icon={faCalendarAlt} className="text-3xl text-[#0272D1]" />
+        <div className="flex flex-col gap-4 md:flex-row md:items-center md:justify-between">
+          <div className="flex items-center gap-4">
+            <div className="bg-white rounded-full p-4">
+              <FontAwesomeIcon icon={faCalendarAlt} className="text-3xl text-[#0272D1]" />
+            </div>
+            <div>
+              <h1 className="text-3xl font-bold mb-2">{t('semesters')}</h1>
+              <p className="text-lg opacity-90">
+                {t('semesters_overview')}
+              </p>
+            </div>
           </div>
-          <div>
-            <h1 className="text-3xl font-bold mb-2">{t('semesters')}</h1>
-            <p className="text-lg opacity-90">
-              {t('semesters_overview')}
-            </p>
-          </div>
+
+          <button
+            className="self-start rounded-lg bg-white px-5 py-3 font-semibold text-[#0272D1] shadow-sm hover:bg-white/90 md:self-auto"
+            onClick={() => setEnrollOpen(true)}
+          >
+            + {t('enroll_semester')}
+          </button>
         </div>
       </div>
@@ -373,4 +387,10 @@
         </div>
       </div>
+
+      <EnrollSemesterDialog
+        open={enrollOpen}
+        onClose={() => setEnrollOpen(false)}
+        onEnrolled={() => setReloadKey((k) => k + 1)}
+      />
     </div>
   );
Index: src/app/students/subjects/page.tsx
===================================================================
--- src/app/students/subjects/page.tsx	(revision 4fe4582e6255b2244fa2c6ce9ae837ab03e74a58)
+++ src/app/students/subjects/page.tsx	(revision 8496f3c2ae490dee80fdf71af9fe30c63996efaf)
@@ -10,4 +10,5 @@
 import { getAccessToken } from '@/lib/auth';
 import { useTranslation } from 'react-i18next';
+import { apiUrl } from '@/lib/api';
 
 interface Subject {
@@ -193,5 +194,5 @@
 
       try {
-        const response = await fetch('https://iknow-api.onrender.com/api/user/getSubjects', {
+        const response = await fetch(apiUrl('/api/user/getSubjects'), {
           method: 'GET',
           headers: {
