-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
246 lines (234 loc) · 12.6 KB
/
index.html
File metadata and controls
246 lines (234 loc) · 12.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
<!DOCTYPE HTML>
<!--
Template by @ajlkn
Free for personal and commercial use under the CCA 3.0 license (https://dominikkoehler.dev/license)
-->
<html lang="en">
<head>
<title>Dominik Köhler — Freelance Software Developer (AI, IoT, eCommerce, Web3)</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<meta name="description" content="Freelance software engineer building practical, production-ready software solutions across AI, IoT, eCommerce, and Web3." />
<meta name="author" content="Dominik Köhler" />
<link rel="canonical" href="https://dominikkoehler.dev/" />
<link rel="icon" href="images/avatar.jpg" type="image/jpeg" />
<meta name="theme-color" content="#121212" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://dominikkoehler.dev/" />
<meta property="og:title" content="Dominik Köhler — Freelance Software Developer (AI, IoT, eCommerce, Web3)" />
<meta property="og:description" content="I build human-centered, production-ready software in AI, IoT, eCommerce, and Web3." />
<meta property="og:image" content="https://dominikkoehler.dev/images/avatar.jpg" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Dominik Köhler — Freelance Software Developer" />
<meta name="twitter:description" content="AI, IoT, eCommerce, and Web3 solutions that solve real problems." />
<meta name="twitter:image" content="https://dominikkoehler.dev/images/avatar.jpg" />
<link rel="stylesheet" href="assets/css/main.css" />
<link rel="stylesheet" href="assets/css/theme.css" />
<script>
// Prevent theme flash on first paint
(function(){
try {
var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
var pref = localStorage.getItem('theme-preference');
if (pref === 'dark') document.documentElement.setAttribute('data-theme','dark');
else if (pref === 'light') document.documentElement.setAttribute('data-theme','light');
else document.documentElement.removeAttribute('data-theme');
var effective = (pref === 'dark') || (pref !== 'light' && prefersDark) ? '#121212' : '#ffffff';
var meta = document.querySelector('meta[name="theme-color"]');
if (meta) meta.setAttribute('content', effective);
} catch (e) {}
})();
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Dominik Köhler",
"jobTitle": "Freelance Software Developer",
"url": "https://dominikkoehler.dev/",
"image": "https://dominikkoehler.dev/images/avatar.jpg",
"address": {
"@type": "PostalAddress",
"addressCountry": "DE"
},
"knowsAbout": ["Artificial Intelligence", "Generative AI", "IoT/Embedded Systems", "eCommerce", "Web3/Blockchain"]
}
</script>
</head>
<body class="is-preload">
<!-- Header -->
<section id="header">
<header>
<span class="image avatar"><img src="images/avatar.jpg" alt="Photo of Dominik Köhler" decoding="async" loading="eager" /></span>
<h1 id="logo"><a href="#">Dominik Köhler</a></h1>
<p>Freelance Software Developer — AI, IoT, eCommerce & Web3.<br />I build practical, production-ready systems.</p>
</header>
<nav id="nav" aria-label="Primary">
<ul>
<li><a href="#about" class="active">About Me</a></li>
<li><a href="#expertise">Expertise</a></li>
<li><a href="#projects">Projects</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
<footer>
<ul class="icons">
<li>
<button id="theme-toggle" class="icon solid fa-adjust" title="Switch theme (Current: System)" aria-label="Switch theme (Current: System)" type="button"></button>
</li>
<li><a href="https://github.com/dkoehler-dev" class="icon brands fa-github" aria-label="GitHub" title="GitHub" target="_blank" rel="noopener noreferrer"><span class="label">Github</span></a></li>
<li><a href="https://www.linkedin.com/in/dominikkoehlerdev" class="icon brands fa-linkedin-in" aria-label="LinkedIn" title="LinkedIn" target="_blank" rel="noopener noreferrer"><span class="label">LinkedIn</span></a></li>
<li><a href="https://x.com/dkoehlerdev" class="icon brands fa-twitter" aria-label="X (Twitter)" title="X (Twitter)" target="_blank" rel="noopener noreferrer"><span class="label">X (Twitter)</span></a></li>
<li><a href="mailto:admin@dominikkoehler.dev" class="icon solid fa-envelope" aria-label="Email" title="Email"><span class="label">Email</span></a></li>
</ul>
</footer>
</section>
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<div id="main">
<!-- One -->
<section id="about">
<div class="image main" data-position="center">
<img src="images/banner.jpg" alt="Abstract banner" loading="lazy" decoding="async" />
</div>
<div class="container">
<header class="major">
<h2>Dominik Köhler</h2>
<p>Human‑centered engineering across AI, IoT, and Web3 — from idea to production.</p>
</header>
<p>I'm Dominik, a freelance software engineer based in Germany. I design and
build practical systems that help people work faster and smarter — from LLM‑powered
products to embedded devices and cloud services.</p>
<p>Over the past 6+ years (including almost 3 years freelancing), I've worked across eCommerce and IoT,
shipped reliable software in production, and collaborated with teams to turn early ideas
into products. My current toolkit includes Python (Flask/FastAPI), TypeScript/JavaScript
(Node.js, React), Docker, Git, Linux, Supabase, and PostgreSQL — and I adapt quickly when
projects call for something different.</p>
</div>
</section>
<!-- Two -->
<section id="expertise">
<div class="container">
<h3>Expertise</h3>
<br />
<!--<p>Core areas where I bring the most impact:</p>-->
<ul class="feature-icons">
<li class="icon solid fa-brain">Generative AI & LLM Development</li>
<li class="icon solid fa-bolt">IoT & Embedded Systems</li>
<li class="icon solid fa-cubes">Web3 & Smart Contracts</li>
<li class="icon solid fa-code">Full-Stack & Backend Development</li>
<li class="icon solid fa-cloud">Cloud & DevOps (Docker, CI/CD)</li>
<li class="icon solid fa-pen-nib">Technical Writing & Documentation</li>
</ul>
</div>
</section>
<!-- Three -->
<section id="projects">
<div class="container">
<h3>Projects</h3>
<br />
<!--<p>Selected projects that show how I solve <strong>real</strong> problems:</p>-->
<div class="features">
<article>
<a href="#" class="image"><img src="images/pulse-demo.png" alt="PULSE athlete performance app screenshot" loading="lazy" decoding="async" /></a>
<div class="inner">
<h4>PULSE</h4>
<p>Web and mobile SaaS for athletes to track and improve mental and physical performance. I built the backend and core front‑end flows, integrated PostgreSQL (Supabase), and added LLM‑powered conversations and analytics. Daily check‑ins generate an individual PULSE score with tailored recommendations; threshold alerts notify parents and coaches when support is needed.</p>
</div>
</article>
<article>
<a href="#" class="image"><img src="images/carbonsate-demo.png" alt="Sensor hardware and dashboard for carbon capture" loading="lazy" decoding="async" /></a>
<div class="inner">
<h4>Carbonsate</h4>
<p>Lead Engineer for a Berlin startup developing a novel carbon extraction process. I designed the end‑to‑end hardware & software stack: ESP32-based SoC with PoE support, C++ (Arduino) firmware, secure MQTTS ingestion to Azure IoT Hub, and data pipelines. The system — wiring and housing included — was deployed in the Namib desert, powered by solar and battery banks.</p>
</div>
</article>
<article>
<a href="#" class="image"><img src="images/playpost-demo.png" alt="PlayPost AI social post generator interface" loading="lazy" decoding="async" /></a>
<div class="inner">
<h4>PlayPost</h4>
<p>TypeScript (React + Node.js) and Supabase app that generates on‑brand social media posts with the OpenAI API and schedules publishing to X, Instagram, and LinkedIn. Built end‑to‑end flows, auth, and queueing for reliable cross‑platform posting.</p>
</div>
</article>
</div>
</div>
</section>
<!-- Four -->
<section id="contact">
<div class="container">
<h3>Contact Me</h3>
<p id="contact-intro">Interested in working together or have a question? Send a message and I’ll get back to you soon.</p>
<form method="post" action="#" aria-describedby="contact-intro" id="contact-form">
<div class="row gtr-uniform">
<div class="col-6 col-12-xsmall"><input type="text" name="name" id="name" placeholder="Name" autocomplete="name" aria-label="Name" required /></div>
<div class="col-6 col-12-xsmall"><input type="email" name="email" id="email" placeholder="Email" autocomplete="email" aria-label="Email" required /></div>
<div class="col-12"><input type="text" name="subject" id="subject" placeholder="Subject" autocomplete="off" aria-label="Subject" required /></div>
<div class="col-12"><textarea name="message" id="message" placeholder="Message" rows="6" aria-label="Message" required></textarea></div>
<div class="col-12">
<ul class="actions">
<li><input type="submit" class="primary" value="Send Message" /></li>
<li><input type="reset" value="Reset Form" /></li>
</ul>
</div>
</div>
</form>
<div id="contact-status" role="status" aria-live="polite" style="margin-top:1rem;"></div>
<script>
(function(){
var form = document.getElementById('contact-form');
var status = document.getElementById('contact-status');
if (!form) return;
form.addEventListener('submit', function(e){
e.preventDefault();
status.textContent = 'Sending…';
var payload = {
name: document.getElementById('name').value.trim(),
email: document.getElementById('email').value.trim(),
subject: document.getElementById('subject').value.trim(),
message: document.getElementById('message').value.trim()
};
fetch('https://sage-lamington-b1615d.netlify.app/.netlify/functions/send-contact-email', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
}).then(function(res){
return res.json().catch(function(){ return { success:false, message:'Unexpected response' }; });
}).then(function(data){
if (data && data.success) {
status.textContent = 'Thanks! Your message was sent.';
form.reset();
} else {
status.textContent = (data && data.error) || (data && data.message) || 'Sorry, something went wrong.';
}
}).catch(function(){
status.textContent = 'Network error. Please try again.';
});
});
})();
</script>
</div>
</section>
</div>
<!-- Footer -->
<section id="footer">
<div class="container">
<ul class="copyright">
<li>© 2023-2025 Dominik Köhler. All rights reserved.</li>
<li><a href="impressum.html" rel="nofollow">Impressum</a></li>
<li><a href="datenschutz.html" rel="nofollow">Datenschutz</a></li>
</ul>
</div>
</section>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
<script src="assets/js/theme.js"></script>
</body>
</html>