"net/http"
"os"
+ "jsdaj.com/homepage/pkg/blog"
"jsdaj.com/homepage/pkg/routes"
)
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)
}
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))
--- /dev/null
+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
+}
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)
}
"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)
}
-@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
.header {
display: flex;
margin: 1rem auto;
- width: 800px;
list-style: none;
gap: 11rem;
align-items: center;
* =========================================================
* */
header {
- width: 800px;
margin: 1rem auto;
}
main {
- width: 800px;
margin: 0 auto;
margin-bottom: 2rem;
}
-header {
-}
-@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
.header {
display: flex;
margin: 1rem auto;
- width: 800px;
list-style: none;
gap: 11rem;
align-items: center;
* =========================================================
* */
.post-list {
- width: 800px;
list-style: none;
margin: 1rem auto;
}
--- /dev/null
+@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;
+}
-@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
#terminal {
display: block;
position: relative;
- width: 800px;
margin: 2rem auto;
margin-bottom: 0;
background-color: var(--bg0);
}
.terminal-line {
- /* white-space: pre; */
font-size: 14px;
}
display: block;
margin: 1rem auto;
margin-top: .5rem;
- width: 800px;
text-align: end;
font-size: 12px;
font-style: italic;
.useful-links {
display: flex;
margin: 1rem auto;
- width: 800px;
list-style: none;
gap: .5rem;
justify-content: center;
-@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
.header {
display: flex;
margin: 1rem auto;
- width: 800px;
list-style: none;
gap: 11rem;
align-items: center;
.disclaimer {
margin: auto;
- width: 800px;
font-size: 14px;
text-align: center;
color: var(--fg1);
flex-wrap: wrap;
align-items: center;
justify-content: center;
- width: 800px;
margin: auto;
margin-top: 3rem;
}
--- /dev/null
+<!-- 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>
<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>
--- /dev/null
+<!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>
<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>
+++ /dev/null
-<!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>
<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>
- </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>
+ </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>
<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>
<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>