add projects page; move to hugo;
All checks were successful
Build and Push Docker Container / build-and-push (push) Successful in 1m59s

This commit is contained in:
2026-02-12 14:38:32 +01:00
parent 6c2b475e10
commit ecd83d9b79
31 changed files with 1117 additions and 140 deletions

26
.gitignore vendored Normal file
View File

@@ -0,0 +1,26 @@
# ── Hugo ──
.hugo_build.lock
hugo_stats.json
# ── macOS ──
.DS_Store
.AppleDouble
.LSOverride
._*
.Spotlight-V100
.Trashes
Icon?
# ── Editor / IDE ──
.vscode/
.idea/
*.swp
*.swo
*~
# ── Docker ──
docker-compose.override.yml
# ── Misc ──
.env
*.log

View File

@@ -1,7 +1,15 @@
# ── Build ──
FROM hugomods/hugo:latest AS builder
WORKDIR /src
COPY ./hugo/eliaskohout.de .
RUN hugo --minify
# ── Serve ──
FROM alpine:latest
WORKDIR /www
COPY www /www
COPY --from=builder /src/public /www
RUN apk add --no-cache busybox-extras
EXPOSE 80
CMD ["httpd", "-f", "-p", "80", "-h", "/www"]

View File

@@ -0,0 +1,5 @@
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+++

View File

@@ -0,0 +1,220 @@
html, body {
margin: 0;
padding: 0;
height: 100%;
background: #000;
font-family: 'Geist Mono', sans-serif;
color: #fff;
}
/* ── Background ── */
.background {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 0;
}
svg {
width: 100%;
height: 100%;
filter: blur(1px) brightness(1.2);
}
.flow-path {
fill: none;
stroke: white;
stroke-width: 1;
stroke-opacity: 0.20;
stroke-dasharray: 1500;
stroke-dashoffset: 0;
animation: flow 12s ease-in-out infinite alternate;
}
.glow {
stroke-opacity: 0.12;
animation-duration: 18s;
}
.flow-path:nth-child(3n) { animation-delay: 2s; }
.flow-path:nth-child(4n) { animation-delay: 4s; }
@keyframes flow {
0% { stroke-dashoffset: 0; }
100% { stroke-dashoffset: 3000; }
}
/* ── Landing Page ── */
.centered {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
z-index: 1;
}
.centered h1 {
font-size: 3.5rem;
margin-bottom: 1.5rem;
letter-spacing: 4px;
}
.centered nav a {
display: block;
margin: 0.3rem 0;
color: #ccc;
text-decoration: none;
font-size: 1.1rem;
}
.centered nav a:hover {
color: #ff3c3c;
}
.nav-label {
display: block;
font-size: 0.7rem;
color: #555;
text-transform: uppercase;
letter-spacing: 2px;
margin-top: 1.2rem;
margin-bottom: 0.3rem;
}
/* Add an arrow after external links */
.centered nav a[href^="http"]::after {
content: " ↗";
font-size: 0.8em;
opacity: 0.5;
}
/* No arrow for internal links */
.centered nav a[href^="/"]::after {
content: none;
}
/* ── Page Content (Projects) ── */
.page-content {
position: relative;
z-index: 1;
max-width: 800px;
margin: 4rem auto;
padding: 0 2rem;
}
.page-content h1 {
font-size: 2.5rem;
letter-spacing: 3px;
margin-bottom: 2rem;
}
/* ── Project Grid ── */
.project-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
gap: 1.5rem;
}
.project-card {
display: block;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
padding: 1.5rem;
text-decoration: none;
color: #fff;
transition: border-color 0.3s, transform 0.2s;
background: rgba(255, 255, 255, 0.05);
-webkit-backdrop-filter: blur(12px);
backdrop-filter: blur(12px);
}
.project-card:hover {
border-color: #ff3c3c;
transform: translateY(-2px);
background: rgba(255, 255, 255, 0.08);
}
.project-card img {
width: 100%;
border-radius: 4px;
margin-bottom: 1rem;
}
.project-card h2 {
font-size: 1.3rem;
margin: 0 0 0.5rem 0;
}
.project-card p {
color: #aaa;
font-size: 0.9rem;
margin: 0.3rem 0;
}
/* ── Tags ── */
.tags {
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
margin: 0.5rem 0;
}
.tag {
background: rgba(255, 255, 255, 0.08);
padding: 0.2rem 0.6rem;
border-radius: 4px;
font-size: 0.8rem;
color: #ccc;
}
/* ── Project Detail ── */
.project-links {
margin: 1rem 0 2rem;
}
.project-links a {
color: #ff3c3c;
text-decoration: none;
margin-right: 1rem;
}
.project-links a:hover {
text-decoration: underline;
}
.project-body {
line-height: 1.8;
color: #ddd;
}
.project-body h2 {
color: #fff;
margin-top: 2rem;
font-size: 1.4rem;
}
/* ── Back Link ── */
.back-link {
margin-top: 3rem;
}
.back-link a {
color: #888;
text-decoration: none;
font-size: 0.9rem;
}
.back-link a:hover {
color: #ff3c3c;
}
/* ── Responsive ── */
@media (max-width: 600px) {
.centered h1 { font-size: 2rem; }
.page-content { margin: 2rem auto; }
.project-grid { grid-template-columns: 1fr; }
}

