Index: src/app/professor/profile/page.tsx
===================================================================
--- src/app/professor/profile/page.tsx	(revision ba520691331c5f3afac921ef0a143d05e24ce4a5)
+++ src/app/professor/profile/page.tsx	(revision 8496f3c2ae490dee80fdf71af9fe30c63996efaf)
@@ -19,4 +19,5 @@
 import { IconDefinition } from "@fortawesome/fontawesome-svg-core";
 import { useTranslation } from 'react-i18next';
+import { apiUrl } from '@/lib/api';
 
 type PersonalInfo = {
@@ -152,5 +153,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/professor/students/page.tsx
===================================================================
--- src/app/professor/students/page.tsx	(revision ba520691331c5f3afac921ef0a143d05e24ce4a5)
+++ src/app/professor/students/page.tsx	(revision 8496f3c2ae490dee80fdf71af9fe30c63996efaf)
@@ -3,15 +3,22 @@
 import { useEffect, useMemo, useState } from "react";
 import { useTranslation } from 'react-i18next';
+import { apiUrl } from '@/lib/api';
+import { getAccessToken } from '@/lib/auth';
 
 type UsersBySubject = {
-  Id?: string;
-  Name?: string;
-  Grade: number;
+  /** users.id - what the grading endpoints expect as StudentId. */
+  id: number;
+  name?: string;
+  /** users.index - the number shown to the professor and searched on. */
+  index?: string;
+  grade: number;
+  semester?: string;
 };
 
 type SubjectsAndUsers = {
-  Name?: string;
-  Id?: number;
-  Users: UsersBySubject[];
+  name?: string;
+  id?: number;
+  code?: string;
+  users: UsersBySubject[];
 };
 
@@ -19,20 +26,16 @@
   StudentId: number;
   SubjectId: number;
-  grade: number;
+  Grade: number;
 };
 
 type FlatRow = {
-  studentIdStr: string;
-  studentIdNum: number | null;
+  studentIdNum: number;
+  studentIndex: string;
   studentName: string;
   subjectId: number;
   subjectName: string;
+  semester: string;
   grade: number;
 };
