]> git.frustrated-labs.net Git - frustrated-functor.dev.git/commitdiff
docs: update readme
authorAlexander Goussas <[email protected]>
Sun, 31 May 2026 21:44:43 +0000 (16:44 -0500)
committerAlexander Goussas <[email protected]>
Sun, 31 May 2026 21:44:43 +0000 (16:44 -0500)
13 files changed:
README.md
public/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/index.html
public/2026-04-30-how-i-manage-my-blog/index.html
public/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/index.html
public/2026-05-05-on-linkedin-connections/index.html [new file with mode: 0644]
public/2026-05-30-how-to-actually-learn-a-language-on-your-own/index.html [new file with mode: 0644]
public/devlog/index.html [new file with mode: 0644]
public/elephant-in-the-room.jpg [new file with mode: 0644]
public/index.html
public/larousse-api.png [new file with mode: 0644]
public/projects.css [new file with mode: 0644]
public/projects/index.html [new file with mode: 0644]
public/styles.css

index dcf78d47642fdcf292a2f5eeec2cc9bee0f069f2..65e9e520b86de8bbca17c76b5d3b6c23f5661ec6 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,6 +1,3 @@
 # frustrated-functor.dev
 
 My personal blog.
-
-I write my entries in markdown files that I convert into HTML with a Zig program I built.
-The public assets are then deployed in a Dockerfile for ease and portability.
index d14f6c9965e475a38f3ddf7d17da183a563466ba..bdb0f509bd15bbf466fc36774c41ebcbcd9d860b 100644 (file)
                <title>Alexander Goussas</title>
                <link type="text/css" rel="stylesheet" href="/styles.css">
                <link type="text/css" rel="stylesheet" href="/highlight.css">
+    <link rel="icon" type="image/x-icon" href="/logo.png">
                <!-- mathtex -->
                <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
                <script defer src="/temml.min.js"></script>
                <script defer src="/render-mathtex.js"></script>
                <!-- /mathtex -->
                
+  <meta property="og:title" content="One of the best Skills I&apos;ve learned as a Programmer">
+  <meta property="og:type" content="article" >
+  <meta property="og:url" content="/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/">
+  <meta property="og:image" content="/logo.png">
+  <meta property="og:description" content="">
 
        </head>
        <body id="body">
           <li class="nav-item" style="background-color: yellow; color: black;">
                              <a href="/">home</a>
           </li>
+          <li class="nav-item" style="background-color: darkseagreen; color: black;">
+                             <a href="/devlog/">devlog</a>
+          </li>
+          <li class="nav-item" style="background-color: lavender; color: black;">
+                             <a href="/projects/">projects</a>
+          </li>
           <li class="nav-item">
             <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
           </li>
-          <li class="nav-item" style="background-color: purple;">
+          <li class="nav-item" style="background-color: darkslateblue;">
             <a href="https://github.com/aloussase" target="_blank">github</a>
           </li>
-          <li class="nav-item" style="background-color: blue;">
+          <li class="nav-item" style="background-color: dodgerblue;">
             <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
           </li>
-          <li class="nav-item" style="background-color: red;">
+          <li class="nav-item" style="background-color: tomato;">
             <a href="/rss.xml" target="_blank">rss</a>
           </li>
         </ul>
                
        <h1>One of the best Skills I&apos;ve learned as a Programmer</h1>
        <div class="post"><p>There are many different skills one might invest it when getting into programming. There is a plethora of programming languages, each with their unique appeal. And within each language ecosystem, a plethora of web frameworks and stuff to learn.</p><p>But for me, one of the greatest investments came from something else altogether: learning how to touch type.</p><p>For those of you that don’t know, touch typing basically means typing without looking at your keyboard. But I include in the definition typing with all your fingers.</p><p>Before learning to touch type, I only used both my index fingers. I literally did not use any other finger. One day, I decided to change that and started dedicating a lot of time to acquiring the ability to touch type.</p><p>There was a free website I used for this, whose name I have since forgotten. Something like typingrace of something like that.</p><p>Anywho, today, I can write at ~120 WPM, which is not a crazy speed, but pretty respectable, if I may say so myself. Sometimes I just like typing whatever to feel the vertigo as my fingers speed through my keyboard.</p><p>Also, this is a transferable skill, so if you can’t touch type yet, I encourage you to.</p></div>
+
+  <div id="post-correction">
+    <small>
+      Found a mistake? Want to improve this text? Want to thank me for bringing
+      light to your day? Want to insult me and tell me how my subjective opinion
+      is objectively wrong?
+    </small>
+    <br>
+    <small>
+       Feel free to send me an email at <a
+       href="mailto:[email protected]">[email protected]</a>.
+    </small>
+  </div>
+
        <div id="prev-next">
-               <div></div>
+               <div>
+                       <a href="/projects/">
+                               ←
+                               <span>Projects</span>
+                       </a>
+               </div>
                <div>
                        <a href="/2026-04-30-how-i-manage-my-blog/">
                                <span>How I Manage my Blog</span>
index b116533ea03da8fcedbf8269144e313f960b17a6..23807cbe0cea7d7cd600cf00b71ef5a317ac4d35 100644 (file)
                <title>Alexander Goussas</title>
                <link type="text/css" rel="stylesheet" href="/styles.css">
                <link type="text/css" rel="stylesheet" href="/highlight.css">
+    <link rel="icon" type="image/x-icon" href="/logo.png">
                <!-- mathtex -->
                <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
                <script defer src="/temml.min.js"></script>
                <script defer src="/render-mathtex.js"></script>
                <!-- /mathtex -->
                