View File

@@ -0,0 +1,3 @@
---
title: "Projects"
---

View File

@@ -0,0 +1,29 @@
---
title: "LLM Confidence Chat Interface"
draft: true
date: 2024-06-01
tags: ["Python", "ML", "Full-Stack"]
summary: "A chat interface making LLM confidence scores accessible to non-technical users."
code: "https://github.com/yourusername/project"
demo: "https://demo.example.com"
---
## Problem
Non-technical users have no way to assess how confident an LLM is in its responses.
## Approach
Built an interactive chat interface integrating lm-polygraph for
uncertainty estimation with an intuitive visualization layer.
## Tech Stack
- Python, FastAPI
- lm-polygraph
- React
## Challenges & Learnings
Translating probabilistic outputs into user-friendly visual indicators
while keeping the interface responsive.

View File

@@ -0,0 +1,18 @@
baseURL = 'https://eliaskohout.de/'
languageCode = 'de'
title = 'Elias Kohout'
[params]
description = "Computer Science Student"
[[params.links]]
name = "[c]rowsnest"
url = "https://c.eliaskohout.de"
[[params.links]]
name = "[g]itea"
url = "https://g.eliaskohout.de"
[[params.links]]
name = "[r]ezepte"
url = "https://r.eliaskohout.de"

View File

@@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="de">
<head>
{{- partial "head.html" . -}}
</head>
<body>
{{ block "main" . }}{{ end }}
</body>
</html>

View File

@@ -0,0 +1,28 @@
{{ define "main" }}
{{- partial "background.html" . -}}
<main class="page-content">
<h1>{{ .Title }}</h1>
<div class="project-grid">
{{ range .Pages.ByDate.Reverse }}
<a href="{{ .RelPermalink }}" class="project-card">
{{ with .Params.image }}
<img src="{{ . }}" alt="{{ $.Title }}" />
{{ end }}
<h2>{{ .Title }}</h2>
<p class="tags">
{{ range .Params.tags }}
<span class="tag">{{ . }}</span>
{{ end }}
</p>
<p>{{ .Params.summary }}</p>
</a>
{{ end }}
</div>
<div class="back-link">
<a href="/">← back</a>
</div>
</main>
{{ end }}

View File

@@ -0,0 +1,26 @@
{{ define "main" }}
{{- partial "background.html" . -}}
<main class="page-content">
<h1>{{ .Title }}</h1>
<p class="tags">
{{ range .Params.tags }}
<span class="tag">{{ . }}</span>
{{ end }}
</p>
<div class="project-links">
{{ with .Params.code }}<a href="{{ . }}">[Code]</a>{{ end }}
{{ with .Params.demo }}<a href="{{ . }}">[Live Demo]</a>{{ end }}
</div>
<article class="project-body">
{{ .Content }}
</article>
<div class="back-link">
<a href="/projects/">← all projects</a>
</div>
</main>
{{ end }}

