Aboutme.scala
experience.sh
projects.js
languages.sql
contact.js
package aboutme

import java.time.{LocalDate, Month, Period}
import imaginary.ConsoleUtils

case class Music(
                trackName: String,
                artists: List[String],
                genre: String,
                spotifyLink: String
                ) {
  override def toString: String =
    s"• $trackName by ${artists.mkString(", ")} [$genre]"
}

case class Book(
               title: String,
               author: String,
               edition: String,
               isbn: String
               ) {
  override def toString: String =
    s"• $title by $author ($edition) [ISBN $isbn]"
}

class Person(
            val profilePath: String,
            val fullname: String,
            val title: String,
            val location: String,
            val birthdate: LocalDate,
            val passion: String,
            val musics: List[Music],
            val books: List[Book]
            ) {
  def introduce(): String = {
    ConsoleUtils.displayImage(profilePath, ConsoleUtils.ALIGN_CENTER,
      s"${ConsoleUtils.bigger(fullname)}\n${Period.between(birthdate, LocalDate.now()).getYears} years old\n$title\n$location")
  }

  def recommendMusics(playlist: (String, String)): String = {
    val startSentence = "Artists and musics I'd recommend listening:\n"

    val playlistSentence = "\n"*2 + "Check out my Spotify playlist:" + ConsoleUtils.hypertextlink(playlist._1, playlist._2)

    (for m <- musics yield ConsoleUtils.hypertextlink(m.toString, m.spotifyLink)).mkString(startSentence, "\n", playlistSentence)
  }

  def recommendBooks(): String = {
    s"Here are ${books.length} books I'd recommend:\n" +
      books.mkString("\n")
  }
}

object AboutMe {
  def main(args: Array[String]): Unit = {
    val me = new Person(
      "profilepic.png",
      "Allan Brunner",
      "Software Developer",
      "Muraz (Collombey), Switzerland",
      LocalDate.of(2005, Month.APRIL, 1),
      "My passion lies in science and in understanding how the world works.\n" +
        "Whether it's atoms, biology, or the vastness of space, I love learning about it all.\n" +
        "If it's related to science, it will likely capture my interest.",
      List(
        Music("Get Wrecked 2024 Tool", List("Dual Damage"),
          "HARDSTYLE", "https://open.spotify.com/track/6AObZNK4BuQNWMUVdDqzr3?si=86c38525b67a4ba7"),
        Music("Les ogres", List("Solann"),
          "NÉOFOLK", "https://open.spotify.com/track/7maKIQM9dXihvpXAJGSPiV?si=a3f16c5dcf5f4d90"),
        Music("Experience", List("Ludovico Einaudi"),
          "CLASSIC", "https://open.spotify.com/track/1BncfTJAWxrsxyT9culBrj?si=01847213befa4881")
      ),
      List(
        Book("Cogito", "Victor Dixen", "Robert Laffon", "978-2-221-24172-1"),
        Book("The Name of the Wind", "Patrick Rothfuss", "Gollancz", "978-0-575-08140-6")
      )
    )

    println(me.introduce())
    println("\n=== = PASSION = ===")
    println(me.passion)
    println("\n=== == MUSIC == ===")
    println(me.recommendMusics(("Liked Songs", "https://open.spotify.com/playlist/4bW6kZFcICPGOV2s70X55l?si=d8fdaa8be51a4c98")))
    println("\n=== == BOOKS == ===")
    println(me.recommendBooks())
  }
}
profile picture

Allan Brunner

Software Developer

Muraz (Collombey), Switzerland

==== = PASSION = ====
My passion lies in science and in understanding how the world works.
Whether it's atoms, biology, or the vastness of space, I love learning about it all.
If it's related to science, it will likely capture my interest.

==== == MUSIC == ====
Artists and musics I'd recommend listening:
• Get Wrecked 2024 Tool by Dual Damage [HARDSTYLE]Les ogres by Solann [NÉOFOLK]Experience by Ludovico Einaudi [CLASSIC]

Check out my Spotify playlist: Liked Songs

==== == BOOKS == ====
Here are 2 books I'd recommend:
• Cogito by Victor Dixen (Robert Laffon) [ISBN 978-2-221-24172-1]
• The Name of the Wind by Patrick Rothfuss (Gollancz) [ISBN 978-0-575-08140-6]
git clone https://github.com/zcBruAll/developer-journey.git
cd ~/Dev/developer-journey
git log --all --decorate --graph
              
