+
diff --git a/src/client/src/routes/activities/+page.ts b/src/client/src/routes/admin/activities/+page.ts
similarity index 100%
rename from src/client/src/routes/activities/+page.ts
rename to src/client/src/routes/admin/activities/+page.ts
diff --git a/src/client/src/routes/admin/admins/+page.svelte b/src/client/src/routes/admin/admins/+page.svelte
new file mode 100644
index 00000000..e2b38800
--- /dev/null
+++ b/src/client/src/routes/admin/admins/+page.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/admins/+page.ts b/src/client/src/routes/admin/admins/+page.ts
similarity index 100%
rename from src/client/src/routes/admins/+page.ts
rename to src/client/src/routes/admin/admins/+page.ts
diff --git a/src/client/src/routes/admin/announcements/+page.svelte b/src/client/src/routes/admin/announcements/+page.svelte
new file mode 100644
index 00000000..b2d8b9e9
--- /dev/null
+++ b/src/client/src/routes/admin/announcements/+page.svelte
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/admin/announcements/+page.ts b/src/client/src/routes/admin/announcements/+page.ts
new file mode 100644
index 00000000..afb68e9c
--- /dev/null
+++ b/src/client/src/routes/admin/announcements/+page.ts
@@ -0,0 +1,26 @@
+/** @type {import('./$types').PageLoad} */
+
+export function load() {
+ return {
+ announcements: [
+ {
+ date: '10 Oct',
+ heading: 'Campus Safety Drill',
+ announcement:
+ 'A campus-wide safety drill will be conducted on October 15th at 10 AM. All students and staff are required to participate. Please review the safety procedures and follow instructions during the drill.'
+ },
+ {
+ date: '12 Oct',
+ heading: 'New Library Hours',
+ announcement:
+ 'Starting October 20th, the university library will have extended hours. It will now be open from 8 AM to 12 AM, Monday through Friday, and 9 AM to 10 PM on weekends.'
+ },
+ {
+ date: '15 Oct',
+ heading: 'Guest Lecture Series',
+ announcement:
+ 'We are excited to announce a new guest lecture series starting October 25th. Prominent speakers from various fields will be sharing their insights. All students and faculty are encouraged to attend.'
+ }
+ ]
+ };
+}
diff --git a/src/client/src/routes/degrees.ts b/src/client/src/routes/admin/degrees.ts
similarity index 100%
rename from src/client/src/routes/degrees.ts
rename to src/client/src/routes/admin/degrees.ts
diff --git a/src/client/src/routes/lecturers/+page.server.js b/src/client/src/routes/admin/lecturers/+page.server.js
similarity index 100%
rename from src/client/src/routes/lecturers/+page.server.js
rename to src/client/src/routes/admin/lecturers/+page.server.js
diff --git a/src/client/src/routes/admin/lecturers/+page.svelte b/src/client/src/routes/admin/lecturers/+page.svelte
new file mode 100644
index 00000000..fa8bab60
--- /dev/null
+++ b/src/client/src/routes/admin/lecturers/+page.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/announcements/+page.ts b/src/client/src/routes/admin/lecturers/+page.ts
similarity index 100%
rename from src/client/src/routes/announcements/+page.ts
rename to src/client/src/routes/admin/lecturers/+page.ts
diff --git a/src/client/src/routes/organisation/+page.server.js b/src/client/src/routes/admin/organisation/+page.server.js
similarity index 100%
rename from src/client/src/routes/organisation/+page.server.js
rename to src/client/src/routes/admin/organisation/+page.server.js
diff --git a/src/client/src/routes/admin/organisation/+page.svelte b/src/client/src/routes/admin/organisation/+page.svelte
new file mode 100644
index 00000000..31e27b36
--- /dev/null
+++ b/src/client/src/routes/admin/organisation/+page.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/lecturers/+page.ts b/src/client/src/routes/admin/organisation/+page.ts
similarity index 100%
rename from src/client/src/routes/lecturers/+page.ts
rename to src/client/src/routes/admin/organisation/+page.ts
diff --git a/src/client/src/routes/admin/settings/+page.svelte b/src/client/src/routes/admin/settings/+page.svelte
new file mode 100644
index 00000000..6a89416f
--- /dev/null
+++ b/src/client/src/routes/admin/settings/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/organisation/+page.ts b/src/client/src/routes/admin/settings/+page.ts
similarity index 100%
rename from src/client/src/routes/organisation/+page.ts
rename to src/client/src/routes/admin/settings/+page.ts
diff --git a/src/client/src/routes/admin/students/+page.svelte b/src/client/src/routes/admin/students/+page.svelte
new file mode 100644
index 00000000..43fd074b
--- /dev/null
+++ b/src/client/src/routes/admin/students/+page.svelte
@@ -0,0 +1,19 @@
+
+
+
+
-
diff --git a/src/client/src/routes/auth/+page.svelte b/src/client/src/routes/auth/+page.svelte
new file mode 100644
index 00000000..4b3c9410
--- /dev/null
+++ b/src/client/src/routes/auth/+page.svelte
@@ -0,0 +1,7 @@
+
diff --git a/src/client/src/routes/signin/+page.server.js b/src/client/src/routes/auth/signin/+page.server.js
similarity index 100%
rename from src/client/src/routes/signin/+page.server.js
rename to src/client/src/routes/auth/signin/+page.server.js
diff --git a/src/client/src/routes/signin/+page.svelte b/src/client/src/routes/auth/signin/+page.svelte
similarity index 61%
rename from src/client/src/routes/signin/+page.svelte
rename to src/client/src/routes/auth/signin/+page.svelte
index dcf2483d..5488a742 100644
--- a/src/client/src/routes/signin/+page.svelte
+++ b/src/client/src/routes/auth/signin/+page.svelte
@@ -1,6 +1,6 @@
diff --git a/src/client/src/routes/settings/+page.ts b/src/client/src/routes/auth/signin/+page.ts
similarity index 100%
rename from src/client/src/routes/settings/+page.ts
rename to src/client/src/routes/auth/signin/+page.ts
diff --git a/src/client/src/routes/signup/+page.svelte b/src/client/src/routes/auth/signup/+page.svelte
similarity index 65%
rename from src/client/src/routes/signup/+page.svelte
rename to src/client/src/routes/auth/signup/+page.svelte
index 04d9c222..2e1e114e 100644
--- a/src/client/src/routes/signup/+page.svelte
+++ b/src/client/src/routes/auth/signup/+page.svelte
@@ -1,6 +1,6 @@
diff --git a/src/client/src/routes/signin/+page.ts b/src/client/src/routes/auth/signup/+page.ts
similarity index 100%
rename from src/client/src/routes/signin/+page.ts
rename to src/client/src/routes/auth/signup/+page.ts
diff --git a/src/client/src/routes/degree/+page.svelte b/src/client/src/routes/degree/+page.svelte
deleted file mode 100644
index 25694c78..00000000
--- a/src/client/src/routes/degree/+page.svelte
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
University of Pretoria
-
Computer Science
-
-
-
-
-
-
-
diff --git a/src/client/src/routes/degree/+page.ts b/src/client/src/routes/degree/+page.ts
deleted file mode 100644
index 189f71e2..00000000
--- a/src/client/src/routes/degree/+page.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const prerender = true;
diff --git a/src/client/src/routes/degree/workspaces.ts b/src/client/src/routes/degree/workspaces.ts
deleted file mode 100644
index be40198f..00000000
--- a/src/client/src/routes/degree/workspaces.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import COS333Logo from '$lib/images/COS333_logo.png';
-import COS314Logo from '$lib/images/COS314_logo.png';
-import COS344Logo from '$lib/images/COS344_logo.png';
-import COS332Logo from '$lib/images/COS332_logo.png';
-
-//This file mock stores the mock data needed to display the workspaces on the home page.
-//The information is stored as an array of JSON objects
-//Each workspace has a title, a description and an image.
-export const workspaces = [
- {
- title: 'COS 333',
- description: 'Programming languages',
- image: COS333Logo
- },
- {
- title: 'COS 314',
- description: 'Artificial Intelligence',
- image: COS314Logo
- },
- {
- title: 'COS 344',
- description: 'Computer Graphics',
- image: COS344Logo
- },
- {
- title: 'COS 332',
- description: 'Networking',
- image: COS332Logo
- }
-];
diff --git a/src/client/src/routes/lecturer/+page.svelte b/src/client/src/routes/lecturer/+page.svelte
new file mode 100644
index 00000000..f5f8f0c8
--- /dev/null
+++ b/src/client/src/routes/lecturer/+page.svelte
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/lecturer/+page.ts b/src/client/src/routes/lecturer/+page.ts
new file mode 100644
index 00000000..afb68e9c
--- /dev/null
+++ b/src/client/src/routes/lecturer/+page.ts
@@ -0,0 +1,26 @@
+/** @type {import('./$types').PageLoad} */
+
+export function load() {
+ return {
+ announcements: [
+ {
+ date: '10 Oct',
+ heading: 'Campus Safety Drill',
+ announcement:
+ 'A campus-wide safety drill will be conducted on October 15th at 10 AM. All students and staff are required to participate. Please review the safety procedures and follow instructions during the drill.'
+ },
+ {
+ date: '12 Oct',
+ heading: 'New Library Hours',
+ announcement:
+ 'Starting October 20th, the university library will have extended hours. It will now be open from 8 AM to 12 AM, Monday through Friday, and 9 AM to 10 PM on weekends.'
+ },
+ {
+ date: '15 Oct',
+ heading: 'Guest Lecture Series',
+ announcement:
+ 'We are excited to announce a new guest lecture series starting October 25th. Prominent speakers from various fields will be sharing their insights. All students and faculty are encouraged to attend.'
+ }
+ ]
+ };
+}
diff --git a/src/client/src/routes/lecturer/activities/+page.svelte b/src/client/src/routes/lecturer/activities/+page.svelte
new file mode 100644
index 00000000..6bd262eb
--- /dev/null
+++ b/src/client/src/routes/lecturer/activities/+page.svelte
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/signup/+page.ts b/src/client/src/routes/lecturer/activities/+page.ts
similarity index 100%
rename from src/client/src/routes/signup/+page.ts
rename to src/client/src/routes/lecturer/activities/+page.ts
diff --git a/src/client/src/routes/lecturer/classroom/+page.svelte b/src/client/src/routes/lecturer/classroom/+page.svelte
new file mode 100644
index 00000000..b617f4a7
--- /dev/null
+++ b/src/client/src/routes/lecturer/classroom/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/students/+page.ts b/src/client/src/routes/lecturer/classroom/+page.ts
similarity index 100%
rename from src/client/src/routes/students/+page.ts
rename to src/client/src/routes/lecturer/classroom/+page.ts
diff --git a/src/client/src/routes/lessons/[id]/+page.server.ts b/src/client/src/routes/lecturer/classroom/[id]/+page.server.ts
similarity index 94%
rename from src/client/src/routes/lessons/[id]/+page.server.ts
rename to src/client/src/routes/lecturer/classroom/[id]/+page.server.ts
index e213eccb..abff8514 100644
--- a/src/client/src/routes/lessons/[id]/+page.server.ts
+++ b/src/client/src/routes/lecturer/classroom/[id]/+page.server.ts
@@ -1,4 +1,4 @@
-import { username } from '$lib/stores/store';
+import { username } from '$lib/store';
import { StreamClient } from '@stream-io/node-sdk';
import { STREAM_API_KEY, STREAM_SECRET_KEY } from '$env/static/private';
diff --git a/src/client/src/routes/lessons/[id]/+page.svelte b/src/client/src/routes/lecturer/classroom/[id]/+page.svelte
similarity index 95%
rename from src/client/src/routes/lessons/[id]/+page.svelte
rename to src/client/src/routes/lecturer/classroom/[id]/+page.svelte
index db77b271..dd1ee8ac 100644
--- a/src/client/src/routes/lessons/[id]/+page.svelte
+++ b/src/client/src/routes/lecturer/classroom/[id]/+page.svelte
@@ -3,7 +3,7 @@
import { onMount, onDestroy } from 'svelte';
import { StreamVideoClient, type Call } from '@stream-io/video-client';
- import { userInfo } from '$lib/stores/store';
+ import { userInfo } from '$lib/store';
import Container from '$lib/components/lesson/Container.svelte';
import ControlPanel from '$lib/components/lesson/ControlPanel.svelte';
diff --git a/src/client/src/routes/lecturer/dashboard/+page.server.ts b/src/client/src/routes/lecturer/dashboard/+page.server.ts
new file mode 100644
index 00000000..68c84e5c
--- /dev/null
+++ b/src/client/src/routes/lecturer/dashboard/+page.server.ts
@@ -0,0 +1,123 @@
+/** @type {import('./$types').Actions} */
+import axios from 'axios';
+import { webcrypto as crypto } from 'crypto';
+import { FILE_UPLOAD_API_KEY, FILE_UPLOAD_URL } from '$env/static/private';
+
+function generateFileName(originalFileName: string): string {
+ // Split the original filename to get the base name and extension
+ const lastDotIndex = originalFileName.lastIndexOf('.');
+ if (lastDotIndex === -1) {
+ throw new Error('Filename does not have an extension');
+ }
+
+ const extension = originalFileName.substring(lastDotIndex);
+
+ // 4-byte timestamp
+ const timestamp = Math.floor(Date.now() / 1000);
+ const timestampHex = timestamp.toString(16).padStart(8, '0');
+
+ // 5-byte random value
+ const randomValue = crypto.getRandomValues(new Uint8Array(5));
+ const randomValueHex = Array.from(randomValue)
+ .map((b) => b.toString(16).padStart(2, '0'))
+ .join('');
+
+ // 3-byte counter, initialized to a random value
+ const counter = Math.floor(Math.random() * 0xffffff);
+ const counterHex = counter.toString(16).padStart(6, '0');
+
+ // Combine to form the ObjectId
+ const objectId = timestampHex + randomValueHex + counterHex;
+
+ // Combine objectId and extension to form the final filename
+ return `${objectId}${extension}`;
+}
+
+async function fileToBase64(file: File): Promise {
+ const buffer = await file.arrayBuffer();
+ const base64 = Buffer.from(buffer).toString('base64');
+ return base64;
+}
+
+async function uploadfileToS3(file: File, filename: string, contentType: string) {
+ try {
+ const base64file: string = await fileToBase64(file);
+
+ const body = {
+ file: base64file,
+ filename: filename,
+ contentType: contentType
+ };
+
+ const headers = {
+ 'Content-Type': 'application/json',
+ 'x-api-key': FILE_UPLOAD_API_KEY
+ };
+
+ const response = await axios.post(FILE_UPLOAD_URL, body, { headers });
+
+ // Parse the response body JSON
+ const responseBody = JSON.parse(response.data.body);
+
+ // Check if response includes fileUrl
+ if (responseBody.fileUrl) {
+ console.log('File uploaded successfully');
+ return responseBody; // Return the entire response body if needed
+ } else {
+ throw new Error('File upload failed: No fileUrl in response');
+ }
+ } catch (error) {
+ console.log('Error during file upload:', error);
+ throw error;
+ }
+}
+
+export const actions = {
+ upload: async ({ request }) => {
+ try {
+ const formData = await request.formData();
+
+ // Get the form field values
+ const title = formData.get('title');
+ const description = formData.get('description');
+ let file_url;
+ const file = formData.get('file');
+
+ // Log the extracted data
+ console.log('Title:', title);
+ console.log('Description:', description);
+
+ // Ensure the file is present
+ if (!file) {
+ throw new Error('File is required');
+ }
+
+ if (file instanceof File) {
+ const filename = generateFileName(file.name);
+ const response_data = await uploadfileToS3(file, filename, file.type);
+ file_url = response_data.fileUrl;
+ console.log('File URL:', file_url);
+ } else {
+ console.log('No file received');
+ }
+ } catch (error) {
+ console.error('Error during file upload:', error);
+ return {
+ error: error
+ };
+ }
+ },
+
+ delete: async ({ request }) => {
+ try {
+ const formData = await request.formData();
+ //TODO: create the delete logic
+ return formData;
+ } catch (error) {
+ console.error('Error during file deletion:', error);
+ return {
+ error: error
+ };
+ }
+ }
+};
diff --git a/src/client/src/routes/lecturer/dashboard/+page.svelte b/src/client/src/routes/lecturer/dashboard/+page.svelte
new file mode 100644
index 00000000..ae0ee09e
--- /dev/null
+++ b/src/client/src/routes/lecturer/dashboard/+page.svelte
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/lecturer/dashboard/+page.ts b/src/client/src/routes/lecturer/dashboard/+page.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/client/src/routes/lecturer/profile/+page.svelte b/src/client/src/routes/lecturer/profile/+page.svelte
new file mode 100644
index 00000000..160aface
--- /dev/null
+++ b/src/client/src/routes/lecturer/profile/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/lecturer/profile/+page.ts b/src/client/src/routes/lecturer/profile/+page.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/client/src/routes/lecturer/sandbox/+page.svelte b/src/client/src/routes/lecturer/sandbox/+page.svelte
new file mode 100644
index 00000000..78779247
--- /dev/null
+++ b/src/client/src/routes/lecturer/sandbox/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/src/client/src/routes/student/activities/+page.ts b/src/client/src/routes/student/activities/+page.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/client/src/routes/student/grades/+page.svelte b/src/client/src/routes/student/grades/+page.svelte
new file mode 100644
index 00000000..59ab73a3
--- /dev/null
+++ b/src/client/src/routes/student/grades/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/student/grades/+page.ts b/src/client/src/routes/student/grades/+page.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/client/src/routes/student/module/+page.svelte b/src/client/src/routes/student/module/+page.svelte
new file mode 100644
index 00000000..bf536ec4
--- /dev/null
+++ b/src/client/src/routes/student/module/+page.svelte
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/student/module/+page.ts b/src/client/src/routes/student/module/+page.ts
new file mode 100644
index 00000000..afb68e9c
--- /dev/null
+++ b/src/client/src/routes/student/module/+page.ts
@@ -0,0 +1,26 @@
+/** @type {import('./$types').PageLoad} */
+
+export function load() {
+ return {
+ announcements: [
+ {
+ date: '10 Oct',
+ heading: 'Campus Safety Drill',
+ announcement:
+ 'A campus-wide safety drill will be conducted on October 15th at 10 AM. All students and staff are required to participate. Please review the safety procedures and follow instructions during the drill.'
+ },
+ {
+ date: '12 Oct',
+ heading: 'New Library Hours',
+ announcement:
+ 'Starting October 20th, the university library will have extended hours. It will now be open from 8 AM to 12 AM, Monday through Friday, and 9 AM to 10 PM on weekends.'
+ },
+ {
+ date: '15 Oct',
+ heading: 'Guest Lecture Series',
+ announcement:
+ 'We are excited to announce a new guest lecture series starting October 25th. Prominent speakers from various fields will be sharing their insights. All students and faculty are encouraged to attend.'
+ }
+ ]
+ };
+}
diff --git a/src/client/src/routes/student/module/announcements/+page.svelte b/src/client/src/routes/student/module/announcements/+page.svelte
new file mode 100644
index 00000000..8b916ff1
--- /dev/null
+++ b/src/client/src/routes/student/module/announcements/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/student/module/announcements/+page.ts b/src/client/src/routes/student/module/announcements/+page.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/client/src/routes/student/module/classroom/+page.svelte b/src/client/src/routes/student/module/classroom/+page.svelte
new file mode 100644
index 00000000..29dd5cf9
--- /dev/null
+++ b/src/client/src/routes/student/module/classroom/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/student/module/classroom/+page.ts b/src/client/src/routes/student/module/classroom/+page.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/client/src/routes/student/module/classroom/[id]/+page.server.ts b/src/client/src/routes/student/module/classroom/[id]/+page.server.ts
new file mode 100644
index 00000000..abff8514
--- /dev/null
+++ b/src/client/src/routes/student/module/classroom/[id]/+page.server.ts
@@ -0,0 +1,23 @@
+import { username } from '$lib/store';
+import { StreamClient } from '@stream-io/node-sdk';
+
+import { STREAM_API_KEY, STREAM_SECRET_KEY } from '$env/static/private';
+
+export const load = async () => {
+ if (!username) throw new Error('User is not authenticated');
+ if (!STREAM_API_KEY) throw new Error('Stream API key secret is missing');
+ if (!STREAM_SECRET_KEY) throw new Error('Stream API secret is missing');
+
+ const streamClient = new StreamClient(STREAM_API_KEY, STREAM_SECRET_KEY);
+
+ const tokenProvider = async () => {
+ const expirationTime = Math.floor(Date.now() / 1000) + 3600;
+ const issuedAt = Math.floor(Date.now() / 1000) - 60;
+ const token = streamClient.createToken(username, expirationTime, issuedAt);
+ return token;
+ };
+
+ const token = await tokenProvider();
+
+ return { apiKey: STREAM_API_KEY, token };
+};
diff --git a/src/client/src/routes/student/module/classroom/[id]/+page.svelte b/src/client/src/routes/student/module/classroom/[id]/+page.svelte
new file mode 100644
index 00000000..dd1ee8ac
--- /dev/null
+++ b/src/client/src/routes/student/module/classroom/[id]/+page.svelte
@@ -0,0 +1,41 @@
+
+
+
+ {#if call}
+
+
+ {/if}
+
diff --git a/src/client/src/routes/student/module/sandbox/+page.svelte b/src/client/src/routes/student/module/sandbox/+page.svelte
new file mode 100644
index 00000000..78779247
--- /dev/null
+++ b/src/client/src/routes/student/module/sandbox/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/student/module/sandbox/+page.ts b/src/client/src/routes/student/module/sandbox/+page.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/client/src/routes/student/module/study/+page.svelte b/src/client/src/routes/student/module/study/+page.svelte
new file mode 100644
index 00000000..8f1ce0de
--- /dev/null
+++ b/src/client/src/routes/student/module/study/+page.svelte
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/student/module/study/+page.ts b/src/client/src/routes/student/module/study/+page.ts
new file mode 100644
index 00000000..e5cd084e
--- /dev/null
+++ b/src/client/src/routes/student/module/study/+page.ts
@@ -0,0 +1,29 @@
+/** @type {import('./$types').PageLoad} */
+import one from '$lib/files/study-notes-one.pdf';
+import two from '$lib/files/study-notes-two.pdf';
+import three from '$lib/files/study-notes-three.pdf';
+
+export function load() {
+ return {
+ materials: [
+ {
+ title: 'Introduction to Computer Networks',
+ description:
+ 'A foundational course covering the basics of computer networking, including network models, protocols, and architectures. (COS 332)',
+ link: one
+ },
+ {
+ title: 'Advanced Networking Concepts',
+ description:
+ 'An in-depth exploration of advanced networking topics such as routing algorithms, network security, and wireless networks. (COS 332)',
+ link: two
+ },
+ {
+ title: 'Practical Network Design',
+ description:
+ 'A hands-on course focusing on the design and implementation of network solutions for real-world applications. (COS 332)',
+ link: three
+ }
+ ]
+ };
+}
diff --git a/src/client/src/routes/student/module/study/material/+page.svelte b/src/client/src/routes/student/module/study/material/+page.svelte
new file mode 100644
index 00000000..f8c88e95
--- /dev/null
+++ b/src/client/src/routes/student/module/study/material/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/client/src/routes/student/module/study/material/+page.ts b/src/client/src/routes/student/module/study/material/+page.ts
new file mode 100644
index 00000000..5811cd0b
--- /dev/null
+++ b/src/client/src/routes/student/module/study/material/+page.ts
@@ -0,0 +1,23 @@
+/** @type {import('./$types').PageLoad} */
+
+export function load() {
+ return {
+ materials: [
+ {
+ title: 'Introduction to Computer Networks',
+ description:
+ 'A foundational course covering the basics of computer networking, including network models, protocols, and architectures. (COS 332)'
+ },
+ {
+ title: 'Advanced Networking Concepts',
+ description:
+ 'An in-depth exploration of advanced networking topics such as routing algorithms, network security, and wireless networks. (COS 332)'
+ },
+ {
+ title: 'Practical Network Design',
+ description:
+ 'A hands-on course focusing on the design and implementation of network solutions for real-world applications. (COS 332)'
+ }
+ ]
+ };
+}
diff --git a/src/client/src/routes/student/profile/+page.svelte b/src/client/src/routes/student/profile/+page.svelte
new file mode 100644
index 00000000..59ab73a3
--- /dev/null
+++ b/src/client/src/routes/student/profile/+page.svelte
@@ -0,0 +1,15 @@
+
+
+
+