]> localhost Git - homepage.git/commitdiff
feat: blog logic in place
authorJansen <[email protected]>
Mon, 7 Jul 2025 13:42:08 +0000 (09:42 -0400)
committerJansen <[email protected]>
Mon, 7 Jul 2025 13:42:08 +0000 (09:42 -0400)
17 files changed:
cmd/main.go
pkg/blog/blog.go [new file with mode: 0644]
pkg/routes/blog-post.go
pkg/routes/blog.go
static/assets/css/blog-post.css
static/assets/css/blog.css
static/assets/css/common.css [new file with mode: 0644]
static/assets/css/index.css
static/assets/css/projects.css
static/blog-pages/you-most-likely-dont-need-aws.html [new file with mode: 0644]
static/templates/404.html
static/templates/blog-page.html [new file with mode: 0644]
static/templates/blog.html
static/templates/blog/blog-you-most-likely-dont-need-aws.html [deleted file]
static/templates/index.html
static/templates/nothing-to-see.html
static/templates/projects.html

index 5445caaac56219c9d25cd958ede9fc486a21c5b7..dfad3afcba2e26eabea45bb90b809e94f5a82676 100644 (file)
@@ -6,6 +6,7 @@ import (
        "net/http"
        "os"
 
+       "jsdaj.com/homepage/pkg/blog"
        "jsdaj.com/homepage/pkg/routes"
 )
 
