Report Codepal-Interactive Learning Program
Report Codepal-Interactive Learning Program
CODEPAL
Interactive Learning program
Submitted to partial fulfillment of the Requirements for the
award of the Diploma Under
Computer Engineering
Under the guidance
of Mr.
MUHAMMED
JISAM A
Submitted by:
Group members
AMAL KP (2301133589)
MINHAJ KT (2301131550)
ABDULLA FATHAH T (2301131534)
SHABEEHA AT (2301133596)
PURAMANNUR, VALANCHERY
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
APRIL 2026
2
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
INSTITUTE VISION
INSTITUTE MISSION
iii
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
DEPARTMENT VISION
DEPARTMENT MISSION
iv
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
v
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CERTIFICATE
This is to certify that the Major Project Report entitled “STUDENT
PERFORMANCE PREDICTION SYSTEM” is a bonafide work submitted by
SHIDIN P DILEEP (2301131574) , SAFWAN AHAMED (2301131569) , ABDUL
HASEEB.K (2301131532) , ASHIF.K (2301131538) , 6 th semester Computer Engineering in
partial fulfillment of requirement for the award of diploma in Computer Engineering of the
State Board of Technical Education ,Kerala .
Lecturer Lecturer
Dept. of Computer
Dept. of Computer Dept. of Computer Engineering
Engineering Engineering
Place: Puramannur
Date:
(Office seal)
vi
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
ACKNOWLEDGEMENT
First of all, I would like to Thank GOD THE ALMIGHTY for the divine grace
bestowed on me to complete this seminar successfully in time.
I would also wish to record my gratitude to all my friends and classmates for
their help and support in carrying out this work successfully.
AMAL KP
MINHAJ KT
ABDULLA FATHAH T
SHABEEHA AT
1
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
ABSTRACT
The CodePal platform addresses this issue by organizing programming topics into a
structured roadmap consisting of categories and modules. Each module contains curated
learning resources that guide the user step-by-step through the learning process. The system
tracks the progress of users and dynamically unlocks subsequent modules only after the
completion of prerequisite modules, ensuring that learners build a strong foundation before
moving to advanced topics.
The system is developed using modern web technologies. The frontend interface is built
using React and styled using Tailwind CSS, enabling the creation of a responsive and
dynamic user interface. The backend functionality is provided by Supabase, a Backend-as-a-
Service (BaaS) platform that manages database operations, authentication, and API
communication. The platform uses a PostgreSQL relational database to store information
related to users, learning modules, categories, and progress tracking.
2
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
3
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CONTENTS
Title Page................................................................................................................................(i)
Certificate..............................................................................................................................(v)
Acknowledgement…................................................................................................................1
Abstract…................................................................................................................................2
Contents…................................................................................................................................3
Figure Index…..........................................................................................................................5
Chapter 1 INTRODUCTION…............................................................................................6
Chapter 5 CODING.............................................................................................................30
Chapter 6 TESTING...........................................................................................................79
4
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
6.1 UNIT TESTING………………………………………………………………….79
Chapter 7 MAINTENANCE............................................................................................86
Chapter 8 CONCLUSION.................................................................................................88
8.1 CONCLUSION........................................................................................................88
Chapter 9 BIBLIOGRAPHY..............................................................................................90
5
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
FIGURE INDEX
6
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CHAPTER 1
INTRODUCTION
In the modern digital era, programming has become one of the most important skills
for students, professionals, and technology enthusiasts. Software development plays a
major role in various industries such as web development, mobile applications,
artificial intelligence, and data science. As a result, many individuals are interested in
learning programming to improve their career opportunities and technical knowledge.
However, beginners often face several challenges when they start learning
programming. One of the major problems is the lack of proper guidance and
structured learning paths. Although many free learning resources are available on the
internet, they are often scattered across different platforms such as blogs, tutorial
websites, and video platforms. This makes it difficult for beginners to know where to
start and what topics they should learn first. As a result, learners may feel confused,
skip important concepts, or lose motivation during the learning process.
Another common problem is that most beginners try to learn programming randomly
by watching tutorials or reading articles without following a structured learning
roadmap. This often leads to incomplete knowledge and gaps in understanding
fundamental concepts. Without proper progression from basic topics to advanced
concepts, learners may struggle to develop strong programming skills.
To address these challenges, the CodePal – Programming Learning Platform has been
developed as a web-based learning system that provides structured programming
roadmaps and organized learning resources. CodePal aims to simplify the
programming learning process by presenting topics in a systematic order. The
platform organizes programming concepts into categories and modules so that
learners can progress step by step.
The CodePal system allows users to register on the platform, explore programming
categories, access learning modules, and track their progress throughout the learning
journey. Each module represents a specific programming concept and is designed to
guide learners through the required knowledge in a logical sequence. The platform
also implements a sequential unlocking mechanism that ensures users complete
earlier modules before accessing advanced topics. This helps learners build a strong
foundation before moving forward.
Another important feature of the CodePal system is progress tracking. The platform
records completed modules and dynamically calculates the user's learning progress.
7
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
This feature allows users to monitor their progress and stay motivated as they move
forward in the learning roadmap.
From a technical perspective, the CodePal platform is built using modern web
technologies. The frontend interface is developed using React, which enables the
creation of dynamic and interactive user interfaces. Tailwind CSS is used for styling
and responsive design, ensuring that the platform works effectively across different
devices. The backend services are provided by Supabase, which offers database
management, authentication, and API services. PostgreSQL is used as the relational
database to store system data such as user information, learning modules, and
progress records.
Overall, the CodePal Programming Learning Platform aims to create a structured and
accessible environment for beginner programmers. By organizing learning resources
into a clear roadmap, the system helps users focus on learning rather than searching
for scattered tutorials. The platform provides a guided learning experience that
improves knowledge retention, encourages consistent learning, and supports the
development of practical programming skills.
The development of the CodePal system demonstrates how modern web technologies
can be used to build effective educational platforms. By combining structured
learning paths, progress tracking, and user-friendly design, the system provides an
efficient solution for individuals who want to learn programming in a systematic and
organized manner.
8
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CHAPTER 2
FEASIBILITY STUDY
Introduction
A feasibility study is one of the most important stages in the System Development
Life Cycle (SDLC). Before developing any system, it is necessary to analyze whether
the proposed system is practical and beneficial. The feasibility study evaluates the
strengths, weaknesses, opportunities, and limitations of the proposed system. It helps
developers and stakeholders understand whether the system can be successfully
implemented within the available resources.
The main purpose of conducting a feasibility study is to determine whether the
proposed system is technically possible, economically viable, operationally practical,
and achievable within the given time frame. This analysis helps organizations avoid
unnecessary risks, reduce development failures, and ensure efficient use of resources.
A feasibility study examines several factors including:
Availability of required technology
Financial cost of development and maintenance
Ability of users to adopt the system
Time required to complete the project
By carefully evaluating these factors, developers can make informed
decisions regarding the development of the system.
The proposed system for this project is CodePal, which is a web-based programming
learning platform designed to help beginners learn programming in a structured and
organized way. Many students struggle to start learning programming because
learning resources are scattered across multiple platforms. CodePal aims to solve this
problem by providing categorized programming modules, beginner-friendly learning
materials, and progress tracking features.
To determine whether CodePal can be successfully developed and implemented, a
detailed feasibility analysis was conducted. The feasibility study focuses on four main
aspects:
1. Technical Feasibility
2. Economic Feasibility
3. Operational Feasibility
4. Schedule Feasibility
Each of these feasibility factors plays an important role in determining whether the
system can be successfully implemented.
9
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Technical feasibility examines whether the proposed system can be developed using
the available technologies, tools, and technical resources. It also evaluates whether the
development team has the necessary skills and expertise required to implement the
system successfully.
The CodePal platform is designed as a modern web application using current web
development technologies. These technologies provide the flexibility, scalability, and
performance needed for building an online learning platform.
The frontend of the CodePal platform is developed using React, which is a widely
used JavaScript library for building user interfaces. React allows developers to create
reusable components, which makes the development process more efficient and
organized.
Using React provides several advantages:
Component-based architecture
Efficient rendering using virtual DOM
Faster development through reusable components
Easy integration with backend APIs
Large developer community support
Because of these advantages, React is widely used in modern web application
development.
React also allows the CodePal platform to provide interactive features such as
dynamic content updates, user dashboards, navigation systems, and real-time
progresstracking.
The user interface of the system is developed using Tailwind CSS, which is a utility-
first CSS framework that simplifies UI development.
Tailwind CSS helps developers design modern and responsive layouts without writing
complex CSS code. Instead of creating custom stylesheets, developers can use pre-
defined utility classes to design the interface quickly.
Advantages of Tailwind CSS include:
Faster user interface development
Consistent design across the application
Mobile-first responsive design
Easy customization of styles
10
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Using Tailwind CSS ensures that the CodePal platform maintains a clean, modern,
and user-friendly interface.
The backend services of the CodePal system are provided using Supabase, which is
an open-source backend-as-a-service platform.
Supabase provides several built-in services that simplify backend development,
including:
User authentication system
Database management
API services
File storage
Real-time database updates
By using Supabase, developers do not need to build complex backend systems from
scratch. This significantly reduces development time and simplifies system
architecture.
One of the advantages of the CodePal platform is that it does not require expensive
hardware or specialized software.
Hardware Requirements
Users can access the system using standard devices such as:
Desktop computers
Laptop computers
Tablets
Smartphones
Software Requirements
Users only need a modern web browser such as:
Google Chrome
11
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Mozilla Firefox
Microsoft Edge
Safari
Because the system is web-based, users do not need to install additional applications.
The technologies used in the CodePal project are well-established and widely
supported by developer communities. This reduces the risk associated with technical
implementation.
Additionally, these technologies have extensive documentation and online resources
that help developers troubleshoot problems easily.
Therefore, considering the availability of modern development tools and
technical resources, the CodePal system is technically feasible.
Economic feasibility evaluates whether the benefits of the proposed system justify the
costs involved in its development and operation.
The main goal of economic feasibility analysis is to ensure that the project does not
require excessive financial resources and that the benefits gained from the system
outweigh the costs.
The development cost of the CodePal system is relatively low because it uses open-
source technologies.
The following technologies used in the project are free:
React
Tailwind CSS
Supabase
PostgreSQL
GitHub
Since these technologies are open-source, developers do not need to pay licensing
fees.
The backend infrastructure is managed using Supabase, which provides a free tier
suitable for educational projects and small applications.
The free tier includes:
Database storage
Authentication services
API access
12
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Hosting services
This eliminates the need to purchase expensive server infrastructure.
2.2.3 Deployment Cost
The CodePal application can be deployed using Vercel, which offers free hosting for
frontend applications.
Vercel provides:
Automatic deployment
Continuous integration
Fast global content delivery
These features make the deployment process efficient and cost-effective.
The maintenance cost of the CodePal system is minimal because the technologies
used are stable and easy to maintain.
Maintenance activities include:
Updating learning content
Fixing bugs and errors
Improving system features
Since the system does not require complex hardware infrastructure, maintenance
costs remain low.
Operational feasibility evaluates how well the proposed system will perform in real-
world conditions. It examines whether the system will be accepted by users and
whether it can effectively solve the identified problem.
13
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Many students who want to learn programming struggle to find structured learning
resources. Most online resources are scattered across multiple platforms, making it
difficult for beginners to follow a clear learning path.
The CodePal platform aims to solve this problem by providing organized
programming modules that guide beginners step by step.
The system is designed with a simple and intuitive user interface. Users can easily
navigate the platform and access learning materials without confusion.
Key features of the user interface include:
Simple navigation menu
Organized categories
Clean layout design
Easy content access
These features ensure that users can focus on learning without technical difficulties.
The increasing popularity of online learning platforms indicates that users are
comfortable with digital education systems. Because CodePal provides beginner-
friendly programming education, it is expected that users will accept and adopt the
platform.
Therefore, the system is operationally feasible.
Schedule feasibility determines whether the project can be completed within the
available time frame.
The CodePal project follows a structured development schedule to ensure that all
development phases are completed efficiently.
During this phase, the project objectives and system requirements are identified and
documented.
The system architecture, database structure, and user interface design are planned
during this stage.
Testing ensures that the system functions correctly and identifies potential errors.
2.4.6 Deployment
The final system is deployed using Vercel, making the platform accessible to users.
By dividing the project into these development phases, the system can be completed
within the academic semester timeline.
Therefore, the project is schedule feasible.
15
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
2.5 Conclusion
The feasibility study conducted for the CodePal system indicates that the project is
practical and achievable. The technologies required for development are widely
available, and the system can be built using open-source tools with minimal cost.
Additionally, the platform addresses a real problem faced by beginners who want to
learn programming in a structured manner. The system is easy to use, accessible
through web browsers, and capable of providing valuable educational resources.
Furthermore, the development schedule ensures that the system can be completed
within the available time frame.
Based on the evaluation of technical, economic, operational, and schedule feasibility,
it can be concluded that the CodePal system is feasible for development and
implementation.
16
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CHAPTER 3
REQUIREMENTS ANALYSIS AND SPECIFICATION
3.0 Introduction
Requirements analysis and specification is one of the most critical phases in the
software development process. It focuses on identifying, analyzing, and documenting
the requirements of a proposed system before the actual development begins. The
purpose of this phase is to ensure that developers clearly understand what the system
must do and how it should perform in different situations.
In many software projects, problems arise when system requirements are not properly
defined during the early stages of development. Without proper requirement analysis,
developers may misunderstand user needs, which can lead to system design errors,
increased development costs, and project delays. Therefore, requirements analysis
helps reduce risks and ensures that the final system meets user expectations.
The requirements analysis phase involves gathering information about user needs,
system functionalities, and operational constraints. These requirements are then
organized and documented in a structured format known as the Software
Requirements Specification (SRS). The SRS document acts as a reference guide for
developers, designers, testers, and project managers throughout the development
lifecycle.
17
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
The requirements analysis process for the CodePal system involved studying existing
programming learning platforms, analyzing user needs, and identifying system
functionalities that can improve the learning experience for beginners. Based on this
analysis, several functional and non-functional requirements were identified.
Functional requirements describe the specific operations that the system must
perform, such as user registration, login, accessing learning modules, and progress
tracking. Non-functional requirements describe the quality attributes of the system,
such as performance, security, usability, and reliability.
The SRS document serves as a foundation for the design and implementation phases
of the CodePal system. It ensures that the development process remains aligned with
the project objectives and user requirements.
The main purpose of requirements analysis is to identify and document the needs of
users and stakeholders. It helps developers understand what features should be
included in the system and how the system should behave under different conditions.
Requirements analysis also ensures that the system design is based on accurate
information and that all necessary functionalities are included in the final product.
By performing proper requirements analysis, developers can ensure that the system
meets user expectations and operates effectively.
18
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
3.1.1 Introduction
3.1.2 Purpose
The purpose of the CodePal system is to provide an online learning platform that
helps beginners understand programming concepts through structured lessons and
organized modules.
Programming education is often challenging for beginners because many learning
resources are scattered across multiple websites and tutorials. CodePal aims to
simplify the learning process by organizing programming topics into clear learning
paths.
The platform allows users to learn programming concepts step by step and track their
progress as they complete learning modules.
manage the learning content. Administrators can create new programming categories,
add learning modules, update content, and monitor user activity.
The system is designed as a web application that can be accessed through internet
browsers. This allows users to access the platform from multiple devices such as
laptops, tablets, and smartphones.
21
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Windows
Linux
macOS
Android
iOS
Users can access the platform through web browsers with internet connectivity.
22
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Functional requirements define the actions that the system must perform.
User Registration
The system should allow new users to create accounts by providing registration
details such as email address and password.
User Login
Registered users should be able to log in securely using their credentials.
View Programming Categories
Users should be able to view available programming categories and select topics they
want to learn.
Access Learning Modules
Users should be able to access learning modules that contain explanations of
programming concepts.
Module Completion
Users should be able to mark modules as completed after finishing them.
Progress Tracking
The system should track user progress and display completed modules.
Sequential Module Unlocking
The system should unlock new modules only after the previous module has been
completed.
Performance
The system should load pages quickly and provide smooth navigation.
Security
The system should protect user data through secure authentication and encryption
mechanisms.
Usability
23
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
The platform should provide a simple and user-friendly interface suitable for beginner
programmers.
Reliability
The system should operate without errors and maintain accurate data records.
Scalability
The platform should support an increasing number of users and learning modules.
Desktop computers
Laptop computers
Tablets
Smartphones
Operating Systems:
Windows
Linux
macOS
Web Browsers:
Google Chrome
Mozilla Firefox
Microsoft Edge
Safari
Development Technologies:
The database should provide secure data storage and efficient data retrieval.
3.1.17 Conclusion
CHAPTER 4
DESIGN
25
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
26
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
27
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
28
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
29
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
30
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CHAPTER 5
CODING
Login Page
if (authError) {
setError([Link])
setLoading(false)
return
}
if ([Link]) navigate('/dashboard')
setLoading(false)
}
return (
<div className="min-h-screen px-6 py-10">
<div className="mx-auto grid w-full max-w-5xl gap-8 rounded-[2rem] border
border-slate-200 bg-white p-6 shadow-sm md:grid-cols-2 md:p-10">
<div className="flex flex-col justify-between rounded-3xl bg-indigo-600 p-8
text-white">
<div>
31
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
</div>
<button
type="submit"
disabled={loading}
className="w-full rounded-xl bg-indigo-600 px-4 py-3 text-sm font-bold
text-white transition-colors hover:bg-indigo-700 disabled:opacity-70"
>
{loading ? 'Signing In...' : 'Sign In'}
</button>
</form>
Register Page
if (authError) {
setError([Link])
setLoading(false)
return
}
if ([Link]) navigate('/login')
setLoading(false)
}
return (
<div className="min-h-screen px-6 py-10">
<div className="mx-auto grid w-full max-w-5xl gap-8 rounded-[2rem] border
border-slate-200 bg-white p-6 shadow-sm md:grid-cols-2 md:p-10">
<div className="flex flex-col justify-between rounded-3xl bg-indigo-600 p-8
text-white">
<div>
<p className="text-xs font-bold uppercase tracking-[0.2em] text-indigo-
200">Get Started</p>
<h1 className="mt-4 text-4xl font-black leading-tight">Build your learner
profile.</h1>
<p className="mt-4 text-sm text-indigo-100">
Join roadmap-based learning with level unlocks and curated resources.
34
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
</p>
</div>
<p className="mt-12 text-sm text-indigo-200">CodePal Learning
Platform</p>
</div>
minLength={6}
required
value={password}
onChange={(event) => setPassword([Link])}
className="w-full rounded-xl border border-slate-200 bg-white px-4 py-3
outline-none focus:border-indigo-400"
placeholder="Minimum 6 characters"
/>
</div>
<button
type="submit"
disabled={loading}
className="w-full rounded-xl bg-indigo-600 px-4 py-3 text-sm font-bold
text-white transition-colors hover:bg-indigo-700 disabled:opacity-70"
>
{loading ? 'Creating Account...' : 'Create Account'}
</button>
</form>
36
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
useEffect(() => {
let mounted = true
const {
data: { subscription },
} = [Link]((event, session) => {
if (event === 'PASSWORD_RECOVERY' || event === 'SIGNED_IN') {
setHasRecoverySession(Boolean(session))
}
})
return () => {
mounted = false
[Link]()
}
}, [])
if (resetError) {
setError([Link])
} else {
setMessage('Password reset email sent. Open the link in your inbox to continue.')
37
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
setLoading(false)
}
if ([Link] < 6) {
setError('Password must be at least 6 characters.')
setLoading(false)
return
}
if (updateError) {
setError([Link])
setLoading(false)
return
}
return (
<div className="min-h-screen px-6 py-10">
<div className="mx-auto w-full max-w-xl rounded-[2rem] border border-slate-
200 bg-white p-8 shadow-sm">
<h1 className="text-3xl font-black text-slate-900">Reset Password</h1>
<p className="mt-2 text-sm text-slate-500">
{hasRecoverySession
? 'Set your new password below.'
: 'Enter your email and we will send you a password reset link.'}
38
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
</p>
{error && (
<p className="mt-4 rounded-xl border border-red-200 bg-red-50 px-4 py-3
text-sm text-red-700">
{error}
</p>
)}
{message && (
<p className="mt-4 rounded-xl border border-green-200 bg-green-50 px-4 py-
3 text-sm text-green-700">
{message}
</p>
)}
{!hasRecoverySession ? (
<form onSubmit={sendResetEmail} className="mt-5 space-y-3">
<div>
<label className="mb-1 block text-sm font-semibold text-slate-
700">Email</label>
<input
type="email"
required
value={email}
onChange={(event) => setEmail([Link])}
className="w-full rounded-xl border border-slate-200 bg-white px-4 py-3
outline-none focus:border-indigo-400"
placeholder="you@[Link]"
/>
</div>
<button
type="submit"
disabled={loading}
className="w-full rounded-xl bg-indigo-600 px-4 py-3 text-sm font-bold
text-white transition-colors hover:bg-indigo-700 disabled:opacity-70"
>
{loading ? 'Sending...' : 'Send Reset Link'}
</button>
</form>
):(
<form onSubmit={updatePassword} className="mt-5 space-y-3">
<div>
<label className="mb-1 block text-sm font-semibold text-slate-700">New
Password</label>
<input
39
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
type="password"
minLength={6}
required
value={password}
onChange={(event) => setPassword([Link])}
className="w-full rounded-xl border border-slate-200 bg-white px-4 py-3
outline-none focus:border-indigo-400"
placeholder="Minimum 6 characters"
/>
</div>
<div>
<label className="mb-1 block text-sm font-semibold text-slate-
700">Confirm Password</label>
<input
type="password"
minLength={6}
required
value={confirmPassword}
onChange={(event) => setConfirmPassword([Link])}
className="w-full rounded-xl border border-slate-200 bg-white px-4 py-3
outline-none focus:border-indigo-400"
placeholder="Re-enter password"
/>
</div>
<button
type="submit"
disabled={loading}
className="w-full rounded-xl bg-indigo-600 px-4 py-3 text-sm font-bold
text-white transition-colors hover:bg-indigo-700 disabled:opacity-70"
>
{loading ? 'Updating...' : 'Update Password'}
</button>
</form>
)}
Roadmap View
useEffect(() => {
if (!slug || !user?.id) return
fetchModules(slug, [Link])
}, [slug, user?.id, fetchModules])
[Link]),
[currentModules],
)
if (!categoryDetails) {
return (
<div className="min-h-screen">
<TopNav active="dashboard" xp={0} />
<div className="mx-auto max-w-3xl px-6 pb-20 pt-32">
<button
type="button"
onClick={() => navigate('/dashboard')}
className="text-sm font-bold text-indigo-600"
>
Back to Dashboard
</button>
<p className="mt-3 text-sm text-red-700">Roadmap not found.</p>
</div>
</div>
)
}
return (
<div className="min-h-screen">
<TopNav active="dashboard" xp={xp} />
Back to Dashboard
</button>
return (
<div
key={[Link]}
className={`flex items-center gap-6 md:gap-10 ${isRight ? 'md:flex-
row-reverse' : 'md:flex-row'}`}
>
43
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Resource
</a>
)}
</div>
</div>
</div>
<div
className={`level-node ${state} z-10 flex h-16 w-16 shrink-0 items-
center justify-center rounded-full border-4 text-xl font-black md:h-20 md:w-20`}
>
{[Link] ? <Check className="h-6 w-6" /> : state ===
'locked' ? <Lock className="h-6 w-6" /> : index + 1}
</div>
{showFinalQuizNode && (
<div className="flex items-center gap-6 md:gap-10 md:flex-row">
<div className="w-full pl-4 md:flex-1 md:pl-0">
<div className={`rounded-3xl border border-slate-200 bg-white p-6
shadow-sm ${!finalQuizConfigured ? 'opacity-80' : ''}`}>
<h4 className="text-lg font-black text-slate-800">Final Quiz</h4>
<p className="text-xs text-slate-400">Complete the final MCQ
assessment for this roadmap.</p>
<div
className={`level-node ${finalQuizPassed ? 'completed' : 'current'} z-10
flex h-16 w-16 shrink-0 items-center justify-center rounded-full border-4 text-xl font-
black md:h-20 md:w-20`}
>
{finalQuizPassed ? <Check className="h-6 w-6" /> :
[Link] + 1}
</div>
Admin panel
GraduationCap,
Plus,
Save,
Search,
Trash2,
} from 'lucide-react'
import TopNav from '../components/TopNav'
import { useRoadmapStore } from '../store/roadmapStore'
const categoryIconOptions = [
{ value: '', label: 'Auto (by roadmap type)' },
{ value: 'server', label: 'Server' },
{ value: 'laptop', label: 'Laptop' },
{ value: 'brain', label: 'Brain' },
{ value: 'code', label: 'Code' },
{ value: 'database', label: 'Database' },
{ value: 'gamepad', label: 'Gamepad' },
{ value: 'globe', label: 'Globe' },
]
function AdminPanel() {
const s = useRoadmapStore()
const {
47
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
required.' })
run(() => [Link] ? updateCategory(categoryForm) :
createCategory(categoryForm), 'Roadmap saved.')
}
setBusy(true); setMsg(null)
try {
const iconUrl = await uploadCategoryIcon({ categoryId: [Link], file:
categoryIconFile })
if (!iconUrl) throw new Error('Could not generate icon URL.')
setCategoryForm((v) => ({ ...v, icon_url: iconUrl }))
setCategoryIconFile(null)
setMsg({ t: 'ok', m: 'Icon uploaded. Click Save to apply it to this roadmap.' })
} catch (e) {
setMsg({ t: 'err', m: [Link] || 'Icon upload failed.' })
} finally {
setBusy(false)
}
}
50
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
return (
<div className="min-h-screen bg-slate-50/60">
<TopNav active="admin" xp={(adminStats?.totalCompletions || 0) * 10} />
<main className="mx-auto max-w-7xl px-4 pb-20 pt-28 sm:px-6">
<h1 className="mb-2 text-3xl font-black">Admin Console</h1>
<p className="mb-6 text-slate-500">Content Studio + User Management with
full existing actions.</p>
{msg && <div className={`mb-4 rounded-xl border px-4 py-2 text-sm ${msg.t
=== 'ok' ? 'border-emerald-200 bg-emerald-50 text-emerald-700' : 'border-red-200 bg-
red-50 text-red-700'}`}>{msg.m}</div>}
{(adminLoading || error) && <div className="mb-4 rounded-xl border border-
slate-200 bg-white px-4 py-2 text-sm">{adminLoading ? 'Loading admin data...' :
error}</div>}
row">
<aside className="w-full border-b border-slate-200 bg-slate-50 p-4 md:w-
80 md:border-b-0 md:border-r">
<div className="mb-3 flex items-center justify-between">
<h3 className="text-xs font-black uppercase tracking-wide text-slate-
500">Content Tree</h3>
<button onClick={() => run(() => createCategory({ name: `New Roadmap
${[Link] + 1}`, description: '', icon_name: '', icon_url: '', icon_size:
56 }), 'Roadmap created.')} className="rounded p-1 hover:bg-slate-200"><Plus
className="h-4 w-4" /></button>
</div>
<div className="space-y-2 overflow-y-auto pr-1 md:max-h-[calc(100vh-
390px)]">
{[Link]((c) => (
<div key={[Link]}>
<button className={`flex w-full items-center justify-between rounded-
lg px-2 py-2 text-left text-sm font-bold ${selected?.type === 'category' &&
[Link] === [Link] ? 'bg-indigo-100 text-indigo-700' : 'hover:bg-slate-200'}`}
onClick={() => setSelected({ type: 'category', id: [Link] })}>
<span className="flex min-w-0 items-center gap-2">
<span onClick={(e) => { [Link](); setExpanded((v) =>
({ ...v, [[Link]]: !v[[Link]] })) }}>{expanded[[Link]] ? <ChevronDown className="h-4 w-4
opacity-60" /> : <ChevronRight className="h-4 w-4 opacity-60" />}</span>
{expanded[[Link]] ? <FolderOpen className="h-4 w-4 shrink-0" /> :
<Folder className="h-4 w-4 shrink-0" />}
<span className="truncate">{[Link]}</span>
{c.is_foundation_course && (
<span className="rounded-full bg-indigo-100 px-2 py-0.5 text-
[9px] font-black uppercase tracking-widest text-indigo-700">
Foundation
</span>
)}
</span>
<span onClick={(e) => { [Link](); run(() =>
createModule({ category_id: [Link], title: `New Module ${[Link] + 1}`,
position: [Link] + 1, description: '', module_content: '', difficulty: 'easy',
quiz_question: '', quiz_options: ['', '', '', ''], quiz_correct_option: 0, video_url: '',
resource_url: '' }), 'Module created.') }} className="rounded p-1 text-indigo-600
hover:bg-indigo-200"><Plus className="h-3.5 w-3.5" /></span>
</button>
{expanded[[Link]] && <div className="ml-4 mt-1 space-y-1 border-l
border-slate-200 pl-3">
{[Link]((m) => <button key={[Link]} onClick={() =>
setSelected({ type: 'module', id: [Link] })} className={`flex w-full items-center gap-2
rounded-lg border px-2 py-2 text-left text-xs ${selected?.type === 'module' &&
52
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
{[Link]((option) => (
<option key={[Link] || 'auto'} value={[Link]}>
{[Link]}
</option>
))}
</select>
</label>
<div className="space-y-2 rounded-xl border border-slate-200 bg-slate-
50 p-4">
<p className="text-sm font-bold text-slate-900">Upload Custom
Icon</p>
<div className="flex flex-col gap-2 sm:flex-row sm:items-center">
<input
type="file"
accept="image/png,image/jpeg,image/webp,image/svg+xml"
onChange={(e) => setCategoryIconFile([Link]?.[0] ?? null)}
className="w-full rounded-lg border border-slate-200 bg-white px-3
py-2 text-xs text-slate-700 sm:flex-1"
/>
<button
type="button"
onClick={uploadCategoryIconFile}
disabled={busy}
className="rounded-lg border border-indigo-200 px-3 py-2 text-xs
font-bold text-indigo-700"
>
Upload
</button>
<button
type="button"
onClick={() => { setCategoryForm((v) => ({ ...v, icon_url: '' }));
setCategoryIconFile(null) }}
className="rounded-lg border border-slate-200 px-3 py-2 text-xs
font-bold text-slate-700"
>
Remove
</button>
</div>
{categoryForm.icon_url && (
<div className="inline-flex items-center gap-3 rounded-lg border
border-slate-200 bg-white px-3 py-2">
<img src={categoryForm.icon_url} alt="Roadmap icon preview"
className="h-10 w-10 rounded object-cover" />
<span className="text-xs text-slate-500">Uploaded icon ready.
Save roadmap to persist.</span>
54
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
</div>
)}
</div>
<label className="block space-y-2">
<span className="text-sm font-bold text-slate-900">Icon Size
(px)</span>
<input
type="number"
min="24"
max="120"
value={categoryForm.icon_size}
onChange={(e) =>
setCategoryForm((v) => ({
...v,
icon_size: [Link](24, [Link](120, Number([Link]) ||
56)),
}))
}
className="w-full rounded-xl border border-slate-200 bg-white px-4
py-3 text-sm"
/>
</label>
<label className="flex items-start gap-3 rounded-xl border border-slate-
200 bg-slate-50 px-4 py-3">
<input
type="checkbox"
checked={Boolean(categoryForm.is_foundation_course)}
onChange={(e) => setCategoryForm((v) => ({ ...v,
is_foundation_course: [Link] }))}
className="mt-0.5 h-4 w-4 rounded border-slate-300 text-indigo-600
focus:ring-indigo-500"
/>
<span>
<span className="block text-sm font-bold text-slate-
900">Foundation Course</span>
<span className="block text-xs text-slate-500">
Learners must complete all foundation courses before other roadmaps
unlock.
</span>
</span>
</label>
<button disabled={busy} className="inline-flex items-center gap-2
rounded-xl bg-indigo-600 px-5 py-2.5 text-sm font-bold text-white"><Save
className="h-4 w-4" /> Save</button>
</form>
55
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
)}
</div>
</form>
<div className="space-y-2">
{[Link]((q) => (
<div key={[Link]} className="rounded-xl border border-slate-200 bg-
white p-4">
<div className="flex items-center justify-between">
<p className="font-bold">{[Link]}. {[Link]}</p>
<div className="flex gap-2">
<button
onClick={() => {
const question = [Link]('Edit question', [Link])
if (!question) return
const options = fill4([Link]).map((opt, idx) => (
[Link](`Option ${idx + 1}`, opt) ?? opt
))
const correct = Number([Link]('Correct option index
(0-3)', String(q.correct_option)) ?? q.correct_option)
const position = Number([Link]('Position',
String([Link])) ?? [Link])
run(
() => updateFinalQuestion({
id: [Link],
question,
options,
correct_option: [Link](0, [Link](3,
[Link](correct) ? q.correct_option : correct)),
position: [Link](position) ? [Link] : position,
}),
'Question updated.',
)
}}
className="rounded border border-slate-200 px-2 py-1 text-xs"
>
Edit
</button>
<button
onClick={() => [Link]('Delete question?') && run(()
=> deleteFinalQuestion([Link]), 'Question deleted.')}
className="rounded border border-red-200 px-2 py-1 text-xs
text-red-700"
>
<Trash2 className="h-3 w-3" />
</button>
</div>
58
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
</div>
</div>
))}
</div>
</div>
)}
</div>
</div>
</section>
):(
<section className="rounded-[2rem] border border-slate-200 bg-white p-5
shadow-sm sm:p-8">
<div className="mb-5 flex flex-col gap-3 sm:flex-row sm:items-center
sm:justify-between">
<h3 className="text-xl font-black">Registered Learners</h3>
<div className="flex w-full items-center gap-2 rounded-xl border border-
slate-200 bg-slate-50 px-3 py-2 sm:w-72"><Search className="h-4 w-4 text-slate-
400" /><input value={search} onChange={(e) => setSearch([Link])}
className="w-full bg-transparent text-sm outline-none" placeholder="Search
users" /></div>
</div>
<div className="overflow-x-auto rounded-xl border border-slate-100">
<table className="w-full whitespace-nowrap text-left text-sm">
<thead className="border-b border-slate-100 bg-slate-50 text-xs uppercase
tracking-wide text-slate-500"><tr><th className="px-4 py-3">User</th><th
className="px-4 py-3">Completed</th><th className="px-4 py-3">Reset</th><th
className="px-4 py-3 text-right">Delete</th></tr></thead>
<tbody className="divide-y divide-slate-100">
{[Link]((u) => <tr key={[Link]}><td className="px-4 py-3"><p
className="font-bold">{u.full_name || 'Unnamed User'}</p><p className="text-xs
text-slate-500">{[Link] || 'No email'}</p></td><td className="px-4 py-3 font-bold
text-indigo-600">{[Link]}</td><td className="px-4 py-3"><div
className="flex items-center gap-2"><select value={selectedUserId === [Link] ?
selectedCategoryId : 'all'} onChange={(e) => { setSelectedUserId([Link]);
setSelectedCategoryId([Link]) }} className="rounded border border-slate-
200 px-2 py-1 text-xs"><option value="all">All</option>{[Link]((c)
=> <option key={[Link]} value={[Link]}>{[Link]}</option>)}</select><button
onClick={() => run(() => resetUserProgressByAdmin({ userId: [Link], categoryId:
selectedUserId === [Link] && selectedCategoryId !== 'all' ? selectedCategoryId :
null }), 'Progress reset.')} className="rounded border border-amber-200 px-2 py-1
text-xs text-amber-700">Reset</button></div></td><td className="px-4 py-3 text-
right"><button onClick={() => [Link](`Delete ${[Link] || [Link]}?`) &&
59
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Dash Board
const iconLibrary = {
server: { icon: Server, classes: 'bg-emerald-50 text-emerald-600' },
laptop: { icon: Laptop2, classes: 'bg-blue-50 text-blue-600' },
brain: { icon: Brain, classes: 'bg-amber-50 text-amber-600' },
code: { icon: Code2, classes: 'bg-violet-50 text-violet-600' },
database: { icon: Database, classes: 'bg-cyan-50 text-cyan-600' },
gamepad: { icon: Gamepad2, classes: 'bg-rose-50 text-rose-600' },
globe: { icon: Globe2, classes: 'bg-teal-50 text-teal-600' },
}
const fallbackIconBySlug = {
html: 'laptop',
css: 'laptop',
javascript: 'code',
python: 'brain',
}
60
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
useEffect(() => {
if (!user?.id) return
fetchCategories([Link])
}, [fetchCategories, user?.id])
return (
<div className="min-h-screen">
<TopNav active="dashboard" xp={xp} />
{loading ? (
<p className="text-sm text-slate-500">Loading roadmap categories...</p>
):(
<div className="grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3">
{[Link]((category) => {
const iconKey = category.icon_name || fallbackIconBySlug[[Link]] ||
'server'
const iconConfig = iconLibrary[iconKey] || [Link]
const Icon = [Link]
const hasCustomIcon = Boolean(category.icon_url)
const iconSize = [Link](24, [Link](120, Number(category.icon_size) ||
56))
return (
61
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
<button
key={[Link]}
type="button"
onClick={() => {
if ([Link]) return
navigate(`/roadmap/${[Link]}`)
}}
className={`group rounded-[2.5rem] border bg-white p-8 text-left
transition-all ${
[Link]
? 'cursor-not-allowed border-slate-200 opacity-70'
: 'border-slate-200 hover:border-indigo-400 hover:shadow-2xl
hover:shadow-indigo-500/10'
}`}
>
<div
className={`mb-6 flex h-14 w-14 items-center justify-center overflow-
hidden rounded-2xl text-xl ${
hasCustomIcon ? 'border border-slate-200 bg-white' :
[Link]
}`}
style={{ width: `${iconSize}px`, height: `${iconSize}px` }}
>
{hasCustomIcon ? (
<img
src={category.icon_url}
alt={`${[Link]} icon`}
className="h-full w-full object-cover"
/>
):(
<Icon className="h-6 w-6" />
)}
</div>
{[Link]
? 'Complete the required foundation course(s) to unlock this course.'
: [Link] || 'Master this roadmap through guided modules
and levels.'}
</p>
{[Link] && (
<div className="mb-4 inline-flex items-center gap-2 rounded-full bg-
slate-100 px-3 py-1.5 text-xs font-bold text-slate-600">
<Lock className="h-3.5 w-3.5" />
Locked
</div>
)}
<div className="space-y-3">
<div className="flex justify-between text-[10px] font-black uppercase
tracking-widest text-slate-400">
<span>Progress</span>
<span
className="text-indigo-600">{[Link]}%</span>
</div>
<div className="h-3 w-full overflow-hidden rounded-full bg-slate-
100">
<div
className="h-full rounded-full bg-indigo-600"
style={{ width: `${[Link]}%` }}
/>
</div>
</div>
</button>
)
})}
</div>
)}
</section>
</div>
)
}
Module page
63
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
[Link]((line) => {
const trimmed = [Link]()
64
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
if (!trimmed) {
flushList()
flushParagraph()
return
}
if ([Link]('### ')) {
flushList()
flushParagraph()
[Link](
<h3 key={`h3-${[Link]}`} className="mb-3 mt-6 text-lg font-black
text-slate-900">
{[Link](4)}
</h3>,
)
return
}
if ([Link]('## ')) {
flushList()
flushParagraph()
[Link](
<h2 key={`h2-${[Link]}`} className="mb-3 mt-7 text-2xl font-black
text-slate-900">
{[Link](3)}
</h2>,
)
return
}
if ([Link]('# ')) {
flushList()
flushParagraph()
[Link](
<h1 key={`h1-${[Link]}`} className="mb-4 mt-8 text-3xl font-black
text-slate-900">
{[Link](2)}
</h1>,
)
return
}
if ([Link]('- ')) {
flushParagraph()
[Link]([Link](2))
65
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
return
}
flushList()
[Link](trimmed)
})
flushList()
flushParagraph()
return elements
}
try {
const parsed = new [Link]().parseFromString(trimmed, 'text/html')
return [Link]?.innerHTML || trimmed
} catch {
return trimmed
}
}
useEffect(() => {
if (!slug || !user?.id) return
66
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
fetchModules(slug, [Link])
}, [slug, user?.id, fetchModules])
setSubmitting(true)
setSubmitError('')
setSubmitMessage('')
try {
const passed = await submitModuleQuiz({
moduleId: [Link],
selectedOption,
})
if (passed) {
setSubmitMessage('Correct answer. Module completed and next module
unlocked.')
} else {
setSubmitError('Incorrect answer. Review the module content and try again.')
}
67
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
if (!module) {
return (
<div className="min-h-screen">
<TopNav active="dashboard" xp={0} />
<div className="mx-auto max-w-4xl px-4 pb-16 pt-24 sm:px-6 sm:pb-20
sm:pt-32">
<button
type="button"
onClick={() => navigate(`/roadmap/${slug}`)}
className="text-sm font-bold text-indigo-600"
>
Back to Roadmap
</button>
<p className="mt-3 text-sm text-red-700">Module not found.</p>
</div>
</div>
)
}
return (
<div className="min-h-screen">
<TopNav active="dashboard" xp={xp} />
{categoryDetails?.is_foundation_course && (
<span className="mt-3 inline-flex rounded-full bg-indigo-100 px-3 py-1
text-[10px] font-black uppercase tracking-widest text-indigo-700">
Foundation
</span>
)}
</div>
{[Link] && (
<span className="inline-flex items-center gap-1 rounded-full bg-green-100
px-3 py-1 text-xs font-bold text-green-700">
<CheckCircle2 className="h-4 w-4" />
Completed
</span>
)}
</div>
{!categoryLocked && (
<div className="mb-6 flex flex-wrap items-center gap-2 sm:mb-8 sm:gap-3">
{module.video_url && (
<a
href={module.video_url}
target="_blank"
rel="noreferrer"
className="inline-flex items-center gap-1 rounded-full bg-indigo-50 px-3
py-2 text-xs font-bold text-indigo-700 sm:px-4"
>
<PlayCircle className="h-4 w-4" />
Watch Video
</a>
)}
{module.resource_url && (
<a
href={module.resource_url}
target="_blank"
rel="noreferrer"
className="inline-flex items-center gap-1 rounded-full bg-slate-100 px-3
py-2 text-xs font-bold text-slate-700 sm:px-4"
>
<ExternalLink className="h-4 w-4" />
Open Resource
</a>
)}
</div>
)}
70
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
{categoryLocked ? (
<p className="rounded-xl border border-amber-200 bg-amber-50 px-4 py-3
text-sm text-amber-700">
Complete the required foundation course(s) to unlock this course.
</p>
):(
<>
<article className="mb-8">
{sanitizedHtml ? (
<div
className="module-html prose max-w-none prose-headings:font-black
prose-headings:text-slate-900 prose-p:text-slate-700 prose-li:text-slate-700 prose-
a:text-indigo-600"
dangerouslySetInnerHTML={{ __html: sanitizedHtml }}
/>
) : articleContent ? (
<div>{renderBlogContent(articleContent)}</div>
):(
<p className="text-[15px] leading-7 text-slate-700">
{[Link] || 'No article content yet for this module.'}
</p>
)}
</article>
{locked ? (
<p className="rounded-xl border border-amber-200 bg-amber-50 px-4 py-3
text-sm text-amber-700">
This module is locked. Complete previous modules first.
</p>
):(
<div className="rounded-2xl border border-slate-200 bg-slate-50 p-4 sm:p-
6">
<h2 className="text-lg font-black text-slate-900">Module Quiz</h2>
{submitError && (
<p className="mt-4 rounded-xl border border-red-200 bg-red-50 px-4
py-3 text-sm text-red-700">
{submitError}
</p>
)}
{submitMessage && (
<p className="mt-4 rounded-xl border border-green-200 bg-green-50 px-
4 py-3 text-sm text-green-700">
{submitMessage}
</p>
)}
{error && (
<p className="mt-4 rounded-xl border border-red-200 bg-red-50 px-4
py-3 text-sm text-red-700">
{error}
</p>
)}
{![Link] && (
<button
type="button"
onClick={onSubmitQuiz}
disabled={!canSubmitQuiz || submitting}
className="mt-5 w-full rounded-xl bg-indigo-600 px-5 py-3 text-sm
font-bold text-white disabled:cursor-not-allowed disabled:opacity-60 sm:w-auto"
>
{submitting ? 'Submitting...' : 'Submit Quiz'}
</button>
)}
72
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
</>
)}
</div>
)}
</>
)}
</section>
</div>
)
}
Landing Page
<div className="flex">
<Link
to="/dashboard"
className="rounded-2xl bg-indigo-600 px-10 py-5 text-lg font-bold text-white
shadow-xl shadow-indigo-200 transition-all hover:-translate-y-1 hover:bg-indigo-
700"
>
Start Learning Free
</Link>
</div>
</section>
)
}
fetchModules,
fetchFinalAssessmentQuestions,
submitFinalAssessment,
} = useRoadmapStore()
const [questions, setQuestions] = useState([])
const [answers, setAnswers] = useState([])
const [loading, setLoading] = useState(true)
const [submitting, setSubmitting] = useState(false)
const [error, setError] = useState('')
const [message, setMessage] = useState('')
useEffect(() => {
const load = async () => {
if (!slug || !user?.id) return
setLoading(true)
setError('')
try {
await fetchModules(slug, [Link])
} catch (err) {
setError([Link] || 'Failed to load roadmap.')
} finally {
setLoading(false)
}
}
load()
}, [slug, user?.id, fetchModules])
useEffect(() => {
const loadQuestions = async () => {
if (!categoryDetails?.id || !finalModuleCompleted) return
setLoading(true)
setError('')
try {
const items = await fetchFinalAssessmentQuestions([Link])
setQuestions(items)
setAnswers([Link]({ length: [Link] }, () => -1))
} catch (err) {
setError([Link] || 'Failed to load assessment.')
} finally {
setLoading(false)
75
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
}
}
loadQuestions()
}, [categoryDetails?.id, finalModuleCompleted, fetchFinalAssessmentQuestions])
setSubmitting(true)
setError('')
setMessage('')
try {
const passed = await submitFinalAssessment({
categoryId: [Link],
answers,
})
if (passed) {
setMessage('Final assessment passed. Great job!')
} else {
setError('Final assessment not passed. Review and try again.')
}
} catch (err) {
setError([Link] || 'Unable to submit final assessment.')
} finally {
setSubmitting(false)
}
}
if (loading) {
return (
<div className="min-h-screen">
<TopNav active="dashboard" xp={xp} />
<div className="mx-auto max-w-4xl px-4 pb-16 pt-24 sm:px-6 sm:pb-20
sm:pt-32">
<p className="text-sm text-slate-500">Loading final assessment...</p>
</div>
</div>
76
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
)
}
return (
<div className="min-h-screen">
<TopNav active="dashboard" xp={xp} />
<button
type="button"
onClick={onSubmit}
disabled={submitting}
className="w-full rounded-xl bg-indigo-600 px-5 py-3 text-sm font-bold
text-white hover:bg-indigo-700 disabled:opacity-60 sm:w-auto"
>
78
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
{error && (
<p className="mt-4 rounded-xl border border-red-200 bg-red-50 px-4 py-3
text-sm text-red-700">
{error}
</p>
)}
{message && (
<p className="mt-4 rounded-xl border border-green-200 bg-green-50 px-4 py-
3 text-sm text-green-700">
{message}
</p>
)}
</section>
</div>
)
}
79
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CHAPTER 6
TESTING
For the CodePal Programming Learning Platform, different testing methods were
used to verify that the system operates correctly and provides a reliable learning
experience for users. The testing process ensures that each component of the system
performs as expected and that all modules work together properly.
Unit Testing
Integration Testing
System Testing
Each testing method focuses on different aspects of the system to ensure overall
system reliability and performance.
---
In the CodePal platform, unit testing was performed on different components of the
system such as:
Each module was tested independently to ensure that it produces the expected results.
The user registration functionality was tested to ensure that new users can
successfully create accounts on the platform. The system verifies user input such as
email and password and stores the data securely in the database.
The system successfully prevented invalid inputs and created user accounts correctly.
The login functionality was tested to ensure that registered users can log in securely
using their credentials. The system verifies user identity through authentication
services provided by the backend.
Incorrect password
Each learning module was tested to ensure that users can access module content
properly. The system checks whether the module is unlocked before allowing access.
The progress tracking functionality was tested to ensure that completed modules are
recorded properly in the database.
The system correctly updated the user's progress after a module was marked as
completed.
Unit testing confirmed that each module of the CodePal system functions
independently and performs its intended task correctly.
---
While unit testing ensures that individual modules work correctly, integration testing
ensures that these modules communicate properly when combined together.
In the CodePal system, integration testing was performed to verify the interaction
between:
82
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Frontend interface
Backend services
Database operations
The frontend application communicates with backend services using APIs. Integration
testing ensured that data requests and responses between the frontend and backend
were functioning correctly.
The system uses a PostgreSQL database to store system data. Integration testing
verified that the database correctly stores and retrieves information.
83
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
1. Registering an account
Testing confirmed that all modules interact correctly during this workflow.
Integration testing confirmed that all system components work together properly. The
frontend, backend, and database communicate effectively, ensuring smooth system
functionality.
---
System testing evaluates the complete system to ensure that it meets all functional and
non-functional requirements.
This type of testing verifies the behavior of the entire system under real
operating conditions.
For the CodePal system, system testing was conducted to ensure that the platform
performs reliably when used by real users.
Functional Testing
84
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Functional testing ensured that all system features operate according to the specified
requirements.
User registration
Login authentication
Category browsing
Module access
Progress tracking
Performance Testing
Performance testing evaluated how the system performs under normal usage
conditions.
Usability Testing
85
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Security Testing
Secure authentication
Password protection
System testing confirmed that the CodePal platform functions correctly and meets all
system requirements.
86
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CHAPTER 7
MAINTENANCE
Software maintenance refers to the process of modifying and improving the system
after it has been deployed. Maintenance ensures that the system continues
to operate efficiently and adapts to new requirements or changes.
Corrective Maintenance
Corrective maintenance involves fixing errors or bugs that may appear after the
system is deployed. Even after thorough testing, some issues may appear during real-
world usage.
Adaptive Maintenance
Examples include:
Perfective Maintenance
This includes:
87
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Preventive Maintenance
Examples include:
Regular maintenance ensures that the CodePal platform remains efficient, secure, and
user-friendly.
88
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CHAPTER 8
CONCLUSION
8.1 Conclusion
Through features such as module unlocking and progress tracking, the system ensures
that learners understand programming concepts step by step. The platform provides a
user-friendly interface that allows beginners to easily access programming content
and track their progress.
The system was developed using modern web technologies including React, Tailwind
CSS, and Supabase. These technologies provide flexibility, scalability, and efficient
performance for the platform.
Testing was conducted at different levels to ensure that the system operates correctly
and meets all functional and non-functional requirements. The testing process
confirmed that the platform performs reliably and provides a smooth user experience.
89
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
Although the CodePal platform currently provides essential learning features, several
improvements can be made in the future to enhance the system further.
Quizzes can be added after each module to evaluate user understanding and reinforce
learning.
Certification System
The platform can provide certificates after completing learning paths or programming
courses.
Discussion Forums
A discussion forum can allow learners to interact with other users, ask questions, and
share knowledge.
Mobile Application
A mobile application version of CodePal can improve accessibility and allow users to
learn programming on mobile devices.
Implementing these features would make the platform more interactive and beneficial
for learners.
90
DEPARTMENT OF COMPUTER ENGINEERING MJPC
MAJOR PROJECT REPORT | 2026 CODEPAL - Interactive Learning Program
CHAPTER 9
BIBILIOGRAPHY
The following references were used during the development of this project and
preparation of the documentation.
91
DEPARTMENT OF COMPUTER ENGINEERING MJPC