add navbar and portfolio
All checks were successful
ci/woodpecker/push/deploy-netlify Pipeline was successful
All checks were successful
ci/woodpecker/push/deploy-netlify Pipeline was successful
This commit is contained in:
parent
ca4643b3e5
commit
85d971d3bd
9 changed files with 201 additions and 43 deletions
|
@ -14,7 +14,8 @@ $min-device-width: 940px;
|
||||||
src: url('/fonts/open-sans-v35-latin-regular.woff2') format('woff2');
|
src: url('/fonts/open-sans-v35-latin-regular.woff2') format('woff2');
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
|
||||||
|
content a {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -35,7 +36,7 @@ body {
|
||||||
font: inherit;
|
font: inherit;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
font-family: $main-font-family;
|
font-family: $main-font-family;
|
||||||
font-size: 130%;
|
font-size: 1.4em;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
margin: 1em auto;
|
margin: 1em auto;
|
||||||
max-width: 45em;
|
max-width: 45em;
|
||||||
|
@ -43,16 +44,18 @@ body {
|
||||||
color: $body-font-color;
|
color: $body-font-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
content h1 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
font: inherit;
|
font: inherit;
|
||||||
|
font-size: 1.5em;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
line-height: 100%;
|
line-height: 100%;
|
||||||
margin-top: 2rem;
|
margin-top: 2rem;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
color: $heading-font-color;
|
color: $heading-font-color;
|
||||||
|
/*
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
content: "# ";
|
content: "# ";
|
||||||
|
@ -64,9 +67,10 @@ h1 {
|
||||||
content: "-----" / "";
|
content: "-----" / "";
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
content h2 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -83,7 +87,7 @@ h2 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
content h3 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -108,15 +112,18 @@ html {
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
content {
|
||||||
|
li {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
padding-left: 10px;
|
||||||
font: inherit;
|
font: inherit;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
content p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -131,7 +138,7 @@ p {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
content span {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -139,7 +146,7 @@ span {
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
}
|
}
|
||||||
|
|
||||||
strong {
|
content strong {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -159,7 +166,7 @@ strong {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u {
|
content u {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -167,7 +174,7 @@ u {
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
content ul {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -185,28 +192,117 @@ ul {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
content code {
|
||||||
font: unset;
|
font: unset;
|
||||||
font-family: $main-font-family;
|
font-family: $main-font-family;
|
||||||
color: $code-font-color;
|
color: $code-font-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.special {
|
content .special {
|
||||||
color: $special-font-color;
|
color: $special-font-color;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #d66388;
|
||||||
|
padding-left: 15px;
|
||||||
|
|
||||||
|
:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: $min-device-width) {
|
@media (max-width: $min-device-width) {
|
||||||
body {
|
body {
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
line-break: normal;
|
line-break: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
content a {
|
||||||
line-break: loose;
|
line-break: loose;
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
content code {
|
||||||
line-break: anywhere;
|
line-break: anywhere;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
.hero-text {
|
||||||
|
text-align: center !important;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-right,
|
||||||
|
.float-left {
|
||||||
|
float: none !important;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-align: center;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
float: none;
|
||||||
|
display: block;
|
||||||
|
text-align: left;
|
||||||
|
|
||||||
|
.nav-right {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
font-size: 1.2em;
|
||||||
|
overflow: hidden;
|
||||||
|
border-bottom: 1px solid $body-font-color;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
padding: 0 10px 10px;
|
||||||
|
|
||||||
|
div {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
font: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
padding-left: 15px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: $link-font-color;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-right {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-left {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-text {
|
||||||
|
font-size: 1.5em;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $special-font-color;
|
||||||
|
font-weight: 800;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
date: 2023-08-07T08:58:15+02:00
|
date: 2023-08-30T16:58:15+02:00
|
||||||
---
|
---
|
||||||
|
|
||||||
Hi, my name is `Laura Kalb` and I (literally) do things on the internet.
|
Hi, my name is `Laura Kalb` and I (literally) do things on the internet.
|
||||||
|
@ -11,25 +11,14 @@ reliability engineer. Now I'm responsible for the network infrastructure at a bi
|
||||||
primarily working on network automation and our internal network infrastructure, and I'm playing a lot with the Golang
|
primarily working on network automation and our internal network infrastructure, and I'm playing a lot with the Golang
|
||||||
programming language =).
|
programming language =).
|
||||||
|
|
||||||
|
You can find a list of projects that I've already worked on [in my Portfolio](/portfolio).
|
||||||
|
|
||||||
|
|
||||||
## Some nice stuff
|
## Some nice stuff
|
||||||
A list of **tools**, **projects** and **fun stuff** that I already
|
A list of **tools**, **projects** and **fun stuff** that I already
|
||||||
have worked on or that I want to work on in the future.
|
have worked on or that I want to work on in the future:
|
||||||
|
|
||||||
- [A list of awesome stuff curated by me!](/interesting-stuff)
|
[A list of awesome stuff curated by me!](/interesting-stuff)
|
||||||
- building my own IPAM with [Go](https://go.dev/). Source: [https://codeberg.org/lauralani/ipam](https://codeberg.org/lauralani/ipam)
|
|
||||||
- My own URL Shortener with Go. Source: [https://codeberg.org/lauralani/go-urlsh](https://codeberg.org/lauralani/go-urlsh)
|
|
||||||
- hosting my own mail with [mailcow](https://mailcow.email/)
|
|
||||||
- managing my public domains via Infrastructure as Code with Git, CI/CD and [OctoDNS](https://github.com/octodns/octodns)
|
|
||||||
- wrote my own [DynDNS-Tool](https://codeberg.org/lauralani/dyndns-script) in Python (supports Azure DNS and OVH)
|
|
||||||
- Automated my home WIFI with radius assigned VLANs via Freeradius and custom frontend (Will be open sourced soon)
|
|
||||||
- Some minor other projects:
|
|
||||||
- [OVH ApiKey Manager](https://codeberg.org/lauralani/ovh-apikey-manager)
|
|
||||||
|
|
||||||
|
|
||||||
Notepad
|
|
||||||
My list of awesome technologies I want to implement soon:
|
|
||||||
- [Garage](https://garagehq.deuxfleurs.fr/): A S3-compatible storage (for selfhosting static websites like this one)
|
|
||||||
|
|
||||||
## Books
|
## Books
|
||||||
I always loved to read as many books as I can. So here I'm listing the books I've read since I
|
I always loved to read as many books as I can. So here I'm listing the books I've read since I
|
||||||
|
@ -55,4 +44,4 @@ This page was last updated at {{< last-updated >}}
|
||||||
|
|
||||||
Copyright (c) Laura Kalb 2021-{{< copyright-date >}}
|
Copyright (c) Laura Kalb 2021-{{< copyright-date >}}
|
||||||
|
|
||||||
[Impressum und Datenschutzerklärung](/impressum.html)
|
[Impressum und Datenschutzerklärung](/impressum)
|
|
@ -7,6 +7,7 @@ title: "Erisi: A self-hosted static site server"
|
||||||
|
|
||||||
## Implementation Ideas
|
## Implementation Ideas
|
||||||
The main service will consist of a Caddy instance (maybe later replaced with own application loogic for subdomain handling, TLS termination and ACME) that serves as a HTTPS entry point and host for static website data.
|
The main service will consist of a Caddy instance (maybe later replaced with own application loogic for subdomain handling, TLS termination and ACME) that serves as a HTTPS entry point and host for static website data.
|
||||||
|
|
||||||
The `erisi` server will serve a registration/configuration page, where you can add new websites (like with netlify) and see what you need to do (in terms of CNAMEs and CAA-Records) to enable custom domains. It will then create directories per user and within per repository/website (think `/base-dir/user-guid/project-guid` as the path) and communicate (custom) domain to caddy.
|
The `erisi` server will serve a registration/configuration page, where you can add new websites (like with netlify) and see what you need to do (in terms of CNAMEs and CAA-Records) to enable custom domains. It will then create directories per user and within per repository/website (think `/base-dir/user-guid/project-guid` as the path) and communicate (custom) domain to caddy.
|
||||||
|
|
||||||
There should also be a `erisi` cli application for deploying websites to the server. Maybe it should compress a given folder, hash it and send it to the server, handling authentication in the progress.
|
There should also be a `erisi` cli application for deploying websites to the server. Maybe it should compress a given folder, hash it and send it to the server, handling authentication in the progress.
|
||||||
|
|
42
content/portfolio.md
Normal file
42
content/portfolio.md
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
title: "Portfolio"
|
||||||
|
---
|
||||||
|
|
||||||
|
Here you can find a list of projects I worked on:
|
||||||
|
|
||||||
|
## IPAM
|
||||||
|
Source: [https://codeberg.org/lauralani/ipam](https://codeberg.org/lauralani/ipam)
|
||||||
|
|
||||||
|
A cli based IP Address Management tool written in Go with PowerDNS integration.
|
||||||
|
|
||||||
|
## go-urlsh
|
||||||
|
Source: [https://codeberg.org/lauralani/go-urlsh](https://codeberg.org/lauralani/go-urlsh)
|
||||||
|
|
||||||
|
Go based URL shortener. Hosted via Docker and utilizing PostgreSQL.
|
||||||
|
|
||||||
|
## Humble-Bot
|
||||||
|
Source: [https://codeberg.org/lauralani/humble-bot](https://codeberg.org/lauralani/humble-bot)
|
||||||
|
|
||||||
|
A Go Fediverse Bot that posts new [Humble Bundles](https://humblebundle.com)
|
||||||
|
|
||||||
|
## erisi
|
||||||
|
project idea: [Erisi](/erisi/)
|
||||||
|
|
||||||
|
`erisi` is planned to be a self-hosted alternative to Netlify/Vercel/Github Pages/etc... written in Go and utilizing [Caddy](https://caddyserver.com) and it's ACME capabilities.
|
||||||
|
|
||||||
|
|
||||||
|
## Small side projects
|
||||||
|
### ovh-apikey-manager
|
||||||
|
Source: [https://codeberg.org/lauralani/ovh-apikey-manager](https://codeberg.org/lauralani/ovh-apikey-manager)
|
||||||
|
|
||||||
|
Tiny CLI tool to manage OVH APi Keys
|
||||||
|
|
||||||
|
### dyndns-script
|
||||||
|
Source: [https://codeberg.org/lauralani/dyndns-script](https://codeberg.org/lauralani/dyndns-script)
|
||||||
|
|
||||||
|
Python based DynDNS client that can edit records managed by OVH and Azure
|
||||||
|
|
||||||
|
### Misceallenous
|
||||||
|
- Automated my home WIFI with radius assigned VLANs via Freeradius and custom frontend (Will be open sourced soon)
|
||||||
|
- Manage my own DNS via OctoDNS as Code
|
||||||
|
- Host my own mail since 2020
|
|
@ -1,3 +1,12 @@
|
||||||
baseURL: http://example.org/
|
baseURL: http://example.org/
|
||||||
languageCode: en-us
|
languageCode: en-us
|
||||||
title: Lauras Website <3
|
title: Lauras Website <3
|
||||||
|
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
- name: Portfolio
|
||||||
|
pageRef: /portfolio
|
||||||
|
weight: 2
|
||||||
|
- name: Interesting Stuff
|
||||||
|
pageRef: /interesting-stuff
|
||||||
|
weight: 3
|
|
@ -8,6 +8,8 @@
|
||||||
{{ partial "head/sharing.html" . }}
|
{{ partial "head/sharing.html" . }}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
{{ partial "body/nav.html" . }}
|
||||||
|
|
||||||
{{ block "page" . }}{{ end }}
|
{{ block "page" . }}{{ end }}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -1,7 +1,9 @@
|
||||||
{{ define "page" }}
|
{{ define "page" }}
|
||||||
<article class="container">
|
<article class="container">
|
||||||
<a href="javascript:history.back()">⇠ go back</a>
|
<content>
|
||||||
<h1>{{ .Title }}</h1>
|
<h1>{{ .Title }}</h1>
|
||||||
|
<br/>
|
||||||
{{ .Content }}
|
{{ .Content }}
|
||||||
|
</content>
|
||||||
</article>
|
</article>
|
||||||
{{ end }}
|
{{ end }}
|
|
@ -9,8 +9,10 @@
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1>{{ .Site.Title }}</h1>
|
{{ partial "body/nav.html" . }}
|
||||||
|
<content>
|
||||||
{{ .Content }}
|
{{ .Content }}
|
||||||
|
</content>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
15
layouts/partials/body/nav.html
Normal file
15
layouts/partials/body/nav.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<nav>
|
||||||
|
<div class="hero-text float-left"><a href="/" class="nav-link special">{{ .Site.Title }}</a></div>
|
||||||
|
<div class="float-right">
|
||||||
|
{{ $currentPage := . }}
|
||||||
|
{{- range site.Menus.main -}}
|
||||||
|
{{- $menu_item_url := .URL -}}
|
||||||
|
{{- $page_url:= $currentPage.RelPermalink -}}
|
||||||
|
{{- if eq $menu_item_url $page_url -}}
|
||||||
|
<a href="{{ .URL }}" class="disabled" aria-current="page">{{ .Name }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
<a href="{{ .URL }}" class="nav-link">{{ .Name }}</a>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
</div>
|
||||||
|
</nav>
|
Loading…
Reference in a new issue