@@ -14,7 +15,12 @@ func main() {
 
        templateFS := os.DirFS("static/templates")
 
-       templates, err := template.ParseFS(templateFS, "*.html", "blog/*.html")
+       templates, err := template.ParseFS(templateFS, "*.html")
+       if err != nil {
+               log.Fatal(err)
+       }
+
+       blogPosts, err := blog.ParseBlogPages()
        if err != nil {
                log.Fatal(err)
        }
@@ -22,8 +28,8 @@ func main() {
        router.HandleFunc("GET /static/assets/{$}", routes.NothingToSee(templates))
        router.Handle("GET /static/assets/", http.FileServer(http.Dir(".")))
        router.HandleFunc("GET /projects", routes.Projects(templates))
-       router.HandleFunc("GET /blog/{post}", routes.BlogPost(templates))
-       router.HandleFunc("GET /blog", routes.Blog(templates))
+       router.HandleFunc("GET /blog/{post}", routes.BlogPost(templates, blogPosts))
+       router.HandleFunc("GET /blog", routes.Blog(templates, blogPosts))
        router.HandleFunc("GET /{$}", routes.Index(templates))
        router.HandleFunc("/", routes.NotFound(templates))
 
diff --git a/pkg/blog/blog.go b/pkg/blog/blog.go
new file mode 100644 (file)
index 0000000..aa8b5c7
--- /dev/null
@@ -0,0 +1,78 @@
+package blog
+
+import (
+       "html/template"
+       "io/fs"
+       "os"
+       "regexp"
+       "strings"
+       "time"
+)
+
+type BlogPost struct {
+       Filename string
+       Title    string
+       Date     time.Time
+       Summary  string
+       Content  template.HTML
+}
+
+func ParseBlogPages() ([]*BlogPost, error) {
+       blogPagesFS := os.DirFS("static/blog-pages")
+
+       blogs := make([]*BlogPost, 0)
+
+       err := fs.WalkDir(blogPagesFS, ".", func(path string, d fs.DirEntry, err error) error {
+               if err != nil {
+                       return err
+               }
+               if path == "." {
+                       return nil
+               }
+
+               file, err := fs.ReadFile(blogPagesFS, path)
+               if err != nil {
+                       return err
+               }
+
+               blog, err := parseSingleBlogPost(path, file)
+               if err != nil {
+                       return err
+               }
+
+               blogs = append(blogs, blog)
+
+               return nil
+       })
+
+       if err != nil {
+               return nil, err
+       }
+       return blogs, nil
+}
+
+func parseSingleBlogPost(filename string, file []byte) (*BlogPost, error) {
+       titleRegex, _ := regexp.Compile("<!-- TITLE:(.*) -->")
+       summaryRegex, _ := regexp.Compile("<!-- SUMMARY:(.*) -->")
+       dateRegex, _ := regexp.Compile("<!-- DATE:(.*) -->")
+
+       // Quita logo, melhor que deixar blog incompleto sem querer
+       title := strings.TrimSpace(string(titleRegex.FindSubmatch(file)[1]))
+       summary := strings.TrimSpace(string(summaryRegex.FindSubmatch(file)[1]))
+       dateStr := strings.TrimSpace(string(dateRegex.FindSubmatch(file)[1]))
+
+       date, err := time.Parse("2006-01-02", dateStr)
+       if err != nil {
+               return nil, err
+       }
+
+       blog := &BlogPost{
+               Filename: strings.Split(filename, ".")[0],
+               Title:    title,
+               Date:     date,
+               Summary:  summary,
+               Content:  template.HTML(string(file)),
+       }
+
+       return blog, nil
+}
index ab80e9801f4e35672e021be68cf76313cfeba139..d1fd415c91dec60c2ddef81f884a19d231ee487d 100644 (file)
@@ -1,17 +1,32 @@
 package routes
 
 import (
-       "fmt"
        "html/template"
        "log"
        "net/http"
+
+       "jsdaj.com/homepage/pkg/blog"
 )
 
-func BlogPost(templ *template.Template) http.HandlerFunc {
+func BlogPost(templ *template.Template, posts []*blog.BlogPost) http.HandlerFunc {
        return func(w http.ResponseWriter, r *http.Request) {
-               post := r.PathValue("post")
+               filename := r.PathValue("post")
+
+               var post *blog.BlogPost = nil
+
+               for i := range posts {
+                       if posts[i].Filename == filename {
+                               post = posts[i]
+                               break
+                       }
+               }
+
+               if post == nil {
+                       http.Redirect(w, r, "/404", http.StatusSeeOther)
+                       return
+               }
 
-               err := templ.ExecuteTemplate(w, fmt.Sprintf("%s.html", post), "")
+               err := templ.ExecuteTemplate(w, "blog-page.html", post)
                if err != nil {
                        log.Fatal(err)
                }
index 1a50df146e2c3d4772cff6ffb0c283c3c604b049..e93198aa24320477135e3371a0f8df2f4346587e 100644 (file)
@@ -4,11 +4,13 @@ import (
        "html/template"
        "log"
        "net/http"
+
+       "jsdaj.com/homepage/pkg/blog"
 )
 
-func Blog(templ *template.Template) http.HandlerFunc {
+func Blog(templ *template.Template, posts []*blog.BlogPost) http.HandlerFunc {
        return func(w http.ResponseWriter, _ *http.Request) {
-               err := templ.ExecuteTemplate(w, "blog.html", "")
+               err := templ.ExecuteTemplate(w, "blog.html", posts)
                if err != nil {
                        log.Fatal(err)
                }
index c10155b988a8ef2d517296270c686e30413cf0df..73a22c4a3e91fddb3c65f1ddaa5aa6fb2336443e 100644 (file)
@@ -1,26 +1,3 @@
-@font-face {
-  font-family: 'JetBrains';
-  src: url('../fonts/JetBrainsMono.ttf') format('truetype');
-  font-weight: normal;
-}
-
-/* 
-* =========================================================
-* Common 
-* =========================================================
-* */
-* {
-  margin: 0;
-  padding: 0;
-
-  color: var(--fg2);
-  font-family: JetBrains, monospace;
-}
-
-body {
-  background-color: var(--bg1);
-}
-
 /* 
 * =========================================================
 * Header
@@ -29,7 +6,6 @@ body {
 .header {
   display: flex;
   margin: 1rem auto;
-  width: 800px;
   list-style: none;
   gap: 11rem;
   align-items: center;
@@ -42,15 +18,11 @@ body {
 * =========================================================
 * */
 header {
-  width: 800px;
   margin: 1rem auto;
 }
 
 main {
-  width: 800px;
   margin: 0 auto;
   margin-bottom: 2rem;
 }
 
-header {
-}
index 436bce2e6a2d24096993a3d21faabbd9013cde9a..f05af92bbc1b9f5142510c4373ce1986d94d0a9f 100644 (file)
@@ -1,26 +1,3 @@
-@font-face {
-  font-family: 'JetBrains';
-  src: url('../fonts/JetBrainsMono.ttf') format('truetype');
-  font-weight: normal;
-}
-
-/* 
-* =========================================================
-* Common 
-* =========================================================
-* */
-* {
-  margin: 0;
-  padding: 0;
-
-  color: var(--fg2);
-  font-family: JetBrains, monospace;
-}
-
-body {
-  background-color: var(--bg1);
-}
-
 /* 
 * =========================================================
 * Header
@@ -29,7 +6,6 @@ body {
 .header {
   display: flex;
   margin: 1rem auto;
-  width: 800px;
   list-style: none;
   gap: 11rem;
   align-items: center;
@@ -42,7 +18,6 @@ body {
 * =========================================================
 * */
 .post-list {
-  width: 800px;
   list-style: none;
   margin: 1rem auto;
 }
diff --git a/static/assets/css/common.css b/static/assets/css/common.css
new file mode 100644 (file)
index 0000000..2923823
--- /dev/null
@@ -0,0 +1,27 @@
+@font-face {
+  font-family: 'JetBrains';
+  src: url('../fonts/JetBrainsMono.ttf') format('truetype');
+  font-weight: normal;
+}
+
+/* 
+* =========================================================
+* Common 
+* =========================================================
+* */
+* {
+  margin: 0;
+  padding: 0;
+
+  color: var(--fg2);
+  font-family: JetBrains, monospace;
+}
+
+body {
+  background-color: var(--bg1);
+}
+
+.page {
+  width: 800px;
+  margin: auto;
+}
index 908311b5b093ca78e0b089ebee0acde87d22f2a9..5beb2d74ed2c22d02e11424a2ef7480066fa0416 100644 (file)
@@ -1,26 +1,3 @@
-@font-face {
-  font-family: 'JetBrains';
-  src: url('../fonts/JetBrainsMono.ttf') format('truetype');
-  font-weight: normal;
-}
-
-/* 
-* =========================================================
-* Common 
-* =========================================================
-* */
-* {
-  margin: 0;
-  padding: 0;
-
-  color: var(--fg2);
-  font-family: JetBrains, monospace;
-}
-
-body {
-  background-color: var(--bg1);
-}
-
 /* 
 * =========================================================
 * Terminal 
@@ -29,7 +6,6 @@ body {
 #terminal {
   display: block;
   position: relative;
-  width: 800px;
   margin: 2rem auto;
   margin-bottom: 0;
   background-color: var(--bg0);
@@ -67,7 +43,6 @@ body {
 }
 
 .terminal-line {
-  /* white-space: pre; */
   font-size: 14px;
 }
 
@@ -75,7 +50,6 @@ body {
   display: block;
   margin: 1rem auto;
   margin-top: .5rem;
-  width: 800px;
   text-align: end;
   font-size: 12px;
   font-style: italic;
@@ -89,7 +63,6 @@ body {
 .useful-links {
   display: flex;
   margin: 1rem auto;
-  width: 800px;
   list-style: none;
   gap: .5rem;
   justify-content: center;
index 086206a51f876174b2599990f23dfe02621c4bc0..9bc824eb7f014f55304370fa786146e9f4e4ccb0 100644 (file)
@@ -1,26 +1,3 @@
-@font-face {
-  font-family: 'JetBrains';
-  src: url('../fonts/JetBrainsMono.ttf') format('truetype');
-  font-weight: normal;
-}
-
-/* 
-* =========================================================
-* Common 
-* =========================================================
-* */
-* {
-  margin: 0;
-  padding: 0;
-
-  color: var(--fg2);
-  font-family: JetBrains, monospace;
-}
-
-body {
-  background-color: var(--bg1);
-}
-
 /* 
 * =========================================================
 * Header
@@ -29,7 +6,6 @@ body {
 .header {
   display: flex;
   margin: 1rem auto;
-  width: 800px;
   list-style: none;
   gap: 11rem;
   align-items: center;
@@ -37,7 +13,6 @@ body {
 
 .disclaimer {
   margin: auto;
-  width: 800px;
   font-size: 14px;
   text-align: center;
   color: var(--fg1);
@@ -54,7 +29,6 @@ body {
   flex-wrap: wrap;
   align-items: center;
   justify-content: center;
-  width: 800px;
   margin: auto;
   margin-top: 3rem;
 }
diff --git a/static/blog-pages/you-most-likely-dont-need-aws.html b/static/blog-pages/you-most-likely-dont-need-aws.html
new file mode 100644 (file)
index 0000000..919feec
--- /dev/null
@@ -0,0 +1,14 @@
+<!-- TITLE: You (most likely) don't need AWS -->
+<!-- DATE: 2025-07-04 -->
+<!-- SUMMARY: Some thoughts on how (once again) marketing and entrepreneurship destroyed everyone's mind (again). -->
+
+<p>
+  When I first started working as a developer almost 10y ago, you usually had 3 options whenever you needed to
+  deploy a new service: you either manually built an on-premise server locally, or reserve a VM in a data center,
+  or you could do like the cool kids and create an account on AWS and started tweaking. I'm not so sure when or 
+  how, but slowly the first two options rapidly "became obsolete"... except that they didn't?
+</p>
+<p>
+  I've been thinking about this for quite some time now. Why did we stop doing like the old way? Was it because
+  of costs? Was it because of technical difficulties?
+</p>
index 0057d392f7dbb8e5da04c50b775e6af393cb7d60..95a6548613a9ca304dd51292dcee1c016f15f944 100644 (file)
@@ -6,30 +6,33 @@
     <title>Jansen Saunier</title>
 
     <link rel="stylesheet" href="/static/assets/css/themes/codeclocks.css">
+    <link rel="stylesheet" href="/static/assets/css/common.css">
     <link rel="stylesheet" href="/static/assets/css/index.css">
   </head>
 
   <body>
-    <div id="terminal">
-      <div class="terminal-line"><i>$</i> show-not-found</div>
-      <div class="terminal-content">
-        <img src="/static/assets/imgs/kirby.png" alt="kirby" />
-        <div class="terminal-lines">
-          <div class="terminal-line"><b>!!!Hold up there, pal!!!</b></div>
-          <div class="terminal-line"><i>------------------------</i></div>
-          <br />
-          <div class="terminal-line">I think you're a little lost, ay?</div>
-          <div class="terminal-line">(or maybe I forgot smth, sorry)</div>
-          <br />
-          <div class="terminal-line">Either way, turn back, pal!</div>
-          <div class="terminal-line">It's not too late!</div>
+    <div class="page">
+      <div id="terminal">
+        <div class="terminal-line"><i>$</i> show-not-found</div>
+        <div class="terminal-content">
+          <img src="/static/assets/imgs/kirby.png" alt="kirby" />
+          <div class="terminal-lines">
+            <div class="terminal-line"><b>!!!Hold up there, pal!!!</b></div>
+            <div class="terminal-line"><i>------------------------</i></div>
+            <br />
+            <div class="terminal-line">I think you're a little lost, ay?</div>
+            <div class="terminal-line">(or maybe I forgot smth, sorry)</div>
+            <br />
+            <div class="terminal-line">Either way, turn back, pal!</div>
+            <div class="terminal-line">It's not too late!</div>
+          </div>
         </div>
+            <div class="terminal-line"><i>$</i></div>
       </div>
-          <div class="terminal-line"><i>$</i></div>
+      <p class="ascii-source">img src @ <a target="_blank" href="https://www.pngitem.com/middle/hRRJhmR_kirby-png-transparent-images-kirby-transparent-png-png/">pngitem</a></p>
+      <ul class="useful-links">
+        <li><b><a href="/">Go Back</a></b></li>
+      </ul>
     </div>
-    <p class="ascii-source">img src @ <a target="_blank" href="https://www.pngitem.com/middle/hRRJhmR_kirby-png-transparent-images-kirby-transparent-png-png/">pngitem</a></p>
-    <ul class="useful-links">
-      <li><b><a href="/">Go Back</a></b></li>
-    </ul>
   </body>
 </html>
diff --git a/static/templates/blog-page.html b/static/templates/blog-page.html
new file mode 100644 (file)
index 0000000..1bc144e
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Jansen Saunier</title>
+
+    <link rel="stylesheet" href="/static/assets/css/themes/codeclocks.css">
+    <link rel="stylesheet" href="/static/assets/css/common.css">
+    <link rel="stylesheet" href="/static/assets/css/blog-post.css">
+  </head>
+  <body>
+    <div class="page">
+      <ul class="header">
+        <li><b><a href="/blog">Go Back</a></b></li>
+      </ul>
+
+      <header>
+        <h1 class="title">{{.Title}}</h1>
+        <p class="date">{{.Date.Format "2006-01-02"}}</p>
+      </header>
+
+      <main>
+        {{.Content}}
+      </main>
+
+      <ul class="header">
+        <li><b><a href="/blog">Go Back</a></b></li>
+      </ul>
+    </div>
+  </body>
+</html>
index 4cc2c4a03911c04edd6a7a56f1b6b7648230d68d..998e3c565902889e4b7d1368d842c33547ab32c3 100644 (file)
@@ -5,26 +5,29 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Jansen Saunier</title>
 
-    <link rel="stylesheet" href="static/assets/css/themes/codeclocks.css">
-    <link rel="stylesheet" href="static/assets/css/blog.css">
+    <link rel="stylesheet" href="/static/assets/css/themes/codeclocks.css">
+    <link rel="stylesheet" href="/static/assets/css/common.css">
+    <link rel="stylesheet" href="/static/assets/css/blog.css">
   </head>
   <body>
-    <ul class="header">
-      <li><b><a href="/">Go Back</a></b></li>
-    </ul>
+    <div class="page">
+      <ul class="header">
+        <li><b><a href="/">Go Back</a></b></li>
+      </ul>
 
-    <h1>WIP</h1>
-
-    <!-- <ul class="post-list"> -->
-    <!--   <li class="post"> -->
-    <!--     <a class="post-link" href="/blog/blog-you-most-likely-dont-need-aws"> -->
-    <!--       <div class="post-header"> -->
-    <!--         <h1 class="title">You (most likely) don't need AWS</h1> -->
-    <!--         <p class="date">2025-07-04</p> -->
-    <!--       </div> -->
-    <!--       <p class="summary">Some thoughts on how (once again) marketing and entrepreneurship destroyed everyone's mind (again).</p> -->
-    <!--     </a> -->
-    <!--   </li> -->
-    <!-- </ul> -->
+      <ul class="post-list">
+        {{range .}}
+          <li class="post">
+          <a class="post-link" href="/blog/{{.Filename}}">
+              <div class="post-header">
+                <h1 class="title">{{.Title}}</h1>
+                <p class="date">{{.Date.Format "2006-01-02"}}</p>
+              </div>
+              <p class="summary">{{.Summary}}</p>
+            </a>
+          </li>
+        {{end}}
+      </ul>
+    </div>
   </body>
 </html>
diff --git a/static/templates/blog/blog-you-most-likely-dont-need-aws.html b/static/templates/blog/blog-you-most-likely-dont-need-aws.html
deleted file mode 100644 (file)
index 5c63955..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Jansen Saunier</title>
-
-    <link rel="stylesheet" href="/static/assets/css/themes/codeclocks.css">
-    <link rel="stylesheet" href="/static/assets/css/blog-post.css">
-  </head>
-  <body>
-    <ul class="header">
-      <li><b><a href="/blog">Go Back</a></b></li>
-    </ul>
-
-    <header>
-      <h1 class="title">You (most likely) don't need AWS</h1>
-      <p class="date">2025-07-04</p>
-    </header>
-
-    <main>
-      <p>
-        When I first started working as a developer almost 10y ago, you usually had 3 options whenever you needed to
-        deploy a new service: you either manually built an on-premise server locally, or reserve a VM in a data center,
-        or you could do like the cool kids and create an account on AWS and started tweaking. I'm not so sure when or 
-        how, but slowly the first two options rapidly "became obsolete"... except that they didn't?
-      </p>
-
-      <p>
-        I've been thinking about this for quite some time now. Why did we stop doing like the old way? Was it because
-        of costs? Was it because of technical difficulties?
-      </p>
-    </main>
-
-    <ul class="header">
-      <li><b><a href="/blog">Go Back</a></b></li>
-    </ul>
-  </body>
-</html>
index 688629e8793016c128b6a32246864aba9281df1f..f3e8891663dcb2d7cdc3bba2a897719192986166 100644 (file)
@@ -5,74 +5,77 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Jansen Saunier</title>
 
-    <link rel="stylesheet" href="static/assets/css/themes/codeclocks.css">
-    <link rel="stylesheet" href="static/assets/css/index.css">
+    <link rel="stylesheet" href="/static/assets/css/themes/codeclocks.css">
+    <link rel="stylesheet" href="/static/assets/css/common.css">
+    <link rel="stylesheet" href="/static/assets/css/index.css">
   </head>
 
   <body>
-    <div id="terminal">
-      <div class="terminal-line"><i>$</i> fastfetch</div>
-      <div class="terminal-content">
-        <img src="static/assets/imgs/kirby-home.png" alt="kirby" />
-        <div class="terminal-lines">
-          <div class="terminal-line"><b>jj</b>@<i>jsdaj.com</i></div>
-          <div class="terminal-line">------------</div>
-          <div class="terminal-line"><s>Message</s>: Heey, sup?</div>
-          <div class="terminal-line"><s>Name</s>: Jansen Saunier</div>
-          <div class="terminal-line"><s>Current Location</s>: Brazil</div>
-          <div class="terminal-line"><s>Languages</s>: PT, EN</div>
-          <div class="terminal-line"><s>Occupation</s>: Computer guy</div>
-          <br />
-          <div class="terminal-line"><s>PLs</s>: A bunch, but I like C more</div>
-          <div class="terminal-line"><s>Current OS</s>: Void Linux x86_64</div>
-          <div class="terminal-line"><s>Text Editor/IDE</s>: Nvim (<a target="_blank" href="https://codeberg.org/jansen44/nvim">config</a>)
-          </div>
-          <div class="terminal-line">
-            <s>Theme</s>: 
-            <a target="_blank" href="https://codeberg.org/jansen44/nvim/src/branch/main/colors/codeclocks.lua">
-              Codeclocks
-            </a>
-          </div>
-          <br/>
-          <div class="terminal-line"><s>Email</s>: 
-            <a target="_blank" href="mailto:[email protected]?subject=Heey, sup?">
-              [email protected]
-            </a>
-          </div>
-          <div class="terminal-line"><s>Codeberg</s>: 
-            <a target="_blank" href="https://codeberg.org/jansen44">
-              jansen44
-            </a>
-          </div>
-          <div class="terminal-line"><s>Linkedin</s>: 
-            <a target="_blank" href="https://www.linkedin.com/in/jansen-saunier/">
-              jansen-saunier
-            </a>
-          </div>
-          <div class="terminal-line"><s>Twitch</s>: 
-            <a target="_blank" href="https://www.twitch.tv/toybeaver_">
-              toybeaver_
-            </a> (lives in PT-BR)
-          </div>
-          <div class="terminal-line"><s>Youtube</s>: 
-            <a target="_blank" href="https://www.youtube.com/@ToyBeaver44">
-              ToyBeaver44
-            </a> (live dump only)
-          </div>
-          <br/>
-          <div class="terminal-line"><s>Hosted at:</s> Raspberry PI 4</div>
-          <br/>
-          <div class="terminal-line">Sorry mobile folks, someday I'll fix it for ya!</div>
+    <div class="page">
+      <div id="terminal">
+        <div class="terminal-line"><i>$</i> fastfetch</div>
+        <div class="terminal-content">
+          <img src="/static/assets/imgs/kirby-home.png" alt="kirby" />
+          <div class="terminal-lines">
+            <div class="terminal-line"><b>jj</b>@<i>jsdaj.com</i></div>
+            <div class="terminal-line">------------</div>
+            <div class="terminal-line"><s>Message</s>: Heey, sup?</div>
+            <div class="terminal-line"><s>Name</s>: Jansen Saunier</div>
+            <div class="terminal-line"><s>Current Location</s>: Brazil</div>
+            <div class="terminal-line"><s>Languages</s>: PT, EN</div>
+            <div class="terminal-line"><s>Occupation</s>: Computer guy</div>
+            <br />
+            <div class="terminal-line"><s>PLs</s>: A bunch, but I like C more</div>
+            <div class="terminal-line"><s>Current OS</s>: Void Linux x86_64</div>
+            <div class="terminal-line"><s>Text Editor/IDE</s>: Nvim (<a target="_blank" href="https://codeberg.org/jansen44/nvim">config</a>)
+            </div>
+            <div class="terminal-line">
+              <s>Theme</s>: 
+              <a target="_blank" href="https://codeberg.org/jansen44/nvim/src/branch/main/colors/codeclocks.lua">
+                Codeclocks
+              </a>
+            </div>
+            <br/>
+            <div class="terminal-line"><s>Email</s>: 
+              <a target="_blank" href="mailto:[email protected]?subject=Heey, sup?">
+                [email protected]
+              </a>
+            </div>
+            <div class="terminal-line"><s>Codeberg</s>: 
+              <a target="_blank" href="https://codeberg.org/jansen44">
+                jansen44
+              </a>
+            </div>
+            <div class="terminal-line"><s>Linkedin</s>: 
+              <a target="_blank" href="https://www.linkedin.com/in/jansen-saunier/">
+                jansen-saunier
+              </a>
+            </div>
+            <div class="terminal-line"><s>Twitch</s>: 
+              <a target="_blank" href="https://www.twitch.tv/toybeaver_">
+                toybeaver_
+              </a> (lives in PT-BR)
+            </div>
+            <div class="terminal-line"><s>Youtube</s>: 
+              <a target="_blank" href="https://www.youtube.com/@ToyBeaver44">
+                ToyBeaver44
+              </a> (live dump only)
+            </div>
+            <br/>
+            <div class="terminal-line"><s>Hosted at:</s> Raspberry PI 4</div>
+            <br/>
+            <div class="terminal-line">Sorry mobile folks, someday I'll fix it for ya!</div>
 
+          </div>
         </div>
+        <div class="terminal-line"><i>$</i></div>
       </div>
-      <div class="terminal-line"><i>$</i></div>
+      <p class="ascii-source">img src @ <a target="_blank" href="https://www.reddit.com/r/powerscales/comments/1hispp8/kirby_vs_medaka_kurokami_who_wins_and_why/?tl=pt-br">reddit</a></p>
+      <ul class="useful-links">
+        <li><b><a href="/projects">Projects Showcase</a></b></li>
+        <li>-</li>
+        <li><b><a href="/blog">Blog</a></b></li>
+      </ul>
     </div>
-    <p class="ascii-source">img src @ <a target="_blank" href="https://www.reddit.com/r/powerscales/comments/1hispp8/kirby_vs_medaka_kurokami_who_wins_and_why/?tl=pt-br">reddit</a></p>
-    <ul class="useful-links">
-      <li><b><a href="/projects">Projects Showcase</a></b></li>
-      <li>-</li>
-      <li><b><a href="/blog">Blog</a></b></li>
-    </ul>
   </body>
 </html>
index 232d47576fbc289f4ac574a0e1fae5e86483548f..0bc0f50303ae0da552210677b2323d0a6d0f8a6a 100644 (file)
@@ -6,34 +6,37 @@
     <title>Jansen Saunier</title>
 
     <link rel="stylesheet" href="/static/assets/css/themes/codeclocks.css">
+    <link rel="stylesheet" href="/static/assets/css/common.css">
     <link rel="stylesheet" href="/static/assets/css/index.css">
   </head>
 
   <body>
-    <div id="terminal">
-      <div class="terminal-line"><i>$</i> nothing-to-see</div>
-      <div class="terminal-content">
-        <img src="/static/assets/imgs/nothing-to-see.png" alt="meta-knight" />
-        <div class="terminal-lines">
-          <div class="terminal-line"><b>!!! OBJECTION !!!</b></div>
-          <div class="terminal-line"><i>------------------------</i></div>
-          <br />
-          <div class="terminal-line">You sure know what you're doing, right?</div>
-          <div class="terminal-line">And you also know you weren't supposed to be here, right?</div>
-          <br />
-          <div class="terminal-line">Instead of poking around just check the <a href="https://codeberg.org/jansen44/homepage">code here.</a></div>
-          <div class="terminal-line">(You'll probably die from boredom anyway...)</div>
-          <br />
-          <div class="terminal-line">
-            My suggestion is try to find something else to <a href="/projects">play here</a> (some of my projects had you in mind with some hidden CTFs (something like this one, but not so obvious), so <a target="_blank" href="mailto:[email protected]?subject=I'm smarter than you">let me know</a> if you find anything :D)
+    <div class="page">
+      <div id="terminal">
+        <div class="terminal-line"><i>$</i> nothing-to-see</div>
+        <div class="terminal-content">
+          <img src="/static/assets/imgs/nothing-to-see.png" alt="meta-knight" />
+          <div class="terminal-lines">
+            <div class="terminal-line"><b>!!! OBJECTION !!!</b></div>
+            <div class="terminal-line"><i>------------------------</i></div>
+            <br />
+            <div class="terminal-line">You sure know what you're doing, right?</div>
+            <div class="terminal-line">And you also know you weren't supposed to be here, right?</div>
+            <br />
+            <div class="terminal-line">Instead of poking around just check the <a href="https://codeberg.org/jansen44/homepage">code here.</a></div>
+            <div class="terminal-line">(You'll probably die from boredom anyway...)</div>
+            <br />
+            <div class="terminal-line">
+              My suggestion is try to find something else to <a href="/projects">play here</a> (some of my projects had you in mind with some hidden CTFs (something like this one, but not so obvious), so <a target="_blank" href="mailto:[email protected]?subject=I'm smarter than you">let me know</a> if you find anything :D)
+            </div>
           </div>
         </div>
+            <div class="terminal-line"><i>$</i></div>
       </div>
-          <div class="terminal-line"><i>$</i></div>
+      <p class="ascii-source">img src @ <a target="_blank" href="https://static.wikia.nocookie.net/aceattorney/images/a/a2/AA1_Phoenix_Point.png/revision/latest?cb=20250510212524">pngitem</a></p>
+      <ul class="useful-links">
+        <li><b><a href="/">Go Back</a></b></li>
+      </ul>
     </div>
-    <p class="ascii-source">img src @ <a target="_blank" href="https://static.wikia.nocookie.net/aceattorney/images/a/a2/AA1_Phoenix_Point.png/revision/latest?cb=20250510212524">pngitem</a></p>
-    <ul class="useful-links">
-      <li><b><a href="/">Go Back</a></b></li>
-    </ul>
   </body>
 </html>
index f5f28b06de627ea74380ceb83e5ccec80841d347..a0270c267c6955fbe82bbb10c59a37831c91f6ef 100644 (file)
@@ -5,34 +5,37 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Jansen Saunier</title>
 
-    <link rel="stylesheet" href="static/assets/css/themes/codeclocks.css">
-    <link rel="stylesheet" href="static/assets/css/projects.css">
+    <link rel="stylesheet" href="/static/assets/css/themes/codeclocks.css">
+    <link rel="stylesheet" href="/static/assets/css/common.css">
+    <link rel="stylesheet" href="/static/assets/css/projects.css">
   </head>
   <body>
-    <ul class="header">
-      <li><b><a href="/">Go Back</a></b></li>
-      <li><h3>Some of my (public) projects</h3></li>
-    </ul>
-    <p class="disclaimer">
-      These are only (some of) my <b>personal</b> projects. I can't share most of my professional projects due to NDA or similar.
-    </p>
+    <div class="page">
+      <ul class="header">
+        <li><b><a href="/">Go Back</a></b></li>
+        <li><h3>Some of my (public) projects</h3></li>
+      </ul>
+      <p class="disclaimer">
+        These are only (some of) my <b>personal</b> projects. I can't share most of my professional projects due to NDA or similar.
+      </p>
 
-    <div class="content">
-      <a href="https://git.jsdaj.com/?p=homepage.git;a=summary" class="project-card" id="project-home">
-        <img src="static/assets/imgs/projects-home.png" alt="home-project-img" />
-        <div class="info">
-          <p class="title">My Personal Website </p>
-          <p class="description">A personal website as simple as I could do. Simple and static stuff is so charming, don't you think?</p>
-        <hr>
-          <div class="tags">
-            <p class="tag html">#html</p>
-            <p class="tag css">#css</p>
-            <p class="tag go">#go</p>
-            <p class="tag no-ai-code">#ai-code-free</p>
-            <p class="tag ai-free">#ai-free</p>
+      <div class="content">
+        <a href="https://git.jsdaj.com/?p=homepage.git;a=summary" class="project-card" id="project-home">
+          <img src="/static/assets/imgs/projects-home.png" alt="home-project-img" />
+          <div class="info">
+            <p class="title">My Personal Website </p>
+            <p class="description">A personal website as simple as I could do. Simple and static stuff is so charming, don't you think?</p>
+          <hr>
+            <div class="tags">
+              <p class="tag html">#html</p>
+              <p class="tag css">#css</p>
+              <p class="tag go">#go</p>
+              <p class="tag no-ai-code">#ai-code-free</p>
+              <p class="tag ai-free">#ai-free</p>
+            </div>
           </div>
-        </div>
-      </a>
+        </a>
+      </div>
     </div>
   </body>
 </html>