diff --git a/README.md b/README.md index 80616786..6a1a76bb 100644 --- a/README.md +++ b/README.md @@ -1 +1,30 @@ # stcharitak.github.io + +This site now uses a simple template build flow so shared HTML is not duplicated across pages. + +## Edit flow +- Shared HTML shell: `src/layout.html` +- Shared head/scripts partials: `src/partials/` +- Shared header/footer renderer: `js/layout.js` +- Page-specific content: `src/pages/*.content.html` + +## Build pages +Run: + +```bash +scripts/build-pages.sh +``` + +This regenerates: +- `index.html` +- `resume.html` +- `contact.html` + +## Watch mode +Run: + +```bash +scripts/watch-pages.sh +``` + +This will rebuild automatically when you save files under `src/` or `js/layout.js`. diff --git a/contact.html b/contact.html index 9947f3ba..48d6fd7c 100644 --- a/contact.html +++ b/contact.html @@ -1,45 +1,40 @@ - + - - Stavros Charitakis - - - - - - - - - - - - - - + +Stavros Charitakis + + + + + + + + + + + + + - +
-
- -
-
- - - - +
@@ -225,42 +183,20 @@

Feel Free to Reach Out

- - -
- - - -
- +
- - - - - - - - + + + + + + + + + + diff --git a/index.html b/index.html index abee0af3..d7bc1207 100644 --- a/index.html +++ b/index.html @@ -1,89 +1,48 @@ - - - - - - Stavros Charitakis - - - - - - - - - - - - - - - - -
- - -
-
-
-
-
- - - -
- - -
-
- - - - + + + + + +Stavros Charitakis + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +
+ +
+
+
@@ -232,44 +191,21 @@
Albert Einstein
-
- - -
- - - -
- -
-
- - - - - - - - - - - - - +
+ + + + + + + + + + + + + + + + + diff --git a/js/layout.js b/js/layout.js new file mode 100644 index 00000000..6656d312 --- /dev/null +++ b/js/layout.js @@ -0,0 +1,48 @@ +(function renderSharedLayout() { + var page = document.body.getAttribute("data-page"); + var headerMount = document.getElementById("layout-header"); + var footerMount = document.getElementById("layout-footer"); + + if (headerMount) { + headerMount.innerHTML = [ + '", + ].join(""); + } + + if (footerMount) { + footerMount.innerHTML = [ + '", + ].join(""); + } +})(); diff --git a/resume.html b/resume.html index 12a1a368..b57c2a47 100644 --- a/resume.html +++ b/resume.html @@ -1,45 +1,40 @@ - + - - Stavros Charitakis - - - - - - - - - - - - - - + +Stavros Charitakis + + + + + + + + + + + + + - +
-
- -
-
- - - - +
@@ -715,42 +673,20 @@

Authoring Tools (H5P, Adapt, Xerte)

- - -
- - - -
- +
- - - - - - - - + + + + + + + + + + diff --git a/scripts/build-pages.pl b/scripts/build-pages.pl new file mode 100755 index 00000000..713e5542 --- /dev/null +++ b/scripts/build-pages.pl @@ -0,0 +1,72 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use File::Spec; +use FindBin; + +my $root = File::Spec->rel2abs(File::Spec->catdir($FindBin::Bin, "..")); + +sub read_file { + my ($rel) = @_; + my $path = File::Spec->catfile($root, split('/', $rel)); + open my $fh, '<', $path or die "Cannot read $path: $!\n"; + local $/; + my $content = <$fh>; + close $fh; + $content =~ s/\s+\z//; + return $content; +} + +sub write_file { + my ($rel, $content) = @_; + my $path = File::Spec->catfile($root, split('/', $rel)); + open my $fh, '>', $path or die "Cannot write $path: $!\n"; + print {$fh} $content; + close $fh; +} + +my $layout = read_file('src/layout.html'); +my $head_partial = read_file('src/partials/head.html'); +my $scripts_partial = read_file('src/partials/scripts.html'); + +my @pages = ( + { + output => 'index.html', + content => 'src/pages/index.content.html', + active => 'about', + extra_head => '', + extra_scripts => '', + }, + { + output => 'resume.html', + content => 'src/pages/resume.content.html', + active => 'resume', + extra_head => '', + extra_scripts => '', + }, + { + output => 'contact.html', + content => 'src/pages/contact.content.html', + active => 'contact', + extra_head => '', + extra_scripts => '', + }, +); + +for my $page (@pages) { + my $head = $head_partial; + $head =~ s/\{\{EXTRA_HEAD\}\}/$page->{extra_head}/g; + + my $scripts = $scripts_partial; + $scripts =~ s/\{\{EXTRA_SCRIPTS\}\}/$page->{extra_scripts}/g; + + my $content = read_file($page->{content}); + my $html = $layout; + $html =~ s/\{\{HEAD\}\}/$head/g; + $html =~ s/\{\{PAGE_KEY\}\}/$page->{active}/g; + $html =~ s/\{\{CONTENT\}\}/$content/g; + $html =~ s/\{\{SCRIPTS\}\}/$scripts/g; + + write_file($page->{output}, $html . "\n"); + print "Built $page->{output}\n"; +} diff --git a/scripts/build-pages.sh b/scripts/build-pages.sh new file mode 100755 index 00000000..e194a88e --- /dev/null +++ b/scripts/build-pages.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +set -euo pipefail +"$(dirname "$0")/build-pages.pl" diff --git a/scripts/watch-pages.sh b/scripts/watch-pages.sh new file mode 100755 index 00000000..304a6115 --- /dev/null +++ b/scripts/watch-pages.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" +BUILD_SCRIPT="$ROOT_DIR/scripts/build-pages.sh" +WATCH_SRC_DIR="$ROOT_DIR/src" +WATCH_LAYOUT_JS="$ROOT_DIR/js/layout.js" +POLL_INTERVAL="${1:-1}" + +compute_hash() { + { + if [[ -f "$WATCH_LAYOUT_JS" ]]; then + printf '%s\0' "$WATCH_LAYOUT_JS" + fi + + find "$WATCH_SRC_DIR" -type f \( -name "*.html" -o -name "*.js" -o -name "*.css" \) -print0 + } | sort -z | xargs -0 sha1sum 2>/dev/null | sha1sum | awk '{print $1}' +} + +run_build() { + "$BUILD_SCRIPT" + echo "Watching for changes..." +} + +echo "Initial build..." +run_build + +if command -v inotifywait >/dev/null 2>&1; then + echo "Watcher mode: inotifywait" + while inotifywait -qq -r -e close_write,create,delete,move "$WATCH_SRC_DIR" "$WATCH_LAYOUT_JS"; do + run_build + done +else + echo "Watcher mode: polling every ${POLL_INTERVAL}s (install inotify-tools for instant rebuilds)" + last_hash="$(compute_hash)" + + while true; do + sleep "$POLL_INTERVAL" + current_hash="$(compute_hash)" + + if [[ "$current_hash" != "$last_hash" ]]; then + last_hash="$current_hash" + run_build + fi + done +fi diff --git a/src/layout.html b/src/layout.html new file mode 100644 index 00000000..62e74532 --- /dev/null +++ b/src/layout.html @@ -0,0 +1,32 @@ + + + + {{HEAD}} + + + +
+ +
+
+
+
+
+ +
+ +
+
+
+{{CONTENT}} + +
+
+ + {{SCRIPTS}} + + diff --git a/src/pages/contact.content.html b/src/pages/contact.content.html new file mode 100644 index 00000000..0af89985 --- /dev/null +++ b/src/pages/contact.content.html @@ -0,0 +1,140 @@ +
+
+
+
+

Contact

+
+

Get in Touch

+
+
+ +
+
+
+
+
+
+ +
+
+

+49 177 7057164

+
+
+ +
+
+ +
+
+

10999, Berlin, Germany

+
+
+ +
+
+ +
+
+

st.charitak@gmail.com

+
+
+
+
+
+
+

Feel Free to Reach Out

+
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
diff --git a/src/pages/index.content.html b/src/pages/index.content.html new file mode 100644 index 00000000..567a1ef6 --- /dev/null +++ b/src/pages/index.content.html @@ -0,0 +1,149 @@ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+ + +

Stavros Charitakis

+

+ After several years working as a software + engineer, I decided to explore my long-standing + interest in education and transitioned into the + field of teaching. During this time, I worked as a + teaching assistant and later as a mathematics + teacher for grades 7–10, supporting students’ + academic growth and personal development while + also strengthening my German language skills. This + experience helped me develop strong communication + skills and a deeper interest in learning, + behavior, and educational processes. Today, I am + returning to software engineering with the goal of + contributing my technical expertise to projects + that combine technology, data, and research. +

+ + +
+
+
+
+
+
+ + +
+ + +
+

Quotes

+
+ + + +
+
+
+
diff --git a/src/pages/resume.content.html b/src/pages/resume.content.html new file mode 100644 index 00000000..fed9886d --- /dev/null +++ b/src/pages/resume.content.html @@ -0,0 +1,630 @@ +
+
+
+
+

Resume

+
+ +
+ +
+
+

Life is short but bigger than a CV

+
+
+ +
+
+
+
+

Experience

+
+ +
+
+
2025 - Present
+ Sankt Marien-Oberschule +

Teacher

+
    +
  • Teach mathematics to students in grades 7–10
  • +
+
+ +
+
2023 - 2025
+ Teach First Deutchland gemeinnützige GmbH +

Teaching Assistant

+
    +
  • + Support and mentor 9th - and 10th-grade students at + Zuckmayer school, contributing to their educational + and personal development +
  • +
  • + Teach mathematics in a welcome class, adapting + lessons to students with varied language and + academic backgrounds +
  • +
+
+ +
+
2018 - 2022
+ 24metrics GmbH +

Software Engineer

+
    +
  • + Lead Engineer for one of the main projects of the + company +
  • +
  • + Maintaining and releasing new features for a Laravel + aplication, AngularJS frontend, MySQL, + ElasticSearch, Redis, RabbitMQ, CircleCI, with + everything deployed initially in AWS and later in + GCP +
  • +
  • + Implementing various tools and micro-services using + Go +
  • +
  • Technical Support
  • +
+
+ +
+
2017 - 2018
+ Greek Army +

Network Technician

+
    +
  • + Installation, Configuration and Management of + Microsoft Windows Server +
  • +
  • + Troubleshooting and repairing computer and network + systems +
  • +
  • + Designing and Implementing personnel management + applications using PHP framework Laravel +
  • +
+
+ +
+
2016 - 2017
+ Sintagoulis Plc +

Fullstack Developer

+
    +
  • + Developing and Maintaining dynamic search engine + machine platform for aggregating and delivering + cooking recipes, using PHP, Smarty Template Engine, + MySQL, HTML, CSS (Bootstrap, Materialize), + JavaScript/JQuery/Ajax, JSON technologies +
  • +
  • + Developing Mobile application for Android and iOS + using PhoneGap framework +
  • +
  • + Implementing algorithms for "smart" search and + categorization using neural network concepts +
  • +
+
+ +
+
2016 - 2018
+ Technological Educational Institute of Crete, NiLE + Lab +

Research Assistant

+
    +
  • + Teacher Assistant: Laboratory for "Object Oriented + Programming with Java", undergraduate course +
  • +
  • + Participating in the Design and implementation of + Serious Games +
  • +
  • + Participating in the European project + "Body and Mind" +
  • +
  • + Supporting undergraduate and postgraduate students +
  • +
  • + Conference Assistant at "ArtsIT, Interactive and + Game Creation" and "Design Learning & Innovation" +
  • +
+
+ +
+
2014 - 2014
+ Entranet Ltd +

+ Junior Software Engineer - Internship +

+
    +
  • + Assisting in updating voice recognition corporate + software using Java +
  • +
  • Upgrading the corporate website
  • +
  • + Content Management of e-platforms using CMS Drupal +
  • +
+
+
+
+ +
+
+

Education

+
+ +
+
+
2015 – 2017
+ Hellenic Mediterranean University + +

Master of Science

+

Informatics & Multimedia

+
    +
  • Grade: 9.6/10 "Excellent"
  • +
  • + Dissertation: Design and Development of effective + and customizable serious game platform based on + learning profile +
  • +
+
+ +
+
2009 - 2014
+ University of Macedonia +

Bachelor of Science

+

Applied Informatics

+
    +
  • Grade: 7.17/10 "Very Good"
  • +
  • + Dissertation: Design and Development of hotel + reservation system +
  • +
+
+
+
+
+ +
+
+
+ +
+

Languages

+
+
+
+ +
+
+
+ + +
+
+

Greek

+
+ +
+ Mother tongue +
+
+ +
+ +
+ +
+
+
+
+ +
+
+ + +
+
+

English

+
+ +
+ C2 +
+ +
+ +
+ +
+ +
+
+
+
+ +
+
+ + +
+
+

German

+
+ +
+ C1 +
+
+ +
+ +
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+

Publications

+
+
+
+ + + +
+
+
+
+
+ +
+
+
+

Coding Skills

+
+ +
+ +
+

PHP

+
+ + + +
+

Laravel

+
+ + + +
+

Golang

+
+ + + +
+

Java

+
+ + + +
+

JavaScript

+
+ + + +
+

AngularJS

+
+ + + +
+

React

+
+ + + +
+

HTML / CSS / Bootstrap / Materialize

+
+ + + +
+

PhoneGap

+
+ + + +
+

Unity 3D Game Engine

+
+ +
+
+ +
+
+

Database Tools

+
+ +
+ +
+

MySQL

+
+ + + +
+

MongoDB

+
+ + + +
+

ElasticSearch

+
+ + + +
+

Redis

+
+ + + +
+

Clickhouse

+
+ +
+
+ +
+
+

Other Technologies

+
+ +
+ +
+

Github

+
+ + + +
+

Containers (Docker)

+
+ + + +
+

Kubernetes

+
+ + + +
+

CI (CircleCI, Jenkins)

+
+ + + +
+

AWS

+
+ + + +
+

GCP

+
+ + + +
+

Composer

+
+ + + +
+

API Development

+
+ + + +
+

Unit & Functional Tests

+
+ + + +
+

Unity 3D Game Engine

+
+ + + +
+

LMS (Moodle)

+
+ + + +
+

Authoring Tools (H5P, Adapt, Xerte)

+
+ +
+
+
+
+
+
+
diff --git a/src/partials/head.html b/src/partials/head.html new file mode 100644 index 00000000..f7c0b359 --- /dev/null +++ b/src/partials/head.html @@ -0,0 +1,22 @@ + + +Stavros Charitakis + + + + + + + + + + + +{{EXTRA_HEAD}} + diff --git a/src/partials/scripts.html b/src/partials/scripts.html new file mode 100644 index 00000000..3af3793b --- /dev/null +++ b/src/partials/scripts.html @@ -0,0 +1,11 @@ + + + + + + + +{{EXTRA_SCRIPTS}} + + +