This commit is contained in:
imadhigp 2026-07-08 10:54:41 +05:30
parent bd3763233d
commit 1d2790b421
13 changed files with 1063 additions and 177 deletions

View File

@ -0,0 +1,91 @@
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class AuthController extends Controller
{
/**
* Handle Student Registration (POST)
*/
public function register(Request $request)
{
$request->validate([
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'phone' => 'required|string|max:15',
'password' => 'required|string|min:8|confirmed',
]);
$user = User::create([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'email' => $request->email,
'phone' => $request->phone,
'password' => Hash::make($request->password),
]);
// Automatically logs the new user in
Auth::login($user);
// FIX: Changed redirect from '/signin' to '/' because they are already logged in
return redirect('/')->with('success', 'Registration successful! Welcome to your dashboard.');
}
/**
* Handle Student Login (POST)
*/
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required|string',
]);
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended('/')->with('success', 'Welcome back!');
}
return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
])->onlyInput('email');
}
/**
* Handle Async Logout (POST Fetch)
*/
public function logout(Request $request) // FIX: Restored Request injection
{
try {
if (Auth::check()) {
Auth::logout();
}
// Flush old fallback explicit keys
$request->session()->forget(['user_id', 'user_name']);
if ($request->session()->isStarted()) {
$request->session()->invalidate();
$request->session()->regenerateToken();
}
return response()->json(['success' => true]);
} catch (\Exception $e) {
Log::error('Logout Server Error: ' . $e->getMessage());
if (isset($_SESSION)) {
session_destroy();
}
return response()->json(['success' => true, 'forced' => true]);
}
}
}

View File