+  <meta property="og:title" content="How I Manage my Blog">
+  <meta property="og:type" content="article" >
+  <meta property="og:url" content="/2026-04-30-how-i-manage-my-blog/">
+  <meta property="og:image" content="/logo.png">
+  <meta property="og:description" content="">
 
        </head>
        <body id="body">
           <li class="nav-item" style="background-color: yellow; color: black;">
                              <a href="/">home</a>
           </li>
+          <li class="nav-item" style="background-color: darkseagreen; color: black;">
+                             <a href="/devlog/">devlog</a>
+          </li>
+          <li class="nav-item" style="background-color: lavender; color: black;">
+                             <a href="/projects/">projects</a>
+          </li>
           <li class="nav-item">
             <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
           </li>
-          <li class="nav-item" style="background-color: purple;">
+          <li class="nav-item" style="background-color: darkslateblue;">
             <a href="https://github.com/aloussase" target="_blank">github</a>
           </li>
-          <li class="nav-item" style="background-color: blue;">
+          <li class="nav-item" style="background-color: dodgerblue;">
             <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
           </li>
-          <li class="nav-item" style="background-color: red;">
+          <li class="nav-item" style="background-color: tomato;">
             <a href="/rss.xml" target="_blank">rss</a>
           </li>
         </ul>
        <h1>How I Manage my Blog</h1>
        <div class="post"><p>There is an accompanying video devlog available on YouTube, where I go more in depth about how this stuff is actually implemented: <a
 href="https://www.youtube.com/watch?v=c6z5A_PRodg"><a href="https://www.youtube.com/watch?v=c6z5A_PRodg" target="_blank">https://www.youtube.com/watch?v=c6z5A_PRodg</a></a>.</p><p>Recently I went down the Kubernetes rabbit-hole and automated my whole blog’s pipeline. From build to deployment. No GitHub actions or any other 3rd party CI provider. All self-hosted, literally. Well, with the sole exception of CloudFlare Tunnels, of course.</p><p>How did I do it?</p><p>For starters, my blog repository is deployed as static files in a NGINX Docker container. As part of the build process, I execute a little CLI tool I built in Zig to transform my posts from markdown to html.</p><p>So, I process the posts, build the image, tag it appropriately and push it to Docker Hub. This is all automated in my git server, as we’ll see in a minute.</p><p>Next, my stuff is hosted in a git server that I own. This server is exposed via SSH and cloudflare tunnels. I have it configured to only allow public key authentication and no root login, for example. Also, the SSH port is not publicly exposed and is only accessible via cloudflared.</p><p>Now, Git has hooks for both server and client. In this case, we are interested in the post-receive server hook. This hook runs after the changes have been accepted by the server, so we have access to the latest code.</p><p>In my case, what the hook does is clone the repository from the bare repo in the server, execute the build script (that is located in the cloned repository), and finally executes a rollout in my Kubernetes cluster to pull the latest image.</p><p>So, that’s it. A pretty damn simple configuration, if I may say.</p><p>Next steps for me would be to configure redundancy for the disk where my git stuff is. Right now I have the stuff in my local dev machine and on that server, but ideally I’d want to make backups to an external drive periodically.</p><p>If you, dear reader, have any tips or tricks for me, please feel free to contact me in whichever way you might deem appropriate.</p></div>
+
+  <div id="post-correction">
+    <small>
+      Found a mistake? Want to improve this text? Want to thank me for bringing
+      light to your day? Want to insult me and tell me how my subjective opinion
+      is objectively wrong?
+    </small>
+    <br>
+    <small>
+       Feel free to send me an email at <a
+       href="mailto:[email protected]">[email protected]</a>.
+    </small>
+  </div>
+
        <div id="prev-next">
                <div>
                        <a href="/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/">
index ae0c693f0f44a5fc8305cece67e84ca9e3b461ff..4d69c85547a4ee03e1a1665b04486fda35836e5d 100644 (file)
                <title>Alexander Goussas</title>
                <link type="text/css" rel="stylesheet" href="/styles.css">
                <link type="text/css" rel="stylesheet" href="/highlight.css">
+    <link rel="icon" type="image/x-icon" href="/logo.png">
                <!-- mathtex -->
                <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
                <script defer src="/temml.min.js"></script>
                <script defer src="/render-mathtex.js"></script>
                <!-- /mathtex -->
                
+  <meta property="og:title" content="How I cut my expenses by a freaking lot">
+  <meta property="og:type" content="article" >
+  <meta property="og:url" content="/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/">
+  <meta property="og:image" content="/logo.png">
+  <meta property="og:description" content="">
 
        </head>
        <body id="body">
           <li class="nav-item" style="background-color: yellow; color: black;">
                              <a href="/">home</a>
           </li>
+          <li class="nav-item" style="background-color: darkseagreen; color: black;">
+                             <a href="/devlog/">devlog</a>
+          </li>
+          <li class="nav-item" style="background-color: lavender; color: black;">
+                             <a href="/projects/">projects</a>
+          </li>
           <li class="nav-item">
             <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
           </li>
-          <li class="nav-item" style="background-color: purple;">
+          <li class="nav-item" style="background-color: darkslateblue;">
             <a href="https://github.com/aloussase" target="_blank">github</a>
           </li>
-          <li class="nav-item" style="background-color: blue;">
+          <li class="nav-item" style="background-color: dodgerblue;">
             <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
           </li>
