Personal site for Dmytro Shain - product design, portfolio, blog. Static HTML, no build step. Custom domain via GitHub Pages.
index.html- homecase/*.html- 13 portfolio case pagesblog/index.html+blog/<slug>.html- blogshainbox.html- ShainBox product landingassets/- shared CSS, JS, i18n bags, images, og-defaultrobots.txt,sitemap.xml,CNAME- SEO + Pages config
Open any *.html file directly in Chrome via file://. No runtime deps
beyond CDN-hosted Google Fonts. For accurate analytics + SEO checks,
serve via python3 -m http.server and open at http://localhost:8000/.
- Theme: dark (default) / light. Toggle in top-right nav. Auto-detects
via
prefers-color-schemeon first visit. Choice persists inlocalStorage. - Accent: yellow
#F4D700in dark, orange#FF7849in light (yellow fails contrast on light backgrounds).
- English (default) and Ukrainian. Toggle in nav. Auto-detects from
navigator.languageon first visit. - i18n bags:
assets/i18n.shell.js(shared nav/footer/cta keys),assets/i18n.home.js(homepage),assets/i18n.dark-patterns.js(dark-patterns article).
git remote add origin https://github.com/Dishain/shain.one.git
git push -u origin mainRepo Settings → Pages:
- Source: Deploy from a branch
- Branch:
main/ folder/ (root)→ Save - Custom domain:
shain.one→ Save (CNAME file already in repo)
shain.one → DNS Management. Remove the parked-page A record. Add:
| Type | Host | Value | TTL |
|---|---|---|---|
| A | @ | 185.199.108.153 | 600 |
| A | @ | 185.199.109.153 | 600 |
| A | @ | 185.199.110.153 | 600 |
| A | @ | 185.199.111.153 | 600 |
| AAAA | @ | 2606:50c0:8000::153 | 600 |
| AAAA | @ | 2606:50c0:8001::153 | 600 |
| AAAA | @ | 2606:50c0:8002::153 | 600 |
| AAAA | @ | 2606:50c0:8003::153 | 600 |
| CNAME | www | dishain.github.io | 600 |
Wait 10-60 min for DNS propagation. Check at whatsmydns.net or via
dig shain.one.
When GitHub finishes DNS verification (green tick in Pages settings), tick "Enforce HTTPS". Let's Encrypt cert auto-provisioned.
- Sign up at https://clarity.microsoft.com
- Create a new project, get the Project ID (10-char alphanumeric).
- Open
assets/analytics.js, paste the ID intoCLARITY_PROJECT_ID. - Push. The script auto-loads on every page, skips on localhost, and respects Do-Not-Track.
Two ways to verify ownership of shain.one. Pick one.
- Open https://search.google.com/search-console → Add property →
"URL prefix" → enter
https://shain.one. - Choose "HTML tag" verification method. Google gives a token like
<meta name="google-site-verification" content="abc123...">. - Open
index.html, find theREPLACE_ME_GSC_TOKENplaceholder (around line 1012), paste your token incontent. - Push. Click "Verify" in GSC.
- GSC → Add property → "Domain" → enter
shain.one. - Google gives a TXT record value.
- GoDaddy DNS Management → Add record:
- Type: TXT, Host: @, Value:
google-site-verification=...
- Type: TXT, Host: @, Value:
- Wait ~5 min for DNS, click "Verify" in GSC.
- This covers all subdomains (www, etc) automatically.
- GSC → Sitemaps → Add
https://shain.one/sitemap.xml→ Submit. - GSC will index pages within hours-to-days.
- Use URL Inspection on key pages to request faster indexing.
Similar to GSC but at https://www.bing.com/webmasters. Same sitemap. Bonus: Bing supports IndexNow for instant indexing - see "Future improvements" below.
- Create
blog/<slug>.html(copy figma-ne-vmerla.html as template). - Drop cover + inline images into
assets/blog/<slug>/. - Add a card to
blog/index.html. - Add an entry to
sitemap.xmlwith today's<lastmod>. - Push. Once live, in GSC do URL Inspection → "Request indexing" for the new page.
- Create
case/<slug>.html(copy adbear.html as template). - Drop screenshots into
assets/portfolio/<slug>/. - Add a card to
index.htmlportfolio section. - Add a sitemap entry.
Bump the <lastmod> for that URL in sitemap.xml (today's date,
ISO YYYY-MM-DD). GSC re-crawls based on lastmod.
- IndexNow integration (faster Bing indexing, see assets/ for stub)
- Image sitemap extension (for portfolio screenshots)
- 404.html (GitHub Pages auto-serves if present)
- A small build script to regenerate sitemap from filesystem