@ -19,10 +19,12 @@ class User extends Authenticatable
* @var list<string>
*/
protected $fillable = [
'name',
'first_name',
'last_name',
'email',
'phone',
'password',
];
];
/**
* The attributes that should be hidden for serialization.

View File

@ -13,8 +13,10 @@ return new class extends Migration
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('first_name');
$table->string('last_name');
$table->string('email')->unique();
$table->string('phone');
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();

View File

@ -163,9 +163,12 @@ Industry-recognized certifications to boost your career.
Join our institute and become a skilled automotive professional.
</p>
<a href="# class="btn btn-dark mt-2">
Student Portal
</a>
<div style="display: flex; justify-content:center; width: 100%; ">
<a href="/courses" class="bg-gray-100 hover:bg-gray-200 text-gray-700 px-4 py-2 rounded-full text-sm font-medium transition" style="color:#5E244E">
Apply Courses
</a>
</div>
</section>

View File

@ -46,7 +46,7 @@
}
.form-header {
background: var(--primary);
background: #887582;
color: white;
padding: 25px 40px;
}
@ -57,7 +57,7 @@
}
.section-title {
background: #0B3B70;
background: #887582;
color: white;
padding: 14px 20px;
margin-top: 40px;
@ -138,6 +138,18 @@
<input type="text" name="nationality" class="form-control">
</div>
<div class="col-md-6 mb-4">
<label class="form-label">Address <span class="required">*</span></label>
<input type="text" name="address" class="form-control" required>
</div>
<div class="col-md-6 mb-4">
<label class="form-label">First Name <span class="required">*</span></label>
<input type="text" name="State" class="form-control" required>
</div>
<div class="col-md-6 mb-4">
<label class="form-label">Gender</label>
<select name="gender" class="form-select">
@ -152,6 +164,7 @@
<label class="form-label">Date of Birth</label>
<input type="date" name="dob" class="form-control">
</div>
</div>
<div class="section-title">
@ -159,13 +172,36 @@
</div>
<div class="row">
<div class="col-md-6 mb-4">
<label class="form-label">Contact Number <span class="required">*</span></label>
<input type="mobile" name="mobile" class="form-control" required>
</div>
<div class="col-md-6 mb-4">
<label class="form-label">Alternative Contact Number<span class="required">*</span></label>
<input type="mobile2" name="mobile2" class="form-control" required>
</div>
<div class="col-md-6 mb-4">
<label class="form-label">Email Address <span class="required">*</span></label>
<input type="email" name="email" class="form-control" required>
</div>
<div class="col-md-6 mb-4">
<label class="form-label">Preferred contact method </label>
<select name="gender" class="form-select">
<option selected disabled>Select Your Option</option>
<option value="Male">Email</option>
<option value="Female">Phone</option>
<option value="Female">Sms</option>
</select>
</div>
</div>
<div class="section-title">
<!-- <div class="section-title">
<i class="fa-solid fa-language me-2"></i> Language and Diversity
</div>
@ -185,18 +221,35 @@
<label class="form-label">Disability <span class="required">*</span></label>
<input type="text" name="Disability" class="form-control" required>
</div>
</div> -->
<div class="section-title">
<i class="fa-solid fa-graduation-cap me-2"></i> Education
</div>
<div class="col-md-6 mb-4">
<label class="form-label">Still at school?</label>
<select name="gender" class="form-select">
<option selected disabled>Select Your Option</option>
<option value="Male">Yes</option>
<option value="Female">No</option>
</select>
</div>
<div class="section-title">
<i class="fa-solid fa-graduation-cap me-2"></i> Qualifications
</div>
<div class="row">
<div class="col-md-6 mb-4">
<label class="form-label">Education <span class="required">*</span></label>
<input type="text" name="Qualifications" class="form-control" required>
</div>
</div>
<div class="section-title">
<i class="fa-solid fa-phone-flip me-2"></i> Emergency Contacts

View File

@ -40,7 +40,7 @@
.btn-contact{
background:var(--primary);
color:#fff;
border-radius:30px;
/* border-radius:30px; */
padding:10px 30px;
}
@ -153,15 +153,25 @@ Send Message
<section class="pb-5">
<div class="container">
<!-- <iframe
src="https://www.google.com/maps/embed/v1/place?key=YOUR_API_KEY&q=place_id:ChIJXdB3Sy_84joRYNze2w86UjQ"
width="100%"
height="300"
style="border:0;border-radius:15px;"
allowfullscreen=""
loading="lazy">
</iframe> -->
<iframe
src="https://www.google.com/maps/embed?pb=!1m18..."
width="100%"
height="300"
style="border:0;border-radius:15px;"
allowfullscreen=""
loading="lazy">
src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d989.8732851214081!2d80.0435697!3d7.0771955!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3ae2fc2f4b77d05d%3A0x34523a0fdbdedc60!2sGlitz%20Park!5e0!3m2!1sen!2slk!4v1719999999999!5m2!1sen!2slk"
width="100%"
height="300"
style="border:0;border-radius:15px;"
allowfullscreen=""
loading="lazy">
</iframe>
</div>
</section>

View File