-          <li class="nav-item" style="background-color: red;">
+          <li class="nav-item" style="background-color: tomato;">
             <a href="/rss.xml" target="_blank">rss</a>
           </li>
         </ul>
                
        <h1>How I cut my expenses by a freaking lot</h1>
        <div class="post"><p>Let’s start with the why.</p><p>I have no family, and, as of the time of writing, no university degree either. This means that were I to be fired from my current job, I’d have a hard time (probably, I don’t really know) finding a new one, and that I’d have no where to go but the street. I <i>could</i> go to a friend’s, but I would not want to bother them like that.</p><p>Then, a few months ago I started seriously thinking about the role of AI in my area of work. I do not think AI can replace developers (I’ve seen it try and fail magnificently) but I am also aware of the fact that employers do think so, and, at least in my environment, have already started putting into action plans to cut personnel and replace humans with AI tools.</p><p>This led me to have a little crisis. I thought about switching careers and more extreme things as well. As of today, I no longer have these feelings. I love programming and I will continue doing it in whichever way I can. At the same time, I was thinking: what is it that I really need to have a “happy” life? For me, the answer is books, coffee and someplace I can walk in peace while listening to podcasts and stuff.</p><p>As you can see, I need barely any money for these things. And right now I am living in a city where I can do the latter. So, this realization led me to make a budget. Write down how much money I actually need in order to live. This resulted in a grand total of about 250 US dollars per month. Let’s break it down.</p><p>I spend around 120 USD a month in groceries, 20 USD in laundry, 8 for YouTube premium and … well, that’s it. I am excluding rent because I am in the process of moving, but I am aiming to go somewhere under 200 USD. Right now I am in a 500 USD apartment, but only because I took the first thing I found, since I came fleeing Guayaquil after being almost murdered in the street.</p><p>What did I do in order to achieve this?</p><p>First, groceries. I started <i>really</i> looking at the prices of stuff I was buying. I did not sacrifice quality for price. I found alternative products, and bought at cheaper replaces. I also set a hard rule of absolutely no eating out. Only in <i>very</i> special ocassions. You might try and gaslight yourself into believing that you <i>need</i> to eat out in order to socialize or whatever, but if you learned to cook well you could have friends at your house for dinner, for example. I say from the bottom of my heart that I like my food way more than a great deal of restaurants I’ve been to.</p><p>Next, I stopped smoking. This one is self-explanatory. Cigarrettes are freaking expensive.</p><p>The other thing is I started doing as much as I can online. So for example, books and classes for whatever are usually cheaper online. You don’t have to pay for delivery or transportation this way either.</p><p>Then, I started using the least amount of clothes possible. A week, I use 12 pieces of underwear, 6 shirts, 2 short and 1 sweater. Also, the cloth needs to be as lightweight as possible. So, no jeans. This way, I took my laundry cost from ~8USD a week to ~3USD. I live in a pretty cold city, but surprisingly I’ve found that my body has adapted pretty well. I barely feel any cold anymore.</p><p>That’s basically it. Pretty simple, but effective. I honestly think we’ve gotten too lazy and used to the comforts of modernity, which is exactly what our capitalistic society wants. They want us to cOnSOom.</p><p>I hope you got something useful from this, and I really encourage you to try and get out of the trap of consumerism. If you can afford it. And if you have a different perspective, please don’t hesitate to share it.</p></div>
+
+  <div id="post-correction">
+    <small>
+      Found a mistake? Want to improve this text? Want to thank me for bringing
+      light to your day? Want to insult me and tell me how my subjective opinion
+      is objectively wrong?
+    </small>
+    <br>
+    <small>
+       Feel free to send me an email at <a
+       href="mailto:[email protected]">[email protected]</a>.
+    </small>
+  </div>
+
        <div id="prev-next">
                <div>
                        <a href="/2026-04-30-how-i-manage-my-blog/">
                                <span>How I Manage my Blog</span>
                        </a>
                </div>
-               <div></div>
+               <div>
+                       <a href="/2026-05-05-on-linkedin-connections/">
+                               <span>On LinkedIn Connections</span>
+                               →
+                       </a>
+               </div>
        </div>
 
                <footer>
