Index: app/Http/Controllers/RoadmapController.php
===================================================================
--- app/Http/Controllers/RoadmapController.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ app/Http/Controllers/RoadmapController.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,169 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\StudyProgram;
+use App\Models\Subject;
+use App\Models\UserProgress;
+use Illuminate\Http\Request;
+use Illuminate\View\View;
+
+class RoadmapController extends Controller
+{
+    /**
+     * Show the roadmap form where user inputs completed, current, and desired study program
+     */
+    public function create(): View
+    {
+        $studyPrograms = StudyProgram::all();
+        $subjects = Subject::orderBy('year')->orderBy('semester_type')->get();
+
+        return view('roadmap.create', [
+            'studyPrograms' => $studyPrograms,
+            'subjects' => $subjects,
+        ]);
+    }
+
+    /**
+     * Generate and display the recommended roadmap
+     */
+    public function store(Request $request)
+    {
+        $validated = $request->validate([
+            'study_program_id' => 'required|exists:study_programs,id',
+            'completed_subjects' => 'array',
+            'completed_subjects.*' => 'exists:subjects,id',
+            'in_progress_subjects' => 'array',
+            'in_progress_subjects.*' => 'exists:subjects,id',
+        ]);
+
+        $studyProgram = StudyProgram::with('subjects')->findOrFail($validated['study_program_id']);
+        $completedIds = $validated['completed_subjects'] ?? [];
+        $inProgressIds = $validated['in_progress_subjects'] ?? [];
+
+        $user = auth()->user();
+
+        // Clear existing progress for this study program
+        UserProgress::where('user_id', $user->id)
+            ->where('study_program_id', $studyProgram->id)
+            ->delete();
+
+        // Save completed subjects
+        foreach ($completedIds as $subjectId) {
+            UserProgress::create([
+                'user_id' => $user->id,
+                'subject_id' => $subjectId,
+                'study_program_id' => $studyProgram->id,
+                'status' => 'completed',
+                'completed_at' => now(),
+            ]);
+        }
+
+        // Save in-progress subjects
+        foreach ($inProgressIds as $subjectId) {
+            UserProgress::create([
+                'user_id' => $user->id,
+                'subject_id' => $subjectId,
+                'study_program_id' => $studyProgram->id,
+                'status' => 'in_progress',
+            ]);
+        }
+
+        // Generate roadmap
+        $roadmap = $this->generateRoadmap($user->id, $studyProgram, $completedIds, $inProgressIds);
+
+        return view('roadmap.show', [
+            'studyProgram' => $studyProgram,
+            'roadmap' => $roadmap,
+            'completed' => collect($completedIds),
+            'inProgress' => collect($inProgressIds),
+        ]);
+    }
+
+    /**
+     * Generate recommended roadmap based on user progress and prerequisites
+     */
+    private function generateRoadmap($userId, StudyProgram $studyProgram, array $completedIds, array $inProgressIds)
+    {
+        $allSubjects = $studyProgram->subjects()->get();
+        $remaining = [];
+
+        foreach ($allSubjects as $subject) {
+            if (!in_array($subject->id, $completedIds) && !in_array($subject->id, $inProgressIds)) {
+                // Check if prerequisites are met
+                $prerequisites = $subject->prerequisites()->get();
+                $prerequisitesMet = true;
+
+                if ($prerequisites->isNotEmpty()) {
+                    foreach ($prerequisites as $prerequisite) {
+                        // Check if prerequisite is completed
+                        $completed = in_array($prerequisite->id, $completedIds);
+                        if (!$completed) {
+                            $prerequisitesMet = false;
+                            break;
+                        }
+                    }
+                }
+
+                $remaining[] = [
+                    'subject' => $subject,
+                    'prerequisites' => $prerequisites,
+                    'ready' => $prerequisitesMet,
+                    'year' => $subject->year,
+                    'type' => $subject->pivot->type ?? 'mandatory',
+                ];
+            }
+        }
+
+        // Sort by: ready first, then by year, then by semester type
+        usort($remaining, function ($a, $b) {
+            if ($a['ready'] !== $b['ready']) {
+                return $a['ready'] ? -1 : 1;
+            }
+            if ($a['year'] !== $b['year']) {
+                return $a['year'] <=> $b['year'];
+            }
+            return 0;
+        });
+
+        return $remaining;
+    }
+
+    /**
+     * Show the user's current roadmap
+     */
+    public function show(): View
+    {
+        $user = auth()->user();
+        $latestProgress = $user->progress()
+            ->latest()
+            ->first();
+
+        if (!$latestProgress) {
+            return redirect()->route('roadmap.create')->with('info', 'Please select a study program first.');
+        }
+
+        $studyProgram = $latestProgress->studyProgram;
+
+        $completedIds = $user->progress()
+            ->where('study_program_id', $studyProgram->id)
+            ->where('status', 'completed')
+            ->pluck('subject_id')
+            ->toArray();
+
+        $inProgressIds = $user->progress()
+            ->where('study_program_id', $studyProgram->id)
+            ->where('status', 'in_progress')
+            ->pluck('subject_id')
+            ->toArray();
+
+        $roadmap = $this->generateRoadmap($user->id, $studyProgram, $completedIds, $inProgressIds);
+
+        return view('roadmap.show', [
+            'studyProgram' => $studyProgram,
+            'roadmap' => $roadmap,
+            'completed' => collect($completedIds),
+            'inProgress' => collect($inProgressIds),
+        ]);
+    }
+}
Index: app/Models/CareerPath.php
===================================================================
--- app/Models/CareerPath.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ app/Models/CareerPath.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsToMany;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+
+class CareerPath extends Model
+{
+    protected $fillable = [
+        'name',
+        'description',
+    ];
+
+    public function subjects(): BelongsToMany
+    {
+        return $this->belongsToMany(Subject::class, 'career_path_subject')
+            ->withPivot('order', 'is_required')
+            ->orderBy('career_path_subject.order');
+    }
+
+    public function userProgress(): HasMany
+    {
+        return $this->hasMany(UserProgress::class);
+    }
+}
Index: app/Models/StudyProgram.php
===================================================================
--- app/Models/StudyProgram.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ app/Models/StudyProgram.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsToMany;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+
+class StudyProgram extends Model
+{
+    protected $fillable = [
+        'name_mk',
+        'name_en',
+        'description_mk',
+        'description_en',
+        'duration_years',
+        'cycle',
+        'code',
+    ];
+
+    public function subjects(): BelongsToMany
+    {
+        return $this->belongsToMany(Subject::class, 'study_program_subject')
+            ->withPivot('order', 'type')
+            ->orderBy('study_program_subject.order');
+    }
+
+    public function userProgress(): HasMany
+    {
+        return $this->hasMany(UserProgress::class);
+    }
+
+    public function getMandatorySubjects()
+    {
+        return $this->subjects()
+            ->wherePivot('type', 'mandatory')
+            ->get();
+    }
+
+    public function getElectiveSubjects()
+    {
+        return $this->subjects()
+            ->wherePivot('type', 'elective')
+            ->get();
+    }
+
+    public function getDisplayName(): string
+    {
+        return $this->name_mk . ' (' . $this->duration_years . ' години)';
+    }
+}
Index: app/Models/Subject.php
===================================================================
--- app/Models/Subject.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ app/Models/Subject.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,86 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsToMany;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+
+class Subject extends Model
+{
+    protected $fillable = [
+        'code',
+        'name',
+        'name_mk',
+        'description',
+        'description_mk',
+        'semester_type',
+        'year',
+        'subject_type',
+        'instructors',
+        'credits',
+        'total_hours',
+        'lecture_hours',
+        'practice_hours',
+    ];
+
+    public function studyPrograms(): BelongsToMany
+    {
+        return $this->belongsToMany(StudyProgram::class, 'study_program_subject')
+            ->withPivot('order', 'type')
+            ->orderBy('study_program_subject.order');
+    }
+
+    public function prerequisites(): BelongsToMany
+    {
+        return $this->belongsToMany(
+            Subject::class,
+            'subject_prerequisites',
+            'subject_id',
+            'prerequisite_id'
+        );
+    }
+
+    public function requiredBy(): BelongsToMany
+    {
+        return $this->belongsToMany(
+            Subject::class,
+            'subject_prerequisites',
+            'prerequisite_id',
+            'subject_id'
+        );
+    }
+
+    public function userProgress(): HasMany
+    {
+        return $this->hasMany(UserProgress::class);
+    }
+
+    public function getDisplayName(): string
+    {
+        return $this->code . ' - ' . $this->name;
+    }
+
+    public function hasPrerequisitesMet($userId, $studyProgramId): bool
+    {
+        $prerequisites = $this->prerequisites()->get();
+
+        if ($prerequisites->isEmpty()) {
+            return true;
+        }
+
+        foreach ($prerequisites as $prerequisite) {
+            $completed = UserProgress::where('user_id', $userId)
+                ->where('subject_id', $prerequisite->id)
+                ->where('study_program_id', $studyProgramId)
+                ->where('status', 'completed')
+                ->exists();
+
+            if (!$completed) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}
Index: app/Models/User.php
===================================================================
--- app/Models/User.php	(revision a774c985f2e8d81c2d9c662961d40ff214095b59)
+++ app/Models/User.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -5,4 +5,5 @@
 // use Illuminate\Contracts\Auth\MustVerifyEmail;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Relations\HasMany;
 use Illuminate\Foundation\Auth\User as Authenticatable;
 use Illuminate\Notifications\Notifiable;
@@ -46,3 +47,26 @@
         ];
     }
