-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
328 lines (300 loc) · 17.2 KB
/
index.html
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
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
<html>
<head>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Jost:wght@300;400;500&family=Poppins:wght@100;200;300;400;500&family=Roboto:wght@100;300;500&display=swap" rel="stylesheet">
<!-- Styles -->
<link href="index.css" rel="stylesheet">
<!-- Meta -->
<title>Moritz Bruder (thinkin-apps.com)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Portfolio Website - see my app & web development projects and contact information.">
<meta name="keywords" content="Moritz Bruder, App, Developer, Software, Freelancer, Frankfurt, Mannheim">
<!-- screenshot lightbox -->
<script>
let backdrop;
function imgFocus(element) {
if (backdrop == null) {
backdrop = document.getElementById("screenshot-backdrop");
}
if (element.classList.contains("focus")) {
element.classList.remove("focus")
backdrop.classList.remove("visible")
} else {
element.classList.add("focus");
backdrop.classList.add("visible")
}
}
function clearFocus() {
const focussed = document.querySelector(".screenshot.focus")
if (focussed) {
imgFocus(focussed)
}
}
document.onkeydown = function(evt) {
evt = evt || window.event;
if (evt.key && evt.key === "Escape" || evt.key === "Esc") {
clearFocus()
}
};
</script>
<!-- buzzword bingo -->
<script>
let bingoChip;
const buzzwords = [
{
title: "Apple WWDC Scholar",
},
{
title: "University of Mannheim"
}
]
let buzzPos = 0;
function nextBuzzword () {
if (bingoChip == null) {
bingoChip = document.getElementById("bingo-chip");
}
console.log(buzzPos)
buzzPos = ((buzzPos + 1) % buzzwords.length);
bingoChip.innerHTML = buzzwords[buzzPos].title;
}
</script>
<!-- 3d logo -->
<script>
var videoElement;
function shiftLogo(event) {
if (!videoElement) {
videoElement = document.getElementById("ta-logo")
}
let pointerX = event.pageX;
const width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
let progress = pointerX / width;
videoElement.currentTime = videoElement.duration * progress;
}
</script>
<script>
function fillEmail () {
const email = atob("bV5vXnJeaV50XnpeQF50XmheaV5uXmteaV5uXi1eYV5wXnBec14uXmNeb15t").replace(/\^/g,"");
const link = document.getElementById("email-link");
link.setAttribute('href', 'mailto:' + email);
link.innerHTML = email;
}
</script>
</head>
<body onload="fillEmail()" onmousemove="shiftLogo(event)">
<div id="hero-header">
<video id="ta-logo">
<source src="res/logo.mp4" type="video/mp4">
</video>
<div id="hero-content" class="hlist flexwrap">
<img id="portrait" src="res/portrait.jpg" />
<div id="hero-description" class="vlist-left">
<h1>Hi, Moritz <span style="font-size: 0;">Bruder </span>here 👋</h1>
<h2>I created this page to show you the things I've built. Please check out my LinkedIn profile for my work experience:</h2>
<a class="hero-link hover-link" href="https://linkedin.com/in/moritzbruder">
<div class="hlist">
<img src="res/icons/linkedin.png" class="icon">
linkedin.com/in/moritzbruder
</div>
</a>
<!--<div id="hero-bingo-container" class="vlist-left">
<p>or click the die if you want to play some buzzword bingo instead:</p>
<div class="hlist">
<img id="bingo-die" onclick="nextBuzzword()" src="res/icons/random.png">
<div class="vlist-left" id="bingo-chip-container">
<div id="bingo-chip">Apple WWDC Scholar</div>
<span id="bingo-chip-hint">click to learn more</span>
</div>
</div>
</div>-->
</div>
</div>
<a href="#project-lumina">
<div id="hero-scroll-hint">
<span>scroll down to see the projects</span>
<img src="res/icons/scroll_hint.png" class="icon" />
</div>
</a>
</div>
<div id="project-lumina" class="project vlist">
<div class="vlist project-content">
<div class="hlist-top flexwrap">
<img class="project-logo" src="res/logo/lumina.png" />
<div class="vlist-left project-description">
<div class="hlist flexwrap">
<h2>Lumina</h2>
<span class="release-hint">Released August 2020</span>
</div>
<p>Designed and built a social network to bring friends closer together using micro-events. Featuring native frontends on android and iOS and a custom backend hosted in the cloud.</p>
<div class="hlist flexwrap">
<a class="project-link hover-link" href="https://apps.apple.com/app/id1509000572"><span class="hlist"><img class="link-icon" src="res/icons/link.png" />AppStore</span></a>
<a class="project-link hover-link" href="https://play.google.com/store/apps/details?id=com.lumina.lumina"><span class="hlist"><img class="link-icon" src="res/icons/link.png" />Play Store</span></a>
<a class="project-link hover-link" href="https://lumina-app.com/"><span class="hlist"><img class="link-icon" src="res/icons/link.png" />Website</span></a>
</div>
<div class="vlist project-table">
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/results.png" style="width: 20pt;" /> Results:</div></div>
<span class="cell-content">Signed up <b>500 users</b> in the first 3 months before pausing the project due to COVID-19. Over 300 "Leuchtsignal"s created to date.</span>
</div>
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/technologies.png" style="width: 20pt;" /> Technologies:</div></div>
<div class="tech-bubble-container cell-content">
<span class="highlight">Native iOS App (Swift)</span>
<span class="highlight">Native Android App (Kotlin)</span>
<span class="highlight">Ktor-based Backend (Kotlin)</span>
<span>PostgreSQL</span>
<span>Docker</span>
<span>Firebase Cloud Functions</span>
<span>AWS S3</span>
<span>OpenStreetMap</span>
<span>Nginx</span>
<span>Bitbucket Pipelines</span>
<span>Firebase Analytics</span>
<span>Photon Geocoder</span>
<span>AWS DynamoDB</span>
</div>
</div>
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/screenshots.png" style="width: 20pt;" /> Screenshots:</div></div>
<div class="cell-content"></div>
</div>
</div>
<div class="hlist flexwrap">
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/lumina-1.png" class="screenshot mobile-tall" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/lumina-2.png" class="screenshot mobile-tall" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/lumina-3.png" class="screenshot mobile-tall" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/lumina-4.png" class="screenshot mobile-tall" /></div>
</div>
</div>
</div>
</div>
</div>
<div id="project-ba" class="project vlist">
<div class="vlist project-content">
<div class="hlist-top flexwrap">
<div class="vlist-left project-description">
<div class="hlist flexwrap">
<h2>bruder-architekten.de</h2>
<span class="release-hint">Released Fall 2019</span>
</div>
<p>A website for my father's architecture studio. The site I designed and built represents two companies and is generated based on a JSON file for easy content management.</p>
<div class="hlist flexwrap">
<a class="project-link hover-link" href="https://bruder-architekten.de/"><span class="hlist"><img class="link-icon" src="res/icons/link-white.png" />Website</span></a>
</div>
<div class="vlist project-table">
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/technologies-white.png" style="width: 20pt;" /> Technologies:</div></div>
<div class="tech-bubble-container cell-content">
<span class="highlight">Angular</span>
<span>Firebase Hosting</span>
</div>
</div>
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/screenshots-white.png" style="width: 20pt;" /> Screenshots:</div></div>
<div class="cell-content"></div>
</div>
</div>
<div class="hlist flexwrap">
<div class="screenshot-container desktop"><img onclick="imgFocus(this)" src="res/screenshot/ba-1.png" class="screenshot desktop" /></div>
<div class="screenshot-container desktop"><img onclick="imgFocus(this)" src="res/screenshot/ba-2.png" class="screenshot desktop" /></div>
<div class="screenshot-container desktop"><img onclick="imgFocus(this)" src="res/screenshot/ba-3.png" class="screenshot desktop" /></div>
<div class="screenshot-container desktop"><img onclick="imgFocus(this)" src="res/screenshot/ba-4.png" class="screenshot desktop" /></div>
</div>
</div>
</div>
</div>
</div>
<div id="project-hourz" class="project vlist">
<div class="vlist project-content">
<div class="hlist-top flexwrap">
<img class="project-logo" src="res/logo/hourz.png" />
<div class="vlist-left project-description">
<div class="hlist flexwrap">
<h2>Hourz</h2>
<span class="release-hint">Released April 2016</span>
</div>
<p>A simple android app for tracking working time by the hour for multiple jobs. Supports tracking of specific tasks to generate PDF invoices or Excel exports and sports a simple set of location-based rules for automated tracking. Originally released in 2015 under a different name.</p>
<div class="hlist flexwrap">
<a class="project-link hover-link" href="https://play.google.com/store/apps/details?id=de.thinkinapps.jobz"><span class="hlist"><img class="link-icon" src="res/icons/link-hourz.png" />Play Store</span></a>
<a class="project-link hover-link" href="https://hourz.app/"><span class="hlist"><img class="link-icon" src="res/icons/link-hourz.png" />Website</span></a>
</div>
<div class="vlist project-table">
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/results.png" style="width: 20pt;" /> Results:</div></div>
<span class="cell-content">Over <b>2000 organic downloads</b> with a 4.5 star rating in Google Play.</span>
</div>
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/technologies.png" style="width: 20pt;" /> Technologies:</div></div>
<div class="tech-bubble-container cell-content">
<span class="highlight">Native Android App (Java)</span>
<span>Firebase Analytics & Crashlytics</span>
<span>Couchbase NoSQL</span>
</div>
</div>
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/screenshots.png" style="width: 20pt;" /> Screenshots:</div></div>
<div class="cell-content"></div>
</div>
</div>
<div class="hlist flexwrap">
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/hourz-1.png" class="screenshot mobile-tall" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/hourz-2.png" class="screenshot mobile-tall" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/hourz-3.png" class="screenshot mobile-tall" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/hourz-4.png" class="screenshot mobile-tall" /></div>
</div>
</div>
</div>
</div>
</div>
<div id="project-woehler" class="project vlist">
<div class="vlist project-content">
<div class="hlist-top flexwrap">
<img class="project-logo" src="res/logo/woehler.png" />
<div class="vlist-left project-description">
<div class="hlist flexwrap">
<h2>Wöhlerschule</h2>
<span class="release-hint">Released Summer 2013</span>
</div>
<p>Customizable substitution plan browser and school planner I built for my highschool. Comes in the form of an android app that's backed by a custom PHP web crawler with a MySQL database that sends substitution plan updates via Google Cloud Messaging.</p>
<div class="hlist flexwrap">
<a class="project-link hover-link" href="https://play.google.com/store/apps/details?id=com.woehler.woehler"><span class="hlist"><img class="link-icon" src="res/icons/link-woehler.png" />Play Store</span></a>
</div>
<div class="vlist project-table">
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/technologies.png" style="width: 20pt;" /> Technologies:</div></div>
<div class="tech-bubble-container cell-content">
<span class="highlight">Native Android App (Java)</span>
<span>PHP</span>
<span>MySQL</span>
<span>Google Cloud Messaging</span>
</div>
</div>
<div class="hlist-top flexwrap row">
<div class="header"><div class="hlist"><img src="res/icons/screenshots.png" style="width: 20pt;" /> Screenshots:</div></div>
</div>
</div>
<div class="hlist flexwrap">
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/woehler-1.png" class="screenshot mobile" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/woehler-2.png" class="screenshot mobile" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/woehler-3.png" class="screenshot mobile" /></div>
<div class="screenshot-container"><img onclick="imgFocus(this)" src="res/screenshot/woehler-4.png" class="screenshot mobile" /></div>
</div>
</div>
</div>
</div>
</div>
<div id="hero-footer">
<div id="footer-content" class="vlist">
<h1>That's it.</h1>
<br />
<center>
<p>Thanks for checking out my projects, you can reach me at:</p>
<a id="email-link"><!-- dynamic content (no spam pls) --></a>
</center>
</div>
<div id="imprint-link"><a href="/imprint">Imprint</a></div>
</div>
<div onclick="clearFocus()" id="screenshot-backdrop"></div>
</body>
</html>