diff --git a/public/2026-05-05-on-linkedin-connections/index.html b/public/2026-05-05-on-linkedin-connections/index.html
new file mode 100644 (file)
index 0000000..ed478fa
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+    <link rel="icon" type="image/x-icon" href="/logo.png">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
+  <meta property="og:title" content="On LinkedIn Connections">
+  <meta property="og:type" content="article" >
+  <meta property="og:url" content="/2026-05-05-on-linkedin-connections/">
+  <meta property="og:image" content="/logo.png">
+  <meta property="og:description" content="">
+
+       </head>
+       <body id="body">
+    <img id="logo" src="/logo.png">
+    <img id="hornet" src="/hornet.png">
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+          </li>
+          <li class="nav-item" style="background-color: darkseagreen; color: black;">
+                             <a href="/devlog/">devlog</a>
+          </li>
+          <li class="nav-item" style="background-color: lavender; color: black;">
+                             <a href="/projects/">projects</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: darkslateblue;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: dodgerblue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+          <li class="nav-item" style="background-color: tomato;">
+            <a href="/rss.xml" target="_blank">rss</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               
+       <h1>On LinkedIn Connections</h1>
+       <div class="post"><p>A little while ago I sent a connnection request to Mr. Simon Peyton Jones. In case you don’t know who he is, he’s <a
+href="https://en.wikipedia.org/wiki/Simon_Peyton_Jones"> one of the major contributors to the creation of Haskell</a>.</p><p>He replied asking me what the connection was about, which surprised me since it was the first time someone asked that. I said that I only wanted to follow him because I’m a long time Haskell fan. He then told me that that’s ok, but that a note with the connection to make it more personal would have been better. And I agree.</p><p>I often rant about how dehumanized human connection in social media is. Trolls everywhere saying shit they would not dare utter in person. It’s as if when online, people really think they’re the main character in an RPG and everyone else is an NPC.</p><p>And yet, for a long time I’ve spammed connections on LinkedIn, precisely thinking I am a main character in an RPG, and connections items to be collected. But not anymore.</p><p>My goal is henceforth to build a genuine network of people sharing cool stuff and caring at a personal level. People that actually interact with each other.</p><p>So, if you want to connect, I’ll be more than happy to. Just make sure you send your personal note on the request ;).</p></div>
+
+  <div id="post-correction">
+    <small>
+      Found a mistake? Want to improve this text? Want to thank me for bringing
+      light to your day? Want to insult me and tell me how my subjective opinion
+      is objectively wrong?
+    </small>
+    <br>
+    <small>
+       Feel free to send me an email at <a
+       href="mailto:[email protected]">[email protected]</a>.
+    </small>
+  </div>
+
+       <div id="prev-next">
+               <div>
+                       <a href="/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/">
+                               ←
+                               <span>How I cut my expenses by a freaking lot</span>
+                       </a>
+               </div>
+               <div>
+                       <a href="/2026-05-30-how-to-actually-learn-a-language-on-your-own/">
+                               <span>How to &apos;Actually&apos; Learn a Language on Your Own</span>
+                               →
+                       </a>
+               </div>
+       </div>
+
+               <footer>
+                       <hr>
+               </footer>
+       </body>
+</html>
diff --git a/public/2026-05-30-how-to-actually-learn-a-language-on-your-own/index.html b/public/2026-05-30-how-to-actually-learn-a-language-on-your-own/index.html
new file mode 100644 (file)
index 0000000..0d55aa9
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+    <link rel="icon" type="image/x-icon" href="/logo.png">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
+  <meta property="og:title" content="How to &apos;Actually&apos; Learn a Language on Your Own">
+  <meta property="og:type" content="article" >
+  <meta property="og:url" content="/2026-05-30-how-to-actually-learn-a-language-on-your-own/">
+  <meta property="og:image" content="/logo.png">
+  <meta property="og:description" content="">
+
+       </head>
+       <body id="body">
+    <img id="logo" src="/logo.png">
+    <img id="hornet" src="/hornet.png">
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+          </li>
+          <li class="nav-item" style="background-color: darkseagreen; color: black;">
+                             <a href="/devlog/">devlog</a>
+          </li>
+          <li class="nav-item" style="background-color: lavender; color: black;">
+                             <a href="/projects/">projects</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: darkslateblue;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: dodgerblue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+          <li class="nav-item" style="background-color: tomato;">
+            <a href="/rss.xml" target="_blank">rss</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               
+       <h1>How to &apos;Actually&apos; Learn a Language on Your Own</h1>
+       <div class="post"><p>I speak 5 languages and I’d say 4 of them fluently, with a fifth one that I’m working on right now. All of them I’ve learned on my own, almost for free. In this post I’m going to show you how you can <em>actually</em> do that as well, using my experience with my latest language, German, as an example.</p><p>For some context, I started learning German January 2026 and as of today, May 2026, I can understand almost everything that is being said on podcasts and YouTube videos, I can some read books and communicate both in spoken and written forms, albeit not yet 100% comfortably. I would say I am <em>competent</em> in the language, with perhaps a B1 level. This, after ~5 months of learning. My goal is to have a strong B1 (voire B2) by the end of 2026. So, how have I been learning?</p><h2>Vocabulary</h2><p>To understand or produce a language, you need to know its words. Therefore, your goal the first few weeks is going to be acquiring as much vocabulary as possible. For this purpose, I recommend using an SRS tool such as <a href="https://apps.ankiweb.net/" target="_blank">Anki</a>.</p><p>There are many tutorials on Anki on the web, so I’m not going to explain how to use it here, perhaps in another post. Nonetheless, I can point you, dear reader, to a video I made some time ago showing how to create your own cards for it: <a href="https://youtu.be/-AUE10GSBUo?si=1OQlY40DTXkEHIkh" target="_blank">https://youtu.be/-AUE10GSBUo?si=1OQlY40DTXkEHIkh</a>.</p><p>If you are just getting started with Anki, I recommend searching for a <a href="https://ankiweb.net/shared/decks" target="_blank">shared deck</a> and use that one for your learning. You can ask online after good decks for your target language. I recommend the query “Anki deck for Language X Reddit.” The last bit is so that you get actual recommendations from human beings and not self-promoted or AI-generated information. For French, for example, I can recommend <a href="https://ankiweb.net/shared/info/893324022" target="_blank">this deck</a>.</p><p>A word of warning: Anki drills <em>are exhausting</em>. I myself have many a time had difficulties keeping my streaks. Nonetheless, it <em>really</em> works. Even if the first few days all is pain and no gain, after a couple weeks you are going to start noticing that you understand the language a more and more</p><p>Talking about understanding, let’s move on to how to train your comprehension skills.</p><h2>Comprehension skills</h2><p>There is a lot to be said about input, and <a href="https://en.wikipedia.org/wiki/Input_hypothesis" target="_blank">comprehensible input</a> specifically, but I’m not going to bombard you with information here. Instead, know that focusing on getting as much input as you can in your target language is a battle-tested technique for improving both your ability to understand it <em>and</em> produce it. So, without further ado, let’s see how you can get your input.</p><h3>Listening</h3><p>With a rather reduced pool of vocabulary, any podcast or video that you might listen to will sound like gibberish. Nevertheless, it is of utmost importance that you do start listening from the very beginning. The process works as follows:</p><ol><li>You learn new words through an SRS system like Anki.</li><li>You listen to the words as spoken by the natives and learn to recognize them in speech. This, in turn, reinforces your memory.</li><li>You slowly start to widen your acoustic pool.</li><li>Repeat from step 1, with more complex material.</li></ol><p>For example, I might learn the word “melden” in German through Anki, but I have a hard time recalling it or putting it to use. Then, while listening to a podcast, the hosts use it in context. Now I have a real example of how a native would use this word, and I can create an emotional connection because I am invested in the topic of discussion. This process is <em>very</em> effective.</p><p>The best thing is, this type of listening does not need to be a separate, dedicated part of your learning routine. You can listen to a podcast while cooking, going for a walk or any other activity.</p><p>Now, the specific material that you use will largely depend on your target language. For German, I listen to the <a href="https://www.easygerman.org/podcast" target="_blank">Easy German</a> podcast and follow YouTube channels in German as well, such as the Tagesschau or the DW news. The Easy Languages folks have a podcast for <a href="https://www.easy-languages.org/podcasts" target="_blank">many languages</a>, so you could start there.</p><p>Many YouTubers dedicate their channels to slow spoken language as well. For example, one channel I used to watch for German is <a href="https://www.youtube.com/@eleoscorner" target="_blank">https://www.youtube.com/@eleoscorner</a>. It worked great at the beginning, but now it’s way to slow for me. The same should happen to you.</p><h3>Reading</h3><p>Ah reading. Some dread it, others love it. Be that as it may, if you are serious about learning a language, you are going to have to read. Books and other written media are, after all, a wonderful source of new words and expressions.</p><p>As with listening, you are not going to be able to read much of anything barely knowing any words in the language. Luckily, there are resources specifically made for language learners that include transcriptions in your native tongue, or English most likely, and word definitions.</p><p>Examples of these are <a href="https://www.amazon.com/s?k=olly+richards&crid=2B5D2TAG6FAG8&sprefix=olly+richar%2Caps%2C191&ref=nb_sb_noss_2" target="_blank">Olly Richards’ Short Stories series</a> or, for German specifically, the <a href="https://www.amazon.com/dp/B074C9X8ZP?binding=kindle_edition&searchxofy=true&ref_=dbs_s_aps_series_rwt_tkin&qid=1780148233&sr=8-1" target="_blank">Dino lernt Deutsch series</a>. These are by two different authors, but I found both to be good resources for beginners learning a language. The stories are engaging enough not to get bored and to actually want to know what happens next, and the language is specially tuned for the reader’s level and to include useful native expressions. The former has short stories in a bunch of languages, so I recommend checking that one out.</p><p>Once you have acquired enough vocabulary, you can move on to reading stuff that is more interesting to you. For example, when learning French, I started reading Camus’ works because Camus is famous for using a direct prose and simple vocabulary. I’ve heard the same is true for Kafka in German, but haven’t yet tried reading him.</p><p>While reading, I recommend a feedback loop similar to when listening. Mark any words that you do not recognize and create Anki cards for them. This step is optional. Through repeated exposition to the same word in context you will end up learning it anyway. Using SRS only speeds up this process significantly.</p><p>In terms of tools, if you can afford it, I would recommend using one such as <a href="https://www.lingq.com/en/" target="_blank">LingQ</a>. LingQ tracks your reading statistics and allows you to create “lingqs” from words that you do not know. This means that you can use the tool to create a database of words that you want to learn. This database can then be exported into Anki. What I particulary appreciated of LingQ was that the words that you mark appear in a different color everywhere, so that you can recognize them and pay special attention to them, which is a bit harder to do when you are in the flow of reading and there are no special markers.</p><p>I used LingQ for a time and was pretty happy with it, but for me the benefits did not justify the price. After all, by reading on my Kindle I get access to translations and dictionary definitions as well. So, the recommendation stands, but I invite you to evaluate it and see if it’s a good fit for yourself.</p><h2>Production skills</h2><p>For the first few weeks, you don’t need to produce the language to actually learn it. Moreover, there are programs, such as the <a href="https://www.dreaming.com/" target="_blank">Dreaming Languages</a> one, that recommend not focusing on production of the language for <em>months</em>. I kind of agree with that posture.</p><p>For example, when learning French I did not product the language at all for at least 8 months, and I still could communicate semi-comfortably when I started to speak.</p><p>Nonetheless, for German my approach has been another one, and I actually prefer starting to produce from the start. It’s just more fun as well.</p><h3>Writing</h3><p>There are many ways in which you can practice writing. One of the simplest is journaling. Perhaps you already keep a journal in your native language. You can just switch to writing it in your target language instead!</p><p>Otherwise, I have two specific resources to recommend. The first one is the <a href="https://www.reddit.com/r/WriteStreakEN/" target="_blank">WriteStreak subreddits</a>. I have linked here the one for English, but there is one for almost every language. The cool thing is that native speakers will read your texts and suggest corrections. You can also tag your posts as “Don’t correct”, but that would defeat the whole purpose in my opinion.</p><p>If you don’t know what to write about, you can look for writing prompts on the Internet, or you could use something like <a href="https://langcorrect.com/" target="_blank">LangCorrect</a>, the second resource I recommend. This is a site similar in spirit to the WriteStreak subreddits, you even have a writing streak associated with your profile! On the other hand, LangCorrect is more structured. You register yourself as native speaker of X language, and can pick up to 2 learning languages in the free tier. There are pre-made prompts that you can answer to if you don’t know what to write about, which is what I personally do. The “downside” of LangCorrect is that you have to correct other people’s text as well if you want to receive corrections, which I personally do not mind, but I can understand why some people would not want to spend time correcting texts.</p><p>Whatever you decide to do in the end, I encourage you to try and get your texts corrected by someone with mastery over the language. What I do is I try to answer 1 prompt per day on LangCorrect. I’ve found this extremely valuable, because many times I’ve been corrected and given useful tips on little nuances of the language.</p><p>As a final note on corrections, keep in mind that the people doing the corrections are normal people like you and me, not linguists or literature professors. That means it is possible that the corrections they suggest are wrong or misleading. That’s why you should use your common sense and what you already know about the language when evaluating corrections.</p><h3>Speaking</h3><p>I don’t know what your goal with language learning is, but for many people it is to talk with other speakers of the language. In my experience, other than for fun, people learn a language for one of two reasons: either they are moving to a new country or they need it for a job. In both cases, it’s speaking the most important skill to develop.</p><p>Now, as I said before, by solely focusing on input for the first few months, you should naturally start to develop your speaking competence as well. What I mean to say is that, once you understand enough of the language, you <em>will</em> be able to speak it as well. It’s just not possible not to.</p><p>Nonetheless, what will also happen is that you will stutter, search for words and lack confidence while speaking. And this is precisely what we want to tackle when practicing speaking. And this is also precisely why speaking <em>must</em> be practiced with another human being, not with an AI tool.</p><p>In terms of free resources, you could use <a href="https://tandem.net/" target="_blank">Tandem</a> to look for a speaking partner. That’s never worked for me though. What has worked for me is looking for speaking partners on Reddit. There are many language learning and language exchange subreddits where you can go and explain your situation and explain what are you looking for in a speaking partner.</p><p>For instance, I met a person from Russia with whom I used to practice French and another one from China. I also met a person from Egypt with whom I was practicing German up until shortly. It might take some time, but I honestly think Reddit is a good place to look for language partners.</p><p>You might try and look for someone to practice with in your town or city, but in my case I’ve not been able to find anyone that way. If you have any tips for that, then I’m all ears.</p><p>Moving on to paid options, I can wholeheartedly recommend <a href="https://www.italki.com/" target="_blank">italki</a>. italki is a platform where you can look for a tutor to practice speaking with. Usually you just go in a call with someone and speak about whatever. Some tutors may have more structured approaches. Price are quite cheap, ranging from 5 USD per hour for the cheapest community tutors, to 50 USD per hours for professional tutors. I’ve only had good experiences there. One thing to note is that cheap tutors do not equate low quality. They are just trying to compete in a saturated market, so I would encourage you to give them an opportunity.</p><p>So, how often should you practice speaking? Again, that would depend on what your goals are, but ideally, every day. If you are using a paid service, then it depends on your budget. Usually I take one conversation session per week. If you have an upcoming exam in a few weeks or months, then I think investing more with a tutor is worth it. There are tutors specialized in tests such as the IELTS that can help you running simulations, for example.</p><p>For me speaking is not a priority since I learn mainly in order to be able to read works in their original language.</p><h2>Grammar</h2><p><figure><img src="/elephant-in-the-room.jpg">
+<figcaption>Adressing the elephant in the room</figcaption></figure></p><p>Different languages have more or less complicated languages, and perceived difficulty also differs from learner to learner. For example, German grammar is way easier for me than French grammar. Yes, German has cases, but they make sense! In French, on the other hand, there are a lot of corner cases and weird stuff that you just have to memorize, and I mean <em>a lot</em> of them. Also, as a native Spanish speaker, for the longest time I could not get my head around the partitive article.</p><p>Anyway, all that is to say, grammar is not necessarily hard in and of itself. So there is no reason for you to fear it. Quite the contrary, knowing your language’s grammar allows you to bend it to your will and speak with confidence knowing that what you are saying is sound according to the rules of the language.</p><p>It <em>is</em> possible to speak correctly without knowing grammar rules. It’s what most native speakers do in their own language after all. So you don’t <em>have</em> to learn grammar, but I still recommend it nonetheless.</p><p>Besides, at least for me, learning grammar is fun. Each time I learn how to use a new construct or a new rule, I feel like I’m unlocking a new ability in an RPG. It gives me new powers in the language.</p><p>Moreover, studying grammar counts as input, and, as you know, the more input you get, the better.</p><p>So, I encourage you to go ahead and get your hands on a grammar book and incorporate that into your routine. At the moment, I study 30 minutes of German grammar and 30 minutes of French grammar per day. Small steps every day is what eventually gets you to where you want to go.</p><p>Remember my friend, language learning is a marathon, not a race.</p><p>Happy learning :)</p></div>
+
+  <div id="post-correction">
+    <small>
+      Found a mistake? Want to improve this text? Want to thank me for bringing
+      light to your day? Want to insult me and tell me how my subjective opinion
+      is objectively wrong?
+    </small>
+    <br>
+    <small>
+       Feel free to send me an email at <a
+       href="mailto:[email protected]">[email protected]</a>.
+    </small>
+  </div>
+
+       <div id="prev-next">
+               <div>
+                       <a href="/2026-05-05-on-linkedin-connections/">
+                               ←
+                               <span>On LinkedIn Connections</span>
+                       </a>
+               </div>
+               <div></div>
+       </div>
+
+               <footer>
+                       <hr>
+               </footer>
+       </body>
+</html>
diff --git a/public/devlog/index.html b/public/devlog/index.html
new file mode 100644 (file)
index 0000000..5cd22e2
--- /dev/null
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+    <link rel="icon" type="image/x-icon" href="/logo.png">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
+
+       </head>
+       <body id="body">
+    <img id="logo" src="/logo.png">
+    <img id="hornet" src="/hornet.png">
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+          </li>
+          <li class="nav-item" style="background-color: darkseagreen; color: black;">
+                             <a href="/devlog/">devlog</a>
+          </li>
+          <li class="nav-item" style="background-color: lavender; color: black;">
+                             <a href="/projects/">projects</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: darkslateblue;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: dodgerblue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+          <li class="nav-item" style="background-color: tomato;">
+            <a href="/rss.xml" target="_blank">rss</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               
+       <h1>Devlog</h1>
+       <div><h2>About</h2><p>I started this devlog to keep track of the things I’m working on that not necessarily merit a YouTube video on their on. It’s written in a flow of conscience way, so I cannot promise it to make sense.</p><h2>Updates</h2><h3>31.05.2026</h3><ul><li>Created a web ui for larousse API. Used Quarkus’ templating engine, Qute.</li><li>Opened a MR in the Zine repository to add a <code>containsAny</code> helper: <a href="https://github.com/kristoff-it/zine/pull/224" target="_blank">https://github.com/kristoff-it/zine/pull/224</a>.</li></ul></div>
+
+               <footer>
+                       <hr>
+               </footer>
+       </body>
+</html>
diff --git a/public/elephant-in-the-room.jpg b/public/elephant-in-the-room.jpg
new file mode 100644 (file)
index 0000000..af458b3
Binary files /dev/null and b/public/elephant-in-the-room.jpg differ
index 19a4f74b2b4d68dffa1d3d8946265a251c700422..f80b888bb7d6b7ce258ba8306267a586de9773d6 100644 (file)
@@ -10,6 +10,7 @@
                <title>Alexander Goussas</title>
                <link type="text/css" rel="stylesheet" href="/styles.css">
                <link type="text/css" rel="stylesheet" href="/highlight.css">