+
+    public function progress(): HasMany
+    {
+        return $this->hasMany(UserProgress::class);
+    }
+
+    public function getCompletedSubjectsForProgram($studyProgramId)
+    {
+        return $this->progress()
+            ->where('study_program_id', $studyProgramId)
+            ->where('status', 'completed')
+            ->pluck('subject_id')
+            ->toArray();
+    }
+
+    public function getInProgressSubjectsForProgram($studyProgramId)
+    {
+        return $this->progress()
+            ->where('study_program_id', $studyProgramId)
+            ->where('status', 'in_progress')
+            ->pluck('subject_id')
+            ->toArray();
+    }
 }
Index: app/Models/UserProgress.php
===================================================================
--- app/Models/UserProgress.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ app/Models/UserProgress.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+
+class UserProgress extends Model
+{
+    protected $table = 'user_progress';
+
+    protected $fillable = [
+        'user_id',
+        'subject_id',
+        'study_program_id',
+        'status',
+        'completed_at',
+    ];
+
+    protected $casts = [
+        'completed_at' => 'datetime',
+    ];
+
+    public function user(): BelongsTo
+    {
+        return $this->belongsTo(User::class);
+    }
+
+    public function subject(): BelongsTo
+    {
+        return $this->belongsTo(Subject::class);
+    }
+
+    public function studyProgram(): BelongsTo
+    {
+        return $this->belongsTo(StudyProgram::class);
+    }
+}
Index: database/migrations/2025_11_29_175518_create_subjects_table.php
===================================================================
--- database/migrations/2025_11_29_175518_create_subjects_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/migrations/2025_11_29_175518_create_subjects_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('subjects', function (Blueprint $table) {
+            $table->id();
+            $table->string('code')->unique();
+            $table->string('name');
+            $table->text('description')->nullable();
+            $table->integer('semester');
+            $table->integer('credits');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('subjects');
+    }
+};
Index: database/migrations/2025_11_29_175520_create_career_paths_table.php
===================================================================
--- database/migrations/2025_11_29_175520_create_career_paths_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/migrations/2025_11_29_175520_create_career_paths_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,29 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('career_paths', function (Blueprint $table) {
+            $table->id();
+            $table->string('name')->unique();
+            $table->text('description')->nullable();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('career_paths');
+    }
+};
Index: database/migrations/2025_11_29_175522_create_user_progress_table.php
===================================================================
--- database/migrations/2025_11_29_175522_create_user_progress_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/migrations/2025_11_29_175522_create_user_progress_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('user_progress', function (Blueprint $table) {
+            $table->id();
+            $table->foreignId('user_id')->constrained()->onDelete('cascade');
+            $table->foreignId('subject_id')->constrained()->onDelete('cascade');
+            $table->foreignId('study_program_id')->constrained()->onDelete('cascade');
+            $table->enum('status', ['completed', 'in_progress', 'planned']);
+            $table->timestamp('completed_at')->nullable();
+            $table->timestamps();
+            $table->unique(['user_id', 'subject_id', 'study_program_id']);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('user_progress');
+    }
+};
Index: database/migrations/2025_11_29_175542_create_career_path_subject_table.php
===================================================================
--- database/migrations/2025_11_29_175542_create_career_path_subject_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/migrations/2025_11_29_175542_create_career_path_subject_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('career_path_subject', function (Blueprint $table) {
+            $table->id();
+            $table->foreignId('career_path_id')->constrained()->onDelete('cascade');
+            $table->foreignId('subject_id')->constrained()->onDelete('cascade');
+            $table->integer('order')->default(0)->comment('Suggested order to take the subject');
+            $table->boolean('is_required')->default(true)->comment('Whether this subject is required for the career path');
+            $table->timestamps();
+            $table->unique(['career_path_id', 'subject_id']);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('career_path_subject');
+    }
+};
Index: database/migrations/2025_11_29_180204_create_study_programs_table.php
===================================================================
--- database/migrations/2025_11_29_180204_create_study_programs_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/migrations/2025_11_29_180204_create_study_programs_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('study_programs', function (Blueprint $table) {
+            $table->id();
+            $table->string('name_mk')->comment('Name in Macedonian');
+            $table->string('name_en')->nullable()->comment('Name in English');
+            $table->text('description_mk')->nullable();
+            $table->text('description_en')->nullable();
+            $table->integer('duration_years')->comment('Duration in years (2, 3, or 4)');
+            $table->enum('cycle', ['first', 'second', 'third'])->default('first')->comment('Study cycle');
+            $table->string('code')->unique()->comment('Study program code');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('study_programs');
+    }
+};
Index: database/migrations/2025_11_29_180211_alter_subjects_table_add_fields.php
===================================================================
--- database/migrations/2025_11_29_180211_alter_subjects_table_add_fields.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/migrations/2025_11_29_180211_alter_subjects_table_add_fields.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,60 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::table('subjects', function (Blueprint $table) {
+            // Drop old columns
+            if (Schema::hasColumn('subjects', 'semester')) {
+                $table->dropColumn('semester');
+            }
+
+            // Add new columns
+            if (!Schema::hasColumn('subjects', 'name_mk')) {
+                $table->string('name_mk')->nullable()->after('name');
+            }
+            if (!Schema::hasColumn('subjects', 'description_mk')) {
+                $table->text('description_mk')->nullable()->after('description');
+            }
+            if (!Schema::hasColumn('subjects', 'semester_type')) {
+                $table->string('semester_type')->default('winter')->comment('winter or summer');
+            }
+            if (!Schema::hasColumn('subjects', 'year')) {
+                $table->integer('year')->default(1)->comment('Year of study (1-4)');
+            }
+            if (!Schema::hasColumn('subjects', 'subject_type')) {
+                $table->enum('subject_type', ['mandatory', 'elective'])->default('mandatory');
+            }
+            if (!Schema::hasColumn('subjects', 'instructors')) {
+                $table->string('instructors')->nullable();
+            }
+            if (!Schema::hasColumn('subjects', 'total_hours')) {
+                $table->integer('total_hours')->default(180);
+            }
+            if (!Schema::hasColumn('subjects', 'lecture_hours')) {
+                $table->integer('lecture_hours')->default(30);
+            }
+            if (!Schema::hasColumn('subjects', 'practice_hours')) {
+                $table->integer('practice_hours')->default(60);
+            }
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('subjects', function (Blueprint $table) {
+            //
+        });
+    }
+};
Index: database/migrations/2025_11_29_180214_create_subject_prerequisites_table.php
===================================================================
--- database/migrations/2025_11_29_180214_create_subject_prerequisites_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/migrations/2025_11_29_180214_create_subject_prerequisites_table.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,30 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('subject_prerequisites', function (Blueprint $table) {
+            $table->id();
+            $table->foreignId('subject_id')->constrained()->onDelete('cascade')->comment('Subject that requires a prerequisite');
+            $table->foreignId('prerequisite_id')->constrained('subjects')->onDelete('cascade')->comment('The prerequisite subject');
+            $table->timestamps();
+            $table->unique(['subject_id', 'prerequisite_id']);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('subject_prerequisites');
+    }
+};
Index: database/migrations/2025_11_29_180232_rename_career_path_to_study_program.php
===================================================================
--- database/migrations/2025_11_29_180232_rename_career_path_to_study_program.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/migrations/2025_11_29_180232_rename_career_path_to_study_program.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,43 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        // Drop old career_path_subject table if it exists
+        if (Schema::hasTable('career_path_subject')) {
+            Schema::drop('career_path_subject');
+        }
+
+        // Drop old career_paths table if it exists
+        if (Schema::hasTable('career_paths')) {
+            Schema::drop('career_paths');
+        }
+
+        // Create new study_program_subject table
+        Schema::create('study_program_subject', function (Blueprint $table) {
+            $table->id();
+            $table->foreignId('study_program_id')->constrained('study_programs')->onDelete('cascade');
+            $table->foreignId('subject_id')->constrained()->onDelete('cascade');
+            $table->integer('order')->default(0)->comment('Suggested order within the program');
+            $table->enum('type', ['mandatory', 'elective'])->default('mandatory');
+            $table->timestamps();
+            $table->unique(['study_program_id', 'subject_id']);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('study_program_subject');
+    }
+};
Index: database/seeders/CareerPathSeeder.php
===================================================================
--- database/seeders/CareerPathSeeder.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/seeders/CareerPathSeeder.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,147 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\CareerPath;
+use App\Models\Subject;
+use Illuminate\Database\Seeder;
+
+class CareerPathSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     */
+    public function run(): void
+    {
+        $careerPaths = [
+            [
+                'name' => 'Full Stack Web Development',
+                'description' => 'Build complete web applications from frontend to backend',
+            ],
+            [
+                'name' => 'Data Science & AI',
+                'description' => 'Specialize in data analysis, machine learning, and AI',
+            ],
+            [
+                'name' => 'DevOps & Cloud Computing',
+                'description' => 'Deploy, manage, and scale applications in the cloud',
+            ],
+            [
+                'name' => 'Game Development',
+                'description' => 'Create engaging interactive games and experiences',
+            ],
+            [
+                'name' => 'Cybersecurity',
+                'description' => 'Protect systems and data from security threats',
+            ],
+        ];
+
+        foreach ($careerPaths as $pathData) {
+            CareerPath::create($pathData);
+        }
+
+        // Define which subjects are required for each career path
+        $fullStackSubjects = [
+            'MATH101' => 1,
+            'PROG101' => 1,
+            'DS101' => 2,
+            'DISCRETE101' => 2,
+            'ALGO201' => 3,
+            'DB201' => 3,
+            'WEB201' => 3,
+            'OOP201' => 4,
+            'OS201' => 4,
+            'DB301' => 5,
+            'SE301' => 5,
+            'DEVOPS401' => 7,
+            'DISTRIB401' => 7,
+            'PROJECT401' => 8,
+        ];
+
+        $dataScienceSubjects = [
+            'MATH101' => 1,
+            'PROG101' => 1,
+            'MATH102' => 2,
+            'DS101' => 2,
+            'DISCRETE101' => 2,
+            'ALGO201' => 3,
+            'LINALG201' => 3,
+            'PROB201' => 4,
+            'OOP201' => 4,
+            'DB201' => 3,
+            'ML401' => 7,
+            'DL401' => 7,
+            'NLP401' => 7,
+            'PROJECT401' => 8,
+        ];
+
+        $devOpsSubjects = [
+            'PROG101' => 1,
+            'OS201' => 4,
+            'NETWORK301' => 5,
+            'SE301' => 5,
+            'DB201' => 3,
+            'DB301' => 5,
+            'ARCHI201' => 4,
+            'SECURITY301' => 6,
+            'DEVOPS401' => 7,
+            'DISTRIB401' => 7,
+            'PROJECT401' => 8,
+        ];
+
+        $gameDevSubjects = [
+            'MATH101' => 1,
+            'PROG101' => 1,
+            'DS101' => 2,
+            'ALGO201' => 3,
+            'OOP201' => 4,
+            'LINALG201' => 3,
+            'GRAPHICS301' => 6,
+            'GAME401' => 7,
+            'PHYS101' => 1,
+            'PHYS102' => 2,
+            'SE301' => 5,
+            'PROJECT401' => 8,
+        ];
+
+        $cybersecuritySubjects = [
+            'PROG101' => 1,
+            'DISCRETE101' => 2,
+            'MATH101' => 1,
+            'ALGO201' => 3,
+            'OS201' => 4,
+            'NETWORK301' => 5,
+            'DB201' => 3,
+            'ARCHI201' => 4,
+            'SECURITY301' => 6,
+            'SE301' => 5,
+            'DISTRIB401' => 7,
+            'PROJECT401' => 8,
+        ];
+
+        // Attach subjects to career paths
+        $this->attachSubjectsToCareePath('Full Stack Web Development', $fullStackSubjects);
+        $this->attachSubjectsToCareePath('Data Science & AI', $dataScienceSubjects);
+        $this->attachSubjectsToCareePath('DevOps & Cloud Computing', $devOpsSubjects);
+        $this->attachSubjectsToCareePath('Game Development', $gameDevSubjects);
+        $this->attachSubjectsToCareePath('Cybersecurity', $cybersecuritySubjects);
+    }
+
+    private function attachSubjectsToCareePath(string $careerPathName, array $subjectCodes): void
+    {
+        $careerPath = CareerPath::where('name', $careerPathName)->first();
+        if (!$careerPath) {
+            return;
+        }
+
+        foreach ($subjectCodes as $code => $order) {
+            $subject = Subject::where('code', $code)->first();
+            if ($subject) {
+                $careerPath->subjects()->attach($subject->id, [
+                    'order' => $order,
+                    'is_required' => true,
+                ]);
+            }
+        }
+    }
+}
Index: database/seeders/DatabaseSeeder.php
===================================================================
--- database/seeders/DatabaseSeeder.php	(revision a774c985f2e8d81c2d9c662961d40ff214095b59)
+++ database/seeders/DatabaseSeeder.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -22,4 +22,9 @@
             'email' => 'test@example.com',
         ]);
