detached d5beb42

Create install route and template, auto redirect if config file is not

present
Enhanced logging: Redirected stdout to custom zerolog logger, removed redundant EnableLogger function, and captured all fmt messages.
commit
d5beb42b67d2a8046cda43916524db84a7564971
author
bnema · · 2023-09-04 21:12 UTC
committer
bnema · · 2023-09-04 17:31 UTC
parent
1a9a8e9
signature
unsigned
14 files · +1183 -46
M .gitignore +2 -1
@@ -1,4 +1,5 @@
11 .env
22 node_modules/
33 tmp/*
4-logs/*⏎̸
4+logs/*
5+gordon.yml⏎̸
@@ -1,4 +1,5 @@
1 .env1 .env
2 node_modules/2 node_modules/
3 tmp/*3 tmp/*
4-logs/*⏎̸4+logs/*
5+gordon.yml⏎̸
M cmd/main.go +1 -0
@@ -23,6 +23,7 @@ func main() {
2323 gordon.APPLogger.Error().Err(err).Msg("Failed to initialize app")
2424 return
2525 }
26+ utils.CaptureSTDOUT(gordon.APPLogger)
2627
2728 e := echo.New()
2829 e.HideBanner = true
@@ -23,6 +23,7 @@ func main() {
23 gordon.APPLogger.Error().Err(err).Msg("Failed to initialize app")23 gordon.APPLogger.Error().Err(err).Msg("Failed to initialize app")
24 return24 return
25 }25 }
26+ utils.CaptureSTDOUT(gordon.APPLogger)
26 27
27 e := echo.New()28 e := echo.New()
28 e.HideBanner = true29 e.HideBanner = true
D internal/http/handlers/default.go +0 -30
@@ -1,30 +0,0 @@
1-package handlers
2-
3-import (
4- "fmt"
5- "net/http"
6-
7- "github.com/labstack/echo/v4"
8- "gogs.bnema.dev/gordon-echo/internal/ui"
9- "gogs.bnema.dev/gordon-echo/pkg/utils"
10-)
11-
12-func DefaultHTTPErrorHandler(err error, c echo.Context) {
13- renderer, err := utils.GetRenderer("500.gohtml", ui.PublicFS, utils.NewLogger())
14- if err != nil {
15- c.String(http.StatusInternalServerError, fmt.Sprintf("%v", err))
16- }
17-
18- data := map[string]interface{}{
19- "website": map[string]interface{}{
20- "title": "Internal Server Error",
21- },
22- }
23-
24- html, err := renderer.Render(data)
25- if err != nil {
26- c.String(http.StatusInternalServerError, fmt.Sprintf("%v", err))
27- }
28-
29- c.HTML(http.StatusInternalServerError, html)
30-}
@@ -1,30 +0,0 @@
1-package handlers
2-
3-import (
4- "fmt"
5- "net/http"
6-
7- "github.com/labstack/echo/v4"
8- "gogs.bnema.dev/gordon-echo/internal/ui"
9- "gogs.bnema.dev/gordon-echo/pkg/utils"
10-)
11-
12-func DefaultHTTPErrorHandler(err error, c echo.Context) {
13- renderer, err := utils.GetRenderer("500.gohtml", ui.PublicFS, utils.NewLogger())
14- if err != nil {
15- c.String(http.StatusInternalServerError, fmt.Sprintf("%v", err))
16- }
17-
18- data := map[string]interface{}{
19- "website": map[string]interface{}{
20- "title": "Internal Server Error",
21- },
22- }
23-
24- html, err := renderer.Render(data)
25- if err != nil {
26- c.String(http.StatusInternalServerError, fmt.Sprintf("%v", err))
27- }
28-
29- c.HTML(http.StatusInternalServerError, html)
30-}
M internal/http/middlewares/detect-color-scheme.go +0 -3
@@ -1,8 +1,6 @@
11 package middlewares
22
33 import (
4- "fmt"
5-
64 "github.com/labstack/echo-contrib/session"
75 "github.com/labstack/echo/v4"
86 )
@@ -14,7 +12,6 @@ const ColorSchemeKey = "CurrentColorScheme"
1412 func ColorSchemeDetection(next echo.HandlerFunc) echo.HandlerFunc {
1513 return func(c echo.Context) error {
1614 colorScheme := detectCurrentColorScheme(c)
17- fmt.Println("Color scheme detected:", colorScheme)
1815 c.Set(ColorSchemeKey, colorScheme)
1916 return next(c)
2017 }
@@ -1,8 +1,6 @@
1 package middlewares1 package middlewares
2 2
3 import (3 import (
4- "fmt"
5-
6 "github.com/labstack/echo-contrib/session"4 "github.com/labstack/echo-contrib/session"
7 "github.com/labstack/echo/v4"5 "github.com/labstack/echo/v4"
8 )6 )
@@ -14,7 +12,6 @@ const ColorSchemeKey = "CurrentColorScheme"
14 func ColorSchemeDetection(next echo.HandlerFunc) echo.HandlerFunc {12 func ColorSchemeDetection(next echo.HandlerFunc) echo.HandlerFunc {
15 return func(c echo.Context) error {13 return func(c echo.Context) error {
16 colorScheme := detectCurrentColorScheme(c)14 colorScheme := detectCurrentColorScheme(c)
17- fmt.Println("Color scheme detected:", colorScheme)
18 c.Set(ColorSchemeKey, colorScheme)15 c.Set(ColorSchemeKey, colorScheme)
19 return next(c)16 return next(c)
20 }17 }
M internal/http/routes/admin-routes.go +36 -1
@@ -11,9 +11,14 @@ import (
1111 )
1212
1313 func AdminRoute(c echo.Context) error {
14+ // Check if it's the first launch of the app
15+ if utils.IsConfigFilePresent() {
16+ fmt.Println("Fresh installation detected, redirecting to /admin/install")
17+ return c.Redirect(http.StatusFound, "/admin/install")
18+ }
19+
1420 // Retrieve the current language from the context
1521 lang := c.Get(middlewares.LangKey).(string)
16- fmt.Println(lang)
1722
1823 staticData, err := utils.PopulateDataFromYAML(lang)
1924 if err != nil {
@@ -34,3 +39,33 @@ func AdminRoute(c echo.Context) error {
3439
3540 return c.HTML(http.StatusOK, html)
3641 }
42+
43+func InstallRoute(c echo.Context) error {
44+ // Check if it's the first launch of the app
45+ if !utils.IsConfigFilePresent() {
46+ fmt.Println("Config file already present, redirecting to /admin")
47+ return c.Redirect(http.StatusFound, "/admin")
48+ }
49+
50+ // Retrieve the current language from the context
51+ lang := c.Get(middlewares.LangKey).(string)
52+
53+ staticData, err := utils.PopulateDataFromYAML(lang)
54+ if err != nil {
55+ return err
56+ }
57+
58+ renderer, err := utils.GetRenderer("install.gohtml", ui.PublicFS, utils.NewLogger())
59+ if err != nil {
60+ return err
61+ }
62+
63+ html, err := renderer.Render(staticData.CurrentLang)
64+ if err != nil {
65+ // Return the error into NewLogger() to log it
66+ utils.NewLogger().Error()
67+ return err
68+ }
69+
70+ return c.HTML(http.StatusOK, html)
71+}
@@ -11,9 +11,14 @@ import (
11 )11 )
12 12
13 func AdminRoute(c echo.Context) error {13 func AdminRoute(c echo.Context) error {
14+ // Check if it's the first launch of the app
15+ if utils.IsConfigFilePresent() {
16+ fmt.Println("Fresh installation detected, redirecting to /admin/install")
17+ return c.Redirect(http.StatusFound, "/admin/install")
18+ }
19+
14 // Retrieve the current language from the context20 // Retrieve the current language from the context
15 lang := c.Get(middlewares.LangKey).(string)21 lang := c.Get(middlewares.LangKey).(string)
16- fmt.Println(lang)
17 22
18 staticData, err := utils.PopulateDataFromYAML(lang)23 staticData, err := utils.PopulateDataFromYAML(lang)
19 if err != nil {24 if err != nil {
@@ -34,3 +39,33 @@ func AdminRoute(c echo.Context) error {
34 39
35 return c.HTML(http.StatusOK, html)40 return c.HTML(http.StatusOK, html)
36 }41 }
42+
43+func InstallRoute(c echo.Context) error {
44+ // Check if it's the first launch of the app
45+ if !utils.IsConfigFilePresent() {
46+ fmt.Println("Config file already present, redirecting to /admin")
47+ return c.Redirect(http.StatusFound, "/admin")
48+ }
49+
50+ // Retrieve the current language from the context
51+ lang := c.Get(middlewares.LangKey).(string)
52+
53+ staticData, err := utils.PopulateDataFromYAML(lang)
54+ if err != nil {
55+ return err
56+ }
57+
58+ renderer, err := utils.GetRenderer("install.gohtml", ui.PublicFS, utils.NewLogger())
59+ if err != nil {
60+ return err
61+ }
62+
63+ html, err := renderer.Render(staticData.CurrentLang)
64+ if err != nil {
65+ // Return the error into NewLogger() to log it
66+ utils.NewLogger().Error()
67+ return err
68+ }
69+
70+ return c.HTML(http.StatusOK, html)
71+}
M internal/http/routes/router.go +1 -0
@@ -22,6 +22,7 @@ func ConfigureRouter(e *echo.Echo, app *app.App) *echo.Echo {
2222 }
2323 func bindStaticAdminUI(e *echo.Echo) *echo.Echo {
2424 e.GET("/admin", AdminRoute)
25+ e.GET("/admin/install", InstallRoute)
2526 e.GET("/htmx", handlers.HTMXHandler)
2627 e.GET("/*", StaticRoute)
2728 e.HTTPErrorHandler = handlers.ErrorNumberHandler
@@ -22,6 +22,7 @@ func ConfigureRouter(e *echo.Echo, app *app.App) *echo.Echo {
22 }22 }
23 func bindStaticAdminUI(e *echo.Echo) *echo.Echo {23 func bindStaticAdminUI(e *echo.Echo) *echo.Echo {
24 e.GET("/admin", AdminRoute)24 e.GET("/admin", AdminRoute)
25+ e.GET("/admin/install", InstallRoute)
25 e.GET("/htmx", handlers.HTMXHandler)26 e.GET("/htmx", handlers.HTMXHandler)
26 e.GET("/*", StaticRoute)27 e.GET("/*", StaticRoute)
27 e.HTTPErrorHandler = handlers.ErrorNumberHandler28 e.HTTPErrorHandler = handlers.ErrorNumberHandler
M internal/ui/public/assets/css/tailwind.css +8 -0
@@ -545,6 +545,10 @@ video {
545545 margin-bottom: 1rem;
546546 }
547547
548+.ml-2 {
549+ margin-left: 0.5rem;
550+}
551+
548552 .ml-4 {
549553 margin-left: 1rem;
550554 }
@@ -553,6 +557,10 @@ video {
553557 margin-right: 0.5rem;
554558 }
555559
560+.mt-4 {
561+ margin-top: 1rem;
562+}
563+
556564 .flex {
557565 display: flex;
558566 }
@@ -545,6 +545,10 @@ video {
545 margin-bottom: 1rem;545 margin-bottom: 1rem;
546 }546 }
547 547
548+.ml-2 {
549+ margin-left: 0.5rem;
550+}
551+
548 .ml-4 {552 .ml-4 {
549 margin-left: 1rem;553 margin-left: 1rem;
550 }554 }
@@ -553,6 +557,10 @@ video {
553 margin-right: 0.5rem;557 margin-right: 0.5rem;
554 }558 }
555 559
560+.mt-4 {
561+ margin-top: 1rem;
562+}
563+
556 .flex {564 .flex {
557 display: flex;565 display: flex;
558 }566 }
M internal/ui/public/index.gohtml +8 -6
@@ -9,13 +9,15 @@
99 <meta name="description" content="{{ .Header.Meta.Description }}" />
1010 <meta name="keywords" content="{{ .Header.Meta.Keywords }}" />
1111 <!-- Custom CSS + Tailwind -->
12- <link rel="stylesheet" href="assets/css/tailwind.css" />
12+ <link rel="stylesheet" href="/assets/css/tailwind.css" />
1313 <!-- Iconoir -->
14- <link rel="stylesheet" href="libs/iconoir.css" />
14+ <link rel="stylesheet" href="/libs/iconoir.css" />
1515 <!-- Alpine -->
16- <script src="libs/alpine.min.js"></script>
16+ <script src="/libs/alpine.min.js"></script>
1717 <!-- HTMX min js -->
18- <script src="libs/htmx.min.js"></script>
18+ <script src="/libs/htmx.min.js"></script>
19+ <!-- HTMX SSE -->
20+ <script src="/libs/htmx-sse.js"></script>
1921 <!-- Custom JS from assets/js -->
2022 <script src="assets/js/custom.js"></script>
2123 </head>
@@ -26,7 +28,7 @@
2628 <div id="logo-mascot-leftnav" class="flex justify-center p-4">
2729 <div class="circle-shadow flex justify-center w-100">
2830 <img
29- src="assets/imgs/gordon-mascot-hq-trsp.png"
31+ src="/assets/imgs/gordon-mascot-hq-trsp.png"
3032 alt="logo"
3133 class="sm:h-24 h-32 xl:h-48"
3234 />
@@ -75,7 +77,7 @@
7577 </div>
7678 </div>
7779
78- <!-- Main Content -->
80+ <!-- Main Content including the navbar -->
7981 <div class="flex-1 flex flex-col md:pt-10 space-y-4 ml-4">
8082 <!-- Search Nav within the main content -->
8183 <div class="mb-4 flex justify-end">
@@ -9,13 +9,15 @@
9 <meta name="description" content="{{ .Header.Meta.Description }}" />9 <meta name="description" content="{{ .Header.Meta.Description }}" />
10 <meta name="keywords" content="{{ .Header.Meta.Keywords }}" />10 <meta name="keywords" content="{{ .Header.Meta.Keywords }}" />
11 <!-- Custom CSS + Tailwind -->11 <!-- Custom CSS + Tailwind -->
12- <link rel="stylesheet" href="assets/css/tailwind.css" />12+ <link rel="stylesheet" href="/assets/css/tailwind.css" />
13 <!-- Iconoir -->13 <!-- Iconoir -->
14- <link rel="stylesheet" href="libs/iconoir.css" />14+ <link rel="stylesheet" href="/libs/iconoir.css" />
15 <!-- Alpine -->15 <!-- Alpine -->
16- <script src="libs/alpine.min.js"></script>16+ <script src="/libs/alpine.min.js"></script>
17 <!-- HTMX min js -->17 <!-- HTMX min js -->
18- <script src="libs/htmx.min.js"></script>18+ <script src="/libs/htmx.min.js"></script>
19+ <!-- HTMX SSE -->
20+ <script src="/libs/htmx-sse.js"></script>
19 <!-- Custom JS from assets/js -->21 <!-- Custom JS from assets/js -->
20 <script src="assets/js/custom.js"></script>22 <script src="assets/js/custom.js"></script>
21 </head>23 </head>
@@ -26,7 +28,7 @@
26 <div id="logo-mascot-leftnav" class="flex justify-center p-4">28 <div id="logo-mascot-leftnav" class="flex justify-center p-4">
27 <div class="circle-shadow flex justify-center w-100">29 <div class="circle-shadow flex justify-center w-100">
28 <img30 <img
29- src="assets/imgs/gordon-mascot-hq-trsp.png"31+ src="/assets/imgs/gordon-mascot-hq-trsp.png"
30 alt="logo"32 alt="logo"
31 class="sm:h-24 h-32 xl:h-48"33 class="sm:h-24 h-32 xl:h-48"
32 />34 />
@@ -75,7 +77,7 @@
75 </div>77 </div>
76 </div>78 </div>
77 79
78- <!-- Main Content -->80+ <!-- Main Content including the navbar -->
79 <div class="flex-1 flex flex-col md:pt-10 space-y-4 ml-4">81 <div class="flex-1 flex flex-col md:pt-10 space-y-4 ml-4">
80 <!-- Search Nav within the main content -->82 <!-- Search Nav within the main content -->
81 <div class="mb-4 flex justify-end">83 <div class="mb-4 flex justify-end">
A internal/ui/public/install.gohtml +54 -0
@@ -0,0 +1,54 @@
1+<!DOCTYPE html>
2+<html lang="en">
3+ <head>
4+ <meta charset="UTF-8" />
5+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+ <title>{{ .header.meta.title }}</title>
7+ <meta name="description" content="{{ .Header.Meta.Description }}" />
8+ <meta name="keywords" content="{{ .Header.Meta.Keywords }}" />
9+ <!-- Custom CSS + Tailwind -->
10+ <link rel="stylesheet" href="/assets/css/tailwind.css" />
11+ <!-- Iconoir -->
12+ <link rel="stylesheet" href="/libs/iconoir.css" />
13+ <!-- Alpine -->
14+ <script src="/libs/alpine.min.js"></script>
15+ <!-- HTMX min js -->
16+ <script src="/libs/htmx.min.js"></script>
17+ <!-- HTMX SSE -->
18+ <script src="/libs/htmx-sse.js"></script>
19+ <!-- Custom JS from assets/js -->
20+ <script src="/assets/js/custom.js"></script>
21+ </head>
22+
23+ <body class="IBMPlexSans bg-zinc-200 md:p-8 flex flex-col items-center">
24+ <!-- Logo and Title -->
25+ <div
26+ id="logo-mascot"
27+ class="flex flex-col justify-center items-center p-4 mb-4"
28+ >
29+ <div class="circle-shadow flex justify-center w-100">
30+ <img
31+ src="/assets/imgs/gordon-mascot-hq-trsp.png"
32+ alt="logo"
33+ class="sm:h-24 h-32 xl:h-48"
34+ />
35+ </div>
36+ <div class="flex justify-center mt-4">
37+ <h1
38+ class="gordon-title text-2xl lg:text-4xl xl:text-5xl text-gordonmascot-hblue tracking-tighter"
39+ >
40+ Gordon
41+ </h1>
42+ <span class="gordon-v-subtitle text-gordonmascot-mblue text-sm ml-2"
43+ >v0.0.1</span
44+ >
45+ </div>
46+ </div>
47+
48+ <!-- Main Content -->
49+ <div class="w-full bg-white p-4 rounded-md shadow mb-4">
50+ <div class="w-full rounded-sm bg-gray-300"></div>
51+ <!-- Mock main card -->
52+ </div>
53+ </body>
54+</html>
@@ -0,0 +1,54 @@
1+<!DOCTYPE html>
2+<html lang="en">
3+ <head>
4+ <meta charset="UTF-8" />
5+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+ <title>{{ .header.meta.title }}</title>
7+ <meta name="description" content="{{ .Header.Meta.Description }}" />
8+ <meta name="keywords" content="{{ .Header.Meta.Keywords }}" />
9+ <!-- Custom CSS + Tailwind -->
10+ <link rel="stylesheet" href="/assets/css/tailwind.css" />
11+ <!-- Iconoir -->
12+ <link rel="stylesheet" href="/libs/iconoir.css" />
13+ <!-- Alpine -->
14+ <script src="/libs/alpine.min.js"></script>
15+ <!-- HTMX min js -->
16+ <script src="/libs/htmx.min.js"></script>
17+ <!-- HTMX SSE -->
18+ <script src="/libs/htmx-sse.js"></script>
19+ <!-- Custom JS from assets/js -->
20+ <script src="/assets/js/custom.js"></script>
21+ </head>
22+
23+ <body class="IBMPlexSans bg-zinc-200 md:p-8 flex flex-col items-center">
24+ <!-- Logo and Title -->
25+ <div
26+ id="logo-mascot"
27+ class="flex flex-col justify-center items-center p-4 mb-4"
28+ >
29+ <div class="circle-shadow flex justify-center w-100">
30+ <img
31+ src="/assets/imgs/gordon-mascot-hq-trsp.png"
32+ alt="logo"
33+ class="sm:h-24 h-32 xl:h-48"
34+ />
35+ </div>
36+ <div class="flex justify-center mt-4">
37+ <h1
38+ class="gordon-title text-2xl lg:text-4xl xl:text-5xl text-gordonmascot-hblue tracking-tighter"
39+ >
40+ Gordon
41+ </h1>
42+ <span class="gordon-v-subtitle text-gordonmascot-mblue text-sm ml-2"
43+ >v0.0.1</span
44+ >
45+ </div>
46+ </div>
47+
48+ <!-- Main Content -->
49+ <div class="w-full bg-white p-4 rounded-md shadow mb-4">
50+ <div class="w-full rounded-sm bg-gray-300"></div>
51+ <!-- Mock main card -->
52+ </div>
53+ </body>
54+</html>
A internal/ui/public/libs/htmx-sse.js +322 -0
@@ -0,0 +1,322 @@
1+/*
2+Server Sent Events Extension
3+============================
4+This extension adds support for Server Sent Events to htmx. See /www/extensions/sse.md for usage instructions.
5+
6+*/
7+
8+(function(){
9+
10+ /** @type {import("../htmx").HtmxInternalApi} */
11+ var api;
12+
13+ htmx.defineExtension("sse", {
14+
15+ /**
16+ * Init saves the provided reference to the internal HTMX API.
17+ *
18+ * @param {import("../htmx").HtmxInternalApi} api
19+ * @returns void
20+ */
21+ init: function(apiRef) {
22+ // store a reference to the internal API.
23+ api = apiRef;
24+
25+ // set a function in the public API for creating new EventSource objects
26+ if (htmx.createEventSource == undefined) {
27+ htmx.createEventSource = createEventSource;
28+ }
29+ },
30+
31+ /**
32+ * onEvent handles all events passed to this extension.
33+ *
34+ * @param {string} name
35+ * @param {Event} evt
36+ * @returns void
37+ */
38+ onEvent: function(name, evt) {
39+
40+ switch (name) {
41+
42+ // Try to remove remove an EventSource when elements are removed
43+ case "htmx:beforeCleanupElement":
44+ var internalData = api.getInternalData(evt.target)
45+ if (internalData.sseEventSource) {
46+ internalData.sseEventSource.close();
47+ }
48+ return;
49+
50+ // Try to create EventSources when elements are processed
51+ case "htmx:afterProcessNode":
52+ createEventSourceOnElement(evt.target);
53+ }
54+ }
55+ });
56+
57+ ///////////////////////////////////////////////
58+ // HELPER FUNCTIONS
59+ ///////////////////////////////////////////////
60+
61+
62+ /**
63+ * createEventSource is the default method for creating new EventSource objects.
64+ * it is hoisted into htmx.config.createEventSource to be overridden by the user, if needed.
65+ *
66+ * @param {string} url
67+ * @returns EventSource
68+ */
69+ function createEventSource(url) {
70+ return new EventSource(url, {withCredentials:true});
71+ }
72+
73+ function splitOnWhitespace(trigger) {
74+ return trigger.trim().split(/\s+/);
75+ }
76+
77+ function getLegacySSEURL(elt) {
78+ var legacySSEValue = api.getAttributeValue(elt, "hx-sse");
79+ if (legacySSEValue) {
80+ var values = splitOnWhitespace(legacySSEValue);
81+ for (var i = 0; i < values.length; i++) {
82+ var value = values[i].split(/:(.+)/);
83+ if (value[0] === "connect") {
84+ return value[1];
85+ }
86+ }
87+ }
88+ }
89+
90+ function getLegacySSESwaps(elt) {
91+ var legacySSEValue = api.getAttributeValue(elt, "hx-sse");
92+ var returnArr = [];
93+ if (legacySSEValue) {
94+ var values = splitOnWhitespace(legacySSEValue);
95+ for (var i = 0; i < values.length; i++) {
96+ var value = values[i].split(/:(.+)/);
97+ if (value[0] === "swap") {
98+ returnArr.push(value[1]);
99+ }
100+ }
101+ }
102+ return returnArr;
103+ }
104+
105+ /**
106+ * createEventSourceOnElement creates a new EventSource connection on the provided element.
107+ * If a usable EventSource already exists, then it is returned. If not, then a new EventSource
108+ * is created and stored in the element's internalData.
109+ * @param {HTMLElement} elt
110+ * @param {number} retryCount
111+ * @returns {EventSource | null}
112+ */
113+ function createEventSourceOnElement(elt, retryCount) {
114+
115+ if (elt == null) {
116+ return null;
117+ }
118+
119+ var internalData = api.getInternalData(elt);
120+
121+ // get URL from element's attribute
122+ var sseURL = api.getAttributeValue(elt, "sse-connect");
123+
124+
125+ if (sseURL == undefined) {
126+ var legacyURL = getLegacySSEURL(elt)
127+ if (legacyURL) {
128+ sseURL = legacyURL;
129+ } else {
130+ return null;
131+ }
132+ }
133+
134+ // Connect to the EventSource
135+ var source = htmx.createEventSource(sseURL);
136+ internalData.sseEventSource = source;
137+
138+ // Create event handlers
139+ source.onerror = function (err) {
140+
141+ // Log an error event
142+ api.triggerErrorEvent(elt, "htmx:sseError", {error:err, source:source});
143+
144+ // If parent no longer exists in the document, then clean up this EventSource
145+ if (maybeCloseSSESource(elt)) {
146+ return;
147+ }
148+
149+ // Otherwise, try to reconnect the EventSource
150+ if (source.readyState === EventSource.CLOSED) {
151+ retryCount = retryCount || 0;
152+ var timeout = Math.random() * (2 ^ retryCount) * 500;
153+ window.setTimeout(function() {
154+ createEventSourceOnElement(elt, Math.min(7, retryCount+1));
155+ }, timeout);
156+ }
157+ };
158+
159+ source.onopen = function (evt) {
160+ api.triggerEvent(elt, "htmx:sseOpen", {source: source});
161+ }
162+
163+ // Add message handlers for every `sse-swap` attribute
164+ queryAttributeOnThisOrChildren(elt, "sse-swap").forEach(function(child) {
165+
166+ var sseSwapAttr = api.getAttributeValue(child, "sse-swap");
167+ if (sseSwapAttr) {
168+ var sseEventNames = sseSwapAttr.split(",");
169+ } else {
170+ var sseEventNames = getLegacySSESwaps(child);
171+ }
172+
173+ for (var i = 0 ; i < sseEventNames.length ; i++) {
174+ var sseEventName = sseEventNames[i].trim();
175+ var listener = function(event) {
176+
177+ // If the parent is missing then close SSE and remove listener
178+ if (maybeCloseSSESource(elt)) {
179+ source.removeEventListener(sseEventName, listener);
180+ return;
181+ }
182+
183+ // swap the response into the DOM and trigger a notification
184+ swap(child, event.data);
185+ api.triggerEvent(elt, "htmx:sseMessage", event);
186+ };
187+
188+ // Register the new listener
189+ api.getInternalData(elt).sseEventListener = listener;
190+ source.addEventListener(sseEventName, listener);
191+ }
192+ });
193+
194+ // Add message handlers for every `hx-trigger="sse:*"` attribute
195+ queryAttributeOnThisOrChildren(elt, "hx-trigger").forEach(function(child) {
196+
197+ var sseEventName = api.getAttributeValue(child, "hx-trigger");
198+ if (sseEventName == null) {
199+ return;
200+ }
201+
202+ // Only process hx-triggers for events with the "sse:" prefix
203+ if (sseEventName.slice(0, 4) != "sse:") {
204+ return;
205+ }
206+
207+ var listener = function(event) {
208+
209+ // If parent is missing, then close SSE and remove listener
210+ if (maybeCloseSSESource(elt)) {
211+ source.removeEventListener(sseEventName, listener);
212+ return;
213+ }
214+
215+ // Trigger events to be handled by the rest of htmx
216+ htmx.trigger(child, sseEventName, event);
217+ htmx.trigger(child, "htmx:sseMessage", event);
218+ }
219+
220+ // Register the new listener
221+ api.getInternalData(elt).sseEventListener = listener;
222+ source.addEventListener(sseEventName.slice(4), listener);
223+ });
224+ }
225+
226+ /**
227+ * maybeCloseSSESource confirms that the parent element still exists.
228+ * If not, then any associated SSE source is closed and the function returns true.
229+ *
230+ * @param {HTMLElement} elt
231+ * @returns boolean
232+ */
233+ function maybeCloseSSESource(elt) {
234+ if (!api.bodyContains(elt)) {
235+ var source = api.getInternalData(elt).sseEventSource;
236+ if (source != undefined) {
237+ source.close();
238+ // source = null
239+ return true;
240+ }
241+ }
242+ return false;
243+ }
244+
245+ /**
246+ * queryAttributeOnThisOrChildren returns all nodes that contain the requested attributeName, INCLUDING THE PROVIDED ROOT ELEMENT.
247+ *
248+ * @param {HTMLElement} elt
249+ * @param {string} attributeName
250+ */
251+ function queryAttributeOnThisOrChildren(elt, attributeName) {
252+
253+ var result = [];
254+
255+ // If the parent element also contains the requested attribute, then add it to the results too.
256+ if (api.hasAttribute(elt, attributeName) || api.hasAttribute(elt, "hx-sse")) {
257+ result.push(elt);
258+ }
259+
260+ // Search all child nodes that match the requested attribute
261+ elt.querySelectorAll("[" + attributeName + "], [data-" + attributeName + "], [hx-sse], [data-hx-sse]").forEach(function(node) {
262+ result.push(node);
263+ });
264+
265+ return result;
266+ }
267+
268+ /**
269+ * @param {HTMLElement} elt
270+ * @param {string} content
271+ */
272+ function swap(elt, content) {
273+
274+ api.withExtensions(elt, function(extension) {
275+ content = extension.transformResponse(content, null, elt);
276+ });
277+
278+ var swapSpec = api.getSwapSpecification(elt);
279+ var target = api.getTarget(elt);
280+ var settleInfo = api.makeSettleInfo(elt);
281+
282+ api.selectAndSwap(swapSpec.swapStyle, target, elt, content, settleInfo);
283+
284+ settleInfo.elts.forEach(function (elt) {
285+ if (elt.classList) {
286+ elt.classList.add(htmx.config.settlingClass);
287+ }
288+ api.triggerEvent(elt, 'htmx:beforeSettle');
289+ });
290+
291+ // Handle settle tasks (with delay if requested)
292+ if (swapSpec.settleDelay > 0) {
293+ setTimeout(doSettle(settleInfo), swapSpec.settleDelay);
294+ } else {
295+ doSettle(settleInfo)();
296+ }
297+ }
298+
299+ /**
300+ * doSettle mirrors much of the functionality in htmx that
301+ * settles elements after their content has been swapped.
302+ * TODO: this should be published by htmx, and not duplicated here
303+ * @param {import("../htmx").HtmxSettleInfo} settleInfo
304+ * @returns () => void
305+ */
306+ function doSettle(settleInfo) {
307+
308+ return function() {
309+ settleInfo.tasks.forEach(function (task) {
310+ task.call();
311+ });
312+
313+ settleInfo.elts.forEach(function (elt) {
314+ if (elt.classList) {
315+ elt.classList.remove(htmx.config.settlingClass);
316+ }
317+ api.triggerEvent(elt, 'htmx:afterSettle');
318+ });
319+ }
320+ }
321+
322+})();⏎̸
@@ -0,0 +1,322 @@
1+/*
2+Server Sent Events Extension
3+============================
4+This extension adds support for Server Sent Events to htmx. See /www/extensions/sse.md for usage instructions.
5+
6+*/
7+
8+(function(){
9+
10+ /** @type {import("../htmx").HtmxInternalApi} */
11+ var api;
12+
13+ htmx.defineExtension("sse", {
14+
15+ /**
16+ * Init saves the provided reference to the internal HTMX API.
17+ *
18+ * @param {import("../htmx").HtmxInternalApi} api
19+ * @returns void
20+ */
21+ init: function(apiRef) {
22+ // store a reference to the internal API.
23+ api = apiRef;
24+
25+ // set a function in the public API for creating new EventSource objects
26+ if (htmx.createEventSource == undefined) {
27+ htmx.createEventSource = createEventSource;
28+ }
29+ },
30+
31+ /**
32+ * onEvent handles all events passed to this extension.
33+ *
34+ * @param {string} name
35+ * @param {Event} evt
36+ * @returns void
37+ */
38+ onEvent: function(name, evt) {
39+
40+ switch (name) {
41+
42+ // Try to remove remove an EventSource when elements are removed
43+ case "htmx:beforeCleanupElement":
44+ var internalData = api.getInternalData(evt.target)
45+ if (internalData.sseEventSource) {
46+ internalData.sseEventSource.close();
47+ }
48+ return;
49+
50+ // Try to create EventSources when elements are processed
51+ case "htmx:afterProcessNode":
52+ createEventSourceOnElement(evt.target);
53+ }
54+ }
55+ });
56+
57+ ///////////////////////////////////////////////
58+ // HELPER FUNCTIONS
59+ ///////////////////////////////////////////////
60+
61+
62+ /**
63+ * createEventSource is the default method for creating new EventSource objects.
64+ * it is hoisted into htmx.config.createEventSource to be overridden by the user, if needed.
65+ *
66+ * @param {string} url
67+ * @returns EventSource
68+ */
69+ function createEventSource(url) {
70+ return new EventSource(url, {withCredentials:true});
71+ }
72+
73+ function splitOnWhitespace(trigger) {
74+ return trigger.trim().split(/\s+/);
75+ }
76+
77+ function getLegacySSEURL(elt) {
78+ var legacySSEValue = api.getAttributeValue(elt, "hx-sse");
79+ if (legacySSEValue) {
80+ var values = splitOnWhitespace(legacySSEValue);
81+ for (var i = 0; i < values.length; i++) {
82+ var value = values[i].split(/:(.+)/);
83+ if (value[0] === "connect") {
84+ return value[1];
85+ }
86+ }
87+ }
88+ }
89+
90+ function getLegacySSESwaps(elt) {
91+ var legacySSEValue = api.getAttributeValue(elt, "hx-sse");
92+ var returnArr = [];
93+ if (legacySSEValue) {
94+ var values = splitOnWhitespace(legacySSEValue);
95+ for (var i = 0; i < values.length; i++) {
96+ var value = values[i].split(/:(.+)/);
97+ if (value[0] === "swap") {
98+ returnArr.push(value[1]);
99+ }
100+ }
101+ }
102+ return returnArr;
103+ }
104+
105+ /**
106+ * createEventSourceOnElement creates a new EventSource connection on the provided element.
107+ * If a usable EventSource already exists, then it is returned. If not, then a new EventSource
108+ * is created and stored in the element's internalData.
109+ * @param {HTMLElement} elt
110+ * @param {number} retryCount
111+ * @returns {EventSource | null}
112+ */
113+ function createEventSourceOnElement(elt, retryCount) {
114+
115+ if (elt == null) {
116+ return null;
117+ }
118+
119+ var internalData = api.getInternalData(elt);
120+
121+ // get URL from element's attribute
122+ var sseURL = api.getAttributeValue(elt, "sse-connect");
123+
124+
125+ if (sseURL == undefined) {
126+ var legacyURL = getLegacySSEURL(elt)
127+ if (legacyURL) {
128+ sseURL = legacyURL;
129+ } else {
130+ return null;
131+ }
132+ }
133+
134+ // Connect to the EventSource
135+ var source = htmx.createEventSource(sseURL);
136+ internalData.sseEventSource = source;
137+
138+ // Create event handlers
139+ source.onerror = function (err) {
140+
141+ // Log an error event
142+ api.triggerErrorEvent(elt, "htmx:sseError", {error:err, source:source});
143+
144+ // If parent no longer exists in the document, then clean up this EventSource
145+ if (maybeCloseSSESource(elt)) {
146+ return;
147+ }
148+
149+ // Otherwise, try to reconnect the EventSource
150+ if (source.readyState === EventSource.CLOSED) {
151+ retryCount = retryCount || 0;
152+ var timeout = Math.random() * (2 ^ retryCount) * 500;
153+ window.setTimeout(function() {
154+ createEventSourceOnElement(elt, Math.min(7, retryCount+1));
155+ }, timeout);
156+ }
157+ };
158+
159+ source.onopen = function (evt) {
160+ api.triggerEvent(elt, "htmx:sseOpen", {source: source});
161+ }
162+
163+ // Add message handlers for every `sse-swap` attribute
164+ queryAttributeOnThisOrChildren(elt, "sse-swap").forEach(function(child) {
165+
166+ var sseSwapAttr = api.getAttributeValue(child, "sse-swap");
167+ if (sseSwapAttr) {
168+ var sseEventNames = sseSwapAttr.split(",");
169+ } else {
170+ var sseEventNames = getLegacySSESwaps(child);
171+ }
172+
173+ for (var i = 0 ; i < sseEventNames.length ; i++) {
174+ var sseEventName = sseEventNames[i].trim();
175+ var listener = function(event) {
176+
177+ // If the parent is missing then close SSE and remove listener
178+ if (maybeCloseSSESource(elt)) {
179+ source.removeEventListener(sseEventName, listener);
180+ return;
181+ }
182+
183+ // swap the response into the DOM and trigger a notification
184+ swap(child, event.data);
185+ api.triggerEvent(elt, "htmx:sseMessage", event);
186+ };
187+
188+ // Register the new listener
189+ api.getInternalData(elt).sseEventListener = listener;
190+ source.addEventListener(sseEventName, listener);
191+ }
192+ });
193+
194+ // Add message handlers for every `hx-trigger="sse:*"` attribute
195+ queryAttributeOnThisOrChildren(elt, "hx-trigger").forEach(function(child) {
196+
197+ var sseEventName = api.getAttributeValue(child, "hx-trigger");
198+ if (sseEventName == null) {
199+ return;
200+ }
201+
202+ // Only process hx-triggers for events with the "sse:" prefix
203+ if (sseEventName.slice(0, 4) != "sse:") {
204+ return;
205+ }
206+
207+ var listener = function(event) {
208+
209+ // If parent is missing, then close SSE and remove listener
210+ if (maybeCloseSSESource(elt)) {
211+ source.removeEventListener(sseEventName, listener);
212+ return;
213+ }
214+
215+ // Trigger events to be handled by the rest of htmx
216+ htmx.trigger(child, sseEventName, event);
217+ htmx.trigger(child, "htmx:sseMessage", event);
218+ }
219+
220+ // Register the new listener
221+ api.getInternalData(elt).sseEventListener = listener;
222+ source.addEventListener(sseEventName.slice(4), listener);
223+ });
224+ }
225+
226+ /**
227+ * maybeCloseSSESource confirms that the parent element still exists.
228+ * If not, then any associated SSE source is closed and the function returns true.
229+ *
230+ * @param {HTMLElement} elt
231+ * @returns boolean
232+ */
233+ function maybeCloseSSESource(elt) {
234+ if (!api.bodyContains(elt)) {
235+ var source = api.getInternalData(elt).sseEventSource;
236+ if (source != undefined) {
237+ source.close();
238+ // source = null
239+ return true;
240+ }
241+ }
242+ return false;
243+ }
244+
245+ /**
246+ * queryAttributeOnThisOrChildren returns all nodes that contain the requested attributeName, INCLUDING THE PROVIDED ROOT ELEMENT.
247+ *
248+ * @param {HTMLElement} elt
249+ * @param {string} attributeName
250+ */
251+ function queryAttributeOnThisOrChildren(elt, attributeName) {
252+
253+ var result = [];
254+
255+ // If the parent element also contains the requested attribute, then add it to the results too.
256+ if (api.hasAttribute(elt, attributeName) || api.hasAttribute(elt, "hx-sse")) {
257+ result.push(elt);
258+ }
259+
260+ // Search all child nodes that match the requested attribute
261+ elt.querySelectorAll("[" + attributeName + "], [data-" + attributeName + "], [hx-sse], [data-hx-sse]").forEach(function(node) {
262+ result.push(node);
263+ });
264+
265+ return result;
266+ }
267+
268+ /**
269+ * @param {HTMLElement} elt
270+ * @param {string} content
271+ */
272+ function swap(elt, content) {
273+
274+ api.withExtensions(elt, function(extension) {
275+ content = extension.transformResponse(content, null, elt);
276+ });
277+
278+ var swapSpec = api.getSwapSpecification(elt);
279+ var target = api.getTarget(elt);
280+ var settleInfo = api.makeSettleInfo(elt);
281+
282+ api.selectAndSwap(swapSpec.swapStyle, target, elt, content, settleInfo);
283+
284+ settleInfo.elts.forEach(function (elt) {
285+ if (elt.classList) {
286+ elt.classList.add(htmx.config.settlingClass);
287+ }
288+ api.triggerEvent(elt, 'htmx:beforeSettle');
289+ });
290+
291+ // Handle settle tasks (with delay if requested)
292+ if (swapSpec.settleDelay > 0) {
293+ setTimeout(doSettle(settleInfo), swapSpec.settleDelay);
294+ } else {
295+ doSettle(settleInfo)();
296+ }
297+ }
298+
299+ /**
300+ * doSettle mirrors much of the functionality in htmx that
301+ * settles elements after their content has been swapped.
302+ * TODO: this should be published by htmx, and not duplicated here
303+ * @param {import("../htmx").HtmxSettleInfo} settleInfo
304+ * @returns () => void
305+ */
306+ function doSettle(settleInfo) {
307+
308+ return function() {
309+ settleInfo.tasks.forEach(function (task) {
310+ task.call();
311+ });
312+
313+ settleInfo.elts.forEach(function (elt) {
314+ if (elt.classList) {
315+ elt.classList.remove(htmx.config.settlingClass);
316+ }
317+ api.triggerEvent(elt, 'htmx:afterSettle');
318+ });
319+ }
320+ }
321+
322+})();⏎̸
M logs/app.log +385 -0
@@ -58,3 +58,388 @@
5858 {"level":"info","time":"2023-09-05T03:56:40+02:00","message":"Server is listening on port 1323"}
5959 {"level":"info","time":"2023-09-05T06:50:58+02:00","message":"Server is listening on port 1323"}
6060 {"level":"info","time":"2023-09-05T06:52:00+02:00","message":"Server is listening on port 1323"}
61+{"level":"info","time":"2023-09-05T08:05:59+02:00","message":"Server is listening on port 1323"}
62+{"level":"info","time":"2023-09-05T08:07:22+02:00","message":"Server is listening on port 1323"}
63+{"level":"info","time":"2023-09-05T08:07:22+02:00","message":"Server is listening on port 1323"}
64+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:07:22+02:00","message":"Failed to start the server"}
65+{"level":"info","time":"2023-09-05T08:07:54+02:00","message":"Server is listening on port 1323"}
66+{"level":"info","time":"2023-09-05T08:07:54+02:00","message":"Server is listening on port 1323"}
67+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:07:54+02:00","message":"Failed to start the server"}
68+{"level":"info","time":"2023-09-05T08:08:06+02:00","message":"Server is listening on port 1323"}
69+{"level":"info","time":"2023-09-05T08:08:06+02:00","message":"Server is listening on port 1323"}
70+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:08:06+02:00","message":"Failed to start the server"}
71+{"level":"info","time":"2023-09-05T08:08:19+02:00","message":"Server is listening on port 1323"}
72+{"level":"info","time":"2023-09-05T08:08:19+02:00","message":"Server is listening on port 1323"}
73+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:08:19+02:00","message":"Failed to start the server"}
74+{"level":"info","time":"2023-09-05T08:11:37+02:00","message":"Server is listening on port 1323"}
75+{"level":"info","time":"2023-09-05T08:11:37+02:00","message":"Server is listening on port 1323"}
76+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:11:37+02:00","message":"Failed to start the server"}
77+{"level":"info","time":"2023-09-05T08:12:11+02:00","message":"Server is listening on port 1323"}
78+{"level":"info","time":"2023-09-05T08:12:45+02:00","message":"Server is listening on port 1323"}
79+{"level":"info","time":"2023-09-05T08:15:30+02:00","message":"Server is listening on port 1323"}
80+{"level":"info","time":"2023-09-05T08:17:57+02:00","message":"Server is listening on port 1323"}
81+{"level":"info","time":"2023-09-05T08:18:34+02:00","message":"Server is listening on port 1323"}
82+{"level":"info","time":"2023-09-05T08:18:34+02:00","message":"Server is listening on port 1323"}
83+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:18:34+02:00","message":"Failed to start the server"}
84+{"level":"info","time":"2023-09-05T08:19:19+02:00","message":"Server is listening on port 1323"}
85+{"level":"info","time":"2023-09-05T08:19:19+02:00","message":"Server is listening on port 1323"}
86+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:19:19+02:00","message":"Failed to start the server"}
87+{"level":"info","time":"2023-09-05T08:20:25+02:00","message":"Server is listening on port 1323"}
88+{"level":"info","time":"2023-09-05T08:20:25+02:00","message":"Server is listening on port 1323"}
89+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:20:25+02:00","message":"Failed to start the server"}
90+{"level":"info","time":"2023-09-05T08:23:16+02:00","message":"Server is listening on port 1323"}
91+{"level":"info","time":"2023-09-05T08:23:16+02:00","message":"Server is listening on port 1323"}
92+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:23:16+02:00","message":"Failed to start the server"}
93+{"level":"info","time":"2023-09-05T08:24:29+02:00","message":"Server is listening on port 1323"}
94+{"level":"info","time":"2023-09-05T08:24:29+02:00","message":"Server is listening on port 1323"}
95+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:24:29+02:00","message":"Failed to start the server"}
96+{"level":"info","time":"2023-09-05T08:31:18+02:00","message":"Server is listening on port 1323"}
97+{"level":"info","time":"2023-09-05T08:31:18+02:00","message":"Server is listening on port 1323"}
98+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:31:18+02:00","message":"Failed to start the server"}
99+{"level":"info","time":"2023-09-05T08:33:39+02:00","message":"Server is listening on port 1323"}
100+{"level":"info","time":"2023-09-05T08:33:39+02:00","message":"Server is listening on port 1323"}
101+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:33:39+02:00","message":"Failed to start the server"}
102+{"level":"info","time":"2023-09-05T08:34:09+02:00","message":"Server is listening on port 1323"}
103+{"level":"info","time":"2023-09-05T08:40:52+02:00","message":"Server is listening on port 1323"}
104+{"level":"info","time":"2023-09-05T08:40:52+02:00","message":"Server is listening on port 1323"}
105+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:40:52+02:00","message":"Failed to start the server"}
106+{"level":"info","time":"2023-09-05T08:43:24+02:00","message":"Server is listening on port 1323"}
107+{"level":"info","time":"2023-09-05T08:44:45+02:00","message":"Server is listening on port 1323"}
108+{"level":"warn","time":"2023-09-05T08:49:04+02:00","message":"Graceful shutdown initiated"}
109+{"level":"warn","time":"2023-09-05T08:49:04+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
110+{"level":"info","time":"2023-09-05T08:49:09+02:00","message":"Server shutdown"}
111+{"level":"info","time":"2023-09-05T08:49:13+02:00","message":"Server is listening on port 1323"}
112+{"level":"warn","time":"2023-09-05T08:50:43+02:00","message":"Graceful shutdown initiated"}
113+{"level":"warn","time":"2023-09-05T08:50:43+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
114+{"level":"info","time":"2023-09-05T08:50:44+02:00","message":"Shutdown cancelled by user"}
115+{"level":"info","time":"2023-09-05T08:50:49+02:00","message":"Server is listening on port 1323"}
116+{"level":"warn","time":"2023-09-05T08:51:23+02:00","message":"Graceful shutdown initiated"}
117+{"level":"warn","time":"2023-09-05T08:51:23+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
118+{"level":"info","time":"2023-09-05T08:51:23+02:00","message":"Shutdown cancelled by user"}
119+{"level":"info","time":"2023-09-05T08:51:26+02:00","message":"Server is listening on port 1323"}
120+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
121+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
122+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
123+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
124+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
125+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
126+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
127+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
128+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
129+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
130+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
131+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
132+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
133+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
134+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
135+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
136+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
137+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
138+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
139+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
140+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
141+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
142+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
143+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43272: runtime error: invalid memory address or nil pointer dereference"}
144+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 34 [running]:"}
145+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
146+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
147+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
148+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
149+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0003ba000})"}
150+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
151+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0003ba000})"}
152+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
153+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0003ba000})"}
154+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
155+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0003ba000})"}
156+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
157+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0003ba000})"}
158+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
159+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0003ba000})"}
160+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
161+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e2a0}, 0xc000238500)"}
162+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
163+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0002120c0?}, {0x1336a18?, 0xc00025e2a0?}, 0x6?)"}
164+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
165+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc000216000, {0x13374c8, 0xc0000b42a0})"}
166+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
167+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
168+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
169+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
170+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43302: runtime error: invalid memory address or nil pointer dereference"}
171+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 24 [running]:"}
172+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
173+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
174+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
175+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
176+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0000d80a0})"}
177+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
178+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0000d80a0})"}
179+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
180+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0000d80a0})"}
181+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
182+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0000d80a0})"}
183+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
184+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0000d80a0})"}
185+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
186+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0000d80a0})"}
187+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
188+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc000334540}, 0xc000324400)"}
189+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
190+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0001df230?}, {0x1336a18?, 0xc000334540?}, 0x6?)"}
191+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
192+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc0001a63f0, {0x13374c8, 0xc0000b42a0})"}
193+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
194+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
195+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
196+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
197+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43288: runtime error: invalid memory address or nil pointer dereference"}
198+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 50 [running]:"}
199+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
200+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
201+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
202+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
203+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0002640a0})"}
204+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
205+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0002640a0})"}
206+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
207+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0002640a0})"}
208+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
209+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0002640a0})"}
210+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
211+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0002640a0})"}
212+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
213+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0002640a0})"}
214+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
215+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e460}, 0xc000238600)"}
216+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
217+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0000b4300?}, {0x1336a18?, 0xc00025e460?}, 0x6?)"}
218+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
219+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc00031e000, {0x13374c8, 0xc0000b42a0})"}
220+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
221+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
222+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
223+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
224+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43312: runtime error: invalid memory address or nil pointer dereference"}
225+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 66 [running]:"}
226+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
227+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
228+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
229+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
230+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc000122280})"}
231+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
232+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc000122280})"}
233+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
234+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc000122280})"}
235+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
236+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc000122280})"}
237+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
238+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc000122280})"}
239+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
240+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc000122280})"}
241+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
242+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc000334700}, 0xc000324500)"}
243+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
244+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc000384090?}, {0x1336a18?, 0xc000334700?}, 0x6?)"}
245+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
246+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc000388000, {0x13374c8, 0xc0000b42a0})"}
247+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
248+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
249+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
250+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
251+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43294: runtime error: invalid memory address or nil pointer dereference"}
252+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 23 [running]:"}
253+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
254+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
255+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
256+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
257+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc000264140})"}
258+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
259+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc000264140})"}
260+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
261+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc000264140})"}
262+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
263+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc000264140})"}
264+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
265+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc000264140})"}
266+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
267+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc000264140})"}
268+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
269+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e620}, 0xc000238700)"}
270+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
271+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0001df140?}, {0x1336a18?, 0xc00025e620?}, 0x6?)"}
272+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
273+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc0001a6360, {0x13374c8, 0xc0000b42a0})"}
274+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
275+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
276+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
277+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
278+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43318: runtime error: invalid memory address or nil pointer dereference"}
279+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 67 [running]:"}
280+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
281+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
282+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
283+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
284+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0001223c0})"}
285+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
286+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0001223c0})"}
287+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
288+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0001223c0})"}
289+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
290+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0001223c0})"}
291+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
292+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0001223c0})"}
293+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
294+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0001223c0})"}
295+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
296+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc0003348c0}, 0xc000324600)"}
297+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
298+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc000384150?}, {0x1336a18?, 0xc0003348c0?}, 0x6?)"}
299+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
300+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc000388090, {0x13374c8, 0xc0000b42a0})"}
301+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
302+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
303+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
304+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
305+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:39638: runtime error: invalid memory address or nil pointer dereference"}
306+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 12 [running]:"}
307+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
308+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
309+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
310+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
311+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0002641e0})"}
312+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
313+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0002641e0})"}
314+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
315+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0002641e0})"}
316+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
317+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0002641e0})"}
318+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
319+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0002641e0})"}
320+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
321+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0002641e0})"}
322+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
323+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e7e0}, 0xc000238800)"}
324+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
325+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc00045a5a0?}, {0x1336a18?, 0xc00025e7e0?}, 0x6?)"}
326+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
327+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc0002163f0, {0x13374c8, 0xc0000b42a0})"}
328+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
329+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
330+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
331+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"Color scheme detected: light"}
332+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"echo: http: panic serving [::1]:39644: runtime error: invalid memory address or nil pointer dereference"}
333+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"goroutine 55 [running]:"}
334+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"net/http.(*conn).serve.func1()"}
335+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
336+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
337+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
338+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc000344000})"}
339+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
340+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc000344000})"}
341+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
342+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc000344000})"}
343+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
344+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc000344000})"}
345+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
346+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc000344000})"}
347+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
348+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc000344000})"}
349+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
350+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc0001680e0}, 0xc0001b4100)"}
351+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
352+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"net/http.serverHandler.ServeHTTP({0xc00029b6e0?}, {0x1336a18?, 0xc0001680e0?}, 0x6?)"}
353+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
354+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"net/http.(*conn).serve(0xc0001a61b0, {0x13374c8, 0xc0000b42a0})"}
355+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
356+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
357+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
358+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"Color scheme detected: light"}
359+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"echo: http: panic serving [::1]:57658: runtime error: invalid memory address or nil pointer dereference"}
360+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"goroutine 14 [running]:"}
361+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"net/http.(*conn).serve.func1()"}
362+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
363+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
364+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
365+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc000264280})"}
366+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
367+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc000264280})"}
368+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
369+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc000264280})"}
370+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
371+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc000264280})"}
372+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
373+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc000264280})"}
374+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
375+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc000264280})"}
376+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
377+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e8c0}, 0xc000238900)"}
378+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
379+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"net/http.serverHandler.ServeHTTP({0xc00045b2c0?}, {0x1336a18?, 0xc00025e8c0?}, 0x6?)"}
380+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
381+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"net/http.(*conn).serve(0xc0002165a0, {0x13374c8, 0xc0000b42a0})"}
382+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
383+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
384+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
385+{"level":"warn","time":"2023-09-05T08:55:12+02:00","message":"Graceful shutdown initiated"}
386+{"level":"warn","time":"2023-09-05T08:55:12+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
387+{"level":"info","time":"2023-09-05T08:55:16+02:00","message":"Shutdown cancelled by user"}
388+{"level":"info","time":"2023-09-05T08:55:17+02:00","message":"Server is listening on port 1323"}
389+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"echo: http: panic serving [::1]:42274: runtime error: invalid memory address or nil pointer dereference"}
390+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"goroutine 18 [running]:"}
391+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"net/http.(*conn).serve.func1()"}
392+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
393+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
394+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
395+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e710, 0xc0002d0000})"}
396+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:16 +0x6a"}
397+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e710, 0xc0002d0000})"}
398+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:24 +0x25"}
399+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e710, 0xc0002d0000})"}
400+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
401+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e710, 0xc0002d0000})"}
402+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:16 +0x68"}
403+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e710, 0xc0002d0000})"}
404+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
405+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e710, 0xc0002d0000})"}
406+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
407+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc0000d2fc0, {0x1336a78?, 0xc0002ca000}, 0xc0002a4000)"}
408+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
409+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0002860c0?}, {0x1336a78?, 0xc0002ca000?}, 0x6?)"}
410+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
411+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"net/http.(*conn).serve(0xc00028a000, {0x1337528, 0xc00012a2a0})"}
412+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
413+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"created by net/http.(*Server).Serve in goroutine 7"}
414+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
415+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"echo: http: panic serving [::1]:51344: runtime error: invalid memory address or nil pointer dereference"}
416+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"goroutine 34 [running]:"}
417+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"net/http.(*conn).serve.func1()"}
418+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
419+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
420+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
421+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e710, 0xc00016e000})"}
422+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:16 +0x6a"}
423+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e710, 0xc00016e000})"}
424+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:24 +0x25"}
425+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e710, 0xc00016e000})"}
426+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
427+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e710, 0xc00016e000})"}
428+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:16 +0x68"}
429+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e710, 0xc00016e000})"}
430+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
431+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e710, 0xc00016e000})"}
432+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
433+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc0000d2fc0, {0x1336a78?, 0xc00016a000}, 0xc000160000)"}
434+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
435+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"net/http.serverHandler.ServeHTTP({0xc00012ad20?}, {0x1336a78?, 0xc00016a000?}, 0x6?)"}
436+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
437+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"net/http.(*conn).serve(0xc00015c000, {0x1337528, 0xc00012a2a0})"}
438+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
439+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"created by net/http.(*Server).Serve in goroutine 7"}
440+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
441+{"level":"warn","time":"2023-09-05T08:57:57+02:00","message":"Graceful shutdown initiated"}
442+{"level":"warn","time":"2023-09-05T08:57:57+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
443+{"level":"info","time":"2023-09-05T08:58:02+02:00","message":"Server shutdown"}
444+{"level":"info","time":"2023-09-05T08:58:05+02:00","message":"Server is listening on port 1323"}
445+{"level":"debug","type":"app","time":"2023-09-05T08:58:15+02:00","message":"Fresh installation detected, redirecting to /admin/install"}
@@ -58,3 +58,388 @@
58 {"level":"info","time":"2023-09-05T03:56:40+02:00","message":"Server is listening on port 1323"}58 {"level":"info","time":"2023-09-05T03:56:40+02:00","message":"Server is listening on port 1323"}
59 {"level":"info","time":"2023-09-05T06:50:58+02:00","message":"Server is listening on port 1323"}59 {"level":"info","time":"2023-09-05T06:50:58+02:00","message":"Server is listening on port 1323"}
60 {"level":"info","time":"2023-09-05T06:52:00+02:00","message":"Server is listening on port 1323"}60 {"level":"info","time":"2023-09-05T06:52:00+02:00","message":"Server is listening on port 1323"}
61+{"level":"info","time":"2023-09-05T08:05:59+02:00","message":"Server is listening on port 1323"}
62+{"level":"info","time":"2023-09-05T08:07:22+02:00","message":"Server is listening on port 1323"}
63+{"level":"info","time":"2023-09-05T08:07:22+02:00","message":"Server is listening on port 1323"}
64+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:07:22+02:00","message":"Failed to start the server"}
65+{"level":"info","time":"2023-09-05T08:07:54+02:00","message":"Server is listening on port 1323"}
66+{"level":"info","time":"2023-09-05T08:07:54+02:00","message":"Server is listening on port 1323"}
67+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:07:54+02:00","message":"Failed to start the server"}
68+{"level":"info","time":"2023-09-05T08:08:06+02:00","message":"Server is listening on port 1323"}
69+{"level":"info","time":"2023-09-05T08:08:06+02:00","message":"Server is listening on port 1323"}
70+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:08:06+02:00","message":"Failed to start the server"}
71+{"level":"info","time":"2023-09-05T08:08:19+02:00","message":"Server is listening on port 1323"}
72+{"level":"info","time":"2023-09-05T08:08:19+02:00","message":"Server is listening on port 1323"}
73+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:08:19+02:00","message":"Failed to start the server"}
74+{"level":"info","time":"2023-09-05T08:11:37+02:00","message":"Server is listening on port 1323"}
75+{"level":"info","time":"2023-09-05T08:11:37+02:00","message":"Server is listening on port 1323"}
76+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:11:37+02:00","message":"Failed to start the server"}
77+{"level":"info","time":"2023-09-05T08:12:11+02:00","message":"Server is listening on port 1323"}
78+{"level":"info","time":"2023-09-05T08:12:45+02:00","message":"Server is listening on port 1323"}
79+{"level":"info","time":"2023-09-05T08:15:30+02:00","message":"Server is listening on port 1323"}
80+{"level":"info","time":"2023-09-05T08:17:57+02:00","message":"Server is listening on port 1323"}
81+{"level":"info","time":"2023-09-05T08:18:34+02:00","message":"Server is listening on port 1323"}
82+{"level":"info","time":"2023-09-05T08:18:34+02:00","message":"Server is listening on port 1323"}
83+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:18:34+02:00","message":"Failed to start the server"}
84+{"level":"info","time":"2023-09-05T08:19:19+02:00","message":"Server is listening on port 1323"}
85+{"level":"info","time":"2023-09-05T08:19:19+02:00","message":"Server is listening on port 1323"}
86+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:19:19+02:00","message":"Failed to start the server"}
87+{"level":"info","time":"2023-09-05T08:20:25+02:00","message":"Server is listening on port 1323"}
88+{"level":"info","time":"2023-09-05T08:20:25+02:00","message":"Server is listening on port 1323"}
89+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:20:25+02:00","message":"Failed to start the server"}
90+{"level":"info","time":"2023-09-05T08:23:16+02:00","message":"Server is listening on port 1323"}
91+{"level":"info","time":"2023-09-05T08:23:16+02:00","message":"Server is listening on port 1323"}
92+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:23:16+02:00","message":"Failed to start the server"}
93+{"level":"info","time":"2023-09-05T08:24:29+02:00","message":"Server is listening on port 1323"}
94+{"level":"info","time":"2023-09-05T08:24:29+02:00","message":"Server is listening on port 1323"}
95+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:24:29+02:00","message":"Failed to start the server"}
96+{"level":"info","time":"2023-09-05T08:31:18+02:00","message":"Server is listening on port 1323"}
97+{"level":"info","time":"2023-09-05T08:31:18+02:00","message":"Server is listening on port 1323"}
98+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:31:18+02:00","message":"Failed to start the server"}
99+{"level":"info","time":"2023-09-05T08:33:39+02:00","message":"Server is listening on port 1323"}
100+{"level":"info","time":"2023-09-05T08:33:39+02:00","message":"Server is listening on port 1323"}
101+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:33:39+02:00","message":"Failed to start the server"}
102+{"level":"info","time":"2023-09-05T08:34:09+02:00","message":"Server is listening on port 1323"}
103+{"level":"info","time":"2023-09-05T08:40:52+02:00","message":"Server is listening on port 1323"}
104+{"level":"info","time":"2023-09-05T08:40:52+02:00","message":"Server is listening on port 1323"}
105+{"level":"fatal","error":"listen tcp :1323: bind: address already in use","time":"2023-09-05T08:40:52+02:00","message":"Failed to start the server"}
106+{"level":"info","time":"2023-09-05T08:43:24+02:00","message":"Server is listening on port 1323"}
107+{"level":"info","time":"2023-09-05T08:44:45+02:00","message":"Server is listening on port 1323"}
108+{"level":"warn","time":"2023-09-05T08:49:04+02:00","message":"Graceful shutdown initiated"}
109+{"level":"warn","time":"2023-09-05T08:49:04+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
110+{"level":"info","time":"2023-09-05T08:49:09+02:00","message":"Server shutdown"}
111+{"level":"info","time":"2023-09-05T08:49:13+02:00","message":"Server is listening on port 1323"}
112+{"level":"warn","time":"2023-09-05T08:50:43+02:00","message":"Graceful shutdown initiated"}
113+{"level":"warn","time":"2023-09-05T08:50:43+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
114+{"level":"info","time":"2023-09-05T08:50:44+02:00","message":"Shutdown cancelled by user"}
115+{"level":"info","time":"2023-09-05T08:50:49+02:00","message":"Server is listening on port 1323"}
116+{"level":"warn","time":"2023-09-05T08:51:23+02:00","message":"Graceful shutdown initiated"}
117+{"level":"warn","time":"2023-09-05T08:51:23+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
118+{"level":"info","time":"2023-09-05T08:51:23+02:00","message":"Shutdown cancelled by user"}
119+{"level":"info","time":"2023-09-05T08:51:26+02:00","message":"Server is listening on port 1323"}
120+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
121+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
122+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
123+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
124+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
125+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
126+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
127+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
128+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
129+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
130+{"level":"info","type":"app","time":"2023-09-05T08:51:28+02:00","message":"Color scheme detected: light"}
131+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
132+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
133+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
134+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
135+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
136+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
137+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
138+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
139+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
140+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
141+{"level":"info","type":"app","time":"2023-09-05T08:54:37+02:00","message":"Color scheme detected: light"}
142+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
143+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43272: runtime error: invalid memory address or nil pointer dereference"}
144+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 34 [running]:"}
145+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
146+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
147+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
148+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
149+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0003ba000})"}
150+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
151+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0003ba000})"}
152+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
153+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0003ba000})"}
154+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
155+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0003ba000})"}
156+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
157+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0003ba000})"}
158+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
159+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0003ba000})"}
160+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
161+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e2a0}, 0xc000238500)"}
162+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
163+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0002120c0?}, {0x1336a18?, 0xc00025e2a0?}, 0x6?)"}
164+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
165+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc000216000, {0x13374c8, 0xc0000b42a0})"}
166+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
167+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
168+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
169+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
170+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43302: runtime error: invalid memory address or nil pointer dereference"}
171+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 24 [running]:"}
172+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
173+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
174+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
175+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
176+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0000d80a0})"}
177+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
178+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0000d80a0})"}
179+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
180+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0000d80a0})"}
181+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
182+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0000d80a0})"}
183+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
184+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0000d80a0})"}
185+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
186+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0000d80a0})"}
187+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
188+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc000334540}, 0xc000324400)"}
189+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
190+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0001df230?}, {0x1336a18?, 0xc000334540?}, 0x6?)"}
191+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
192+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc0001a63f0, {0x13374c8, 0xc0000b42a0})"}
193+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
194+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
195+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
196+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
197+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43288: runtime error: invalid memory address or nil pointer dereference"}
198+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 50 [running]:"}
199+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
200+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
201+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
202+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
203+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0002640a0})"}
204+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
205+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0002640a0})"}
206+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
207+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0002640a0})"}
208+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
209+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0002640a0})"}
210+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
211+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0002640a0})"}
212+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
213+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0002640a0})"}
214+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
215+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e460}, 0xc000238600)"}
216+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
217+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0000b4300?}, {0x1336a18?, 0xc00025e460?}, 0x6?)"}
218+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
219+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc00031e000, {0x13374c8, 0xc0000b42a0})"}
220+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
221+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
222+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
223+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
224+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43312: runtime error: invalid memory address or nil pointer dereference"}
225+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 66 [running]:"}
226+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
227+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
228+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
229+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
230+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc000122280})"}
231+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
232+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc000122280})"}
233+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
234+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc000122280})"}
235+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
236+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc000122280})"}
237+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
238+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc000122280})"}
239+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
240+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc000122280})"}
241+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
242+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc000334700}, 0xc000324500)"}
243+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
244+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc000384090?}, {0x1336a18?, 0xc000334700?}, 0x6?)"}
245+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
246+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc000388000, {0x13374c8, 0xc0000b42a0})"}
247+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
248+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
249+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
250+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
251+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43294: runtime error: invalid memory address or nil pointer dereference"}
252+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 23 [running]:"}
253+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
254+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
255+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
256+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
257+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc000264140})"}
258+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
259+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc000264140})"}
260+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
261+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc000264140})"}
262+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
263+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc000264140})"}
264+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
265+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc000264140})"}
266+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
267+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc000264140})"}
268+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
269+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e620}, 0xc000238700)"}
270+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
271+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0001df140?}, {0x1336a18?, 0xc00025e620?}, 0x6?)"}
272+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
273+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc0001a6360, {0x13374c8, 0xc0000b42a0})"}
274+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
275+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
276+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
277+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
278+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:43318: runtime error: invalid memory address or nil pointer dereference"}
279+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 67 [running]:"}
280+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
281+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
282+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
283+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
284+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0001223c0})"}
285+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
286+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0001223c0})"}
287+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
288+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0001223c0})"}
289+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
290+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0001223c0})"}
291+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
292+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0001223c0})"}
293+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
294+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0001223c0})"}
295+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
296+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc0003348c0}, 0xc000324600)"}
297+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
298+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc000384150?}, {0x1336a18?, 0xc0003348c0?}, 0x6?)"}
299+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
300+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc000388090, {0x13374c8, 0xc0000b42a0})"}
301+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
302+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
303+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
304+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"Color scheme detected: light"}
305+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"echo: http: panic serving [::1]:39638: runtime error: invalid memory address or nil pointer dereference"}
306+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"goroutine 12 [running]:"}
307+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve.func1()"}
308+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
309+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
310+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
311+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc0002641e0})"}
312+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
313+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc0002641e0})"}
314+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
315+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc0002641e0})"}
316+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
317+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc0002641e0})"}
318+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
319+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc0002641e0})"}
320+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
321+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc0002641e0})"}
322+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
323+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e7e0}, 0xc000238800)"}
324+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
325+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.serverHandler.ServeHTTP({0xc00045a5a0?}, {0x1336a18?, 0xc00025e7e0?}, 0x6?)"}
326+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
327+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"net/http.(*conn).serve(0xc0002163f0, {0x13374c8, 0xc0000b42a0})"}
328+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
329+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
330+{"level":"info","type":"app","time":"2023-09-05T08:54:45+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
331+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"Color scheme detected: light"}
332+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"echo: http: panic serving [::1]:39644: runtime error: invalid memory address or nil pointer dereference"}
333+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"goroutine 55 [running]:"}
334+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"net/http.(*conn).serve.func1()"}
335+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
336+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
337+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
338+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc000344000})"}
339+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
340+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc000344000})"}
341+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
342+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc000344000})"}
343+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
344+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc000344000})"}
345+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
346+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc000344000})"}
347+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
348+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc000344000})"}
349+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
350+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc0001680e0}, 0xc0001b4100)"}
351+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
352+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"net/http.serverHandler.ServeHTTP({0xc00029b6e0?}, {0x1336a18?, 0xc0001680e0?}, 0x6?)"}
353+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
354+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"net/http.(*conn).serve(0xc0001a61b0, {0x13374c8, 0xc0000b42a0})"}
355+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
356+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
357+{"level":"info","type":"app","time":"2023-09-05T08:54:46+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
358+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"Color scheme detected: light"}
359+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"echo: http: panic serving [::1]:57658: runtime error: invalid memory address or nil pointer dereference"}
360+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"goroutine 14 [running]:"}
361+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"net/http.(*conn).serve.func1()"}
362+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
363+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
364+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
365+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e6b0, 0xc000264280})"}
366+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:15 +0x6a"}
367+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e6b0, 0xc000264280})"}
368+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:23 +0x25"}
369+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e6b0, 0xc000264280})"}
370+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
371+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e6b0, 0xc000264280})"}
372+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:19 +0xda"}
373+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e6b0, 0xc000264280})"}
374+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
375+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e6b0, 0xc000264280})"}
376+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
377+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc00014afc0, {0x1336a18?, 0xc00025e8c0}, 0xc000238900)"}
378+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
379+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"net/http.serverHandler.ServeHTTP({0xc00045b2c0?}, {0x1336a18?, 0xc00025e8c0?}, 0x6?)"}
380+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
381+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"net/http.(*conn).serve(0xc0002165a0, {0x13374c8, 0xc0000b42a0})"}
382+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
383+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"created by net/http.(*Server).Serve in goroutine 20"}
384+{"level":"info","type":"app","time":"2023-09-05T08:54:51+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
385+{"level":"warn","time":"2023-09-05T08:55:12+02:00","message":"Graceful shutdown initiated"}
386+{"level":"warn","time":"2023-09-05T08:55:12+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
387+{"level":"info","time":"2023-09-05T08:55:16+02:00","message":"Shutdown cancelled by user"}
388+{"level":"info","time":"2023-09-05T08:55:17+02:00","message":"Server is listening on port 1323"}
389+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"echo: http: panic serving [::1]:42274: runtime error: invalid memory address or nil pointer dereference"}
390+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"goroutine 18 [running]:"}
391+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"net/http.(*conn).serve.func1()"}
392+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
393+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
394+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
395+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e710, 0xc0002d0000})"}
396+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:16 +0x6a"}
397+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e710, 0xc0002d0000})"}
398+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:24 +0x25"}
399+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e710, 0xc0002d0000})"}
400+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
401+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e710, 0xc0002d0000})"}
402+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:16 +0x68"}
403+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e710, 0xc0002d0000})"}
404+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
405+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e710, 0xc0002d0000})"}
406+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
407+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc0000d2fc0, {0x1336a78?, 0xc0002ca000}, 0xc0002a4000)"}
408+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
409+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"net/http.serverHandler.ServeHTTP({0xc0002860c0?}, {0x1336a78?, 0xc0002ca000?}, 0x6?)"}
410+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
411+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"net/http.(*conn).serve(0xc00028a000, {0x1337528, 0xc00012a2a0})"}
412+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
413+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"created by net/http.(*Server).Serve in goroutine 7"}
414+{"level":"info","type":"app","time":"2023-09-05T08:55:19+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
415+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"echo: http: panic serving [::1]:51344: runtime error: invalid memory address or nil pointer dereference"}
416+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"goroutine 34 [running]:"}
417+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"net/http.(*conn).serve.func1()"}
418+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/net/http/server.go:1868 +0xb9"}
419+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"panic({0x8e12c0?, 0x165ea90?})"}
420+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/runtime/panic.go:920 +0x270"}
421+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.EnableLogger({0x133e710, 0xc00016e000})"}
422+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:16 +0x6a"}
423+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/routes.AdminRoute({0x133e710, 0xc00016e000})"}
424+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/routes/admin-routes.go:24 +0x25"}
425+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"github.com/labstack/echo/v4.(*Echo).add.func1({0x133e710, 0xc00016e000})"}
426+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:582 +0x4b"}
427+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.ColorSchemeDetection.func1({0x133e710, 0xc00016e000})"}
428+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-color-scheme.go:16 +0x68"}
429+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"gogs.bnema.dev/gordon-echo/internal/http/middlewares.LanguageDetection.func1({0x133e710, 0xc00016e000})"}
430+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/Workspace/Projects/Gordon/gordon-echo/internal/http/middlewares/detect-lang.go:18 +0x68"}
431+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"github.com/labstack/echo/v4/middleware.RequestLoggerConfig.ToMiddleware.func1.1({0x133e710, 0xc00016e000})"}
432+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/middleware/request_logger.go:259 +0x16b"}
433+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc0000d2fc0, {0x1336a78?, 0xc00016a000}, 0xc000160000)"}
434+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/home/brice/go/pkg/mod/github.com/labstack/echo/v4@v4.11.1/echo.go:669 +0x399"}
435+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"net/http.serverHandler.ServeHTTP({0xc00012ad20?}, {0x1336a78?, 0xc00016a000?}, 0x6?)"}
436+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/net/http/server.go:2938 +0x8e"}
437+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"net/http.(*conn).serve(0xc00015c000, {0x1337528, 0xc00012a2a0})"}
438+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/net/http/server.go:2009 +0x5f4"}
439+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"created by net/http.(*Server).Serve in goroutine 7"}
440+{"level":"info","type":"app","time":"2023-09-05T08:55:49+02:00","message":"\t/usr/local/go/src/net/http/server.go:3086 +0x5cb"}
441+{"level":"warn","time":"2023-09-05T08:57:57+02:00","message":"Graceful shutdown initiated"}
442+{"level":"warn","time":"2023-09-05T08:57:57+02:00","message":"Server will shutdown in 5 seconds press ENTER to cancel"}
443+{"level":"info","time":"2023-09-05T08:58:02+02:00","message":"Server shutdown"}
444+{"level":"info","time":"2023-09-05T08:58:05+02:00","message":"Server is listening on port 1323"}
445+{"level":"debug","type":"app","time":"2023-09-05T08:58:15+02:00","message":"Fresh installation detected, redirecting to /admin/install"}
M logs/http.log +321 -0
@@ -59,3 +59,324 @@
5959 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}
6060 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}
6161 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}
62+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:06:07+02:00","message":"request"}
63+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:06:07+02:00","message":"request"}
64+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
65+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
66+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
67+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
68+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
69+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:07:27+02:00","message":"request"}
70+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
71+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
72+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:07:28+02:00","message":"request"}
73+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:07:28+02:00","message":"request"}
74+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
75+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:07:57+02:00","message":"request"}
76+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
77+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
78+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
79+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
80+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
81+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
82+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
83+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
84+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
85+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
86+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:08:08+02:00","message":"request"}
87+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
88+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
89+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
90+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
91+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
92+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
93+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
94+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
95+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
96+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
97+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
98+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
99+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
100+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
101+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:08:09+02:00","message":"request"}
102+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
103+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:08:10+02:00","message":"request"}
104+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:08:10+02:00","message":"request"}
105+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:08:10+02:00","message":"request"}
106+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:08:10+02:00","message":"request"}
107+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:08:41+02:00","message":"request"}
108+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:08:41+02:00","message":"request"}
109+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:08:41+02:00","message":"request"}
110+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":302,"time":"2023-09-05T08:08:52+02:00","message":"request"}
111+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:08:52+02:00","message":"request"}
112+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:08:52+02:00","message":"request"}
113+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
114+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
115+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
116+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
117+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:08:53+02:00","message":"request"}
118+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
119+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
120+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
121+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
122+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:12:04+02:00","message":"request"}
123+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:04+02:00","message":"request"}
124+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
125+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
126+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
127+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
128+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
129+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
130+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
131+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:04+02:00","message":"request"}
132+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:14+02:00","message":"request"}
133+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
134+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
135+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
136+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
137+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
138+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
139+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
140+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:14+02:00","message":"request"}
141+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:47+02:00","message":"request"}
142+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
143+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
144+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
145+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
146+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
147+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
148+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
149+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:47+02:00","message":"request"}
150+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:48+02:00","message":"request"}
151+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
152+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
153+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
154+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
155+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
156+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
157+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
158+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:48+02:00","message":"request"}
159+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:48+02:00","message":"request"}
160+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
161+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
162+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
163+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
164+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
165+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
166+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
167+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:48+02:00","message":"request"}
168+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":302,"time":"2023-09-05T08:15:35+02:00","message":"request"}
169+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
170+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:15:35+02:00","message":"request"}
171+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
172+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
173+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
174+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
175+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
176+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
177+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
178+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
179+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
180+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:15:46+02:00","message":"request"}
181+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
182+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
183+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
184+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
185+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
186+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
187+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:15:46+02:00","message":"request"}
188+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
189+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
190+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
191+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
192+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:17:59+02:00","message":"request"}
193+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
194+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
195+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
196+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
197+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
198+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
199+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
200+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:17:59+02:00","message":"request"}
201+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
202+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:18:36+02:00","message":"request"}
203+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
204+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
205+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
206+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
207+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
208+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
209+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
210+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
211+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
212+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/","status":404,"time":"2023-09-05T08:19:22+02:00","message":"request"}
213+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/","status":404,"time":"2023-09-05T08:19:25+02:00","message":"request"}
214+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:19:25+02:00","message":"request"}
215+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/","status":404,"time":"2023-09-05T08:19:26+02:00","message":"request"}
216+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:19:26+02:00","message":"request"}
217+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:19:28+02:00","message":"request"}
218+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
219+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
220+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
221+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
222+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
223+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:19:28+02:00","message":"request"}
224+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
225+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
226+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
227+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
228+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
229+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
230+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
231+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
232+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
233+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
234+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:20:27+02:00","message":"request"}
235+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
236+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
237+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
238+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:20:28+02:00","message":"request"}
239+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
240+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
241+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
242+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
243+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
244+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
245+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:20:29+02:00","message":"request"}
246+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
247+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
248+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
249+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
250+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
251+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
252+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
253+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:20:30+02:00","message":"request"}
254+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
255+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
256+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
257+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
258+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
259+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
260+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
261+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
262+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:41:00+02:00","message":"request"}
263+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
264+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
265+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
266+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
267+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
268+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
269+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
270+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
271+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
272+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
273+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:43:27+02:00","message":"request"}
274+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
275+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
276+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
277+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
278+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
279+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
280+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
281+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
282+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
283+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
284+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:44:48+02:00","message":"request"}
285+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
286+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
287+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
288+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
289+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
290+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
291+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
292+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
293+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
294+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
295+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
296+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
297+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
298+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:48:57+02:00","message":"request"}
299+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
300+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
301+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
302+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
303+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
304+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
305+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
306+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
307+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
308+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
309+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
310+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
311+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:48:59+02:00","message":"request"}
312+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:49:00+02:00","message":"request"}
313+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:49:00+02:00","message":"request"}
314+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:49:00+02:00","message":"request"}
315+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:49:00+02:00","message":"request"}
316+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
317+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:49:16+02:00","message":"request"}
318+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
319+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
320+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
321+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
322+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
323+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
324+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
325+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
326+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
327+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
328+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:50:51+02:00","message":"request"}
329+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
330+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
331+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
332+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
333+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
334+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
335+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
336+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
337+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
338+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
339+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
340+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
341+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
342+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
343+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
344+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:50:55+02:00","message":"request"}
345+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
346+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
347+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
348+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
349+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
350+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:51:28+02:00","message":"request"}
351+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
352+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
353+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
354+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
355+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
356+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
357+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
358+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
359+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
360+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
361+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
362+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
363+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
364+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
365+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:54:37+02:00","message":"request"}
366+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
367+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
368+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
369+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
370+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
371+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:58:15+02:00","message":"request"}
372+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
373+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:58:15+02:00","message":"request"}
374+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
375+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
376+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
377+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
378+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
379+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
380+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
381+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
382+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
@@ -59,3 +59,324 @@
59 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}59 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}
60 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}60 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}
61 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}61 {"level":"info","type":"http","remote_ip":"127.0.0.1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T06:52:05+02:00","message":"request"}
62+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:06:07+02:00","message":"request"}
63+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:06:07+02:00","message":"request"}
64+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
65+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
66+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
67+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
68+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
69+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:07:27+02:00","message":"request"}
70+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
71+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:07:27+02:00","message":"request"}
72+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:07:28+02:00","message":"request"}
73+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:07:28+02:00","message":"request"}
74+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
75+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:07:57+02:00","message":"request"}
76+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
77+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
78+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
79+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
80+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
81+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
82+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
83+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
84+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:07:57+02:00","message":"request"}
85+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
86+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:08:08+02:00","message":"request"}
87+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
88+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
89+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
90+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
91+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
92+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
93+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
94+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
95+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:08:08+02:00","message":"request"}
96+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
97+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
98+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
99+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
100+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
101+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:08:09+02:00","message":"request"}
102+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:08:09+02:00","message":"request"}
103+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:08:10+02:00","message":"request"}
104+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:08:10+02:00","message":"request"}
105+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:08:10+02:00","message":"request"}
106+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:08:10+02:00","message":"request"}
107+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:08:41+02:00","message":"request"}
108+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:08:41+02:00","message":"request"}
109+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:08:41+02:00","message":"request"}
110+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":302,"time":"2023-09-05T08:08:52+02:00","message":"request"}
111+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:08:52+02:00","message":"request"}
112+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:08:52+02:00","message":"request"}
113+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
114+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
115+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
116+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
117+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:08:53+02:00","message":"request"}
118+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
119+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
120+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
121+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:08:53+02:00","message":"request"}
122+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:12:04+02:00","message":"request"}
123+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:04+02:00","message":"request"}
124+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
125+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
126+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
127+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
128+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
129+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
130+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:04+02:00","message":"request"}
131+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:04+02:00","message":"request"}
132+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:14+02:00","message":"request"}
133+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
134+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
135+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
136+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
137+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
138+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
139+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:14+02:00","message":"request"}
140+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:14+02:00","message":"request"}
141+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:47+02:00","message":"request"}
142+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
143+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
144+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
145+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
146+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
147+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
148+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:47+02:00","message":"request"}
149+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:47+02:00","message":"request"}
150+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:48+02:00","message":"request"}
151+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
152+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
153+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
154+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
155+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
156+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
157+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
158+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:48+02:00","message":"request"}
159+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:12:48+02:00","message":"request"}
160+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
161+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
162+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
163+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
164+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
165+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
166+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:12:48+02:00","message":"request"}
167+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:12:48+02:00","message":"request"}
168+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":302,"time":"2023-09-05T08:15:35+02:00","message":"request"}
169+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
170+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:15:35+02:00","message":"request"}
171+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
172+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
173+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
174+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
175+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
176+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
177+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
178+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
179+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:15:35+02:00","message":"request"}
180+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:15:46+02:00","message":"request"}
181+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
182+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
183+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
184+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
185+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
186+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
187+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:15:46+02:00","message":"request"}
188+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
189+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
190+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
191+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:15:46+02:00","message":"request"}
192+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:17:59+02:00","message":"request"}
193+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/css/tailwind.css","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
194+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/iconoir.css","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
195+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/alpine.min.js","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
196+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx-sse.js","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
197+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/libs/htmx.min.js","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
198+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/js/custom.js","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
199+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/assets/imgs/gordon-mascot-hq-trsp.png","status":404,"time":"2023-09-05T08:17:59+02:00","message":"request"}
200+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:17:59+02:00","message":"request"}
201+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
202+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:18:36+02:00","message":"request"}
203+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
204+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
205+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
206+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
207+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
208+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
209+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
210+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
211+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:18:36+02:00","message":"request"}
212+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/","status":404,"time":"2023-09-05T08:19:22+02:00","message":"request"}
213+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/","status":404,"time":"2023-09-05T08:19:25+02:00","message":"request"}
214+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:19:25+02:00","message":"request"}
215+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/","status":404,"time":"2023-09-05T08:19:26+02:00","message":"request"}
216+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:19:26+02:00","message":"request"}
217+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:19:28+02:00","message":"request"}
218+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
219+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
220+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
221+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
222+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
223+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:19:28+02:00","message":"request"}
224+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
225+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
226+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
227+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:19:28+02:00","message":"request"}
228+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
229+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
230+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
231+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
232+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
233+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
234+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:20:27+02:00","message":"request"}
235+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
236+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
237+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:20:27+02:00","message":"request"}
238+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:20:28+02:00","message":"request"}
239+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
240+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
241+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
242+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
243+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
244+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
245+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:20:29+02:00","message":"request"}
246+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
247+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
248+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
249+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:20:29+02:00","message":"request"}
250+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
251+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
252+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
253+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:20:30+02:00","message":"request"}
254+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
255+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
256+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
257+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
258+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
259+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
260+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:20:30+02:00","message":"request"}
261+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
262+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:41:00+02:00","message":"request"}
263+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
264+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
265+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
266+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
267+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
268+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
269+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
270+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
271+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:41:00+02:00","message":"request"}
272+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
273+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:43:27+02:00","message":"request"}
274+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
275+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
276+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
277+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
278+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
279+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
280+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
281+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
282+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:43:27+02:00","message":"request"}
283+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
284+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:44:48+02:00","message":"request"}
285+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
286+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
287+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
288+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
289+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
290+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
291+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
292+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
293+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:44:48+02:00","message":"request"}
294+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
295+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
296+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
297+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
298+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:48:57+02:00","message":"request"}
299+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
300+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
301+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
302+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
303+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
304+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:48:57+02:00","message":"request"}
305+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
306+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
307+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
308+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
309+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
310+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:48:59+02:00","message":"request"}
311+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:48:59+02:00","message":"request"}
312+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:49:00+02:00","message":"request"}
313+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:49:00+02:00","message":"request"}
314+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:49:00+02:00","message":"request"}
315+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:49:00+02:00","message":"request"}
316+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
317+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:49:16+02:00","message":"request"}
318+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
319+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
320+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
321+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
322+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
323+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
324+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
325+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
326+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:49:16+02:00","message":"request"}
327+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
328+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:50:51+02:00","message":"request"}
329+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
330+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
331+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
332+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
333+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
334+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
335+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
336+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
337+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:50:51+02:00","message":"request"}
338+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
339+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
340+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
341+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
342+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
343+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
344+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:50:55+02:00","message":"request"}
345+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
346+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
347+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
348+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:50:55+02:00","message":"request"}
349+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
350+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:51:28+02:00","message":"request"}
351+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
352+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
353+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
354+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
355+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
356+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
357+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
358+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
359+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:51:28+02:00","message":"request"}
360+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
361+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
362+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
363+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
364+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
365+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:54:37+02:00","message":"request"}
366+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
367+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
368+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
369+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
370+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:54:37+02:00","message":"request"}
371+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin","status":302,"time":"2023-09-05T08:58:15+02:00","message":"request"}
372+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/admin/install","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
373+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/js/custom.js","status":404,"time":"2023-09-05T08:58:15+02:00","message":"request"}
374+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/css/tailwind.css","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
375+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/alpine.min.js","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
376+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx-sse.js","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
377+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/htmx.min.js","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
378+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/libs/iconoir.css","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
379+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/imgs/gordon-mascot-hq-trsp.png","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
380+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/LilitaOne/LilitaOne-Regular.ttf","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
381+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/assets/fonts/IBMPlex/IBMPlexSans-Regular.woff2","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
382+{"level":"info","type":"http","remote_ip":"::1","method":"GET","URI":"/favicon.ico","status":200,"time":"2023-09-05T08:58:15+02:00","message":"request"}
A pkg/utils/detect-first-launch.go +14 -0
@@ -0,0 +1,14 @@
1+package utils
2+
3+import (
4+ "os"
5+)
6+
7+// IsConfigFilePresent checks if it's the first launch of the app based on the existence of gordon.yml
8+func IsConfigFilePresent() bool {
9+ // Check if gordon.yml exists at the root of the project
10+ if _, err := os.Stat("gordon.yml"); os.IsNotExist(err) {
11+ return true
12+ }
13+ return false
14+}
@@ -0,0 +1,14 @@
1+package utils
2+
3+import (
4+ "os"
5+)
6+
7+// IsConfigFilePresent checks if it's the first launch of the app based on the existence of gordon.yml
8+func IsConfigFilePresent() bool {
9+ // Check if gordon.yml exists at the root of the project
10+ if _, err := os.Stat("gordon.yml"); os.IsNotExist(err) {
11+ return true
12+ }
13+ return false
14+}
M pkg/utils/logger.go +31 -5
@@ -1,6 +1,7 @@
11 package utils
22
33 import (
4+ "bufio"
45 "fmt"
56 "io"
67 "os"
@@ -9,8 +10,6 @@ import (
910 "github.com/rs/zerolog"
1011 )
1112
12-type LogLevel string
13-
1413 const (
1514 DEBUG LogLevel = "debug"
1615 INFO LogLevel = "info"
@@ -20,15 +19,23 @@ const (
2019 PANIC LogLevel = "panic"
2120 )
2221
22+type LogLevel string
2323 type Logger struct {
2424 zerolog.Logger
2525 }
2626
27+type stdoutCapture struct {
28+ logger *Logger
29+}
30+
2731 type EchoLoggerWrapper struct {
2832 *Logger
2933 output io.Writer
3034 }
3135
36+// LogFunc is a function that logs a message with optional context.
37+type LogFunc func() *zerolog.Event
38+
3239 // Map log levels to zerolog log functions
3340 func (l *Logger) getLogFunc(level LogLevel) LogFunc {
3441 switch level {
@@ -49,9 +56,6 @@ func (l *Logger) getLogFunc(level LogLevel) LogFunc {
4956 }
5057 }
5158
52-// LogFunc is a function that logs a message with optional context.
53-type LogFunc func() *zerolog.Event
54-
5559 func (l *Logger) Log(level LogLevel, i ...interface{}) {
5660 logFunc := l.getLogFunc(level)
5761 logFunc().Msg(fmt.Sprint(i...))
@@ -63,6 +67,28 @@ func NewLogger() *Logger {
6367 return &Logger{zl}
6468 }
6569
70+func (s *stdoutCapture) Write(p []byte) (n int, err error) {
71+ s.logger.Info().Str("type", "app").Msg(string(p))
72+ return len(p), nil
73+}
74+
75+func CaptureSTDOUT(logger *Logger) {
76+ // Create a reading and writing pipe
77+ reader, writer, _ := os.Pipe()
78+
79+ // Replace os.Stdout with the writer end of the pipe
80+ os.Stdout = writer
81+
82+ // Start a goroutine to read from the pipe
83+ go func() {
84+ scanner := bufio.NewScanner(reader)
85+ for scanner.Scan() {
86+ text := scanner.Text()
87+ logger.Debug().Str("type", "app").Msg(text)
88+ }
89+ }()
90+}
91+
6692 func NewEchoLoggerWrapper(l *Logger) *EchoLoggerWrapper {
6793 return &EchoLoggerWrapper{Logger: l, output: os.Stdout}
6894 }
@@ -1,6 +1,7 @@
1 package utils1 package utils
2 2
3 import (3 import (
4+ "bufio"
4 "fmt"5 "fmt"
5 "io"6 "io"
6 "os"7 "os"
@@ -9,8 +10,6 @@ import (
9 "github.com/rs/zerolog"10 "github.com/rs/zerolog"
10 )11 )
11 12
12-type LogLevel string
13-
14 const (13 const (
15 DEBUG LogLevel = "debug"14 DEBUG LogLevel = "debug"
16 INFO LogLevel = "info"15 INFO LogLevel = "info"
@@ -20,15 +19,23 @@ const (
20 PANIC LogLevel = "panic"19 PANIC LogLevel = "panic"
21 )20 )
22 21
22+type LogLevel string
23 type Logger struct {23 type Logger struct {
24 zerolog.Logger24 zerolog.Logger
25 }25 }
26 26
27+type stdoutCapture struct {
28+ logger *Logger
29+}
30+
27 type EchoLoggerWrapper struct {31 type EchoLoggerWrapper struct {
28 *Logger32 *Logger
29 output io.Writer33 output io.Writer
30 }34 }
31 35
36+// LogFunc is a function that logs a message with optional context.
37+type LogFunc func() *zerolog.Event
38+
32 // Map log levels to zerolog log functions39 // Map log levels to zerolog log functions
33 func (l *Logger) getLogFunc(level LogLevel) LogFunc {40 func (l *Logger) getLogFunc(level LogLevel) LogFunc {
34 switch level {41 switch level {
@@ -49,9 +56,6 @@ func (l *Logger) getLogFunc(level LogLevel) LogFunc {
49 }56 }
50 }57 }
51 58
52-// LogFunc is a function that logs a message with optional context.
53-type LogFunc func() *zerolog.Event
54-
55 func (l *Logger) Log(level LogLevel, i ...interface{}) {59 func (l *Logger) Log(level LogLevel, i ...interface{}) {
56 logFunc := l.getLogFunc(level)60 logFunc := l.getLogFunc(level)
57 logFunc().Msg(fmt.Sprint(i...))61 logFunc().Msg(fmt.Sprint(i...))
@@ -63,6 +67,28 @@ func NewLogger() *Logger {
63 return &Logger{zl}67 return &Logger{zl}
64 }68 }
65 69
70+func (s *stdoutCapture) Write(p []byte) (n int, err error) {
71+ s.logger.Info().Str("type", "app").Msg(string(p))
72+ return len(p), nil
73+}
74+
75+func CaptureSTDOUT(logger *Logger) {
76+ // Create a reading and writing pipe
77+ reader, writer, _ := os.Pipe()
78+
79+ // Replace os.Stdout with the writer end of the pipe
80+ os.Stdout = writer
81+
82+ // Start a goroutine to read from the pipe
83+ go func() {
84+ scanner := bufio.NewScanner(reader)
85+ for scanner.Scan() {
86+ text := scanner.Text()
87+ logger.Debug().Str("type", "app").Msg(text)
88+ }
89+ }()
90+}
91+
66 func NewEchoLoggerWrapper(l *Logger) *EchoLoggerWrapper {92 func NewEchoLoggerWrapper(l *Logger) *EchoLoggerWrapper {
67 return &EchoLoggerWrapper{Logger: l, output: os.Stdout}93 return &EchoLoggerWrapper{Logger: l, output: os.Stdout}
68 }94 }

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close