+    <link rel="icon" type="image/x-icon" href="/logo.png">
                <!-- mathtex -->
                <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
                <script defer src="/temml.min.js"></script>
                <!-- /mathtex -->
                
 
-<<<<<<< HEAD
-<head>
-  <meta charset="utf-8">
-  <title>Alexander Goussas | Programming & Friends</title>
-  <meta name="author" content="Alexander Goussas">
-  <meta name="description" content="Blog about programming">
-  <meta name="viewport" content="width=device-width, initial-scale=1">
-  <link href="./styles.css" rel="stylesheet">
-  <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
-  <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
-</head>
-
-<body>
-  <header>
-    <nav>
-      <ul>
-        <li class="nav-item" style="background-color: yellow; color: black;">
-          <a href="/">home</a>
-        </li>
-        <li class="nav-item">
-          <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
-        </li>
-        <li class="nav-item" style="background-color: purple;">
-          <a href="https://github.com/aloussase" target="_blank">github</a>
-        </li>
-        <li class="nav-item" style="background-color: blue;">
-          <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
-        </li>
-      </ul>
-    </nav>
-  </header>
-
-  <h1 style="color: yellow;">Alexander Goussas</h1>
-  <h2 style="color: green; text-align: center;">Blog about programming & friends</h2>
-
-  <img id="logo" src="./logo.png" />
-  <img id="hornet" src="./hornet.png" />
-
-  <section id="posts">
-    <h2 style="color: yellow;">Posts</h2>
-    <ul>
-      <li><a href="./2026-05-05-on-linkedin-connections.md.html">On LinkedIn Connections</a></li>
-      <li><a href="./2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md.html">How I cut my expenses by a freaking lot</a></li>
-      <li><a href="./2026-04-30-how-i-manage-my-blog.md.html">How I manage my blog with my own Git server and Kubernetes</a></li>
-      <li><a href="./2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md.html">One of the best skills I've learned as a programmer</a></li>
-    </ul>
-  </section>
-  <script src="js/script.js"></script>
-</body>
-=======
        </head>
        <body id="body">
     <img id="logo" src="/logo.png">
           <li class="nav-item" style="background-color: yellow; color: black;">
                              <a href="/">home</a>
           </li>
