diff --git a/internal/config/config.go b/internal/config/config.go
index 687fe95..e7bb7a1 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -9,5 +9,5 @@ type Config struct {
 	CloneDirectory string // Repository where gir-mirror keep repository
 	Log            log.Config
 	Interval       int // Update interval in minute
-	RepoList       []git.RepoConfig
+	RepoList       []git.Config
 }
diff --git a/internal/constant/constants.go b/internal/constant/constants.go
new file mode 100644
index 0000000..0522e19
--- /dev/null
+++ b/internal/constant/constants.go
@@ -0,0 +1,7 @@
+package constant
+
+import "time"
+
+const (
+	HTTPTimeout = 3 * time.Second
+)
diff --git a/internal/cron/start.go b/internal/cron/start.go
index 5726785..5afe1be 100644
--- a/internal/cron/start.go
+++ b/internal/cron/start.go
@@ -18,7 +18,7 @@ func start(duration time.Duration, fn func(), name string) {
 }
 
 // Launch all repo update background tasks.
-func Launch(duration time.Duration, config []git.RepoConfig) {
+func Launch(duration time.Duration, config []git.Config) {
 	var counter int
 	for _, content := range config {
 		counter++
diff --git a/internal/git/config.go b/internal/git/config.go
index 0037ce2..3311511 100644
--- a/internal/git/config.go
+++ b/internal/git/config.go
@@ -1,6 +1,6 @@
 package git
 
-type RepoConfig struct {
+type Config struct {
 	URL      string // Source url
 	FullPath string // Full clone directory
 	Name     string // Name of clone (directory name)
diff --git a/internal/git/clone.go b/internal/git/git.go
similarity index 76%
rename from internal/git/clone.go
rename to internal/git/git.go
index 8a618f4..c71e382 100644
--- a/internal/git/clone.go
+++ b/internal/git/git.go
@@ -8,11 +8,13 @@ import (
 
 	"git.gnous.eu/ada/spiegel/internal/utils"
 	goGit "github.com/go-git/go-git/v5"
+	"github.com/go-git/go-git/v5/plumbing/serverinfo"
 	"github.com/go-git/go-git/v5/plumbing/transport/ssh"
+	"github.com/go-git/go-git/v5/storage/filesystem"
 	"github.com/sirupsen/logrus"
 )
 
-func StartClone(repoList []RepoConfig) {
+func StartClone(repoList []Config) {
 	logrus.Debug("Start first repository clone")
 	for _, content := range repoList {
 		_, err := os.Stat(content.FullPath)
@@ -22,7 +24,7 @@ func StartClone(repoList []RepoConfig) {
 	}
 }
 
-func (c RepoConfig) fullClone() {
+func (c Config) fullClone() {
 	logrus.Debug("Clone ", c.Name, "...")
 	logger := logrus.New()
 	w := logger.Writer()
@@ -66,9 +68,14 @@ func (c RepoConfig) fullClone() {
 	if err != nil {
 		logrus.Error(err)
 	}
+
+	err = c.UpdateInfo()
+	if err != nil {
+		logrus.Error(err)
+	}
 }
 
-func (c RepoConfig) Update() {
+func (c Config) Update() {
 	repo, err := goGit.PlainOpen(c.FullPath)
 	if err != nil {
 		logrus.Error(err)
@@ -117,4 +124,23 @@ func (c RepoConfig) Update() {
 			logrus.Error(err)
 		}
 	}
+
+	err = c.UpdateInfo()
+	if err != nil {
+		logrus.Error(err)
+	}
+}
+
+func (c Config) UpdateInfo() error {
+	r, err := goGit.PlainOpen(c.FullPath)
+	if err != nil {
+		return err
+	}
+
+	err = serverinfo.UpdateServerInfo(r.Storer, r.Storer.(*filesystem.Storage).Filesystem()) //nolint: forcetypeassert
+	if err != nil {
+		return err
+	}
+
+	return nil
 }
diff --git a/internal/router/init.go b/internal/router/init.go
new file mode 100644
index 0000000..2f2fb8b
--- /dev/null
+++ b/internal/router/init.go
@@ -0,0 +1,29 @@
+package router
+
+import (
+	"net/http"
+
+	"git.gnous.eu/ada/spiegel/internal/constant"
+	"github.com/sirupsen/logrus"
+)
+
+type Config struct {
+	Listen  string
+	Archive string
+}
+
+func (c Config) Router() {
+	mux := http.NewServeMux()
+	fs := http.FileServer(http.Dir(c.Archive))
+	mux.Handle("/git/", http.StripPrefix("/git/", fs))
+
+	server := &http.Server{
+		Addr:              c.Listen,
+		Handler:           mux,
+		ReadHeaderTimeout: constant.HTTPTimeout,
+	}
+
+	logrus.Info("HTTP listen on :5000")
+
+	logrus.Fatal(server.ListenAndServe())
+}
diff --git a/main.go b/main.go
index 6fccab8..2c0d127 100644
--- a/main.go
+++ b/main.go
@@ -9,6 +9,7 @@ import (
 	"git.gnous.eu/ada/spiegel/internal/config"
 	"git.gnous.eu/ada/spiegel/internal/cron"
 	"git.gnous.eu/ada/spiegel/internal/git"
+	"git.gnous.eu/ada/spiegel/internal/router"
 	"github.com/sirupsen/logrus"
 )
 
@@ -38,6 +39,9 @@ func main() {
 	logrus.Info("Config loaded")
 	logrus.Debug("Config: ", initConfig)
 
+	routerConfig := router.Config{Listen: ":3000", Archive: initConfig.CloneDirectory}
+	go routerConfig.Router()
+
 	git.StartClone(initConfig.RepoList)
 
 	duration := time.Duration(initConfig.Interval) * time.Minute