diff --git a/web/Modules/Customer/App/Filament/Resources/GitRepositoryResource.php b/web/Modules/Customer/App/Filament/Resources/GitRepositoryResource.php
new file mode 100644
index 0000000..3791af2
--- /dev/null
+++ b/web/Modules/Customer/App/Filament/Resources/GitRepositoryResource.php
@@ -0,0 +1,116 @@
+schema([
+
+ Forms\Components\TextInput::make('url')
+ ->label('URL')
+ ->required()
+ ->columnSpanFull()
+ ->live()
+ ->afterStateUpdated(function ($state, Forms\Set $set) use (&$branches, &$tags) {
+ $state = trim($state);
+
+ $repoDetails = GitClient::getRepoDetailsByUrl($state);
+ if ($repoDetails['name']) {
+ $set('name', $repoDetails['owner'] .'/'. $repoDetails['name']);
+ $branches = $repoDetails['branches'];
+ $tags = $repoDetails['tags'];
+ }
+ })
+ ->placeholder('Enter the URL of the repository'),
+
+
+ Forms\Components\TextInput::make('name')
+ ->label('Name')
+ ->required()
+ ->columnSpanFull()
+ ->placeholder('Enter the name of the repository'),
+
+ Forms\Components\Select::make('branch')
+ ->label('Branch')
+ ->required()
+ ->options($branches)
+ ->live()
+ ->columnSpanFull()
+ ->placeholder('Enter the branch of the repository'),
+
+ Forms\Components\Select::make('tag')
+ ->label('Tag')
+ ->live()
+ ->options($tags)
+ ->columnSpanFull()
+ ->placeholder('Enter the tag of the repository'),
+
+ Forms\Components\TextInput::make('dir')
+ ->label('Directory')
+ ->columnSpanFull()
+ ->required()
+ ->placeholder('Enter the directory of the repository'),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ //
+ ])
+ ->filters([
+ //
+ ])
+ ->actions([
+ Tables\Actions\EditAction::make(),
+ ])
+ ->bulkActions([
+ Tables\Actions\BulkActionGroup::make([
+ Tables\Actions\DeleteBulkAction::make(),
+ ]),
+ ]);
+ }
+
+ public static function getRelations(): array
+ {
+ return [
+ //
+ ];
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListGitRepositories::route('/'),
+ 'create' => Pages\CreateGitRepository::route('/create'),
+ 'edit' => Pages\EditGitRepository::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/web/Modules/Customer/App/Filament/Resources/GitRepositoryResource/Pages/CreateGitRepository.php b/web/Modules/Customer/App/Filament/Resources/GitRepositoryResource/Pages/CreateGitRepository.php
new file mode 100644
index 0000000..7051436
--- /dev/null
+++ b/web/Modules/Customer/App/Filament/Resources/GitRepositoryResource/Pages/CreateGitRepository.php
@@ -0,0 +1,19 @@
+ $name,
+ 'owner' => $owner,
+ 'provider' => $provider
+ ];
+
+ }
+
+ public static function getRepoDetailsByUrl($url)
+ {
+
+ shell_exec('GIT_TERMINAL_PROMPT=0');
+ $outputBranches = shell_exec('git ls-remote --heads '.$url);
+ $outputTags = shell_exec('git ls-remote --tags '.$url);
+
+ $branches = [];
+ $tags = [];
+
+ $gitUrl = self::parseGitUrl($url);
+
+ foreach (explode("\n", $outputBranches) as $line) {
+ if (empty($line)) {
+ continue;
+ }
+ $parts = explode("\t", $line);
+ $branch = str_replace('refs/heads/', '', $parts[1]);
+ $branches[$branch] = $branch;
+ }
+
+ foreach (explode("\n", $outputTags) as $line) {
+ if (empty($line)) {
+ continue;
+ }
+ $parts = explode("\t", $line);
+ $tag = str_replace('refs/tags/', '', $parts[1]);
+ $tags[$tag] = $tag;
+ }
+
+ $output = [
+ 'branches' => $branches,
+ 'tags' => $tags,
+ 'name' => $gitUrl['name'],
+ 'owner' => $gitUrl['owner'],
+ 'provider' => $gitUrl['provider']
+ ];
+
+ return $output;
+ }
+
+}
diff --git a/web/app/Models/GitRepository.php b/web/app/Models/GitRepository.php
new file mode 100644
index 0000000..f2e5f3e
--- /dev/null
+++ b/web/app/Models/GitRepository.php
@@ -0,0 +1,24 @@
+id();
+
+ $table->string('name');
+ $table->string('url');
+ $table->string('branch');
+ $table->string('last_commit_hash')->nullable();
+ $table->string('last_commit_message')->nullable();
+ $table->timestamp('last_commit_date')->nullable();
+
+ $table->string('status')->nullable();
+ $table->string('status_message')->nullable();
+
+ $table->string('dir')->nullable();
+
+ $table->unsignedBigInteger('domain_id');
+
+
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('git_repositories');
+ }
+};
diff --git a/web/resources/phyre-customer-svg/git.svg b/web/resources/phyre-customer-svg/git.svg
new file mode 100644
index 0000000..356184d
--- /dev/null
+++ b/web/resources/phyre-customer-svg/git.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/web/resources/phyre-svg/git.svg b/web/resources/phyre-svg/git.svg
new file mode 100644
index 0000000..356184d
--- /dev/null
+++ b/web/resources/phyre-svg/git.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file