diff --git a/app/Http/Controllers/ResultsController.php b/app/Http/Controllers/ResultsController.php
new file mode 100644
index 0000000..9440ca1
--- /dev/null
+++ b/app/Http/Controllers/ResultsController.php
@@ -0,0 +1,35 @@
+with('error', 'Please login first!');
+ }
+
+ // 2. Log වී සිටින Student ගේ student_log_id එකට අදාළව දත්ත ලබා ගැනීම
+ $results = Result::where('student_log_id', $studentLogId)->get();
+
+ // 3. Calculations
+ $totalModules = $results->count();
+
+ $passedModules = $results->filter(function ($item) {
+ return strtolower(trim($item->status)) === 'pass';
+ })->count();
+
+ $averageMarks = $totalModules > 0 ? round($results->avg('marks'), 1) : 0;
+
+ // View එකට Data Pass කිරීම
+ return view('results', compact('results', 'totalModules', 'passedModules', 'averageMarks'));
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/TimetableController.php b/app/Http/Controllers/TimetableController.php
new file mode 100644
index 0000000..8638320
--- /dev/null
+++ b/app/Http/Controllers/TimetableController.php
@@ -0,0 +1,54 @@
+with('error', 'Please login first!');
+ }
+
+ // 1. All Timetable Records Get
+ // (තනි Student ට අදාළ දත්ත හෝ පොදු Timetable දත්ත)
+ $rawTimetables = Timetable::whereNull('student_log_id')
+ ->orWhere('student_log_id', $studentLogId)
+ ->orderBy('sort_order', 'asc')
+ ->get();
+
+ // Data එක Table එකට ලෙහෙසියෙන් Group කර ගැනීම
+ // Array structure: $schedule[TimeSlot][Day] = Item
+ $schedule = [];
+ $timeSlots = [];
+
+ foreach ($rawTimetables as $item) {
+ if (!in_array($item->time_slot, $timeSlots)) {
+ $timeSlots[] = $item->time_slot;
+ }
+ $schedule[$item->time_slot][$item->day] = $item;
+ }
+
+ // 2. Today's Schedule (අද දවසේ පන්ති පමණක් ලබා ගැනීම)
+ $todayName = Carbon::now()->format('l'); // Monday, Tuesday etc.
+ $todaySchedule = Timetable::where('day', $todayName)
+ ->where(function($q) use ($studentLogId) {
+ $q->whereNull('student_log_id')
+ ->orWhere('student_log_id', $studentLogId);
+ })
+ ->where('type', '!=', 'Break')
+ ->orderBy('sort_order', 'asc')
+ ->get();
+
+ $days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
+
+ return view('timetable', compact('schedule', 'timeSlots', 'days', 'todaySchedule', 'todayName'));
+ }
+}
\ No newline at end of file
diff --git a/app/Models/Result.php b/app/Models/Result.php
new file mode 100644
index 0000000..12a4859
--- /dev/null
+++ b/app/Models/Result.php
@@ -0,0 +1,25 @@
+id();
+ $table->foreignId('student_log_id')->constrained('student_portal_logs')->onDelete('cascade');
+ $table->string('module_code');
+ $table->string('academic_year');
+ $table->string('semester');
+ $table->string('module_name');
+ $table->integer('marks');
+ $table->string('grade'); // e.g., 'A+', 'A', 'B', 'C', 'F'
+ $table->string('status')->default('Pass'); // 'Pass' or 'Fail'
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('results');
+ }
+};
diff --git a/database/migrations/2026_08_05_044438_create_timetables_table.php b/database/migrations/2026_08_05_044438_create_timetables_table.php
new file mode 100644
index 0000000..3c1adaf
--- /dev/null
+++ b/database/migrations/2026_08_05_044438_create_timetables_table.php
@@ -0,0 +1,33 @@
+id();
+ $table->unsignedBigInteger('student_log_id')->nullable(); // Student-specific Timetable එකක් නම්
+ $table->string('time_slot');
+ $table->string('day');
+ $table->string('subject_name');
+ $table->enum('type', ['Theory', 'Practical', 'Workshop', 'Break'])->default('Theory');
+ $table->integer('sort_order')->default(1);
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('timetables');
+ }
+};
diff --git a/resources/views/results.blade.php b/resources/views/results.blade.php
index 47914b3..795fa6c 100644
--- a/resources/views/results.blade.php
+++ b/resources/views/results.blade.php
@@ -13,6 +13,9 @@
+
+
+