Click to see future predicitions
| * commit a3e6d2b2c1ed3572d0b03c368621aa80047c5a19 (HEAD -> study, origin/study, origin/HEAD)
ǀ ǀ Author: Allan Brunner <allan@allanbrunner.dev>
ǀ ǀ Date:   Wed Sep 17 17:00:00 2025 +0200
ǀ ǀ
ǀ ǀ   Join the Valais Racing Team (VRT) as a Driverless Developper. See:VRT-fs.ch
ǀ ǀ
ǀ ǀ
| * commit 830d24e924c2dc76b7b239eceacba3e8f75751df
|/  Author: Allan Brunner <allan@allanbrunner.dev>
|   Date:   Mon Sep 9 08:15:00 2024 +0200
|
|     Started HES-SO Valais Wallis in Big Data in part-time
|
* commit a611369472df769ece007bc0ff253ddb7369dfda
| Author: Allan Brunner <allan@allanbrunner.dev>
| Date:   Fri Aug 2 06:15:00 2024 +0200
|
|   Started as a software developer at CCCVS
|
|   Continued working on the intern team software in Java with Swing.
|   Also worked on some other smaller programs using Talend
|
*   commit cd046a8d5a227d438bcdf5d9376ff6ae0b364aa4
|\  Merge: 3db4d43 d5a370e
| | Author: Allan Brunner <allan@allanbrunner.dev>
| | Date:   Fri Jun 21 18:00:00 2024 +0200
| |
| |   Obtained my swiss VET (CFC) with integrated FVB (MP TASV)
| |
| |   This diploma marks the end of my 4-year apprenticeship at the EPTM
| |
| * commit 62928e5a879474eabe941fbaa04a9840c49bf3a5
| | Author: Allan Brunner <allan@allanbrunner.dev>
| | Date:   Wed Aug 2 08:10:00 2023 +0200
| |
| |   Started the 4th year long internship at CCCVS
| |
| |   Mainly worked as the only developper on a intern team software in Java and Swing.
| |   At EPTM, during the 4th year, you can choose one of the 2 companies of the 3rd year internship
| |   where you'll work for the year long internship and on the Individual Practical Work (TPI).
| |
| * commit b7e65533a09e7f0f4c0df3fb4b76247f6822d311
| | Author: Allan Brunner <allan@allanbrunner.dev>
| | Date:   Mon Mar 13 08:30:00 2023 +0200
| |
| |   Started the second 3-month long internship at Ceidos
| |
| |   Worked on integrating and improving features of the C-Netics.
| |
| * commit db0150a7d88825b1e437d3c0777018fe19565009
| | Author: Allan Brunner <allan@allanbrunner.dev>
| | Date:   Wed Nov 30 08:30:00 2022 +0200
| |
| |   Started the first 3-month long internship at CCCVS
| |
| |   Mainly worked as an IT operator.
| |   During the 3rd year at EPTM, you get sent, for 3 months each, in 2 companies where
| |   you can start having real experience and application for the aquired knowledge.
|/
* commit 81292b84f572e2ed09064370ed9d73c8fcffe807
  Author: Allan Brunner <allan@allanbrunner.dev>
  Date:   Mon Aug 17 09:15:00 2020 +0200
 
    Started EPTM for a 4-year apprenticeship in computer science
              
# 🚧 Projects
The following is a collection of my projects resuming my journey as a developer.

## 🚗 ISCRacer
**Type:** Game  
**Dates:** Apr. 2025 - Jun. 2025  
**Tech stack:** Scala, libGDX, GLSL, Online multiplayer  
**Motivations:** Had to create a game using GDX2D lib for the POO courses in HES-SO. Having already made a LAN game, I wanted to push things further by making an online game with an external server.

ISCRacer is a small retro-inspired racing game written in Scala.  
It uses the **gdx2d library** to build a light weight **LibGDX desktop application** and relies on a custom **Mode7** renderer to turn a 2D track texture into a pseudo‑3D world.  
A network client based on **fs2 streams** allows multiple players to race together. 

![ISCRacer Screenshot](Images/ISCRAcer.png)