-
-function toInt(value: string): number | null {
-  const n = Number.parseInt(value, 10);
-  return Number.isFinite(n) ? n : null;
-}
 
 export default function ProfessorStudentsPage() {
@@ -52,5 +55,13 @@
     setError(null);
     try {
-      const res = await fetch("/api/prof/students", { cache: "no-store" });
+      const token = getAccessToken();
+      if (!token) {
+        throw new Error("You are not signed in.");
+      }
+
+      const res = await fetch(apiUrl("/api/prof/students"), {
+        cache: "no-store",
+        headers: { Authorization: `Bearer ${token}` },
+      });
       if (!res.ok) {
         throw new Error(`Failed to fetch students (${res.status})`);
@@ -61,9 +72,9 @@
       const nextSelections: Record<string, number> = {};
       for (const subj of data) {
-        if (!subj.Id) continue;
-        for (const u of subj.Users) {
-          const key = `${subj.Id}:${u.Id ?? ""}`;
-          const current = u.Grade;
-          nextSelections[key] = current >= 5 && current <= 10 ? current : 5;
+        if (!subj.id) continue;
+        for (const u of subj.users) {
+          const key = `${subj.id}:${u.id}`;
+          // grade_type only declares 6..10, so an ungraded row starts at 6.
+          nextSelections[key] = u.grade >= 6 && u.grade <= 10 ? u.grade : 6;
         }
       }
@@ -83,13 +94,14 @@
     const rows: FlatRow[] = [];
     for (const subj of subjects) {
-      if (!subj.Id) continue;
-      for (const u of subj.Users) {
+      if (!subj.id) continue;
+      for (const u of subj.users) {
         rows.push({
-          studentIdStr: u.Id ?? "",
-          studentIdNum: toInt(u.Id ?? ""),
-          studentName: u.Name ?? "",
-          subjectId: subj.Id,
-          subjectName: subj.Name ?? "",
-          grade: u.Grade,
+          studentIdNum: u.id,
+          studentIndex: u.index ?? "",
+          studentName: u.name ?? "",
+          subjectId: subj.id,
+          subjectName: subj.name ?? "",
+          semester: u.semester ?? "",
+          grade: u.grade,
         });
       }
@@ -102,5 +114,5 @@
     return flatRows.filter((r) => {
       if (subjectFilter !== "all" && String(r.subjectId) !== subjectFilter) return false;
-      if (q.length > 0 && !r.studentIdStr.includes(q)) return false;
+      if (q.length > 0 && !r.studentIndex.includes(q)) return false;
       return true;
     });
@@ -111,7 +123,15 @@
     setError(null);
     try {
-      const res = await fetch(url, {
+      const token = getAccessToken();
+      if (!token) {
+        throw new Error("You are not signed in.");
+      }
+
+      const res = await fetch(apiUrl(url), {
         method: "POST",
-        headers: { "Content-Type": "application/json" },
+        headers: {
+          "Content-Type": "application/json",
+          Authorization: `Bearer ${token}`,
+        },
         body: JSON.stringify(payload),
       });
@@ -135,5 +155,5 @@
           <h1 className="text-2xl font-semibold text-card-foreground">{t('prof_students_title')}</h1>
           <p className="text-muted-foreground mt-1">
-            {t('prof_students_data_note')} <span className="font-mono">/api/prof/students</span> (demo store).
+            {t('prof_students_data_note')} <span className="font-mono">/api/prof/students</span>.
           </p>
         </div>
@@ -149,8 +169,8 @@
               <option value="all">{t('all_subjects')}</option>
               {subjects
-                .filter((s) => typeof s.Id === "number")
+                .filter((s) => typeof s.id === "number")
                 .map((s) => (
-                  <option key={String(s.Id)} value={String(s.Id)}>
-                    {s.Name ?? `${t('subject')} ${s.Id}`}
+                  <option key={String(s.id)} value={String(s.id)}>
+                    {s.name ?? `${t('subject')} ${s.id}`}
                   </option>
                 ))}
@@ -202,6 +222,6 @@
             ) : (
               filteredRows.map((r) => {
-                const key = `${r.subjectId}:${r.studentIdStr}`;
-                const selected = gradeSelection[key] ?? 5;
+                const key = `${r.subjectId}:${r.studentIdNum}`;
+                const selected = gradeSelection[key] ?? 6;
                 const busy = actionBusyKey === key;
 
@@ -209,6 +229,11 @@
                   <tr key={key} className="hover:bg-accent">
                     <td className="px-4 py-3 border-b text-card-foreground">{r.studentName}</td>
-                    <td className="px-4 py-3 border-b text-card-foreground">{r.studentIdStr}</td>
-                    <td className="px-4 py-3 border-b text-card-foreground">{r.subjectName}</td>
+                    <td className="px-4 py-3 border-b text-card-foreground">{r.studentIndex}</td>
+                    <td className="px-4 py-3 border-b text-card-foreground">
+                      {r.subjectName}
+                      {r.semester && (
+                        <span className="block text-xs text-muted-foreground">{r.semester}</span>
+                      )}
+                    </td>
                     <td className="px-4 py-3 border-b">
                       <div className="flex items-center gap-3">
@@ -223,5 +248,5 @@
                           }
                         >
-                          {[5, 6, 7, 8, 9, 10].map((g) => (
+                          {[6, 7, 8, 9, 10].map((g) => (
                             <option key={g} value={g}>
                               {g}
@@ -237,11 +262,10 @@
                       <div className="flex flex-wrap gap-2">
                         <button
-                          disabled={busy || r.studentIdNum === null}
+                          disabled={busy}
                           className="px-3 py-2 rounded-lg bg-green-600 text-white text-sm font-medium disabled:opacity-50"
                           onClick={() => {
-                            if (r.studentIdNum === null) return;
                             void postGrade(
                               "/api/prof/grade/add",
-                              { StudentId: r.studentIdNum, SubjectId: r.subjectId, grade: selected },
+                              { StudentId: r.studentIdNum, SubjectId: r.subjectId, Grade: selected },
                               key,
                             );
@@ -252,11 +276,10 @@
 
                         <button
-                          disabled={busy || r.studentIdNum === null}
+                          disabled={busy}
                           className="px-3 py-2 rounded-lg bg-blue-600 text-white text-sm font-medium disabled:opacity-50"
                           onClick={() => {
-                            if (r.studentIdNum === null) return;
                             void postGrade(
                               "/api/prof/grade/edit",
-                              { StudentId: r.studentIdNum, SubjectId: r.subjectId, grade: selected },
+                              { StudentId: r.studentIdNum, SubjectId: r.subjectId, Grade: selected },
                               key,
                             );
@@ -267,11 +290,10 @@
 
                         <button
-                          disabled={busy || r.studentIdNum === null}
+                          disabled={busy}
                           className="px-3 py-2 rounded-lg bg-gray-800 text-white text-sm font-medium disabled:opacity-50"
                           onClick={() => {
-                            if (r.studentIdNum === null) return;
                             void postGrade(
                               "/api/prof/grade/remove",
-                              { StudentId: r.studentIdNum, SubjectId: r.subjectId, grade: 0 },
+                              { StudentId: r.studentIdNum, SubjectId: r.subjectId, Grade: 0 },
                               key,
                             );