+          <li class="nav-item" style="background-color: darkseagreen; color: black;">
+                             <a href="/devlog/">devlog</a>
+          </li>
+          <li class="nav-item" style="background-color: lavender; color: black;">
+                             <a href="/projects/">projects</a>
+          </li>
           <li class="nav-item">
             <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
           </li>
-          <li class="nav-item" style="background-color: purple;">
+          <li class="nav-item" style="background-color: darkslateblue;">
             <a href="https://github.com/aloussase" target="_blank">github</a>
           </li>
-          <li class="nav-item" style="background-color: blue;">
+          <li class="nav-item" style="background-color: dodgerblue;">
             <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
           </li>
-          <li class="nav-item" style="background-color: red;">
+          <li class="nav-item" style="background-color: tomato;">
             <a href="/rss.xml" target="_blank">rss</a>
           </li>
         </ul>
        <div></div>
        <div>
                <h2>Posts</h2>
-               <div>
-      <div class="post-preview">
-                         <span class="date">May 02, 2026</span>
+               <ul id="posts">
+      <li class="post-preview">
+                         <span>May 30, 2026</span>
+                         <a href="/2026-05-30-how-to-actually-learn-a-language-on-your-own/">
+                               <h3>How to &apos;Actually&apos; Learn a Language on Your Own</h3>
+                         </a>
+      </li>
+               
+      <li class="post-preview">
+                         <span>May 05, 2026</span>
+                         <a href="/2026-05-05-on-linkedin-connections/">
+                               <h3>On LinkedIn Connections</h3>
+                         </a>
+      </li>
+               
+      <li class="post-preview">
+                         <span>May 02, 2026</span>
                          <a href="/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/">
                                <h3>How I cut my expenses by a freaking lot</h3>
                          </a>