+
+        $this->call([
+            SubjectSeeder::class,
+            StudyProgramSeeder::class,
+        ]);
     }
 }
Index: database/seeders/StudyProgramSeeder.php
===================================================================
--- database/seeders/StudyProgramSeeder.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/seeders/StudyProgramSeeder.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,118 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\StudyProgram;
+use Illuminate\Database\Seeder;
+
+class StudyProgramSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     */
+    public function run(): void
+    {
+        $programs = [
+            // 4-year programs (Прв циклус)
+            [
+                'code' => 'SE-4Y',
+                'name_mk' => 'Софтверско инженерство и информациски системи',
+                'name_en' => 'Software engineering and information systems',
+                'duration_years' => 4,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'INTERNET-4Y',
+                'name_mk' => 'Интернет, мрежи и безбедност',
+                'name_en' => 'Internet, networks and security',
+                'duration_years' => 4,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'AITC-4Y',
+                'name_mk' => 'Примена на информациски технологии',
+                'name_en' => 'Application of information technologies',
+                'duration_years' => 4,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'ITDU-4Y',
+                'name_mk' => 'Информатичка едукација',
+                'name_en' => 'IT education',
+                'duration_years' => 4,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'CE-4Y',
+                'name_mk' => 'Компјутерско инженерство',
+                'name_en' => 'Computer engineering',
+                'duration_years' => 4,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'CS-4Y',
+                'name_mk' => 'Компјутерски науки',
+                'name_en' => 'Computer science',
+                'duration_years' => 4,
+                'cycle' => 'first',
+            ],
+
+            // 3-year programs (Прв циклус - скратена верзија)
+            [
+                'code' => 'SE-3Y',
+                'name_mk' => 'Софтверско инженерство и информациски системи',
+                'name_en' => 'Software engineering and information systems',
+                'duration_years' => 3,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'INTERNET-3Y',
+                'name_mk' => 'Интернет, мрежи и безбедност',
+                'name_en' => 'Internet, networks and security',
+                'duration_years' => 3,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'AITC-3Y',
+                'name_mk' => 'Примена на информациски технологии',
+                'name_en' => 'Application of information technologies',
+                'duration_years' => 3,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'CE-3Y',
+                'name_mk' => 'Компјутерско инженерство',
+                'name_en' => 'Computer engineering',
+                'duration_years' => 3,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'CS-3Y',
+                'name_mk' => 'Компјутерски науки',
+                'name_en' => 'Computer science',
+                'duration_years' => 3,
+                'cycle' => 'first',
+            ],
+
+            // Professional 3-year and 2-year programs
+            [
+                'code' => 'PROG-3Y',
+                'name_mk' => 'Стручни студии за програмирање',
+                'name_en' => 'Professional studies in programming',
+                'duration_years' => 3,
+                'cycle' => 'first',
+            ],
+            [
+                'code' => 'PROG-2Y',
+                'name_mk' => 'Стручни студии за програмирање',
+                'name_en' => 'Professional studies in programming',
+                'duration_years' => 2,
+                'cycle' => 'first',
+            ],
+        ];
+
+        foreach ($programs as $program) {
+            StudyProgram::create($program);
+        }
+    }
+}
Index: database/seeders/SubjectSeeder.php
===================================================================
--- database/seeders/SubjectSeeder.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ database/seeders/SubjectSeeder.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,321 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\Subject;
+use Illuminate\Database\Seeder;
+
+class SubjectSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     */
+    public function run(): void
+    {
+        $subjects = [
+            // Year 1 - Winter Semester
+            [
+                'code' => 'F23L1W001',
+                'name' => 'Structured Programming',
+                'name_mk' => 'Структурирано програмирање',
+                'description' => 'Introduction to programming concepts and C language',
+                'description_mk' => 'Вовед во концепти на програмирање и C јазик',
+                'year' => 1,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L1W002',
+                'name' => 'Calculus I',
+                'name_mk' => 'Анализа I',
+                'description' => 'Limits, derivatives, and integration',
+                'description_mk' => 'Граници, дериватни и интеграли',
+                'year' => 1,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L1W003',
+                'name' => 'Discrete Mathematics',
+                'name_mk' => 'Дискретна математика',
+                'description' => 'Logic, sets, combinatorics, graph theory',
+                'description_mk' => 'Логика, множества, комбинаторика, теорија на графови',
+                'year' => 1,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+
+            // Year 1 - Summer Semester
+            [
+                'code' => 'F23L1S001',
+                'name' => 'Calculus II',
+                'name_mk' => 'Анализа II',
+                'description' => 'Advanced calculus and series',
+                'description_mk' => 'Напредна анализа и серии',
+                'year' => 1,
+                'semester_type' => 'summer',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L1S002',
+                'name' => 'Linear Algebra',
+                'name_mk' => 'Линеарна алгебра',
+                'description' => 'Vectors, matrices, eigenvalues',
+                'description_mk' => 'Вектори, матрици, карактеристични вредности',
+                'year' => 1,
+                'semester_type' => 'summer',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L1S003',
+                'name' => 'Physics I',
+                'name_mk' => 'Физика I',
+                'description' => 'Mechanics and thermodynamics',
+                'description_mk' => 'Механика и термодинамика',
+                'year' => 1,
+                'semester_type' => 'summer',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+
+            // Year 2 - Winter Semester
+            [
+                'code' => 'F23L2W001',
+                'name' => 'Algorithms and Data Structures',
+                'name_mk' => 'Алгоритми и податочни структури',
+                'description' => 'Fundamental data structures and algorithm design',
+                'description_mk' => 'Основни структури и дизајн на алгоритми',
+                'year' => 2,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L2W002',
+                'name' => 'Object-Oriented Programming',
+                'name_mk' => 'Објектно-ориентирано програмирање',
+                'description' => 'Classes, inheritance, polymorphism in C++/Java',
+                'description_mk' => 'Класи, наследување, полиморфизам во C++/Java',
+                'year' => 2,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L2W003',
+                'name' => 'Digital Logic',
+                'name_mk' => 'Дигитална логика',
+                'description' => 'Boolean algebra, combinational and sequential circuits',
+                'description_mk' => 'Булова алгебра, комбинаторни и секвенцијални кола',
+                'year' => 2,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+
+            // Year 2 - Summer Semester
+            [
+                'code' => 'F23L2S001',
+                'name' => 'Web Programming',
+                'name_mk' => 'Веб програмирање',
+                'description' => 'HTML, CSS, JavaScript, and web frameworks',
+                'description_mk' => 'HTML, CSS, JavaScript, и веб фремворци',
+                'year' => 2,
+                'semester_type' => 'summer',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L2S002',
+                'name' => 'Databases I',
+                'name_mk' => 'Бази на податоци I',
+                'description' => 'Relational model, SQL, database design',
+                'description_mk' => 'Релационален модел, SQL, дизајн на БП',
+                'year' => 2,
+                'semester_type' => 'summer',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L2S003',
+                'name' => 'Computer Architecture',
+                'name_mk' => 'Архитектура на компјутери',
+                'description' => 'CPU design, memory hierarchy, assembly language',
+                'description_mk' => 'Дизајн на CPU, хиерархија на меморија, асемблер',
+                'year' => 2,
+                'semester_type' => 'summer',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+
+            // Year 3 - Winter Semester
+            [
+                'code' => 'F23L3W001',
+                'name' => 'Operating Systems',
+                'name_mk' => 'Оперативни системи',
+                'description' => 'Processes, memory management, file systems',
+                'description_mk' => 'Процеси, управување со меморија, датотечни системи',
+                'year' => 3,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L3W002',
+                'name' => 'Computer Networks',
+                'name_mk' => 'Компјутерски мрежи',
+                'description' => 'TCP/IP, routing, network protocols',
+                'description_mk' => 'TCP/IP, рутирање, мрежни протоколи',
+                'year' => 3,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L3W003',
+                'name' => 'Software Engineering',
+                'name_mk' => 'Софтверско инженерство',
+                'description' => 'SDLC, design patterns, testing, project management',
+                'description_mk' => 'SDLC, шаблони на дизајн, тестирање, менаџмент',
+                'year' => 3,
+                'semester_type' => 'winter',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+
+            // Year 3 - Summer Semester
+            [
+                'code' => 'F23L3S001',
+                'name' => 'Cybersecurity',
+                'name_mk' => 'Кибербезбедност',
+                'description' => 'Encryption, authentication, network security',
+                'description_mk' => 'Енкрипција, автентификација, мрежна безбедност',
+                'year' => 3,
+                'semester_type' => 'summer',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L3S002',
+                'name' => 'Artificial Intelligence',
+                'name_mk' => 'Вештачка интелигенција',
+                'description' => 'Search algorithms, machine learning basics',
+                'description_mk' => 'Алгоритми за пребарување, основи на машинско учење',
+                'year' => 3,
+                'semester_type' => 'summer',
+                'subject_type' => 'elective',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L3S003',
+                'name' => 'Computer Graphics',
+                'name_mk' => 'Компјутерска графика',
+                'description' => '3D graphics, rendering, shaders',
+                'description_mk' => '3D графика, рендерирање, шејдери',
+                'year' => 3,
+                'semester_type' => 'summer',
+                'subject_type' => 'elective',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+
+            // Year 4 (Only for 4-year programs)
+            [
+                'code' => 'F23L4W001',
+                'name' => 'Advanced Databases',
+                'name_mk' => 'Напредни бази на податоци',
+                'description' => 'Advanced SQL, transactions, optimization',
+                'description_mk' => 'Напредна SQL, транзакции, оптимизација',
+                'year' => 4,
+                'semester_type' => 'winter',
+                'subject_type' => 'elective',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L4W002',
+                'name' => 'Machine Learning',
+                'name_mk' => 'Машинско учење',
+                'description' => 'Classification, regression, neural networks',
+                'description_mk' => 'Класификација, регресија, невронски мрежи',
+                'year' => 4,
+                'semester_type' => 'winter',
+                'subject_type' => 'elective',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L4S001',
+                'name' => 'Cloud Computing',
+                'name_mk' => 'Облачни компјутери',
+                'description' => 'AWS, Azure, GCP, containerization',
+                'description_mk' => 'AWS, Azure, GCP, контејнеризација',
+                'year' => 4,
+                'semester_type' => 'summer',
+                'subject_type' => 'elective',
+                'credits' => 6,
+                'lecture_hours' => 30,
+                'practice_hours' => 60,
+            ],
+            [
+                'code' => 'F23L4S002',
+                'name' => 'Capstone Project',
+                'name_mk' => 'Завршен проект',
+                'description' => 'Apply learned skills to a real-world project',
+                'description_mk' => 'Примена на научени вештини во реален проект',
+                'year' => 4,
+                'semester_type' => 'summer',
+                'subject_type' => 'mandatory',
+                'credits' => 6,
+                'lecture_hours' => 0,
+                'practice_hours' => 180,
+            ],
+        ];
+
+        foreach ($subjects as $subject) {
+            Subject::create($subject);
+        }
+    }
+}
Index: resources/views/dashboard.blade.php
===================================================================
--- resources/views/dashboard.blade.php	(revision a774c985f2e8d81c2d9c662961d40ff214095b59)
+++ resources/views/dashboard.blade.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -2,5 +2,5 @@
     <x-slot name="header">
         <h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
-            {{ __('Dashboard') }}
+            {{ __('Контролна табла') }}
         </h2>
     </x-slot>
@@ -8,8 +8,26 @@
     <div class="py-12">
         <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
-            <div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
-                <div class="p-6 text-gray-900 dark:text-gray-100">
-                    {{ __("You're logged in!") }}
-                    {{ __("You're logged in!") }}
+            <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
+                <!-- Welcome Card -->
+                <div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
+                    <div class="p-6 text-gray-900 dark:text-gray-100">
+                        <h3 class="text-lg font-semibold mb-2">Добредојде, {{ Auth::user()->name }}!</h3>
+                        <p class="text-gray-600 dark:text-gray-400">
+                            Планирајте ја вашата академска патека и добијте персонализирана дорога врз основа на вашите академски цели.
+                        </p>
+                    </div>
+                </div>
+
+                <!-- Roadmap Card -->
+                <div class="bg-gradient-to-br from-indigo-50 to-blue-50 dark:from-gray-700 dark:to-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
+                    <div class="p-6">
+                        <h3 class="text-lg font-semibold text-indigo-900 dark:text-indigo-100 mb-2">Вашата Академска Дорога</h3>
+                        <p class="text-gray-700 dark:text-gray-300 text-sm mb-4">
+                            Создајте персонализирана дорога според избраната студиска програма.
+                        </p>
+                        <a href="{{ route('roadmap.create') }}" class="inline-flex items-center px-4 py-2 bg-indigo-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-indigo-700 focus:bg-indigo-700 active:bg-indigo-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition ease-in-out duration-150">
+                            Почнете
+                        </a>
+                    </div>
                 </div>
             </div>
Index: resources/views/roadmap/create.blade.php
===================================================================
--- resources/views/roadmap/create.blade.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ resources/views/roadmap/create.blade.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,148 @@
+<x-app-layout>
+<div class="py-12">
+    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
+        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
+            <div class="p-6 bg-white border-b border-gray-200">
+                <h2 class="font-bold text-2xl text-gray-900 mb-2">Создајте Своја Академска Дорога</h2>
+                <p class="text-gray-600 mb-6">Изберете студиска програма и внесете предмети што сте ги завршиле</p>
+
+                <form method="POST" action="{{ route('roadmap.store') }}" class="space-y-8">
+                    @csrf
+
+                    <!-- Study Program Selection -->
+                    <div class="border-b pb-6">
+                        <label for="study_program_id" class="block font-bold text-lg text-gray-900 mb-4">
+                            Студиска Програма <span class="text-red-500">*</span>
+                        </label>
+                        <select id="study_program_id" name="study_program_id" class="mt-2 block w-full px-4 py-3 rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 text-base" required>
+                            <option value="">-- Изберете студиска програма --</option>
+                            @forelse($studyPrograms as $program)
+                                <option value="{{ $program->id }}">
+                                    {{ $program->name_mk }} ({{ $program->duration_years }} години)
+                                    @if($program->name_en)
+                                        - {{ $program->name_en }}
+                                    @endif
+                                </option>
+                            @empty
+                                <option disabled>Нема достапни студиски програми</option>
+                            @endforelse
+                        </select>
+                        @error('study_program_id')
+                            <p class="text-red-500 text-sm mt-2">{{ $message }}</p>
+                        @enderror
+                    </div>
+
+                    <!-- Subjects by Year -->
+                    <div>
+                        <h3 class="font-bold text-xl text-gray-900 mb-6">Внесете вашиот напредок</h3>
+                        <div class="grid grid-cols-1 gap-8 lg:grid-cols-2">
+                            @php
+                                $subjectsByYear = [];
+                                foreach($subjects as $subject) {
+                                    $key = $subject->year . '_' . $subject->semester_type;
+                                    if (!isset($subjectsByYear[$key])) {
+                                        $subjectsByYear[$key] = [];
+                                    }
+                                    $subjectsByYear[$key][] = $subject;
+                                }
+                                ksort($subjectsByYear);
+                            @endphp
+
+                            @foreach($subjectsByYear as $yearSemester => $yearSubjects)
+                                @php
+                                    [$year, $semesterType] = explode('_', $yearSemester);
+                                    $semesterLabel = $semesterType === 'winter' ? 'Зимски' : 'Летни';
+                                @endphp
+                                <div class="bg-gray-50 rounded-lg p-6 border border-gray-200">
+                                    <h4 class="font-bold text-lg text-indigo-600 mb-4">
+                                        Година {{ $year }} - {{ $semesterLabel }} семестар
+                                    </h4>
+
+                                    <div class="space-y-4">
+                                        <div>
+                                            <label class="block text-sm font-semibold text-gray-700 mb-3 text-green-700">
+                                                ✓ Завршени предмети
+                                            </label>
+                                            <div class="space-y-2 pl-4">
+                                                @forelse($yearSubjects as $subject)
+                                                    <label class="flex items-start cursor-pointer group">
+                                                        <input type="checkbox" name="completed_subjects[]" value="{{ $subject->id }}" class="rounded border-gray-300 text-green-600 shadow-sm focus:border-green-500 focus:ring-green-500 mt-1">
+                                                        <span class="ml-3 text-sm">
+                                                            <strong class="text-gray-900">{{ $subject->code }}</strong>
+                                                            <span class="block text-gray-600">{{ $subject->name }}</span>
+                                                            @if($subject->name_mk && $subject->name_mk !== $subject->name)
+                                                                <span class="block text-gray-500 text-xs italic">{{ $subject->name_mk }}</span>
+                                                            @endif
+                                                            <span class="text-gray-500 text-xs">{{ $subject->credits }} ECTS</span>
+                                                        </span>
+                                                    </label>
+                                                @empty
+                                                    <p class="text-gray-500 text-sm">Нема предмети за овој период</p>
+                                                @endforelse
+                                            </div>
+                                        </div>
+
+                                        <div class="border-t pt-4">
+                                            <label class="block text-sm font-semibold text-gray-700 mb-3 text-yellow-700">
+                                                ⏳ Предмети во процес
+                                            </label>
+                                            <div class="space-y-2 pl-4">
+                                                @forelse($yearSubjects as $subject)
+                                                    <label class="flex items-start cursor-pointer group">
+                                                        <input type="checkbox" name="in_progress_subjects[]" value="{{ $subject->id }}" class="rounded border-gray-300 text-yellow-600 shadow-sm focus:border-yellow-500 focus:ring-yellow-500 mt-1">
+                                                        <span class="ml-3 text-sm">
+                                                            <strong class="text-gray-900">{{ $subject->code }}</strong>
+                                                            <span class="block text-gray-600">{{ $subject->name }}</span>
+                                                            @if($subject->name_mk && $subject->name_mk !== $subject->name)
+                                                                <span class="block text-gray-500 text-xs italic">{{ $subject->name_mk }}</span>
+                                                            @endif
+                                                            <span class="text-gray-500 text-xs">{{ $subject->credits }} ECTS</span>
+                                                        </span>
+                                                    </label>
+                                                @empty
+                                                    <p class="text-gray-500 text-sm">Нема предмети за овој период</p>
+                                                @endforelse
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            @endforeach
+                        </div>
+                    </div>
+
+                    <!-- Submit Button -->
+                    <div class="flex justify-end pt-6 border-t">
+                        <button type="submit" class="inline-flex items-center px-6 py-3 bg-indigo-600 border border-transparent rounded-md font-semibold text-sm text-white uppercase tracking-widest hover:bg-indigo-700 focus:bg-indigo-700 active:bg-indigo-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition ease-in-out duration-150">
+                            Генерирај дорога
+                        </button>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+document.addEventListener('DOMContentLoaded', function() {
+    const completedCheckboxes = document.querySelectorAll('input[name="completed_subjects[]"]');
+    const inProgressCheckboxes = document.querySelectorAll('input[name="in_progress_subjects[]"]');
+
+    // Prevent selecting same subject for both completed and in progress
+    completedCheckboxes.forEach((cb, index) => {
+        cb.addEventListener('change', function() {
+            if (this.checked) {
+                inProgressCheckboxes[index].checked = false;
+            }
+        });
+    });
+
+    inProgressCheckboxes.forEach((cb, index) => {
+        cb.addEventListener('change', function() {
+            if (this.checked) {
+                completedCheckboxes[index].checked = false;
+            }
+        });
+    });
+});
+</script>
+</x-app-layout>
Index: resources/views/roadmap/show.blade.php
===================================================================
--- resources/views/roadmap/show.blade.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
+++ resources/views/roadmap/show.blade.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -0,0 +1,219 @@
+<x-app-layout>
+<div class="py-12">
+    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
+        <!-- Header -->
+        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg mb-6">
+            <div class="p-6 bg-white border-b border-gray-200">
+                <div class="flex justify-between items-start">
+                    <div>
+                        <h2 class="font-bold text-3xl text-gray-900">Вашата Академска Дорога</h2>
+                        <p class="text-gray-600 mt-2 text-lg">
+                            <strong class="text-indigo-600">{{ $studyProgram->name_mk }}</strong>
+                            <span class="text-gray-500">({{ $studyProgram->duration_years }} години)</span>
+                        </p>
+                        @if($studyProgram->name_en)
+                            <p class="text-gray-500 italic">{{ $studyProgram->name_en }}</p>
+                        @endif
+                    </div>
+                    <a href="{{ route('roadmap.create') }}" class="inline-flex items-center px-4 py-2 bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-gray-700 uppercase tracking-widest hover:bg-gray-300 focus:bg-gray-300">
+                        Уреди дорога
+                    </a>
+                </div>
+            </div>
+        </div>
+
+        <!-- Progress Summary -->
+        <div class="grid grid-cols-1 gap-6 md:grid-cols-4 mb-6">
+            <div class="bg-green-50 overflow-hidden shadow-sm sm:rounded-lg">
+                <div class="p-6 bg-white border-l-4 border-green-500">
+                    <p class="text-gray-500 text-sm">Завршени</p>
+                    <p class="text-3xl font-bold text-green-600">{{ count($completed) }}</p>
+                </div>
+            </div>
+            <div class="bg-yellow-50 overflow-hidden shadow-sm sm:rounded-lg">
+                <div class="p-6 bg-white border-l-4 border-yellow-500">
+                    <p class="text-gray-500 text-sm">Во процес</p>
+                    <p class="text-3xl font-bold text-yellow-600">{{ count($inProgress) }}</p>
+                </div>
+            </div>
+            <div class="bg-blue-50 overflow-hidden shadow-sm sm:rounded-lg">
+                <div class="p-6 bg-white border-l-4 border-blue-500">
+                    <p class="text-gray-500 text-sm">Преостаток</p>
+                    <p class="text-3xl font-bold text-blue-600">{{ count($roadmap) }}</p>
+                </div>
+            </div>
+            <div class="bg-purple-50 overflow-hidden shadow-sm sm:rounded-lg">
+                <div class="p-6 bg-white border-l-4 border-purple-500">
+                    <p class="text-gray-500 text-sm">Вкупно ECTS</p>
+                    @php
+                        $totalEcts = 0;
+                        foreach($studyProgram->subjects as $subject) {
+                            $totalEcts += $subject->credits ?? 0;
+                        }
+                    @endphp
+                    <p class="text-3xl font-bold text-purple-600">{{ $totalEcts }}</p>
+                </div>
+            </div>
+        </div>
+
+        <!-- Recommended Subjects -->
+        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
+            <div class="p-6 bg-white border-b border-gray-200">
+                <h3 class="font-bold text-2xl text-gray-900 mb-8">Препоракушани следни чекори</h3>
+
+                @if(count($roadmap) > 0)
+                    <div class="space-y-8">
+                        @php
+                            $readySubjects = array_filter($roadmap, fn($item) => $item['ready']);
+                            $blockedSubjects = array_filter($roadmap, fn($item) => !$item['ready']);
+                        @endphp
+
+                        @if(count($readySubjects) > 0)
+                            <div>
+                                <h4 class="font-bold text-xl text-green-700 mb-4">✓ Подготвени за запишување</h4>
+                                <div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
+                                    @foreach($readySubjects as $item)
+                                        <div class="border-2 border-green-400 rounded-lg p-4 bg-green-50 hover:shadow-lg transition-shadow">
+                                            <div class="flex justify-between items-start mb-2">
+                                                <div class="flex-1">
+                                                    <p class="font-bold text-gray-900 text-lg">{{ $item['subject']->code }}</p>
+                                                    <p class="text-gray-700 font-semibold">{{ $item['subject']->name }}</p>
+                                                    @if($item['subject']->name_mk && $item['subject']->name_mk !== $item['subject']->name)
+                                                        <p class="text-gray-600 text-sm italic">{{ $item['subject']->name_mk }}</p>
+                                                    @endif
+                                                </div>
+                                                <span class="bg-green-600 text-white text-xs px-3 py-1 rounded-full font-semibold whitespace-nowrap ml-2">Подготвено</span>
+                                            </div>
+                                            <div class="mt-3 flex gap-2 flex-wrap">
+                                                <span class="inline-block bg-blue-100 text-blue-800 text-xs px-2 py-1 rounded">
+                                                    Година {{ $item['subject']->year }}
+                                                </span>
+                                                <span class="inline-block bg-purple-100 text-purple-800 text-xs px-2 py-1 rounded">
+                                                    {{ $item['subject']->credits ?? 6 }} ECTS
+                                                </span>
+                                                <span class="inline-block bg-{{ $item['subject']->subject_type === 'mandatory' ? 'red' : 'orange' }}-100 text-{{ $item['subject']->subject_type === 'mandatory' ? 'red' : 'orange' }}-800 text-xs px-2 py-1 rounded">
+                                                    {{ $item['subject']->subject_type === 'mandatory' ? 'Задолжително' : 'Избирачко' }}
+                                                </span>
+                                            </div>
+                                            @if($item['subject']->description)
+                                                <p class="text-gray-600 text-sm mt-3">{{ $item['subject']->description }}</p>
+                                            @endif
+                                        </div>
+                                    @endforeach
+                                </div>
+                            </div>
+                        @endif
+
+                        @if(count($blockedSubjects) > 0)
+                            <div>
+                                <h4 class="font-bold text-xl text-gray-700 mb-4">🔒 Заблокирано (потребни предусловиsection)</h4>
+                                <div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
+                                    @foreach($blockedSubjects as $item)
+                                        <div class="border-2 border-gray-300 rounded-lg p-4 bg-gray-50 opacity-75">
+                                            <div class="flex justify-between items-start mb-2">
+                                                <div class="flex-1">
+                                                    <p class="font-bold text-gray-900 text-lg">{{ $item['subject']->code }}</p>
+                                                    <p class="text-gray-700 font-semibold">{{ $item['subject']->name }}</p>
+                                                    @if($item['subject']->name_mk && $item['subject']->name_mk !== $item['subject']->name)
+                                                        <p class="text-gray-600 text-sm italic">{{ $item['subject']->name_mk }}</p>
+                                                    @endif
+                                                </div>
+                                                <span class="bg-gray-600 text-white text-xs px-3 py-1 rounded-full font-semibold whitespace-nowrap ml-2">Заблокирано</span>
+                                            </div>
+
+                                            @if($item['prerequisites']->isNotEmpty())
+                                                <div class="mt-3 p-3 bg-red-50 rounded border border-red-200">
+                                                    <p class="text-sm font-semibold text-red-900 mb-2">Потребни предусловиsection:</p>
+                                                    <ul class="text-sm text-red-800 space-y-1">
+                                                        @foreach($item['prerequisites'] as $prereq)
+                                                            @php
+                                                                $isCompleted = in_array($prereq->id, $completed->toArray());
+                                                            @endphp
+                                                            <li class="flex items-center">
+                                                                <span class="mr-2">
+                                                                    @if($isCompleted)
+                                                                        <span class="text-green-600">✓</span>
+                                                                    @else
+                                                                        <span class="text-red-600">✗</span>
+                                                                    @endif
+                                                                </span>
+                                                                <span class="{{ $isCompleted ? 'line-through text-gray-500' : '' }}">
+                                                                    {{ $prereq->code }}
+                                                                </span>
+                                                            </li>
+                                                        @endforeach
+                                                    </ul>
+                                                </div>
+                                            @endif
+
+                                            <div class="mt-3 flex gap-2 flex-wrap">
+                                                <span class="inline-block bg-blue-100 text-blue-800 text-xs px-2 py-1 rounded">
+                                                    Година {{ $item['subject']->year }}
+                                                </span>
+                                                <span class="inline-block bg-purple-100 text-purple-800 text-xs px-2 py-1 rounded">
+                                                    {{ $item['subject']->credits ?? 6 }} ECTS
+                                                </span>
+                                            </div>
+                                        </div>
+                                    @endforeach
+                                </div>
+                            </div>
+                        @endif
+                    </div>
+                @else
+                    <div class="bg-gradient-to-r from-green-50 to-blue-50 border-l-4 border-green-500 p-6 rounded">
+                        <p class="text-green-900 font-semibold text-lg">
+                            🎉 Честитки! Ги завршивте сите предмети за <strong>{{ $studyProgram->name_mk }}</strong>!
+                        </p>
+                    </div>
+                @endif
+            </div>
+        </div>
+
+        <!-- Completed & In Progress Summary -->
+        <div class="mt-6 grid grid-cols-1 gap-6 md:grid-cols-2">
+            @if(count($completed) > 0)
+                <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
+                    <div class="p-6 bg-white border-b border-gray-200">
+                        <h3 class="font-bold text-lg text-gray-900 mb-4">✓ Завршени предмети</h3>
+                        <div class="space-y-2">
+                            @foreach($completed as $subjectId)
+                                @php
+                                    $subject = \App\Models\Subject::find($subjectId);
+                                @endphp
+                                <div class="flex items-center justify-between p-3 bg-green-50 rounded border border-green-200">
+                                    <span class="text-gray-700">
+                                        <strong>{{ $subject->code }}</strong> - {{ $subject->name }}
+                                    </span>
+                                    <span class="text-green-600 font-bold text-lg">✓</span>
+                                </div>
+                            @endforeach
+                        </div>
+                    </div>
+                </div>
+            @endif
+
+            @if(count($inProgress) > 0)
+                <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
+                    <div class="p-6 bg-white border-b border-gray-200">
+                        <h3 class="font-bold text-lg text-gray-900 mb-4">⏳ Во процес</h3>
+                        <div class="space-y-2">
+                            @foreach($inProgress as $subjectId)
+                                @php
+                                    $subject = \App\Models\Subject::find($subjectId);
+                                @endphp
+                                <div class="flex items-center justify-between p-3 bg-yellow-50 rounded border border-yellow-200">
+                                    <span class="text-gray-700">
+                                        <strong>{{ $subject->code }}</strong> - {{ $subject->name }}
+                                    </span>
+                                    <span class="text-yellow-600 font-bold text-lg">⏳</span>
+                                </div>
+                            @endforeach
+                        </div>
+                    </div>
+                </div>
+            @endif
+        </div>
+    </div>
+</div>
+</x-app-layout>
Index: routes/web.php
===================================================================
--- routes/web.php	(revision a774c985f2e8d81c2d9c662961d40ff214095b59)
+++ routes/web.php	(revision 13f11597026d91c5cabce0f9d5e43c3b533ea528)
@@ -2,4 +2,5 @@
 
 use App\Http\Controllers\ProfileController;
+use App\Http\Controllers\RoadmapController;
 use Illuminate\Support\Facades\Route;
 
@@ -16,4 +17,9 @@
     Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
     Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
+
+    // Roadmap routes
+    Route::get('/roadmap/create', [RoadmapController::class, 'create'])->name('roadmap.create');
+    Route::post('/roadmap', [RoadmapController::class, 'store'])->name('roadmap.store');
+    Route::get('/roadmap', [RoadmapController::class, 'show'])->name('roadmap.show');
 });
 