**Links:** [Client-side GitHub Repository](https://github.com/zcBruAll/ISCRacer), [Server-side GitHub Repository](https://github.com/zcBruAll/ISCRacer-Server)

## 💣 BomberGrid
**Type:** Game  
**Dates:** Dec. 2024 - Jan. 2025  
**Tech stack:** Scala, Local multiplayer  
**Motivations:** Had to create a grid-based game for the imperative programming course in HES-SO. Seeking challenge, I wanted to learn how to make a LAN game.

BomberGrid is a 2D grid based game working on LAN. It was made in Scala using the FunGraphics library. Players navigate a bomber through a grid and stragetically drop bombs to try to defeat the opponent.

![BomberGrid Gameplay](https://github.com/user-attachments/assets/e1d31678-095d-4338-b849-eeea42fd69e7)

**Links:** [GitHub Repository](https://github.com/zcBruAll/BomberGrid)

## 🧠 Project Euler
**Type:** Challenges  
**Dates:** Dec. 2024 - Today  
**Tech stack:** Julia  
**Motivations:** I wanted to learn Julia and improve my math reasoning skill. Found a way to have both.

Project Euler provides a lot of mathemical exercices to solve programmatically and sometimes provides explanation on efficient and optimised way of solving some problems.

![Project Euler pesronal advancements](https://projecteuler.net/profile/ProjectBrunner.png)

**Links:** [GitHub Repository](https://github.com/zcBruAll/ProjectEuler)

## 🎵 Quantix Tune
**Type:** Tool  
**Dates:** Nov. 2024 - Today  
**Tech stack:** Vue.js, TypeScript, Spotify API  
**Motivations:** I needed some tools to improve my Spotify experience and because I could, I did it. I also took advantage of this project to improve my web development skills.

This project, which works with the Spotify API, aims to provide Spotify’s features along with additional tools such as a playlist comparer/synchronizer.

![ISCRacer Screenshot](Images/ISCRAcer.png)

**Links:** [GitHub Repository](https://github.com/QuantixWorld/QuantixTune)

## ⌛ Time Calculator
**Type:** Tool  
**Dates:** Sep. 2024 (3 days)  
**Tech stack:** Scala, ScalaJS  
**Motivations:** Needed a way to know when I could leave work and to convert times in working days. Since we started studying Scala in HES-SO, choose to try making a web app out of it.

This project offerrs a useful time calculator especially created to be used with work hours.

![Time Calculator screenshot](images/TimeCalculator.png)

**Links:** [GitHub Repository](https://github.com/zcBruAll/TimeCalculator), [WebApp](https://allanbrunner.dev/projects/TimeCalculator)

## 💡 QuantixScript - Lox Interpreter
**Type:** Experiment  
**Dates:** Dec. 2024 - Today, Jun.13 - Today  
**Tech stack:** Rust, x86 ASM, java  
**Motivations:** I've always worked with programming languages but never completely understood how they worked. Wanting to know more about their secret I thought the best way to learn is to create my own.

QuantixScript is my initial project, a custom compiled programming language made in Rust for x86 Assembly. 
I wanted to use this project to know more about Rust and Assembly but I found out, pretty fast, that learning 3 new things at the same time can be difficult. 
Talking with an HES-SO professor, he adviced me to start by following the [Crafting interpreters tutorial](https://craftinginterpreters.com) and later create my custom language, so did I.

![Crafting interpreters image](images/CraftingInterpreters.png)

**Links:** [QuantixScript GitHub Repository](https://github.com/QuantixWorld/QuantixScript), [jlox Interpreter GitHub Repository](https://github.com/zcBruAll/jloxInterpreter)

## 🔩 Other smaller projects

|Project|Type|Tech Stack|Description|
|-|-|-|-|
|[ISC - Internet Secured Chat](https://github.com/zcBruAll/ISC-Internet-Secured-Chat)|App|Python|A simple python app that talks with a server and provide encoding tools (Crypto and Security HES-SO Course)|
|[Advent Of Code](https://github.com/zcBruAll/AdventOfCode)|Challenge|Scala|Personal Advent Of Code algorithms to get to the solutions|
|[AstroPepito](https://github.com/zcBruAll/AstroPepito)|App|C++|A little project regrouping astronomy tools|
|[JSON Reader](https://github.com/zcBruAll/JSONReader)|App|C#|A little app providing visual aid for JSON files|
|[WeatherAggregator](https://github.com/zcBruAll/WeatherAggregator)|App (CLI)|Scala|A projects working with open-meeteo API that provides information about upcoming weather|

🚧 Projects

The following is a collection of my projects resuming my journey as a developer.

🚗 ISCRacer

Type: Game Dates: Apr. 2025 - Jun. 2025 Tech stack: Scala, libGDX, GLSL, Online multiplayer Motivations: Had to create a game using GDX2D lib for the POO courses in HES-SO. Having already made a LAN game, I wanted to push things further by making an online game with an external server. ISCRacer is a small retro-inspired racing game written in Scala. It uses the gdx2d library to build a light weight LibGDX desktop application and relies on a custom Mode7 renderer to turn a 2D track texture into a pseudo‑3D world. A network client based on fs2 streams allows multiple players to race together. ISCRacer Screenshot Links: Client-side GitHub Repository, Server-side GitHub Repository

💣 BomberGrid

Type: Game Dates: Dec. 2024 - Jan. 2025 Tech stack: Scala, Local multiplayer Motivations: Had to create a grid-based game for the imperative programming course in HES-SO. Seeking challenge, I wanted to learn how to make a LAN game. BomberGrid is a 2D grid based game working on LAN. It was made in Scala using the FunGraphics library. Players navigate a bomber through a grid and stragetically drop bombs to try to defeat the opponent. BomberGrid Gameplay Links: GitHub Repository

🧠 Project Euler

Type: Challenges Dates: Dec. 2024 - Today Tech stack: Julia Motivations: I wanted to learn Julia and improve my math reasoning skill. Found a way to have both. Project Euler provides a lot of mathemical exercices to solve programmatically and sometimes provides explanation on efficient and optimised way of solving some problems. Project Euler personal advancements Links: GitHub Repository

🎵 Quantix Tune

Type: Tool Dates: Nov. 2024 - Today Tech stack: Vue.js, TypeScript, Spotify API Motivations: I needed some tools to improve my Spotify experience and because I could, I did it. I also took advantage of this project to improve my web development skills. This project, which works with the Spotify API, aims to provide Spotify’s features along with additional tools such as a playlist comparer/synchronizer. QuantixTune Screenshot Links: GitHub Repository

⌛ Time Calculator

Type: Tool Dates: Sep. 2024 (3 days) Tech stack: Scala, ScalaJS Motivations: Needed a way to know when I could leave work and to convert times in working days. Since we started studying Scala in HES-SO, choose to try making a web app out of it. This project offerrs a useful time calculator especially created to be used with work hours. Time Calculator screenshot Links: GitHub Repository, WebApp

💡 QuantixScript - Lox Interpreter

Type: Experiment Dates: Dec. 2024 - Today, Jun.13 - Today Tech stack: Rust, x86 ASM, java Motivations: I've always worked with programming languages but never completely understood how they worked. Wanting to know more about their secret I thought the best way to learn is to create my own. QuantixScript is my initial project, a custom compiled programming language made in Rust for x86 Assembly. I wanted to use this project to know more about Rust and Assembly but I found out, pretty fast, that learning 3 new things at the same time can be difficult. Talking with an HES-SO professor, he adviced me to start by following the Crafting interpreters tutorial and later create my custom language, so did I. Crafting interpreters image Links: QuantixScript GitHub Repository, jlox Interpreter GitHub Repository

🔩 Other smaller projects

ProjectTypeTech stackDescription
ISC - Internet Secured ChatAppPythonA simple python app that talks with a server and provide encoding tools (Crypto and Security HES-SO Course)
Advent Of CodeChallengeScalaPersonal Advent Of Code algorithms to get to the solutions
AstroPepitoAppC++A little project regrouping astronomy tools
JSON ReaderAppC#A little app providing visual aid for JSON files
WeatherAggregatorApp (CLI)ScalaA projects working with open-meeteo API that provides information about upcoming weather
-- Programming Languages
SELECT 
    l.name AS language, 
    pr.name AS proficiency_level,
    MIN(p.start) AS first_used_in,
    COUNT(*) AS projects_count
FROM languages l
INNER JOIN projects_languages pl ON pl.ID_languages = l.ID
INNER JOIN projects p ON p.ID = pl.ID_projects
INNER JOIN proficiency pr 
    ON pr.ID_skill = l.ID AND pr.skill_type = 'PROGRAMMING LANGUAGE'
GROUP BY l.name, pr.name, pr.level
ORDER BY pr.level DESC;

-- Technologies
SELECT 
    t.name AS technology, 
    pr.name AS proficiency_level,
    MIN(p.start) AS first_used_in,
    COUNT(*) AS projects_count
FROM technologies t
INNER JOIN projects_technologies pt ON pt.ID_technologies = t.ID
INNER JOIN projects p ON p.ID = pt.ID_projects
INNER JOIN proficiency pr 
    ON pr.ID_skill = t.ID AND pr.skill_type = 'TECHNOLOGY'
GROUP BY t.name, pr.name, pr.level
ORDER BY pr.level DESC;

-- Tools
SELECT 
    t.name AS tool,
    pr.name AS proficiency_level,
    MIN(p.start) AS first_used_in,
    COUNT(*) AS projects_count
FROM tools t
INNER JOIN projects_tools pt ON pt.ID_tools = t.ID
INNER JOIN projects p ON p.ID = pt.ID_projects
INNER JOIN proficiency pr 
    ON pr.ID_skill = t.ID AND pr.skill_type = 'TOOL'
GROUP BY t.name, pr.name, pr.level
ORDER BY pr.level DESC;

-- Human Languages
SELECT 
    hl.name AS language,
    pr.name AS proficiency_level
FROM human_languages hl
INNER JOIN proficiency pr 
    ON pr.ID_skill = hl.ID AND pr.skill_type = 'HUMAN LANGUAGE'
ORDER BY pr.level DESC;
languageproficiency_levelfirst_used_inprojects_count
ScalaAdvanced20245+
JavaAdvanced202110+
HTML, CSSAdvanced202015+
JavaScriptIntermediate20215+
JuliaIntermediate20242+
C#Intermediate20205+
TypeScriptIntermediate20241
PHPIntermediate20213
C++Intermediate20202
PythonIntermediate20242
RustBeginner-Intermediate20242
CBeginner-Intermediate20222
AssemblyBeginner20241
technologyproficiency_levelfirst_used_inprojects_count
SQL ServerAdvanced20233+
RESTIntermediate20235+
Node.jsIntermediate20233
.NET CoreIntermediate20215+
Vue.jsIntermediate20241
Linux (Ubuntu)Intermediate20251+
Windows ServerBeginner20243+
MongoDBBeginner20241
DockerBeginner20242
toolproficiency_levelfirst_used_inprojects_count
VSCodeAdvanced201930+
Visual StudioAdvanced201915+
Git (GitHub, GitLab)Advanced202215+
Draw.ioAdvanced202210+
ObsidianAdvanced20245+
IntelliJIntermediate20245+
EclipseIntermediate20245+
nvimIntermediate20255+
SBTIntermediate20243+
JUnitIntermediate20215+
InsomniaIntermediate20233+
Linux (Arch)Intermediate20252+
languageproficiency_level
FrenchNative
EnglishB2
GermanB1
NorvegianBeginner
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Contact</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"/>
  <style>
    #contact h2 {
      color: #d4d4d4 !important;
      text-align: center;
    }
    
    #contact div.console-output {
      width: max-content;
    }
    
    .contact-item {
      padding: 8px;
      background-color: #292929;
      border-radius: 5px;
      border: 1px solid;
      border-color: #3c3c3c;
      display: inline-block;
    }
    
    #contact-map {
      display: block;
      clear: both;
      margin: auto;
      margin-top: 10px;
      width: 500px;
      height: 350px;
      border-radius: 5px;
      border: 1px solid;
      border-color: #3c3c3c;
    }
    
    .contact-item a {
      font-family: Arial, Helvetica, sans-serif;
      text-decoration: none !important;
      color: #d4d4d4 !important;
    }
  </style>
</head>
<body>
  <div class="contact">
    <h2>Contact</h2>
    <div id="contact-items">
      <div class="contact-item">
        <a href="http://github.com/zcBruAll" target="_blank" rel="noopener noreferrer"><span><i class="fa-brands fa-github"></i> zcBruAll</span></a>
      </div>
      <div class="contact-item">
        <a href="mailto:allan@allanbrunner.dev"><i class="fas fa-envelope"></i><span> allan@allanbrunner.dev</span></a>
      </div>
      <div class="contact-item">
        <a href="tel:+41 79 893 61 54"><i class="fas fa-phone"></i><span> +41 79 893 61 54</span></a>
      </div>
      <div class="contact-item">
        <a href="https://maps.app.goo.gl/CPkNvpiY3GQVNTBF6" target="_blank" rel="noopener noreferrer"><i class="fas fa-map-marker-alt"></i><span> Muraz (Collombey), Suisse</span></a>
      </div>
    </div>
    <iframe 
      id="contact-map"
      src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d13084.047255370733!2d6.9289648!3d46.27884975
        !2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x478ebd325fd907ab%3A0xc9a406c37b861d99!2sMuraz%2C%201893%20
        Collombey-Muraz!5e1!3m2!1sfr!2sch!4v1753186378848!5m2!1sfr!2sch" 
      allowfullscreen="" 
      loading="lazy" 
      referrerpolicy="no-referrer-when-downgrade">
    </iframe>
  </div>
</body>
</html>
                
Ln 1, Col 1 UTF-8 LF Main