@ -11,14 +11,24 @@
--light:#f8f4f7;
}
.hero{
/* .hero{
background:linear-gradient(rgba(0,0,0,.65),rgba(0,0,0,.65)),
url('https://images.unsplash.com/photo-1492144534655-ae79c964c9d7?auto=format&fit=crop&w=1600&q=80');
url(https://images.unsplash.com/photo-1486006920555-c77dce18193b?auto=format&fit=crop&w=1600&q=80);
background-size:cover;
background-position:center;
color:#fff;
padding:120px 0;
text-align:center;
} */
.hero {
background-image: linear-gradient(rgba(135, 125, 145, 0.65), rgba(0, 0, 0, 0.65)),
url('https://images.unsplash.com/photo-1486006920555-c77dce18193b?auto=format&fit=crop&w=1600&q=80');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
color: #fff;
padding: 120px 0;
text-align: center;
}
.hero h1{
@ -50,11 +60,12 @@
}
.badge-course{
background:var(--primary);
background:#887582;
color:#fff;
padding:8px 15px;
border-radius:30px;
font-size:13px;
font-weight:30px;
}
.read-btn{
@ -62,6 +73,7 @@
color:#fff;
border-radius:30px;
padding:10px 25px;
font-weight: 40px;
}
.read-btn:hover{
@ -186,8 +198,8 @@ $courses=[
</div>
<a href="#" class="btn read-btn w-100 mt-4">
View Details
<a href="/apply" class="btn read-btn w-100 mt-4">
Apply Course
</a>
</div>

View File

@ -3,181 +3,243 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@yield('title','Automobile Academic')</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>@yield('title', 'Automobile Academic')</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css">
<style>
body{
font-family:Segoe UI,sans-serif;
background:#f5f7fb;
body {
font-family: 'Segoe UI', sans-serif;
background: #f5f7fb;
padding-top: 80px;
}
.navbar{
background:#5E244E;
.navbar {
background: #5E244E;
z-index: 1000;
position: fixed;
top: 0;
left: 0;
width: 100%;
}
.navbar-brand{
color:white;
font-weight:bold;
font-size:24px;
.navbar-brand {
color: white;
font-weight: bold;
font-size: 24px;
}
.navbar-brand:hover{
color:#ffc107;
.navbar-brand:hover {
color: #ffc107;
}
.nav-link{
color:white !important;
margin-left:20px;
.nav-link {
color: white !important;
margin-left: 20px;
}
.nav-link:hover{
color:#ffc107 !important;
.nav-link:hover {
color: #ffc107 !important;
}
.site-footer{
background:#2F1027;
color:#f1e9ee;
padding:60px 0 30px;
}
.site-footer {
background: #2F1027;
color: #f1e9ee;
padding: 60px 0 30px;
}
.site-footer h4{
color:#fff;
font-weight:700;
margin-bottom:18px;
}
.site-footer h4 {
color: #fff;
font-weight: 700;
margin-bottom: 18px;
}
.site-footer p{
color:#d8c7d3;
line-height:1.6;
}
.site-footer p {
color: #d8c7d3;
line-height: 1.6;
}
.footer-links li{
margin-bottom:10px;
}
.user-dropdown-toggle {
cursor: pointer;
color: white;
display: flex;
align-items: center;
gap: 8px;
user-select: none;
text-decoration: none !important;
}
.footer-links a{
color:#d8c7d3;
text-decoration:none;
transition:.2s;
}
.user-dropdown-toggle:hover {
color: #ffc107;
}
.footer-links a:hover{
color:#FFC107;
padding-left:4px;
}
.user-profile-name {
font-weight: 600;
font-size: 14px;
max-width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.footer-contact li{
margin-bottom:14px;
color:#d8c7d3;
display:flex;
align-items:flex-start;
gap:10px;
}
.footer-links li {
margin-bottom: 10px;
}
.footer-contact i{
color:#FFC107;
margin-top:3px;
}
.footer-links a {
color: #d8c7d3;
text-decoration: none;
transition: .2s;
}
.footer-contact a{
color:#d8c7d3;
text-decoration:none;
}
.footer-links a:hover {
color: #FFC107;
padding-left: 4px;
}
.footer-contact a:hover{
color:#FFC107;
}
.footer-contact li {
margin-bottom: 14px;
color: #d8c7d3;
display: flex;
align-items: flex-start;
gap: 10px;
}
.site-footer hr{
border-color:rgba(255,255,255,.15);
margin:40px 0 20px;
}
.footer-contact i {
color: #FFC107;
margin-top: 3px;
}
.footer-bottom{
color:#b8a6b3;
font-size:14px;
}
.footer-contact a {
color: #d8c7d3;
text-decoration: none;
}
</style>
.footer-contact a:hover {
color: #FFC107;
}
.site-footer hr {
border-color: rgba(255,255,255,.15);
margin: 40px 0 20px;
}
.footer-bottom {
color: #b8a6b3;
font-size: 14px;
}
.animate {
animation-duration: 0.2s;
animation-fill-mode: both;
}
@keyframes slideIn {
0% {
transform: translateY(1rem);
opacity: 0;
}
100% {
transform: translateY(0rem);
opacity: 1;
}
}
.slideIn {
animation-name: slideIn;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg">
<div class="container">
<a class="navbar-brand" href="/">
<i class="fa-solid fa-car-side"></i> AutoEdu
</a>
<div class="container">
<button class="navbar-toggler bg-light"
type="button"
data-bs-toggle="collapse"
data-bs-target="#menu"
aria-controls="menu"
aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="/">
<i class="fa-solid fa-car-side"></i>
AutoEdu
</a>
<div class="collapse navbar-collapse" id="menu">
<ul class="navbar-nav ms-auto mb-2 mb-lg-0 align-items-lg-center">
<li class="nav-item">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/courses">Courses</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/students">Student</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/abouts">About Us</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/contact">Contact</a>
</li>
<button class="navbar-toggler bg-light"
data-bs-toggle="collapse"
data-bs-target="#menu">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="menu">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/courses">Courses</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/students">Student</a>
</li>
<!-- <li class="nav-item">
<a class="nav-link" href="#">Research</a>
</li> -->
<li class="nav-item">
<a class="nav-link" href="/abouts">About Us</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/contact">Contact</a>
</li>
</ul>
</div>
</div>
<li class="nav-item ms-lg-3 mt-3 mt-lg-0">
@if(Auth::check())
@php
$displayName = Auth::user()->first_name . ' ' . Auth::user()->last_name;
@endphp
<div class="dropdown">
<a class="user-dropdown-toggle dropdown-toggle text-white"
href="#"
role="button"
id="userMenu"
data-bs-toggle="dropdown"
aria-expanded="false">
<i class="fa-solid fa-circle-user" style="font-size: 24px;"></i>
<span class="user-profile-name">{{ $displayName }}</span>
</a>
<ul class="dropdown-menu dropdown-menu-end shadow animate slideIn" aria-labelledby="userMenu">
<li>
<a class="dropdown-item" href="/profile">
<i class="fa-solid fa-user me-2"></i> Profile
</a>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<button type="button" onclick="submitLogout()" class="dropdown-item text-danger w-100 text-start border-0 bg-transparent">
<i class="fa-solid fa-right-from-bracket me-2"></i> Logout
</button>
</li>
</ul>
</div>
@else
<div class="d-flex gap-2">
<a href="/signin" class="btn btn-outline-light">Sign In</a>
<a href="/signup" class="btn btn-warning">Register</a>
</div>
@endif
</li>
</ul>
</div>
</div>
</nav>
@yield('content')
<main>
@yield('content')
</main>
<footer class="site-footer" role="contentinfo">
<div class="container">
<div class="row g-4">
<div class="col-md-4">
<h4>Automobile Academic</h4>
<p>
Providing excellence in Automotive Engineering Education,
Innovation and Research.
</p>
<p>Providing excellence in Automotive Engineering Education, Innovation and Research.</p>
</div>
<div class="col-md-4">
@ -209,7 +271,6 @@ data-bs-target="#menu">
</li>
</ul>
</div>
</div>
<hr>
@ -217,12 +278,57 @@ data-bs-target="#menu">
<div class="text-center footer-bottom">
&copy; {{ now()->year }} Automobile Academic Website
</div>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.bundle.min.js"></script>
<script>
function submitLogout() {
const tokenEl = document.querySelector('meta[name="csrf-token"]');
fetch('/custom-logout', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-CSRF-TOKEN': tokenEl ? tokenEl.getAttribute('content') : ''
}
})
.then(res => {
if (!res.ok) {
return res.text().then(text => { throw new Error(text) });
}
return res.json();
})
.then(data => {
if (data.success) {
alert('Logged out successfully!');
// සාර්ථකව Logout වුණාම කෙලින්ම මුල් පිටුවට (Home - /) යවනවා.
// එවිට Auth::check() false වී Sign In / Register බටන් ටික බලාගන්න පුළුවන්.
window.location.href = '/';
} else {
alert('Logout failed. Please try again.');
}
})
.catch(err => {
console.error('Error:', err);
alert('Server side error occurred during logout.');
});
}
function toggleUserDropdown(event) {
event.stopPropagation();
const dropdown = document.getElementById('userDropdownContent');
if (dropdown) {
dropdown.style.display = dropdown.style.display === 'block' ? 'none' : 'block';
}
}
window.addEventListener('click', function () {
const dropdown = document.getElementById('userDropdownContent');
if (dropdown) { dropdown.style.display = 'none'; }
});
</script>
</body>
</html>

View File

@ -0,0 +1,111 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@yield('title', 'Automobile Engineering Academy')</title>
<link rel="icon" type="image/x-icon" href="{{ asset('src/favicon/favicon.ico') }}">
<!-- Bootstrap -->
<link rel="stylesheet" href="{{ asset('src/css/bootstrap/bootstrap.min.css') }}">
<!-- Main CSS -->
<link rel="stylesheet" href="{{ asset('src/css/main/style.css') }}">
<!-- Font Awesome -->
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css">
<!-- Swiper -->
<link rel="stylesheet"
href="https://unpkg.com/swiper/swiper-bundle.min.css" />
@stack('styles')
<style>
html,
body {
height: 100%;
margin: 0;
}
body {
background: #f8f9fa;
}
#home-header {
position: relative !important;
right: 0 !important;
left: 0 !important;
}
</style>
</head>
<body>
@yield('content')
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<!-- Bootstrap -->
<script src="{{ asset('src/js/bootstrap/bootstrap.bundle.min.js') }}"></script>
<!-- Swiper -->
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
<!-- Custom JS -->
<script src="{{ asset('src/js/script.js') }}"></script>
<script src="{{ asset('src/js/toast.js') }}"></script>
<script>
if (document.querySelector(".mySwiper")) {
new Swiper(".mySwiper", {
slidesPerView: 3,
spaceBetween: 30,
slidesPerGroup: 3,
loop: true,
loopFillGroupWithBlank: true,
pagination: {
el: ".swiper-pagination",
clickable: true
},
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev"
},
breakpoints: {
0: {
slidesPerView: 1
},
768: {
slidesPerView: 2
},
992: {
slidesPerView: 3
}
}
});
}
</script>
@stack('scripts')
</body>
</html>

View File

@ -0,0 +1,233 @@
@extends('layouts.blank')
@section('title', 'Student Login')
@push('styles')
<style>
body {
background: #f5f7fb;
}
* {
font-family: 'Arial', Helvetica, sans-serif;
}
/* LEFT PANEL */
.left-panel {
min-height: 100vh;
background: #f8f9fa;
display: flex;
justify-content: center;
align-items: center;
}
.left-panel img {
max-width: 450px;
}
/* RIGHT PANEL */
.right-panel {
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 40px;
}
/* LOGIN BOX */
.box {
width: 100%;
max-width: 500px;
background: #ffffff;
padding: 45px;
border-radius: 18px;
box-shadow: 0 15px 40px rgba(0,0,0,0.12);
}
/* TITLE */
.headline {
text-align: center;
font-size: 32px;
font-weight: 700;
color: #222;
margin-bottom: 35px;
}
/* INPUT */
.input-container {
position: relative;
margin-bottom: 25px;
}
.input-container input {
width: 100%;
height: 50px;
padding: 12px 0;
border: none;
border-bottom: 2px solid #ddd;
background: transparent;
outline: none;
font-size: 16px;
}
.input-container label {
position: absolute;
top: 15px;
left: 0;
color: #744a68;
transition: .3s;
pointer-events: none;
}
/* FLOATING LABEL & VALIDATION STATES */
.input-container input:focus,
.input-container input:valid {
border-bottom-color: #744a68;
}
.input-container input:focus + label,
.input-container input:not(:placeholder-shown) + label {
top: -12px;
font-size: 12px;
color: #744a68;
font-weight: 600;
}
/* FORGOT PASSWORD */
.forgot-link {
color: #744a68;
font-size: 14px;
text-decoration: none;
font-weight: 500;
transition: color 0.2s ease-in-out;
}
.forgot-link:hover {
text-decoration: underline;
color: #5E244E;
}
/* BUTTON */
.btn-primary {
height: 50px;
width: 100%;
font-size: 16px;
font-weight: 600;
background: #5E244E;
border: none;
color: white;
border-radius: 8px;
transition: background 0.2s ease-in-out, transform 0.1s ease;
}
.btn-primary:hover, .btn-primary:focus {
background: #4a1c3e;
color: white;
}
.btn-primary:active {
transform: scale(0.98);
}
/* BOTTOM TEXT */
.dontacc {
text-align: center;
}
.dontacc p {
color: #666;
}
.dontacc a {
color: #744a68;
text-decoration: none;
font-weight: 600;
}
.dontacc a:hover {
text-decoration: underline;
}
/* RESPONSIVE DESIGN */
@media(max-width:991px) {
.left-panel {
display: none !important;
}
.right-panel {
min-height: 100vh;
padding: 20px;
}
.box {
padding: 30px;
}
.headline {
font-size: 28px;
color: #5E244E;
font-weight: bold;
font-family: Arial;
}
}
</style>
@endpush
@section('content')
<div class="container-fluid">
<div class="row min-vh-100">
<!-- <div class="col-lg-6 left-panel">
<div class="text-center">
<img src="{{ asset('images/login-banner.png') }}" class="img-fluid mb-4" alt="Automobile Engineering Academy">
<h2 class="fw-bold">Automobile Engineering Academy</h2>
<p class="text-muted px-5">
Driving Innovation Through Education, Research and Technology.
</p>
</div>
</div> -->
<div class="col-lg-6 right-panel">
<div class="box">
<h2 class="headline">Student Sign In</h2>
<form method="POST" action="{{ url('/signin') }}">
@csrf
<div class="input-container">
<input type="email" name="email" value="{{ old('email') }}" placeholder=" " required>
<label>Email Address</label>
@error('email')
<span class="d-block text-danger mt-1 small">{{ $message }}</span>
@enderror
</div>
<div class="input-container">
<input type="password" name="password" placeholder=" " required>
<label>Password</label>
@error('password')
<span class="d-block text-danger mt-1 small">{{ $message }}</span>
@enderror
</div>
<button type="submit" class="btn btn-primary mb-4">
Sign In
</button>
<div class="d-flex justify-content-end mb-4" style="gap: 10px;padding-top: 10px; padding-left: 190px;">
<a href="{{ url('/password/reset') }}" class="forgot-link">Forgot Password?</a>
</div>
<div class="dontacc" style="padding-top: 10px; " >
<!-- <p class="mb-1">Don't have an account?</p> -->
<a href="{{ url('/signup') }}">Create Student Account</a>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,220 @@
@extends('layouts.blank')
@section('title', 'Student Registration')
@push('styles')
<style>
body {
background: #f5f7fb;
font-family: 'Arial', Helvetica, sans-serif;
}
.left-panel {
min-height: 100vh;
background: #f8f9fa;
}
.right-panel {
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 40px;
}
.box {
width: 50%;
max-width: 520px;
background: #fff;
padding: 40px;
border-radius: 15px;
box-shadow: 0 15px 40px rgba(0, 0, 0, .12);
}
.headline {
font-size: 28px;
color: #5E244E;
font-weight: 700;
font-family: Arial;
text-align: center;
margin-bottom: 30px;
}
/* .headline {
text-align: center;
margin-bottom: 30px;
font-weight: 700;
} */
.input-container {
position: relative;
margin-bottom: 25px;
}
.input-container input {
width: 100%;
border: none;
border-bottom: 2px solid #744a68;
padding: 12px 0 12px 5px;
outline: none;
background: transparent;
font-family: 'Arial', Helvetica, sans-serif;
}
.input-container label {
position: absolute;
left: 5px;
top: 12px;
color: #744a68;
transition: .3s ease all;
pointer-events: none;
background: transparent;
padding: 0 4px;
}
.input-container input:focus {
border-color: #744a68;
}
/* Reliable floating label mechanism via :placeholder-shown */
.input-container input:focus + label,
.input-container input:not(:placeholder-shown) + label {
top: -12px;
font-size: 12px;
color: #744a68;
background: #fff;
}
.btn-primary {
width: 100%;
padding: 12px;
font-weight: 600;
color: #fff;
background:#5E244E;
border: none;
margin-bottom:10px;
}
.dontacc {
text-align: center;
margin-top: 20px;
}
.dontacc a {
text-decoration: none;
font-weight: 600;
color: #5E244E;
}
@media(max-width: 991px) {
.left-panel {
display: none !important;
}
.box {
margin: 20px;
padding: 30px 20px;
}
}
</style>
@endpush
@section('content')
<div class="container-fluid">
<div class="row">
<!-- <div class="col-lg-6 d-none d-lg-flex justify-content-center align-items-center left-panel">
<div class="text-center">
<img src="{{ asset('images/login-banner.png') }}"
class="img-fluid mb-4"
style="max-width:450px;"
alt="Academy">
<h2 class="fw-bold">
Automobile Engineering Academy
</h2>
<p class="text-muted">
Create your student account to apply for courses and manage your enrolment.
</p>
</div>
</div> -->
<div class="col-lg-6 right-panel">
<div class="box">
<h2 class="headline">
Student Registration
</h2>
<form method="POST" action="/signuppage">
@csrf
<div class="input-container">
<input type="text" name="first_name" placeholder=" " required>
<label>First Name</label>
</div>
<div class="input-container">
<input type="text" name="last_name" placeholder=" " required>
<label>Last Name</label>
</div>
<div class="input-container">
<input type="email" name="email" placeholder=" " required>
<label>Email Address</label>
</div>
<div class="input-container">
<input type="text" name="phone" placeholder=" " required>
<label>Mobile Number</label>
</div>
<div class="input-container">
<input type="password" name="password" placeholder=" " required>
<label>Password</label>
</div>
<div class="input-container">
<input type="password" name="password_confirmation" placeholder=" " required>
<label>Confirm Password</label>
</div>
<div class="form-check mb-4" style="gap: 5px; padding-bottom: 10px;">
<input class="form-check-input" type="checkbox" id="agree" required>
<label class="form-check-label" for="agree" >
I agree to the Terms & Conditions
</label>
</div>
<button type="submit" class="btn btn-primary">
Create Account
</button>
<div class="dontacc">
<p class="mt-4 mb-1" >Already have an account?</p>
<a href="{{ url('/signin') }}">
Sign In
</a>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection

View File

@ -80,15 +80,27 @@ body{
font-family: Arial, Helvetica, sans-serif;
}
.hero{
height:700px;
/* .hero{
height:650px;
background:
linear-gradient(rgba(30,10,25,.65),rgba(30,10,25,.65)),
url('https://images.unsplash.com/photo-1503376780353-7e6692767b70?auto=format&fit=crop&w=1600&q=80');
background-size:cover;
url('https://images.unsplash.com/photo-1503376780353-7e6692767b70?auto=format&fit=crop&w=1600&q=80'); */
/* background-size:cover;
background-position:center;
} */
.hero {
height:650px;
background:
linear-gradient(rgba(30,10,25,.65),rgba(30,10,25,.65)),
url('https://images.unsplash.com/photo-1517524206127-48bbd363f3d7?auto=format&fit=crop&w=1600&q=80');
background-size: cover;
background-position: center;
}
.hero-content{
height:100%;
display:flex;
@ -102,6 +114,7 @@ body{
font-size:60px;
font-weight:700;
font-family: Arial, Helvetica, sans-serif;
margin-top: 75px;
}
.hero p{
@ -222,11 +235,10 @@ h6{
<div class="container">
<div class="hero-content text-center">
<h1 class="display-4 fw-bold">
<h1 class="display-4 fw-bold" style"font-weight: 700;">
Automobile Engineering Academy
</h1>
<p class="lead mb-5">
Driving Innovation Through Education, Research &amp; Technology
</p>
@ -320,9 +332,17 @@ h6{
</a>
</div>
</div>
</div>
@endforeach
<div style="display: flex; justify-content: flex-end; width: 100%; ">
<a href="/courses" class="bg-gray-100 hover:bg-gray-200 text-gray-700 px-4 py-2 rounded-full text-sm font-medium transition" style="color:#5E244E">
View all courses
</a>
</div>
</div>
</div>

View File

@ -2,17 +2,40 @@
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
*/
// Home Page
Route::get('/', function () {
return view('welcome');
});
Route::post('/signuppage', [AuthController::class, 'register']);
Route::post('/signin', [AuthController::class, 'login']);
Route::post('/custom-logout', [AuthController::class, 'logout']);
// Static Pages (Views)
Route::view('/apply', 'apply')->name('apply');
Route::view('/courses', 'courses')->name('courses');
Route::view('/students', 'students')->name('students');
Route::view('/abouts', 'abouts')->name('abouts');
Route::view('/contact', 'contacts')->name('contact');
Route::view('/signin', 'signin')->name('signin');
Route::view('/signup', 'signup')->name('signup');
// Route::get('/signup', function () {
// return view('signup');
// })->name('signup');