commit of v1.0
@@ -0,0 +1,9 @@
|
|||||||
|
# This Website
|
||||||
|
DESCRIPTION:This Website had a lot of diffrent version, featuring diffrent styles...
|
||||||
|
TAGS:projects,css,html,coding
|
||||||
|
HEADIMAGE:another.png
|
||||||
|
This Website had a lot of diffrent version, featuring diffrent styles. Everytime I recreate it, I say "this will be the version I will continue on", but then I make a change to it or am unhappy with it. So I create a new Version, mostly from scratch. If I would be honest I could call this version of the Website v20 at least, but I will call it v1.
|
||||||
|
## The "Technology" behind it
|
||||||
|
I use golang to run the http server and to compile my md files to a static website. I use md over html, becaus first one always needs to add "<>" and at the end "</>" of every text element, this makes it a long and fustrating process to write it. Additionaly one needs to add the head, the header and the footer to every file seperatly.This makes changing a style outside the universal css file more complicated. This means that one thinks of a new header structure, every header in every file needs to be changed. Which can be done of course with a IDE and its "occurences-tool", but this process does not ensure correct result. Leading to error this makes the progess even longer, then with the compalation method.
|
||||||
|
## Usage of the Website
|
||||||
|
This website is being populated with diffent informations such as projects, documentations and comments on diffrent technical standpoints. I will use it to improve my english level. So if you are an born english speaker, please be so kind and report any erros to me.
|
||||||
@@ -0,0 +1,181 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var data_articles_index string = ""
|
||||||
|
var top string = "<!doctype html><html lang='en'><head><meta charset='UTF-8' /><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>Haufenet</title><link rel='stylesheet' href='/index.css' /><link rel='icon' type='image/png' href='/favicon-96x96.png' sizes='96x96'/><link rel='icon' type='image/svg+xml' href='/favicon.svg'/><link rel='shortcut icon' href='/favicon.ico' /><link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png' /><link rel='manifest' href='/site.webmanifest' /><link rel='preconnect' href='https://fonts.googleapis.com'><link rel='preconnect' href='https://fonts.gstatic.com' crossorigin><link href='https://fonts.googleapis.com/css2?family=BBH+Bogle&display=swap' rel='stylesheet'></head><body><header><a href='/' ><b>Haufenet</b></a></header>"
|
||||||
|
var bottom string = "<footer><p>© Lennard Haufe<p><p>No usage of AI</p><a href='/imprint_privacy/'>Imprint and Privacy</a></footer></body><script src='/index.js'></script></html>"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
entries, err := os.ReadDir("./articles")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, e := range entries {
|
||||||
|
|
||||||
|
ReadFileArticles(e.Name())
|
||||||
|
SetupDataIndexArticles(e.Name())
|
||||||
|
}
|
||||||
|
log.Print("Server running on port 8090")
|
||||||
|
EditArticlesPage()
|
||||||
|
ReadFileOthers("imprint_privacy.md")
|
||||||
|
fileserver := http.FileServer(http.Dir("./website"))
|
||||||
|
http.Handle("/", fileserver)
|
||||||
|
|
||||||
|
if err := http.ListenAndServe(":8090", nil); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
func EditArticlesPage() {
|
||||||
|
|
||||||
|
err := os.WriteFile("./website/articles/index.html", []byte(top+"<list-articles><h1 id='top-article-list'>Articles</h1><div>"+data_articles_index+"</div></list-articles>"+bottom), 0755)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func SetupDataIndexArticles(filename string) {
|
||||||
|
|
||||||
|
file, err := os.Open("./articles/" + filename)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("not opening")
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
var title string = ""
|
||||||
|
var description string = ""
|
||||||
|
var tags string = ""
|
||||||
|
var image string = ""
|
||||||
|
for scanner.Scan() {
|
||||||
|
content := scanner.Text()
|
||||||
|
if strings.Contains(content, "###") {
|
||||||
|
continue
|
||||||
|
} else if strings.Contains(content, "##") {
|
||||||
|
continue
|
||||||
|
} else if strings.Contains(content, "#") {
|
||||||
|
part := strings.Split(content, `#`)
|
||||||
|
title = "<h1>" + part[1] + "</h1>"
|
||||||
|
} else if strings.Contains(content, "DESCRIPTION:") {
|
||||||
|
part := strings.Split(content, `DESCRIPTION:`)
|
||||||
|
description = "<p>" + part[1] + "</p>"
|
||||||
|
} else if strings.Contains(content, "HEADIMAGE:") {
|
||||||
|
part := strings.Split(content, `HEADIMAGE:`)
|
||||||
|
image = "<img src='/pictures/" + part[1] + "'>"
|
||||||
|
} else if strings.Contains(content, "TAGS:") {
|
||||||
|
part := strings.Split(content, `TAGS:`)
|
||||||
|
part_2 := strings.Split(part[1], ",")
|
||||||
|
part_tags := "<articles-tags>"
|
||||||
|
for i := 0; i < len(part_2); i++ {
|
||||||
|
part_tags += "<a href='/tags/" + part_2[i] + "'>" + part_2[i] + "</a>"
|
||||||
|
}
|
||||||
|
part_tags += "</articles-tags>"
|
||||||
|
tags = part_tags
|
||||||
|
} else {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
filename_new := strings.Split(filename, ".md")
|
||||||
|
data_articles_index += "<article-display><a href='/articles/" + filename_new[0] + ".html'>" + title + image + description + "</a>" + tags + "</article-display>"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadFileArticles(filename string) {
|
||||||
|
file, err := os.Open("./articles/" + filename)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("not opening")
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
var new_text string = ""
|
||||||
|
var tags string = ""
|
||||||
|
for scanner.Scan() {
|
||||||
|
content := scanner.Text()
|
||||||
|
var end_type string = ""
|
||||||
|
|
||||||
|
if strings.Contains(content, "###") {
|
||||||
|
part := strings.Split(content, `###`)
|
||||||
|
end_type = "<h3>" + part[1] + "</h3>"
|
||||||
|
} else if strings.Contains(content, "##") {
|
||||||
|
part := strings.Split(content, `##`)
|
||||||
|
end_type = "<h2>" + part[1] + "</h2>"
|
||||||
|
} else if strings.Contains(content, "#") {
|
||||||
|
part := strings.Split(content, `#`)
|
||||||
|
end_type = "<h1>" + part[1] + "</h1>"
|
||||||
|
} else if strings.Contains(content, "HEADIMAGE:") {
|
||||||
|
part := strings.Split(content, `HEADIMAGE:`)
|
||||||
|
end_type = "<img src='/pictures/" + part[1] + "'>"
|
||||||
|
} else if strings.Contains(content, "[img]:") {
|
||||||
|
part := strings.Split(content, `[img]:`)
|
||||||
|
end_type = "<img src='/pictures/" + part[1] + "'>"
|
||||||
|
} else if strings.Contains(content, "DESCRIPTION:") {
|
||||||
|
end_type = ""
|
||||||
|
} else if strings.Contains(content, "TAGS:") {
|
||||||
|
part := strings.Split(content, `TAGS:`)
|
||||||
|
part_2 := strings.Split(part[1], ",")
|
||||||
|
part_tags := "<articles-tags>"
|
||||||
|
for i := 0; i < len(part_2); i++ {
|
||||||
|
part_tags += "<a href='/tags/" + part_2[i] + "'>" + part_2[i] + "</a>"
|
||||||
|
}
|
||||||
|
part_tags += "</articles-tags>"
|
||||||
|
tags = part_tags
|
||||||
|
} else if content == "" {
|
||||||
|
end_type = "<br>"
|
||||||
|
} else {
|
||||||
|
end_type = "<p>" + content + "</p>"
|
||||||
|
}
|
||||||
|
new_text += end_type
|
||||||
|
|
||||||
|
}
|
||||||
|
filename_new := strings.Split(filename, ".md")
|
||||||
|
err = os.WriteFile("./website/articles/"+filename_new[0]+".html", []byte(top+"<articles-detail><articles-detail-down>"+new_text+"<h4>Tags</h4>"+tags+"<br></articles-detail-down></articles-detail>"+bottom), 0755)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadFileOthers(filename string) {
|
||||||
|
file, err := os.Open("./other/" + filename)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("not opening")
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
var new_text string = ""
|
||||||
|
for scanner.Scan() {
|
||||||
|
content := scanner.Text()
|
||||||
|
var end_type string = ""
|
||||||
|
|
||||||
|
if strings.Contains(content, "###") {
|
||||||
|
part := strings.Split(content, `###`)
|
||||||
|
end_type = "<h3>" + part[1] + "</h3>"
|
||||||
|
} else if strings.Contains(content, "##") {
|
||||||
|
part := strings.Split(content, `##`)
|
||||||
|
end_type = "<h2>" + part[1] + "</h2>"
|
||||||
|
} else if strings.Contains(content, "#") {
|
||||||
|
part := strings.Split(content, `#`)
|
||||||
|
end_type = "<h1>" + part[1] + "</h1>"
|
||||||
|
} else if content == "" {
|
||||||
|
end_type = "<br>"
|
||||||
|
} else {
|
||||||
|
end_type = "<p>" + content + "</p>"
|
||||||
|
}
|
||||||
|
new_text += end_type
|
||||||
|
|
||||||
|
}
|
||||||
|
filename_new := strings.Split(filename, ".md")
|
||||||
|
err = os.Mkdir("./website/"+filename_new[0], 0755)
|
||||||
|
err = os.WriteFile("./website/"+filename_new[0]+"/index.html", []byte(top+"<articles-detail><div>"+new_text+"</div></articles-detail>"+bottom), 0755)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Impressum
|
||||||
|
Lennard Haufe
|
||||||
|
Obere Ziegeli 11
|
||||||
|
71522 Backnang
|
||||||
|
# Kontakt
|
||||||
|
Telefon: 004917650320223
|
||||||
|
E-Mail: info.lennard.haufe@haufenet.com
|
||||||
|
# Inhaltlich verantwortlich i.S.v. § 18 Abs. 2 MStV
|
||||||
|
Lennard Haufe
|
||||||
|
Obere Ziegelei 11
|
||||||
|
71522 Backnang
|
||||||
|
# Dieses Impressum gilt auch für folgende Social-Media-Profile
|
||||||
|
Instagram: https://www.instagram.com/haufe_net_com/
|
||||||
|
# Quellenangaben für verwendete Bilder und Grafiken
|
||||||
|
D. Stroh – byd-film.de
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<!doctype html><html lang='en'><head><meta charset='UTF-8' /><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>Haufenet</title><link rel='stylesheet' href='/index.css' /><link rel='icon' type='image/png' href='/favicon-96x96.png' sizes='96x96'/><link rel='icon' type='image/svg+xml' href='/favicon.svg'/><link rel='shortcut icon' href='/favicon.ico' /><link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png' /><link rel='manifest' href='/site.webmanifest' /></head><body><header><a href='/' ><b>Haufenet</b></a></header><articles-detail><div><h1> Fuck</h1><img src='/pictures/test.png'><p>some text you wrote me</p><img src='/pictures/another.png'><p>this is what i wrote and display</p><h4>Tags</h4><articles-tags><a href='/tags/projects'>projects</a><a href='/tags/css'>css</a><a href='/tags/html'>html</a><a href='/tags/coding'>coding</a></articles-tags><br></div></articles-detail><footer><p>© Lennard Haufe<p><p>No usage of AI</p><a href='/imprint_privacy/'>Imprint and Privacy</a></footer></body><script src='/index.js'></script></html>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<!doctype html><html lang='en'><head><meta charset='UTF-8' /><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>Haufenet</title><link rel='stylesheet' href='/index.css' /><link rel='icon' type='image/png' href='/favicon-96x96.png' sizes='96x96'/><link rel='icon' type='image/svg+xml' href='/favicon.svg'/><link rel='shortcut icon' href='/favicon.ico' /><link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png' /><link rel='manifest' href='/site.webmanifest' /><link rel='preconnect' href='https://fonts.googleapis.com'><link rel='preconnect' href='https://fonts.gstatic.com' crossorigin><link href='https://fonts.googleapis.com/css2?family=BBH+Bogle&display=swap' rel='stylesheet'></head><body><header><a href='/' ><b>Haufenet</b></a></header><list-articles><h1 id='top-article-list'>Articles</h1><div><article-display><a href='/articles/this_website.html'><h1> This Website</h1><img src='/pictures/another.png'><p>This Website had a lot of diffrent version, featuring diffrent styles...</p></a><articles-tags><a href='/tags/projects'>projects</a><a href='/tags/css'>css</a><a href='/tags/html'>html</a><a href='/tags/coding'>coding</a></articles-tags></article-display></div></list-articles><footer><p>© Lennard Haufe<p><p>No usage of AI</p><a href='/imprint_privacy/'>Imprint and Privacy</a></footer></body><script src='/index.js'></script></html>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<!doctype html><html lang='en'><head><meta charset='UTF-8' /><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>Haufenet</title><link rel='stylesheet' href='/index.css' /><link rel='icon' type='image/png' href='/favicon-96x96.png' sizes='96x96'/><link rel='icon' type='image/svg+xml' href='/favicon.svg'/><link rel='shortcut icon' href='/favicon.ico' /><link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png' /><link rel='manifest' href='/site.webmanifest' /></head><body><header><a href='/' ><b>Haufenet</b></a></header><articles-detail><articles-detail-down><h1> This Website</h1><img src='/pictures/another.png'><br><p>This Website had a lot of diffrent version, featuring diffrent styles. Everytime I recreate it, I say "this will be the version I will continue on", but then I make a change to it or am unhappy with it. So I create a new Version, mostly from scratch. If I would be honest I could call this version of the Website v20 at least, but I will call it v1.</p><br><h1></h1><br><p>I use golang as my http server and my language to compile my static website. I do it to be able to md as my article writting language, as I do not think that html is good enough for that. First of all i alwasy need to add "<>" and at the end "</>", this makes it a long and fustrating process to write it. Additionaly one nees to add the head as well as the header and footer to every article, which makes changing a style more complicated, when you not only change the css. For example when you change the order of the header, every article needs to be changed, but this static site approach allows to make change to one variable, so that everything is changed.</p><h4>Tags</h4><articles-tags><a href='/tags/projects'>projects</a><a href='/tags/css'>css</a><a href='/tags/html'>html</a><a href='/tags/coding'>coding</a></articles-tags><br></articles-detail-down></articles-detail><footer><p>© Lennard Haufe<p><p>No usage of AI</p><a href='/imprint_privacy/'>Imprint and Privacy</a></footer></body><script src='/index.js'></script></html>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<!doctype html><html lang='en'><head><meta charset='UTF-8' /><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>Haufenet</title><link rel='stylesheet' href='/index.css' /><link rel='icon' type='image/png' href='/favicon-96x96.png' sizes='96x96'/><link rel='icon' type='image/svg+xml' href='/favicon.svg'/><link rel='shortcut icon' href='/favicon.ico' /><link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png' /><link rel='manifest' href='/site.webmanifest' /><link rel='preconnect' href='https://fonts.googleapis.com'><link rel='preconnect' href='https://fonts.gstatic.com' crossorigin><link href='https://fonts.googleapis.com/css2?family=BBH+Bogle&display=swap' rel='stylesheet'></head><body><header><a href='/' ><b>Haufenet</b></a></header><articles-detail><articles-detail-down><h1> This Website</h1><img src='/pictures/another.png'><p>This Website had a lot of diffrent version, featuring diffrent styles. Everytime I recreate it, I say "this will be the version I will continue on", but then I make a change to it or am unhappy with it. So I create a new Version, mostly from scratch. If I would be honest I could call this version of the Website v20 at least, but I will call it v1.</p><h2> The "Technology" behind it</h2><p>I use golang to run the http server and to compile my md files to a static website. I use md over html, becaus first one always needs to add "<>" and at the end "</>" of every text element, this makes it a long and fustrating process to write it. Additionaly one needs to add the head, the header and the footer to every file seperatly.This makes changing a style outside the universal css file more complicated. This means that one thinks of a new header structure, every header in every file needs to be changed. Which can be done of course with a IDE and its "occurences-tool", but this process does not ensure correct result. Leading to error this makes the progess even longer, then with the compalation method.</p><h2> Usage of the Website</h2><p>This website is being populated with diffent informations such as projects, documentations and comments on diffrent technical standpoints. I will use it to improve my english level. So if you are an born english speaker, please be so kind and report any erros to me.</p><h4>Tags</h4><articles-tags><a href='/tags/projects'>projects</a><a href='/tags/css'>css</a><a href='/tags/html'>html</a><a href='/tags/coding'>coding</a></articles-tags><br></articles-detail-down></articles-detail><footer><p>© Lennard Haufe<p><p>No usage of AI</p><a href='/imprint_privacy/'>Imprint and Privacy</a></footer></body><script src='/index.js'></script></html>
|
||||||
|
After Width: | Height: | Size: 906 B |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="1000"><metadata><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><rdf:Description><dc:creator>RealFaviconGenerator</dc:creator><dc:source>https://realfavicongenerator.net</dc:source></rdf:Description></rdf:RDF></metadata><g clip-path="url(#SvgjsClipPath1185)"><rect width="1000" height="1000" fill="#000000"></rect><g transform="matrix(5,0,0,5,0,0)"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 200 200" width="200" height="200"><rect width="200" height="200" fill="url('#gradient')"></rect><defs><linearGradient id="gradient" gradientTransform="rotate(45 0.5 0.5)"><stop offset="0%" stop-color="#000000"></stop><stop offset="100%" stop-color="#000000"></stop></linearGradient><clipPath id="SvgjsClipPath1185"><rect width="1000" height="1000" x="0" y="0" rx="0" ry="0"></rect></clipPath></defs><g><g fill="#ffffff" transform="matrix(4.952176249328318,0,0,4.952176249328318,4.692324014647824,135.2093486603968)" stroke="#ffffff" stroke-width="0.2"><path d="M12.96-14.22L12.96 0L9.55 0L9.55-5.94L4.50-5.94L4.50 0L1.07 0L1.07-14.22L4.50-14.22L4.50-8.57L9.55-8.57L9.55-14.22L12.96-14.22ZM24.08-8.30L24.08-5.66L18.55-5.66L18.55 0L15.13 0L15.13-14.22L24.64-14.22L24.64-11.57L18.55-11.57L18.55-8.30L24.08-8.30ZM37.42-14.22L37.42-11.57L33.15-11.57L33.15 0L29.73 0L29.73-11.57L25.54-11.57L25.54-14.22L37.42-14.22Z"></path></g></g></svg></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<!doctype html><html lang='en'><head><meta charset='UTF-8' /><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>Haufenet</title><link rel='stylesheet' href='/index.css' /><link rel='icon' type='image/png' href='/favicon-96x96.png' sizes='96x96'/><link rel='icon' type='image/svg+xml' href='/favicon.svg'/><link rel='shortcut icon' href='/favicon.ico' /><link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png' /><link rel='manifest' href='/site.webmanifest' /><link rel='preconnect' href='https://fonts.googleapis.com'><link rel='preconnect' href='https://fonts.gstatic.com' crossorigin><link href='https://fonts.googleapis.com/css2?family=BBH+Bogle&display=swap' rel='stylesheet'></head><body><header><a href='/' ><b>Haufenet</b></a></header><articles-detail><div><h1> Impressum</h1><p>Lennard Haufe</p><p>Obere Ziegeli 11</p><p>71522 Backnang</p><h1> Kontakt</h1><p>Telefon: 004917650320223</p><p>E-Mail: info.lennard.haufe@haufenet.com</p><h1> Inhaltlich verantwortlich i.S.v. § 18 Abs. 2 MStV</h1><p>Lennard Haufe</p><p>Obere Ziegelei 11</p><p>71522 Backnang</p><h1> Dieses Impressum gilt auch für folgende Social-Media-Profile</h1><p>Instagram: https://www.instagram.com/haufe_net_com/</p><h1> Quellenangaben für verwendete Bilder und Grafiken</h1><p>D. Stroh – byd-film.de</p></div></articles-detail><footer><p>© Lennard Haufe<p><p>No usage of AI</p><a href='/imprint_privacy/'>Imprint and Privacy</a></footer></body><script src='/index.js'></script></html>
|
||||||
@@ -0,0 +1,161 @@
|
|||||||
|
body{
|
||||||
|
margin: 0;
|
||||||
|
left: 0;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
header{
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
background-color: hsl(0 0% 10%);
|
||||||
|
padding: 1rem;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
img{
|
||||||
|
width: 800px
|
||||||
|
}
|
||||||
|
header a{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
text-decoration: none;
|
||||||
|
color: white;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
footer{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 1rem;
|
||||||
|
background-color: hsl(0 0% 10%);
|
||||||
|
color: hsl(0 0% 80%);
|
||||||
|
}
|
||||||
|
footer a{
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
color: hsl(0 0% 90%);
|
||||||
|
}
|
||||||
|
list-articles{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
background-color: #FFF07C;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.bbh-bogle-regular {
|
||||||
|
font-family: "BBH Bogle", sans-serif;
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#top-article-list{
|
||||||
|
font-size: 6rem;
|
||||||
|
font-family: "BBH Bogle", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
list-articles div{
|
||||||
|
max-width: 800px;
|
||||||
|
display: grid;
|
||||||
|
grid-auto-rows: 1fr;
|
||||||
|
gap: 2rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
article-display a{
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
article-display a h1:hover{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
articles-tags{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 1rem;
|
||||||
|
|
||||||
|
}
|
||||||
|
articles-tags a{
|
||||||
|
color: hsl(0 0% 90%);
|
||||||
|
padding: 0.5rem;
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: black;
|
||||||
|
}
|
||||||
|
articles-detail{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: justify;
|
||||||
|
|
||||||
|
}
|
||||||
|
body-inner{
|
||||||
|
background-color: #437C90;
|
||||||
|
}
|
||||||
|
articles-detail-down{
|
||||||
|
max-width: 800px;
|
||||||
|
text-align: justify;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
articles-detail div{
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
skills{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 1rem;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
skills-sub{
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
skills-sub button{
|
||||||
|
background-color: black;
|
||||||
|
color: hsl(0 0% 80%);
|
||||||
|
font-weight: bold;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
skills-sub button:hover{
|
||||||
|
background-color: hsl(0 0% 10%);
|
||||||
|
}
|
||||||
|
about h1,p{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 1rem;
|
||||||
|
max-width: 900px;
|
||||||
|
}
|
||||||
|
.special-header{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
font-family: "BBH Bogle", sans-serif;
|
||||||
|
font-size: 8rem;
|
||||||
|
}
|
||||||
|
about{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
@media (max-width: 1200px){
|
||||||
|
img{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
skills-sub{
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
grid-template-rows: 0.1fr 0.1fr 1fr;
|
||||||
|
}
|
||||||
|
article-display{
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
footer{
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<!doctype html><html lang='en'><head><meta charset='UTF-8' /><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>Haufenet</title><link rel='stylesheet' href='/index.css' /><link rel='icon' type='image/png' href='/favicon-96x96.png' sizes='96x96'/><link rel='icon' type='image/svg+xml' href='/favicon.svg'/><link rel='shortcut icon' href='/favicon.ico' /><link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png' /><link rel='manifest' href='/site.webmanifest' /><link rel='preconnect' href='https://fonts.googleapis.com'><link rel='preconnect' href='https://fonts.gstatic.com' crossorigin><link href='https://fonts.googleapis.com/css2?family=BBH+Bogle&display=swap' rel='stylesheet'></head><body><header><a href='/' ><b>Haufenet</b></a></header>
|
||||||
|
<body-inner>
|
||||||
|
<h1 class="special-header">Who I am and what I do</h1>
|
||||||
|
<about>
|
||||||
|
<p>Hi my name is Lennard. I am a currently a student in High School and will finish it in 2027 (hopefully ;) ). I do not like to make any photos of me and post them, so you got a text instead. I do not claim to be very capable, but I still aquired some skills in the past years. When talking about the past years, I mean now 4 years since I started to take interest in IT. I started of with the idea of an NAS(Network Attached Storage), but not existant funds let me to use old laptops. The story is even longer but I will not mention the rest </p>
|
||||||
|
</about>
|
||||||
|
<skills>
|
||||||
|
<skills-sub>
|
||||||
|
<h2>Networking</h2>
|
||||||
|
<p>From Opnsense, Unifi to Linux and Servers</p>
|
||||||
|
<button onclick="window.location.href='/tags/networking'" >SUCH PROJECTS</button>
|
||||||
|
</skills-sub>
|
||||||
|
<skills-sub>
|
||||||
|
<h2>Programming</h2>
|
||||||
|
<p>Loved JS and Golang, tried C and forced Java</p>
|
||||||
|
<button onclick="window.location.href='/tags/programming'">SUCH PROJECTS</button>
|
||||||
|
</skills-sub>
|
||||||
|
<skills-sub>
|
||||||
|
<h2>Design</h2>
|
||||||
|
<p>Work in Progress ... as You can see</p>
|
||||||
|
<button onclick="window.location.href='/tags/design'">SUCH PROJECTS</button>
|
||||||
|
</skills-sub>
|
||||||
|
</skills>
|
||||||
|
|
||||||
|
</body-inner>
|
||||||
|
<footer><p>© Lennard Haufe<p><p>No usage of AI</p><a href='/imprint_privacy/'>Imprint and Privacy</a></footer></body><script src='/index.js'></script></html>
|
||||||
|
After Width: | Height: | Size: 3.3 MiB |
|
After Width: | Height: | Size: 45 KiB |
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "Haufenet",
|
||||||
|
"short_name": "HFT",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/web-app-manifest-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/web-app-manifest-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme_color": "#ffffff",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 7.5 KiB |