View File

@@ -0,0 +1,16 @@
{{ define "main" }}
{{- partial "background.html" . -}}
<main class="centered">
<h1>{{ .Site.Title }}</h1>
<nav>
<span class="nav-label">services</span>
{{ range .Site.Params.links }}
<a href="{{ .url }}">{{ .name }}</a>
{{ end }}
<span class="nav-label">pages</span>
<a href="/projects/">projects</a>
</nav>
</main>
{{ end }}

View File

@@ -0,0 +1,22 @@
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>

View File

@@ -0,0 +1,10 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ .Site.Title }}</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
{{ $style := resources.Get "css/style.css" | minify }}
<link rel="stylesheet" href="{{ $style.RelPermalink }}" />

View File

@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="de">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="http://localhost:1313/css/style.min.css" />
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="page-content">
<h1>Categories</h1>
<div class="project-grid">
</div>
<div class="back-link">
<a href="/">← back</a>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Categories on Elias Kohout</title>
<link>http://localhost:1313/categories/</link>
<description>Recent content in Categories on Elias Kohout</description>
<generator>Hugo</generator>
<language>de</language>
<atom:link href="http://localhost:1313/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

View File

@@ -0,0 +1 @@
html,body{margin:0;padding:0;height:100%;background:#000;font-family:geist mono,sans-serif;color:#fff}.background{position:fixed;width:100%;height:100%;top:0;left:0;z-index:0}svg{width:100%;height:100%;filter:blur(1px)brightness(1.2)}.flow-path{fill:none;stroke:#fff;stroke-width:1;stroke-opacity:.2;stroke-dasharray:1500;stroke-dashoffset:0;animation:flow 12s ease-in-out infinite alternate}.glow{stroke-opacity:.12;animation-duration:18s}.flow-path:nth-child(3n){animation-delay:2s}.flow-path:nth-child(4n){animation-delay:4s}@keyframes flow{0%{stroke-dashoffset:0}100%{stroke-dashoffset:3e3}}.centered{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;z-index:1}.centered h1{font-size:3.5rem;margin-bottom:1.5rem;letter-spacing:4px}.centered nav a{display:block;margin:.3rem 0;color:#ccc;text-decoration:none;font-size:1.1rem}.centered nav a:hover{color:#ff3c3c}.nav-label{display:block;font-size:.7rem;color:#555;text-transform:uppercase;letter-spacing:2px;margin-top:1.2rem;margin-bottom:.3rem}.centered nav a[href^=http]::after{content:" ↗";font-size:.8em;opacity:.5}.centered nav a[href^="/"]::after{content:none}.page-content{position:relative;z-index:1;max-width:800px;margin:4rem auto;padding:0 2rem}.page-content h1{font-size:2.5rem;letter-spacing:3px;margin-bottom:2rem}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1.5rem}.project-card{display:block;border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:1.5rem;text-decoration:none;color:#fff;transition:border-color .3s,transform .2s;background:rgba(255,255,255,5%);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.project-card:hover{border-color:#ff3c3c;transform:translateY(-2px);background:rgba(255,255,255,8%)}.project-card img{width:100%;border-radius:4px;margin-bottom:1rem}.project-card h2{font-size:1.3rem;margin:0 0 .5rem}.project-card p{color:#aaa;font-size:.9rem;margin:.3rem 0}.tags{display:flex;gap:.5rem;flex-wrap:wrap;margin:.5rem 0}.tag{background:rgba(255,255,255,8%);padding:.2rem .6rem;border-radius:4px;font-size:.8rem;color:#ccc}.project-links{margin:1rem 0 2rem}.project-links a{color:#ff3c3c;text-decoration:none;margin-right:1rem}.project-links a:hover{text-decoration:underline}.project-body{line-height:1.8;color:#ddd}.project-body h2{color:#fff;margin-top:2rem;font-size:1.4rem}.back-link{margin-top:3rem}.back-link a{color:#888;text-decoration:none;font-size:.9rem}.back-link a:hover{color:#ff3c3c}@media(max-width:600px){.centered h1{font-size:2rem}.page-content{margin:2rem auto}.project-grid{grid-template-columns:1fr}}

View File

@@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta name="generator" content="Hugo 0.155.3"><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/style.min.css" />
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="centered">
<h1>Elias Kohout</h1>
<nav>
<span class="nav-label">services</span>
<a href="https://c.eliaskohout.de">[c]rowsnest</a>
<a href="https://g.eliaskohout.de">[g]itea</a>
<a href="https://r.eliaskohout.de">[r]ezepte</a>
<span class="nav-label">pages</span>
<a href="/projects/">projects</a>
</nav>
</main>
</body>
</html>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Elias Kohout</title>
<link>http://localhost:1313/</link>
<description>Recent content on Elias Kohout</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Sat, 01 Jun 2024 00:00:00 +0000</lastBuildDate>
<atom:link href="http://localhost:1313/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>LLM Confidence Chat Interface</title>
<link>http://localhost:1313/projects/llm-confidence-chat/</link>
<pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/projects/llm-confidence-chat/</guid>
<description>A chat interface making LLM confidence scores accessible to non-technical users.</description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="de">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/style.min.css" />
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="page-content">
<h1>Projects</h1>
<div class="project-grid">
<a href="/projects/llm-confidence-chat/" class="project-card">
<h2>LLM Confidence Chat Interface</h2>
<p class="tags">
<span class="tag">Python</span>
<span class="tag">ML</span>
<span class="tag">Full-Stack</span>
</p>
<p>A chat interface making LLM confidence scores accessible to non-technical users.</p>
</a>
</div>
<div class="back-link">
<a href="/">← back</a>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Projects on Elias Kohout</title>
<link>http://localhost:1313/projects/</link>
<description>Recent content in Projects on Elias Kohout</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Sat, 01 Jun 2024 00:00:00 +0000</lastBuildDate>
<atom:link href="http://localhost:1313/projects/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>LLM Confidence Chat Interface</title>
<link>http://localhost:1313/projects/llm-confidence-chat/</link>
<pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/projects/llm-confidence-chat/</guid>
<description>A chat interface making LLM confidence scores accessible to non-technical users.</description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html lang="de">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/style.min.css" />
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="page-content">
<h1>LLM Confidence Chat Interface</h1>
<p class="tags">
<span class="tag">Python</span>
<span class="tag">ML</span>
<span class="tag">Full-Stack</span>
</p>
<div class="project-links">
<a href="https://github.com/yourusername/project">[Code]</a>
<a href="https://demo.example.com">[Live Demo]</a>
</div>
<article class="project-body">
<h2 id="problem">Problem</h2>
<p>Non-technical users have no way to assess how confident an LLM is in its responses.</p>
<h2 id="approach">Approach</h2>
<p>Built an interactive chat interface integrating lm-polygraph for
uncertainty estimation with an intuitive visualization layer.</p>
<h2 id="tech-stack">Tech Stack</h2>
<ul>
<li>Python, FastAPI</li>
<li>lm-polygraph</li>
<li>React</li>
</ul>
<h2 id="challenges--learnings">Challenges &amp; Learnings</h2>
<p>Translating probabilistic outputs into user-friendly visual indicators
while keeping the interface responsive.</p>
</article>
<div class="back-link">
<a href="/projects/">← all projects</a>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>http://localhost:1313/</loc>
<lastmod>2024-06-01T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/full-stack/</loc>
<lastmod>2024-06-01T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/projects/llm-confidence-chat/</loc>
<lastmod>2024-06-01T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/ml/</loc>
<lastmod>2024-06-01T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/projects/</loc>
<lastmod>2024-06-01T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/python/</loc>
<lastmod>2024-06-01T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/</loc>
<lastmod>2024-06-01T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/categories/</loc>
</url>
</urlset>

View File

@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="de">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="http://localhost:1313/css/style.min.css" />
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="page-content">
<h1>Full-Stack</h1>
<div class="project-grid">
<a href="http://localhost:1313/projects/llm-confidence-chat/" class="project-card">
<img src="/images/llm-chat.png" alt="Full-Stack" />
<h2>LLM Confidence Chat Interface</h2>
<p class="tags">
<span class="tag">Python</span>
<span class="tag">ML</span>
<span class="tag">Full-Stack</span>
</p>
<p>A chat interface making LLM confidence scores accessible to non-technical users.</p>
</a>
</div>
<div class="back-link">
<a href="/">← back</a>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Full-Stack on Elias Kohout</title>
<link>http://localhost:1313/tags/full-stack/</link>
<description>Recent content in Full-Stack on Elias Kohout</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Sat, 01 Jun 2024 00:00:00 +0000</lastBuildDate>
<atom:link href="http://localhost:1313/tags/full-stack/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>LLM Confidence Chat Interface</title>
<link>http://localhost:1313/projects/llm-confidence-chat/</link>
<pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/projects/llm-confidence-chat/</guid>
<description>A chat interface making LLM confidence scores accessible to non-technical users.</description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,77 @@
<!DOCTYPE html>
<html lang="de">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="http://localhost:1313/css/style.min.css" />
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="page-content">
<h1>Tags</h1>
<div class="project-grid">
<a href="http://localhost:1313/tags/python/" class="project-card">
<h2>Python</h2>
<p class="tags">
</p>
<p></p>
</a>
<a href="http://localhost:1313/tags/ml/" class="project-card">
<h2>ML</h2>
<p class="tags">
</p>
<p></p>
</a>
<a href="http://localhost:1313/tags/full-stack/" class="project-card">
<h2>Full-Stack</h2>
<p class="tags">
</p>
<p></p>
</a>
</div>
<div class="back-link">
<a href="/">← back</a>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Tags on Elias Kohout</title>
<link>http://localhost:1313/tags/</link>
<description>Recent content in Tags on Elias Kohout</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Sat, 01 Jun 2024 00:00:00 +0000</lastBuildDate>
<atom:link href="http://localhost:1313/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Full-Stack</title>
<link>http://localhost:1313/tags/full-stack/</link>
<pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/tags/full-stack/</guid>
<description></description>
</item>
<item>
<title>ML</title>
<link>http://localhost:1313/tags/ml/</link>
<pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/tags/ml/</guid>
<description></description>
</item>
<item>
<title>Python</title>
<link>http://localhost:1313/tags/python/</link>
<pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/tags/python/</guid>
<description></description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="de">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="http://localhost:1313/css/style.min.css" />
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="page-content">
<h1>ML</h1>
<div class="project-grid">
<a href="http://localhost:1313/projects/llm-confidence-chat/" class="project-card">
<img src="/images/llm-chat.png" alt="ML" />
<h2>LLM Confidence Chat Interface</h2>
<p class="tags">
<span class="tag">Python</span>
<span class="tag">ML</span>
<span class="tag">Full-Stack</span>
</p>
<p>A chat interface making LLM confidence scores accessible to non-technical users.</p>
</a>
</div>
<div class="back-link">
<a href="/">← back</a>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>ML on Elias Kohout</title>
<link>http://localhost:1313/tags/ml/</link>
<description>Recent content in ML on Elias Kohout</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Sat, 01 Jun 2024 00:00:00 +0000</lastBuildDate>
<atom:link href="http://localhost:1313/tags/ml/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>LLM Confidence Chat Interface</title>
<link>http://localhost:1313/projects/llm-confidence-chat/</link>
<pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/projects/llm-confidence-chat/</guid>
<description>A chat interface making LLM confidence scores accessible to non-technical users.</description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="de">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="http://localhost:1313/css/style.min.css" />
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="page-content">
<h1>Python</h1>
<div class="project-grid">
<a href="http://localhost:1313/projects/llm-confidence-chat/" class="project-card">
<img src="/images/llm-chat.png" alt="Python" />
<h2>LLM Confidence Chat Interface</h2>
<p class="tags">
<span class="tag">Python</span>
<span class="tag">ML</span>
<span class="tag">Full-Stack</span>
</p>
<p>A chat interface making LLM confidence scores accessible to non-technical users.</p>
</a>
</div>
<div class="back-link">
<a href="/">← back</a>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Python on Elias Kohout</title>
<link>http://localhost:1313/tags/python/</link>
<description>Recent content in Python on Elias Kohout</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Sat, 01 Jun 2024 00:00:00 +0000</lastBuildDate>
<atom:link href="http://localhost:1313/tags/python/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>LLM Confidence Chat Interface</title>
<link>http://localhost:1313/projects/llm-confidence-chat/</link>
<pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/projects/llm-confidence-chat/</guid>
<description>A chat interface making LLM confidence scores accessible to non-technical users.</description>
</item>
</channel>
</rss>

View File

@@ -1,139 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Elias Kohout</title>
<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=Geist+Mono:wght@100..900&display=swap" rel="stylesheet">
<style>
html, body {
margin: 0;
padding: 0;
height: 100%;
background: #000;
overflow: hidden;
font-family: 'Geist Mono', sans-serif;
color: #fff;
}
.background {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 0;
}
svg {
width: 100%;
height: 100%;
filter: blur(1px) brightness(1.2);
}
.flow-path {
fill: none;
stroke: white;
stroke-width: 1;
stroke-opacity: 0.20;
stroke-dasharray: 1500;
stroke-dashoffset: 0;
animation: flow 12s ease-in-out infinite alternate;
}
.glow {
stroke-opacity: 0.12;
animation-duration: 18s;
}
.flow-path:nth-child(3n) {
animation-delay: 2s;
}
.flow-path:nth-child(4n) {
animation-delay: 4s;
}
@keyframes flow {
0% {
stroke-dashoffset: 0;
}
100% {
stroke-dashoffset: 3000;
}
}
.centered {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
z-index: 1;
}
.centered h1 {
font-size: 3.5rem;
margin-bottom: 1.5rem;
letter-spacing: 4px;
}
.centered nav {
text-align: center;
display: inline-block;
}
.centered nav a {
display: block;
margin: 0.3rem 0;
color: #ccc;
text-decoration: none;
font-size: 1.1rem;
}
.centered nav a:hover {
color: #ff3c3c;
}
</style>
</head>
<body>
<div class="background">
<svg viewBox="0 0 1600 1200" preserveAspectRatio="xMidYMid slice">
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<path class="flow-path glow" d="M0,600 Q400,100 800,600 T1600,600" />
<path class="flow-path" d="M0,500 Q400,200 800,500 T1600,500" />
<path class="flow-path glow" d="M0,700 Q400,400 800,700 T1600,700" />
<path class="flow-path" d="M0,300 Q400,0 800,300 T1600,300" />
<path class="flow-path glow" d="M0,900 Q400,800 800,900 T1600,900" />
<path class="flow-path" d="M0,1000 Q400,1000 800,1000 T1600,1000" />
<path class="flow-path glow" d="M0,1100 Q400,1200 800,1100 T1600,1100" />
<path class="flow-path" d="M0,200 Q400,400 800,200 T1600,200" />
<path class="flow-path glow" d="M0,100 Q400,300 800,100 T1600,100" />
</svg>
</div>
<main class="centered">
<h1>Elias Kohout</h1>
<nav>
<a href="https://c.eliaskohout.de">[c]rowsnest</a>
<a href="https://g.eliaskohout.de">[g]itea</a>
<a href="https://r.eliaskohout.de">[r]ezepte</a>
</nav>
</main>
</body>
</html>