diff --git a/app/Filament/Resources/Master/Students/Pages/CreateStudent.php b/app/Filament/Resources/Master/Students/Pages/CreateStudent.php
new file mode 100644
index 0000000..51f66a9
--- /dev/null
+++ b/app/Filament/Resources/Master/Students/Pages/CreateStudent.php
@@ -0,0 +1,61 @@
+url(ListStudents::getUrl()),
+ ];
+ }
+
+ protected function getRedirectUrl(): string
+ {
+ return $this->getResource()::getUrl('index');
+ }
+
+ protected function getCreatedNotification(): ?Notification
+ {
+ return SystemNotification::create();
+ }
+
+ public function handleRecordCreation(array $data): Model
+ {
+ return DB::transaction(function () use ($data) {
+ $user = User::create([
+ 'email' => $data['email'],
+ 'username' => $data['username'],
+ 'password' => Hash::make('Minimal8@'),
+ ]);
+
+ unset($data['email'], $data['username']);
+
+ $student = $this->getResource()::getModel()::create(
+ array_merge($data, [
+ 'user_id' => $user->id,
+ ])
+ );
+
+ return $student;
+ });
+ }
+}
diff --git a/app/Filament/Resources/Master/Students/Pages/EditStudent.php b/app/Filament/Resources/Master/Students/Pages/EditStudent.php
new file mode 100644
index 0000000..4c066f1
--- /dev/null
+++ b/app/Filament/Resources/Master/Students/Pages/EditStudent.php
@@ -0,0 +1,36 @@
+url(ListStudents::getUrl()),
+ ];
+ }
+
+ protected function getRedirectUrl(): string
+ {
+ return $this->getResource()::getUrl('index');
+ }
+
+ protected function getSavedNotification(): ?Notification
+ {
+ return SystemNotification::update();
+ }
+}
diff --git a/app/Filament/Resources/Master/Students/Pages/ListStudents.php b/app/Filament/Resources/Master/Students/Pages/ListStudents.php
new file mode 100644
index 0000000..7b0c9b3
--- /dev/null
+++ b/app/Filament/Resources/Master/Students/Pages/ListStudents.php
@@ -0,0 +1,22 @@
+label('Tambah'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/Master/Students/Schemas/StudentForm.php b/app/Filament/Resources/Master/Students/Schemas/StudentForm.php
new file mode 100644
index 0000000..a01ddc8
--- /dev/null
+++ b/app/Filament/Resources/Master/Students/Schemas/StudentForm.php
@@ -0,0 +1,116 @@
+components([
+ Section::make('Akun')
+ ->description(new HtmlString('Alamat Surel dan Nama Pengguna akan digunakan untuk masuk ke dalam sistem. Kata sandi bawaan adalah Minimal8@'))
+ ->schema([
+ TextInput::make('email')
+ ->label('Alamat Surel')
+ ->placeholder('johndoe@example.com')
+ ->autocomplete(false)
+ ->required()
+ ->maxLength(254)
+ ->email()
+ ->unique('users', 'email', ignoreRecord: true),
+
+ TextInput::make('username')
+ ->label('Nama Pengguna')
+ ->placeholder('johndoe')
+ ->autocomplete(false)
+ ->required()
+ ->minLength(5)
+ ->maxLength(20)
+ ->regex('/^[a-zA-Z0-9_.-]+$/')
+ ->unique('users', 'username', ignoreRecord: true),
+ ])
+ ->columns(2)
+ ->hiddenOn('edit'),
+
+ Section::make('Informasi Mahasiswa')
+ ->schema([
+ TextInput::make('full_name')
+ ->label('Nama Lengkap')
+ ->placeholder('John Doe')
+ ->autocomplete(false)
+ ->required()
+ ->maxLength(100)
+ ->minLength(3)
+ ->autofocus()
+ ->columnSpanFull(),
+
+ Grid::make(3)
+ ->schema([
+ TextInput::make('student_number')
+ ->label('NIM')
+ ->placeholder('1234567890')
+ ->autocomplete(false)
+ ->required()
+ ->numeric()
+ ->rules(['digits:10'])
+ ->unique(ignoreRecord: true),
+
+ TextInput::make('phone_number')
+ ->label('Nomor Telepon')
+ ->placeholder('0812 3456 78910')
+ ->autocomplete(false)
+ ->required()
+ ->maxLength(20)
+ ->minLength(10)
+ ->rules(['regex:/^[0-9 ]+$/'])
+ ->mask('9999 9999 99999'),
+
+ Radio::make('sex')
+ ->label('Jenis Kelamin')
+ ->options(Sex::class)
+ ->required()
+ ->inline(),
+ ])
+ ->columnSpanFull(),
+
+ Textarea::make('address')
+ ->label('Alamat')
+ ->placeholder('Jl. Contoh No. 123, Kota, Provinsi')
+ ->autocomplete(false)
+ ->rows(3)
+ ->nullable()
+ ->columnSpanFull(),
+
+ DatePicker::make('date_of_birth')
+ ->label('Tanggal Lahir')
+ ->placeholder('Pilih Tanggal')
+ ->required()
+ ->native(false)
+ ->displayFormat('l, d F Y')
+ ->maxDate(Carbon::now()->subYears(15)),
+
+ TextInput::make('place_of_birth')
+ ->label('Tempat Lahir')
+ ->placeholder('Purwakarta')
+ ->autocomplete(false)
+ ->required()
+ ->maxLength(50)
+ ->minLength(3),
+ ])
+ ->columns(2),
+ ])
+ ->columns(1);
+ }
+}
diff --git a/app/Filament/Resources/Master/Students/StudentResource.php b/app/Filament/Resources/Master/Students/StudentResource.php
new file mode 100644
index 0000000..3bb10df
--- /dev/null
+++ b/app/Filament/Resources/Master/Students/StudentResource.php
@@ -0,0 +1,52 @@
+ ListStudents::route('/'),
+ 'create' => CreateStudent::route('/create'),
+ 'edit' => EditStudent::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/Master/Students/Tables/StudentsTable.php b/app/Filament/Resources/Master/Students/Tables/StudentsTable.php
new file mode 100644
index 0000000..a8d91b8
--- /dev/null
+++ b/app/Filament/Resources/Master/Students/Tables/StudentsTable.php
@@ -0,0 +1,113 @@
+columns([
+ TextColumn::make('user.email')
+ ->label('Akun')
+ ->formatStateUsing(fn ($state, Student $record) => "
+