-      </div>
+      </li>
                
-      <div class="post-preview">
-                         <span class="date">April 30, 2026</span>
+      <li class="post-preview">
+                         <span>April 30, 2026</span>
                          <a href="/2026-04-30-how-i-manage-my-blog/">
                                <h3>How I Manage my Blog</h3>
                          </a>
-      </div>
+      </li>
                
-      <div class="post-preview">
-                         <span class="date">April 19, 2026</span>
+      <li class="post-preview">
+                         <span>April 19, 2026</span>
                          <a href="/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/">
                                <h3>One of the best Skills I&apos;ve learned as a Programmer</h3>
                          </a>
-      </div>
-               </div>
+      </li>
+               
+      <li class="post-preview"></li>
+               
+      <li class="post-preview"></li>
+               </ul>
        </div>
->>>>>>> rss-feed
 
                <footer>
                        <hr>
diff --git a/public/larousse-api.png b/public/larousse-api.png
new file mode 100644 (file)
index 0000000..1acf2c5
Binary files /dev/null and b/public/larousse-api.png differ
diff --git a/public/projects.css b/public/projects.css
new file mode 100644 (file)
index 0000000..22fef9e
--- /dev/null
@@ -0,0 +1,7 @@
+figure {
+  text-align: center;
+
+  img {
+    max-height: 300px;
+  }
+}
diff --git a/public/projects/index.html b/public/projects/index.html
new file mode 100644 (file)
index 0000000..0629ce3
--- /dev/null
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+    <meta name="author" content="Alexander Goussas">
+    <meta name="description" content="Blog about programming">
+    <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+    <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+    <link rel="icon" type="image/x-icon" href="/logo.png">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
+               <link type="text/css" rel="stylesheet" href="/projects.css">
+
+       </head>
+       <body id="body">
+    <img id="logo" src="/logo.png">
+    <img id="hornet" src="/hornet.png">
+    <header>
+      <nav>
+        <ul>
+          <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+          </li>
+          <li class="nav-item" style="background-color: darkseagreen; color: black;">
+                             <a href="/devlog/">devlog</a>
+          </li>
+          <li class="nav-item" style="background-color: lavender; color: black;">
+                             <a href="/projects/">projects</a>
+          </li>
+          <li class="nav-item">
+            <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+          </li>
+          <li class="nav-item" style="background-color: darkslateblue;">
+            <a href="https://github.com/aloussase" target="_blank">github</a>
+          </li>
+          <li class="nav-item" style="background-color: dodgerblue;">
+            <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+          </li>
+          <li class="nav-item" style="background-color: tomato;">
+            <a href="/rss.xml" target="_blank">rss</a>
+          </li>
+        </ul>
+      </nav>
+    </header>
+               
+       <h1>Projects</h1>
+       <div><h2>larousse API</h2><p><figure><img src="/larousse-api.png">
+<figcaption>Larousse API’s Web UI</figcaption></figure></p><p>A REST API that serves word translations and definitions, with an accompanying web ui à la Google Translate, but less crappy.</p><ul><li>Source code: <a href="https://git.frustrated-labs.net/?p=larousseapi;a=summary" target="_blank">https://git.frustrated-labs.net/?p=larousseapi;a=summary</a></li><li>Project website: <a href="https://lang.frustrated-labs.net/#" target="_blank">https://lang.frustrated-labs.net/#</a></li></ul></div>
+
+               <footer>
+                       <hr>
+               </footer>
+       </body>
+</html>
index bed9ab0a864bdc390ed53fad054e58a1f6a3b55e..b938a87d13d059a05b8192c1c191ac59bbab95ca 100644 (file)
@@ -21,7 +21,14 @@ h2 {
 }
 
 a {
+  color: lightgreen;
   text-decoration: underline;
+
+  &:hover {
+    box-shadow: 
+      rgba(0 255 0 / 80%) 3px 3px 8px,
+      rgba(0 255 0 / 80%) -3px -3px 8px;
+  }
 }
 
 nav {
@@ -30,6 +37,10 @@ nav {
   ul {
     list-style: none;
     display: flex;
+    
+    a {
+      color: black;
+    }
   }
 }
 
@@ -89,10 +100,52 @@ nav {
   inset rgba(255 255 255 / 40%) 0px 5px;
 }
 
+#posts {
+  display: flex;
+  flex-direction: column;
+}
+
 .post-preview {
   display: flex;
+  font-size: 1rem;
   align-items: center;
   gap: 0.4rem;
   margin-bottom: 0px;
-  height: fit-content;
+  
+  a {
+    height: fit-content;
+  }
+}
+
+.post {
+  img {
+    max-height: 480px;
+    text-align: center;
+    display: block;
+    margin: auto;
+    margin-bottom: 10px;
+  }
+
+  figcaption {
+    text-align: center;
+    font-size: 0.9rem;
+    font-style: italic;
+  }
+}
+
+#post-correction {
+  text-align: center;
+  font-style: italic;
+  padding: 1rem 0;
 }
+
+@media only screen and (max-width: 600px) {
+  body {
+    width: 90%;
+  }
+
+  #hornet, #logo {
+    display: none;
+  }
+} 
+