From 7296ffc944176f0cabb793b3075e8ca1ac870d60 Mon Sep 17 00:00:00 2001 From: Sergei Poljanski Date: Tue, 5 May 2026 01:13:59 +0400 Subject: [PATCH] SEO optimization --- CLAUDE.md | 11 ++++++ asxpio.rb | 3 ++ public/robots.txt | 5 +++ public/sitemap.xml | 8 +++++ public/style.css | 8 +++++ views/index.erb | 9 +++++ views/layout.erb | 85 ++++++++++++++++++++++++++++++++++++++++++++-- 7 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 public/robots.txt create mode 100644 public/sitemap.xml diff --git a/CLAUDE.md b/CLAUDE.md index 9314ce6..4426f93 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -59,6 +59,17 @@ The patterns mirror `~/Code/projects/narayana/www`. Use that repo as a reference `public/id_ed25519.pub` is served from the site. The comment field (currently `ie+2026@asxp.io`) is part of the key file itself; editing the website without regenerating the key file means the website and the file disagree. Keep them in sync, or regenerate the key. +## Logo placeholder + +The header monogram in `views/index.erb` (inline SVG, "SP" in Hack monospace on a 56×56 dark-grey square) is a **placeholder** awaiting a real logo from a designer friend. When the real logo arrives, swap in this order: + +1. **Drop the asset** into `public/` (e.g. `public/logo.svg` — prefer SVG; PNG fallback if needed). +2. **Header in `views/index.erb`** — replace the entire `
` block with `IE Sergei Poljanski`. The `.monogram` CSS class in `public/style.css` (centered, `margin-bottom: 14px`) handles layout — adjust `width`/`height` on the `` if the new logo's proportions differ. +3. **Favicons** — replace or supplement `public/hedgehog.png`. The `` and `` in `views/layout.erb` point at `/hedgehog.png`; update both. Ideally provide 32×32 (favicon) and 180×180 (apple-touch). +4. **Open Graph image** — currently absent (Twitter Card type is `summary`, no thumbnail). Add `public/og-card.png` (1200×630, logo + entity name on dark `#121212`), then in `views/layout.erb` add `` and change `` to `summary_large_image`. + +The hedgehog is the user's pre-IE personal mark; once the IE has its own logo, the hedgehog can stay as-is for old-time's sake or be retired. Ask before retiring it. + ## Common tasks - **Generate a new SESSION_SECRET:** `openssl rand -hex 64` (then update Forgejo secret). diff --git a/asxpio.rb b/asxpio.rb index 5c0dcf1..c131fc3 100644 --- a/asxpio.rb +++ b/asxpio.rb @@ -110,6 +110,9 @@ class AsxpioWeb < Sinatra::Base end get '/thanks' do + @page_title = 'Thanks — IE Sergei Poljanski' + @page_desc = 'Your message has been received. A confirmation copy has been sent to your inbox.' + @noindex = true erb :thanks end diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..50ae1d1 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,5 @@ +User-agent: * +Allow: / +Disallow: /thanks + +Sitemap: https://asxp.io/sitemap.xml diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..993ff75 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,8 @@ + + + + https://asxp.io/ + monthly + 1.0 + + diff --git a/public/style.css b/public/style.css index 51d49b6..282da47 100644 --- a/public/style.css +++ b/public/style.css @@ -14,6 +14,14 @@ main { text-align: center; margin-bottom: 40px; } +.monogram { + display: inline-block; + margin-bottom: 14px; + line-height: 0; +} +.monogram svg { + display: block; +} .header h1 { font-size: 1.4rem; font-weight: 400; diff --git a/views/index.erb b/views/index.erb index 3392702..dd615f2 100644 --- a/views/index.erb +++ b/views/index.erb @@ -1,4 +1,13 @@
+

DevOps & infrastructure engineering — IE Sergei Poljanski, Tbilisi.

ინდ. მეწარმე სერგეი პოლჯანსკი
diff --git a/views/layout.erb b/views/layout.erb index b7d15c5..4570c2d 100644 --- a/views/layout.erb +++ b/views/layout.erb @@ -1,13 +1,94 @@ +<% page_title = (defined?(@page_title) && @page_title) || 'IE Sergei Poljanski — DevOps & Infrastructure Engineering, Tbilisi' %> +<% page_desc = (defined?(@page_desc) && @page_desc) || 'DevOps and infrastructure engineering by IE Sergei Poljanski — Estonian-born EU citizen, based in Tbilisi, Georgia. Docker, Kubernetes, Terraform, Ansible, CI/CD, monitoring. Worldwide clients.' %> +<% noindex = defined?(@noindex) && @noindex %> - IE Sergei Poljanski + + <%= page_title %> + + + <% if noindex %> + + <% else %> + + <% end %> + + + + + + + + + + + + + + + + + + + - + + +