Index: src/lib/auth.ts
===================================================================
--- src/lib/auth.ts	(revision 90f7842eb4ce21898c1decfb94e7be85ce622d15)
+++ src/lib/auth.ts	(revision 298f9b3987050da08cb65ce62c3d1f8295faeff4)
@@ -2,4 +2,10 @@
   accessToken: string;
   refreshToken: string;
+};
+
+export type UserRole = 'Professor' | 'Student' | string;
+
+export type AuthSession = AuthTokens & {
+  role: UserRole;
 };
 
@@ -12,4 +18,5 @@
   access: 'iknow.auth.access',
   refresh: 'iknow.auth.refresh',
+  role: 'iknow.auth.role',
 } as const;
 
@@ -59,4 +66,9 @@
 }
 
+export function setUserRole(role: UserRole) {
+  // Keep role TTL aligned with access token TTL.
+  writeStoredToken(STORAGE_KEYS.role, role, ACCESS_TOKEN_TTL_MS);
+}
+
 export function getAccessToken(): string | null {
   return readStoredToken(STORAGE_KEYS.access)?.value ?? null;
@@ -67,11 +79,16 @@
 }
 
+export function getUserRole(): UserRole | null {
+  return readStoredToken(STORAGE_KEYS.role)?.value ?? null;
+}
+
 export function clearAuthTokens() {
   if (!isBrowser()) return;
   window.localStorage.removeItem(STORAGE_KEYS.access);
   window.localStorage.removeItem(STORAGE_KEYS.refresh);
+  window.localStorage.removeItem(STORAGE_KEYS.role);
 }
 
-export async function login(params: { email: string; password: string }) {
+export async function login(params: { email: string; password: string }): Promise<AuthSession> {
   const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL ?? 'https://iknow-api.onrender.com';
 
@@ -100,9 +117,12 @@
 
   const data = (await response.json()) as {
-    token?: { accessToken?: string; refreshToken?: string };
+    token?: string;
+    refreshToken?: string;
+    role?: string;
   };
 
-  const accessToken = data?.token?.accessToken;
-  const refreshToken = data?.token?.refreshToken;
+  const accessToken = data?.token;
+  const refreshToken = data?.refreshToken;
+  const role = data?.role;
 
   if (!accessToken || !refreshToken) {
@@ -110,6 +130,12 @@
   }
 
-  const tokens: AuthTokens = { accessToken, refreshToken };
-  setAuthTokens(tokens);
-  return tokens;
+  const session: AuthSession = {
+    accessToken,
+    refreshToken,
+    role: role ?? 'Student',
+  };
+
+  setAuthTokens(session);
+  setUserRole(session.role);
+  return session;
 }
Index: src/lib/prof-demo-store.ts
===================================================================
--- src/lib/prof-demo-store.ts	(revision 298f9b3987050da08cb65ce62c3d1f8295faeff4)
+++ src/lib/prof-demo-store.ts	(revision 298f9b3987050da08cb65ce62c3d1f8295faeff4)
@@ -0,0 +1,107 @@
+export type UsersBySubject = {
+  Id?: string;
+  Name?: string;
+  Grade: number;
+};
+
+export type SubjectsAndUsers = {
+  Name?: string;
+  Id?: number;
+  Users: UsersBySubject[];
+};
+
+export type AddGrade = {
+  StudentId: number;
+  SubjectId: number;
+  grade: number;
+};
+
+type Store = {
+  subjects: SubjectsAndUsers[];
+};
+
+function createInitialStore(): Store {
+  return {
+    subjects: [
+      {
+        Id: 101,
+        Name: "Web Programming",
+        Users: [
+          { Id: "20001", Name: "Ana Petrovska", Grade: 0 },
+          { Id: "20002", Name: "Marko Trajkov", Grade: 8 },
+          { Id: "20003", Name: "Elena Stojanova", Grade: 0 },
+        ],
+      },
+      {
+        Id: 102,
+        Name: "Databases",
+        Users: [
+          { Id: "20001", Name: "Ana Petrovska", Grade: 0 },
+          { Id: "20004", Name: "Nikola Iliev", Grade: 9 },
+          { Id: "20005", Name: "Sara Dimitrova", Grade: 7 },
+        ],
+      },
+      {
+        Id: 103,
+        Name: "Algorithms",
+        Users: [
+          { Id: "20002", Name: "Marko Trajkov", Grade: 0 },
+          { Id: "20006", Name: "Ivana Kostova", Grade: 10 },
+        ],
+      },
+    ],
+  };
+}
+
+function getGlobalStore(): Store {
+  const globalKey = "__iknow_prof_demo_store__";
+  const globalObj = globalThis as unknown as Record<string, unknown>;
+
+  if (!globalObj[globalKey]) {
+    globalObj[globalKey] = createInitialStore();
+  }
+
+  return globalObj[globalKey] as Store;
+}
+
+export function getSubjects(): SubjectsAndUsers[] {
+  return getGlobalStore().subjects;
+}
+
+function parseStudentId(id: string | undefined): number | null {
+  if (!id) return null;
+  const parsed = Number.parseInt(id, 10);
+  return Number.isFinite(parsed) ? parsed : null;
+}
+
+export function setGrade(
+  payload: AddGrade,
+  mode: "add" | "edit" | "remove",
+): { subject: SubjectsAndUsers; user: UsersBySubject } {
+  const store = getGlobalStore();
+  const subject = store.subjects.find((s) => s.Id === payload.SubjectId);
+  if (!subject) {
+    throw new Error("Subject not found");
+  }
+
+  const user = subject.Users.find((u) => parseStudentId(u.Id) === payload.StudentId);
+  if (!user) {
+    throw new Error("Student not found in subject");
+  }
+
+  if (mode === "remove") {
+    user.Grade = 0;
+    return { subject, user };
+  }
+
+  if (payload.grade < 5 || payload.grade > 10) {
+    throw new Error("Grade must be between 5 and 10");
+  }
+
+  if (mode === "add" && user.Grade > 0) {
+    throw new Error("Grade already exists; use edit");
+  }
+
+  user.Grade = payload.grade;
+  return { subject, user };
+}
