Landing page for entropymon
Terminal-styled page with auto i18n, carousel ads, dynamic scaling. Products: Opisomat, Miniatury24, Spectre Chat, NeverEnding Story. SEO: structured data, sitemap, robots.txt. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
342
index.html
Normal file
342
index.html
Normal file
@@ -0,0 +1,342 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0">
|
||||
<title>entropymon - Terminal System Monitor | Electric Entropy Lab</title>
|
||||
<meta name="description" content="entropymon - Advanced terminal system monitor for Linux. CPU, GPU (NVIDIA/AMD), memory, disk, network, process management. Better than htop and glances. Free & open source.">
|
||||
<meta name="keywords" content="entropymon, system monitor, terminal, linux, htop alternative, glances alternative, gpu monitor, nvidia, amd, process manager, tui, curses, python">
|
||||
<meta name="author" content="Electric Entropy Lab">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:title" content="entropymon - Terminal System Monitor">
|
||||
<meta property="og:description" content="Advanced terminal system monitor for Linux with GPU support, process management, and multi-language UI.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://entropymon.electricentropy.eu">
|
||||
<link rel="canonical" href="https://entropymon.electricentropy.eu">
|
||||
|
||||
<script type="application/ld+json">
|
||||
{"@context":"https://schema.org","@type":"SoftwareApplication","name":"entropymon","applicationCategory":"DeveloperApplication","operatingSystem":"Linux","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"Electric Entropy Lab","url":"https://electricentropy.eu"},"description":"Advanced terminal system monitor for Linux with GPU support, process management, and multi-language UI.","softwareVersion":"2.2.1","downloadUrl":"https://pypi.org/project/entropymon/","license":"https://opensource.org/licenses/MIT"}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;700&display=swap');
|
||||
:root{--bg:#0a0e14;--bg2:#0d1117;--fg:#c5cdd9;--green:#26d97f;--cyan:#39c5cf;--yellow:#e6b450;--red:#f07171;--magenta:#c77dff;--blue:#3d8fd1;--dim:#4a5568;--border:#1a2332;--glow:rgba(38,217,127,0.15)}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--fg);line-height:1.6;overflow-x:hidden}
|
||||
|
||||
.matrix-bg{position:fixed;inset:0;z-index:0;opacity:.04;pointer-events:none;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(38,217,127,.03) 2px,rgba(38,217,127,.03) 4px)}
|
||||
.container{position:relative;z-index:1;max-width:960px;margin:0 auto;padding:0 16px}
|
||||
|
||||
@keyframes scanline{0%{transform:translateY(-100%)}100%{transform:translateY(100vh)}}
|
||||
.scanline{position:fixed;inset:0 0 auto 0;height:4px;background:linear-gradient(transparent,var(--green),transparent);opacity:.06;z-index:100;pointer-events:none;animation:scanline 8s linear infinite}
|
||||
|
||||
/* Header - scales to fit */
|
||||
header{padding:clamp(20px,5vw,60px) 0 clamp(10px,3vw,30px);text-align:center}
|
||||
.logo-ascii{font-size:clamp(4.5px,1.5vw,10px);line-height:1.15;color:var(--cyan);text-shadow:0 0 20px rgba(57,197,207,.3);white-space:pre;margin-bottom:8px;overflow:hidden}
|
||||
.tagline{color:var(--green);font-size:clamp(10px,2vw,14px);font-weight:300;letter-spacing:3px;text-transform:uppercase;margin-top:8px}
|
||||
.brand{color:var(--dim);font-size:clamp(9px,1.5vw,12px);margin-top:4px}
|
||||
.version{display:inline-block;background:var(--green);color:var(--bg);padding:2px 10px;border-radius:3px;font-size:11px;font-weight:700;margin-top:10px}
|
||||
|
||||
/* Term box */
|
||||
.term-box{background:var(--bg2);border:1px solid var(--border);border-radius:8px;margin:20px 0;overflow:hidden;box-shadow:0 4px 30px rgba(0,0,0,.5)}
|
||||
.term-header{background:#161b22;padding:8px 14px;display:flex;align-items:center;gap:6px;border-bottom:1px solid var(--border)}
|
||||
.term-dot{width:10px;height:10px;border-radius:50%}
|
||||
.term-dot.r{background:#f07171}.term-dot.y{background:#e6b450}.term-dot.g{background:#26d97f}
|
||||
.term-title{color:var(--dim);font-size:11px;margin-left:8px}
|
||||
.term-body{padding:16px;font-size:clamp(10px,1.8vw,13px);overflow-x:auto}
|
||||
.term-body .prompt{color:var(--green)}.term-body .cmd{color:var(--fg)}.term-body .comment{color:var(--dim)}.term-body .output{color:var(--cyan)}.term-body .warn{color:var(--yellow)}
|
||||
|
||||
/* Section */
|
||||
section{margin:clamp(25px,5vw,50px) 0}
|
||||
h2{color:var(--cyan);font-size:clamp(13px,2vw,16px);font-weight:500;text-transform:uppercase;letter-spacing:2px;margin-bottom:16px;padding-bottom:8px;border-bottom:1px solid var(--border)}
|
||||
h2::before{content:'> ';color:var(--green)}
|
||||
|
||||
/* Features */
|
||||
.features{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
|
||||
.feature{background:var(--bg2);border:1px solid var(--border);border-radius:6px;padding:16px;transition:border-color .3s}
|
||||
.feature:hover{border-color:var(--cyan)}
|
||||
.feature-icon{font-size:18px;margin-bottom:6px}
|
||||
.feature h3{color:var(--green);font-size:13px;font-weight:500;margin-bottom:4px}
|
||||
.feature p{color:var(--dim);font-size:11px}
|
||||
|
||||
/* Stats */
|
||||
.stats-bar{display:flex;flex-wrap:wrap;gap:clamp(10px,3vw,20px);justify-content:center;margin:20px 0}
|
||||
.stat-val{font-size:clamp(18px,4vw,28px);font-weight:700;color:var(--green);text-shadow:0 0 15px var(--glow)}
|
||||
.stat-label{font-size:10px;color:var(--dim);text-transform:uppercase;letter-spacing:1px}
|
||||
|
||||
/* Bars */
|
||||
@keyframes barFill{0%{width:0}100%{width:var(--fill)}}
|
||||
.demo-bar{height:14px;background:var(--border);border-radius:2px;overflow:hidden;margin:4px 0}
|
||||
.demo-bar-fill{height:100%;border-radius:2px;animation:barFill 2s ease-out forwards;background:linear-gradient(90deg,var(--green),var(--yellow),var(--red))}
|
||||
|
||||
/* ──── Ad carousel ──── */
|
||||
.ads-wrapper{position:relative;margin:20px 0;overflow:hidden}
|
||||
.ads-track{display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:8px 0}
|
||||
.ads-track::-webkit-scrollbar{display:none}
|
||||
|
||||
.ad-card{flex:0 0 280px;scroll-snap-align:start;background:var(--bg2);border:1px solid var(--border);border-radius:8px;overflow:hidden;transition:transform .3s,border-color .3s,box-shadow .3s;text-decoration:none;color:inherit;display:block}
|
||||
@media(min-width:640px){.ad-card{flex:0 0 calc(50% - 8px)}}
|
||||
@media(min-width:960px){.ad-card{flex:0 0 calc(25% - 12px)}}
|
||||
|
||||
.ad-card:hover{transform:translateY(-3px);box-shadow:0 6px 30px rgba(0,0,0,.4)}
|
||||
.ad-card.opisomat:hover{border-color:var(--magenta)}.ad-card.miniatury:hover{border-color:var(--yellow)}.ad-card.spectre:hover{border-color:var(--cyan)}.ad-card.nes:hover{border-color:var(--red)}
|
||||
|
||||
.ad-banner{height:100px;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}
|
||||
.ad-card.opisomat .ad-banner{background:linear-gradient(135deg,#1a0a2e,#2d1b4e,#1a0a2e)}
|
||||
.ad-card.miniatury .ad-banner{background:linear-gradient(135deg,#2e1a00,#4e3b1b,#2e1a00)}
|
||||
.ad-card.spectre .ad-banner{background:linear-gradient(135deg,#0a1a2e,#0d2b4e,#0a1a2e)}
|
||||
.ad-card.nes .ad-banner{background:linear-gradient(135deg,#1a0a0a,#4e1b1b,#1a0a0a)}
|
||||
|
||||
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
|
||||
.ad-banner-icon{font-size:36px;position:relative;z-index:1;animation:float 3s ease-in-out infinite}
|
||||
.ad-banner-glow{position:absolute;width:80px;height:80px;border-radius:50%;filter:blur(30px);opacity:.4}
|
||||
.opisomat .ad-banner-glow{background:var(--magenta)}.miniatury .ad-banner-glow{background:var(--yellow)}.spectre .ad-banner-glow{background:var(--cyan)}.nes .ad-banner-glow{background:var(--red)}
|
||||
|
||||
.ad-body{padding:14px}
|
||||
.ad-tag{font-size:8px;text-transform:uppercase;letter-spacing:2px;color:var(--dim);margin-bottom:4px}
|
||||
.ad-name{font-size:14px;font-weight:700;margin-bottom:4px}
|
||||
.opisomat .ad-name{color:var(--magenta)}.miniatury .ad-name{color:var(--yellow)}.spectre .ad-name{color:var(--cyan)}.nes .ad-name{color:var(--red)}
|
||||
.ad-desc{font-size:11px;color:var(--dim);line-height:1.5;margin-bottom:10px}
|
||||
.ad-badges{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
|
||||
.ad-badge{font-size:9px;padding:2px 6px;border-radius:2px;background:rgba(255,255,255,.05);color:var(--fg)}
|
||||
.ad-cta{display:inline-block;font-size:10px;text-transform:uppercase;letter-spacing:1px;padding:5px 12px;border:1px solid;border-radius:3px;transition:all .3s}
|
||||
.opisomat .ad-cta{color:var(--magenta);border-color:var(--magenta)}.opisomat .ad-cta:hover{background:var(--magenta);color:var(--bg)}
|
||||
.miniatury .ad-cta{color:var(--yellow);border-color:var(--yellow)}.miniatury .ad-cta:hover{background:var(--yellow);color:var(--bg)}
|
||||
.spectre .ad-cta{color:var(--cyan);border-color:var(--cyan)}.spectre .ad-cta:hover{background:var(--cyan);color:var(--bg)}
|
||||
.nes .ad-cta{color:var(--red);border-color:var(--red)}.nes .ad-cta:hover{background:var(--red);color:var(--bg)}
|
||||
|
||||
/* Scroll arrows */
|
||||
.ads-nav{display:flex;justify-content:center;gap:10px;margin-top:10px}
|
||||
.ads-nav button{background:var(--border);border:1px solid var(--dim);color:var(--fg);width:32px;height:32px;border-radius:4px;cursor:pointer;font-family:inherit;font-size:14px;transition:all .2s}
|
||||
.ads-nav button:hover{background:var(--cyan);color:var(--bg);border-color:var(--cyan)}
|
||||
|
||||
/* Footer */
|
||||
footer{text-align:center;padding:30px 0;border-top:1px solid var(--border);color:var(--dim);font-size:11px}
|
||||
footer a{color:var(--cyan);text-decoration:none}footer a:hover{text-decoration:underline}
|
||||
|
||||
/* CRT */
|
||||
@keyframes flicker{0%,100%{opacity:1}92%{opacity:1}93%{opacity:.85}94%{opacity:1}}
|
||||
body{animation:flicker 10s infinite}
|
||||
|
||||
/* Hide elements by lang */
|
||||
[data-i18n]{display:none}
|
||||
[data-i18n].active{display:initial}
|
||||
.i18n-block{display:none}
|
||||
.i18n-block.active{display:block}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="matrix-bg"></div>
|
||||
<div class="scanline"></div>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<header>
|
||||
<div class="logo-ascii"> ███████╗███╗ ██╗████████╗██████╗ ██████╗ ██████╗ ██╗ ██╗
|
||||
██╔════╝████╗ ██║╚══██╔══╝██╔══██╗██╔═══██╗██╔══██╗╚██╗ ██╔╝
|
||||
█████╗ ██╔██╗ ██║ ██║ ██████╔╝██║ ██║██████╔╝ ╚████╔╝
|
||||
██╔══╝ ██║╚██╗██║ ██║ ██╔══██╗██║ ██║██╔═══╝ ╚██╔╝
|
||||
███████╗██║ ╚████║ ██║ ██║ ██║╚██████╔╝██║ ██║
|
||||
╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝
|
||||
███╗ ███╗ ██████╗ ███╗ ██╗
|
||||
████╗ ████║██╔═══██╗████╗ ██║
|
||||
██╔████╔██║██║ ██║██╔██╗ ██║
|
||||
██║╚██╔╝██║██║ ██║██║╚██╗██║
|
||||
██║ ╚═╝ ██║╚██████╔╝██║ ╚████║
|
||||
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝</div>
|
||||
<div class="tagline"><span data-i18n="en" class="active">Terminal System Monitor</span><span data-i18n="pl">Terminalowy Monitor Systemu</span><span data-i18n="de">Terminal-Systemmonitor</span><span data-i18n="es">Monitor de Sistema Terminal</span><span data-i18n="fr">Moniteur Systeme Terminal</span><span data-i18n="uk">Terminalnyj Monitor Systemy</span><span data-i18n="zh">Zhongduan Xitong Jiankongqi</span></div>
|
||||
<div class="brand">Electric Entropy Lab</div>
|
||||
<span class="version">v2.2.1</span>
|
||||
</header>
|
||||
|
||||
<div class="stats-bar">
|
||||
<div class="stat"><div class="stat-val">7</div><div class="stat-label"><span data-i18n="en" class="active">Languages</span><span data-i18n="pl">Jezykow</span><span data-i18n="de">Sprachen</span><span data-i18n="es">Idiomas</span><span data-i18n="fr">Langues</span><span data-i18n="uk">Mov</span><span data-i18n="zh">Yuyan</span></div></div>
|
||||
<div class="stat"><div class="stat-val">GPU</div><div class="stat-label">NVIDIA + AMD</div></div>
|
||||
<div class="stat"><div class="stat-val"><40ms</div><div class="stat-label">Update</div></div>
|
||||
<div class="stat"><div class="stat-val">39MB</div><div class="stat-label">RAM</div></div>
|
||||
<div class="stat"><div class="stat-val">MIT</div><div class="stat-label">License</div></div>
|
||||
</div>
|
||||
|
||||
<div class="term-box">
|
||||
<div class="term-header"><div class="term-dot r"></div><div class="term-dot y"></div><div class="term-dot g"></div><span class="term-title">entropymon</span></div>
|
||||
<div class="term-body">
|
||||
<span class="output">CPU [12C/24T] 3200MHz</span><br>
|
||||
ALL <div class="demo-bar"><div class="demo-bar-fill" style="--fill:34%"></div></div>
|
||||
<span class="comment">usr:28% sys:4% iow:1% idle:67%</span><br><br>
|
||||
<span class="output">MEMORY</span><br>
|
||||
RAM 48.2G/219.7G <div class="demo-bar"><div class="demo-bar-fill" style="--fill:22%"></div></div>
|
||||
<span class="comment">Buf:2.1G Cache:38.4G Avail:168.2G</span><br><br>
|
||||
<span class="output">GPU NVIDIA RTX 5060 Ti [PCIe 4x16]</span><br>
|
||||
GPU <div class="demo-bar"><div class="demo-bar-fill" style="--fill:15%"></div></div>
|
||||
MEM <div class="demo-bar"><div class="demo-bar-fill" style="--fill:8%"></div></div>
|
||||
<span class="comment">Temp:42°C Pwr:45/150W Fan:0% Core:2100MHz</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section id="install">
|
||||
<h2><span data-i18n="en" class="active">Install</span><span data-i18n="pl">Instalacja</span><span data-i18n="de">Installation</span><span data-i18n="es">Instalar</span><span data-i18n="fr">Installer</span><span data-i18n="uk">Vstanovlennya</span><span data-i18n="zh">Anzhuang</span></h2>
|
||||
|
||||
<div class="term-box"><div class="term-header"><div class="term-dot r"></div><div class="term-dot y"></div><div class="term-dot g"></div><span class="term-title">apt (Debian/Ubuntu)</span></div>
|
||||
<div class="term-body">
|
||||
<span class="prompt">$</span> <span class="cmd">curl -s https://apt.electricentropy.eu/install.sh | sudo bash</span><br><br>
|
||||
<span class="comment"># <span data-i18n="en" class="active">or manually</span><span data-i18n="pl">lub recznie</span><span data-i18n="de">oder manuell</span><span data-i18n="es">o manualmente</span><span data-i18n="fr">ou manuellement</span><span data-i18n="uk">abo vruchnu</span><span data-i18n="zh">huo shoudong</span>:</span><br>
|
||||
<span class="prompt">$</span> <span class="cmd">echo "deb [trusted=yes] https://apt.electricentropy.eu stable main" \<br> | sudo tee /etc/apt/sources.list.d/entropymon.list</span><br>
|
||||
<span class="prompt">$</span> <span class="cmd">sudo apt update && sudo apt install entropymon</span>
|
||||
</div></div>
|
||||
|
||||
<div class="term-box"><div class="term-header"><div class="term-dot r"></div><div class="term-dot y"></div><div class="term-dot g"></div><span class="term-title">pip (any Linux)</span></div>
|
||||
<div class="term-body">
|
||||
<span class="prompt">$</span> <span class="cmd">pip install entropymon</span><br>
|
||||
<span class="prompt">$</span> <span class="cmd">pip install entropymon[nvidia]</span> <span class="comment"># + GPU</span>
|
||||
</div></div>
|
||||
|
||||
<div class="term-box"><div class="term-header"><div class="term-dot r"></div><div class="term-dot y"></div><div class="term-dot g"></div><span class="term-title">run</span></div>
|
||||
<div class="term-body">
|
||||
<span class="prompt">$</span> <span class="cmd">entropymon</span><br>
|
||||
<span class="prompt">$</span> <span class="cmd">entropymon --no-intro</span><br>
|
||||
<span class="prompt">$</span> <span class="cmd">entropymon --lang pl</span>
|
||||
</div></div>
|
||||
</section>
|
||||
|
||||
<section id="features">
|
||||
<h2><span data-i18n="en" class="active">Features</span><span data-i18n="pl">Funkcje</span><span data-i18n="de">Funktionen</span><span data-i18n="es">Caracteristicas</span><span data-i18n="fr">Fonctionnalites</span><span data-i18n="uk">Funkcii</span><span data-i18n="zh">Gongneng</span></h2>
|
||||
<div class="features">
|
||||
<div class="feature"><div class="feature-icon">███</div><h3>CPU</h3><p data-i18n="en" class="active">Per-core gradient bars, sparklines, frequency, load avg. User/sys/iowait breakdown.</p><p data-i18n="pl">Paski na rdzen, sparkline, czestotliwosc, obciazenie. Rozklad user/sys/iowait.</p></div>
|
||||
<div class="feature"><div class="feature-icon">⚙</div><h3>GPU</h3><p data-i18n="en" class="active">NVIDIA + AMD. VRAM breakdown, process list, temp, power, clocks, encoder/decoder.</p><p data-i18n="pl">NVIDIA + AMD. Uzycie VRAM, procesy GPU, temp, moc, zegary, enkoder/dekoder.</p></div>
|
||||
<div class="feature"><div class="feature-icon">🔍</div><h3><span data-i18n="en" class="active">Processes</span><span data-i18n="pl">Procesy</span></h3><p data-i18n="en" class="active">Sort, filter, tree view, kill, renice. IO per process. PID-tracked selection.</p><p data-i18n="pl">Sortuj, filtruj, drzewo, kill, renice. IO na proces. Sledzenie po PID.</p></div>
|
||||
<div class="feature"><div class="feature-icon">🌐</div><h3><span data-i18n="en" class="active">Network</span><span data-i18n="pl">Siec</span></h3><p data-i18n="en" class="active">Per-interface RX/TX, sparklines, errors, drops, connections.</p><p data-i18n="pl">Rate per interfejs, sparkline, bledy, utracone, polaczenia.</p></div>
|
||||
<div class="feature"><div class="feature-icon">🖥</div><h3><span data-i18n="en" class="active">Disk & IO</span><span data-i18n="pl">Dysk & IO</span></h3><p data-i18n="en" class="active">Partition bars, R/W rates with IOPS, IO sparklines.</p><p data-i18n="pl">Paski partycji, R/W z IOPS, sparkline IO.</p></div>
|
||||
<div class="feature"><div class="feature-icon">🌡</div><h3><span data-i18n="en" class="active">Sensors</span><span data-i18n="pl">Czujniki</span></h3><p data-i18n="en" class="active">Temps with mini-bars, fans, battery with time remaining.</p><p data-i18n="pl">Temperatury z mini-paskami, wentylatory, bateria.</p></div>
|
||||
<div class="feature"><div class="feature-icon">👤</div><h3><span data-i18n="en" class="active">Users</span><span data-i18n="pl">Uzytkownicy</span></h3><p data-i18n="en" class="active">Per-user CPU/MEM stats, logged-in status, remote host.</p><p data-i18n="pl">Statystyki CPU/MEM na uzytkownika, status zalogowania.</p></div>
|
||||
<div class="feature"><div class="feature-icon">🇧🇱</div><h3>i18n</h3><p>EN, PL, DE, ES, FR, UK, ZH</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="keys">
|
||||
<h2><span data-i18n="en" class="active">Keyboard Shortcuts</span><span data-i18n="pl">Skroty klawiszowe</span></h2>
|
||||
<div class="term-box"><div class="term-body">
|
||||
<span class="output">NAV</span> <span class="warn">j/k</span> <span class="comment">up/down</span> <span class="warn">PgDn/Up</span> <span class="comment">x20</span> <span class="warn">Home/End</span><br>
|
||||
<span class="output">SORT</span> <span class="warn">c</span><span class="comment">pu</span> <span class="warn">m</span><span class="comment">em</span> <span class="warn">p</span><span class="comment">id</span> <span class="warn">n</span><span class="comment">ame</span> <span class="warn">i</span><span class="comment">o</span> <span class="warn">r</span><span class="comment">everse</span><br>
|
||||
<span class="output">PROC</span> <span class="warn">T</span><span class="comment">ERM</span> <span class="warn">K</span><span class="comment">ILL</span> <span class="warn">F9</span><span class="comment">menu</span> <span class="warn">d</span><span class="comment">etails</span> <span class="warn">+/-</span><span class="comment">nice</span> <span class="warn">/</span><span class="comment">filter</span> <span class="warn">t</span><span class="comment">ree</span><br>
|
||||
<span class="output">MISC</span> <span class="warn">h</span><span class="comment">elp</span> <span class="warn">L</span><span class="comment">ang</span> <span class="warn">q</span><span class="comment">uit</span> <span class="warn">Esc</span><span class="comment">clear</span>
|
||||
</div></div>
|
||||
</section>
|
||||
|
||||
<section id="products">
|
||||
<h2><span data-i18n="en" class="active">More from Electric Entropy Lab</span><span data-i18n="pl">Wiecej od Electric Entropy Lab</span></h2>
|
||||
<div class="ads-wrapper">
|
||||
<div class="ads-track" id="adsTrack">
|
||||
|
||||
<a href="https://opisomat.eu" target="_blank" rel="noopener" class="ad-card opisomat">
|
||||
<div class="ad-banner"><div class="ad-banner-glow"></div><div class="ad-banner-icon">✍️</div></div>
|
||||
<div class="ad-body">
|
||||
<div class="ad-tag">AI Product Descriptions</div>
|
||||
<div class="ad-name">Opisomat</div>
|
||||
<div class="ad-desc"><span data-i18n="en" class="active">From EAN to description. Without thinking. AI generates unique product descriptions from barcodes. 7-step pipeline: research, extract, aggregate, translate, stylize. For Allegro, OLX, e-commerce.</span><span data-i18n="pl">Od EAN do opisu. Bez myslenia. AI generuje unikalne opisy produktow z kodow kreskowych. 7-etapowy pipeline. Dla Allegro, OLX, e-commerce.</span></div>
|
||||
<div class="ad-badges"><span class="ad-badge">AI</span><span class="ad-badge">EAN</span><span class="ad-badge">Allegro</span><span class="ad-badge">OLX</span></div>
|
||||
<span class="ad-cta">opisomat.eu →</span>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="https://miniatury24.pl" target="_blank" rel="noopener" class="ad-card miniatury">
|
||||
<div class="ad-banner"><div class="ad-banner-glow"></div><div class="ad-banner-icon">📷</div></div>
|
||||
<div class="ad-body">
|
||||
<div class="ad-tag">Auction Photo Generator</div>
|
||||
<div class="ad-name">Miniatury24</div>
|
||||
<div class="ad-desc"><span data-i18n="en" class="active">Generate professional miniature photos for auctions. Perfect thumbnails for Allegro, eBay, OLX. Automatic image processing, resize, and optimization for listings.</span><span data-i18n="pl">Generuj profesjonalne zdjecia miniatur na aukcje. Idealne miniaturki na Allegro, eBay, OLX. Automatyczna obrobka, skalowanie i optymalizacja.</span></div>
|
||||
<div class="ad-badges"><span class="ad-badge">Photos</span><span class="ad-badge">Auctions</span><span class="ad-badge">Allegro</span><span class="ad-badge">Auto</span></div>
|
||||
<span class="ad-cta">miniatury24.pl →</span>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="https://pulse.electricentropy.eu" target="_blank" rel="noopener" class="ad-card spectre">
|
||||
<div class="ad-banner"><div class="ad-banner-glow"></div><div class="ad-banner-icon">🔒</div></div>
|
||||
<div class="ad-body">
|
||||
<div class="ad-tag">Encrypted Communication</div>
|
||||
<div class="ad-name">Spectre Chat</div>
|
||||
<div class="ad-desc"><span data-i18n="en" class="active">End-to-end encrypted messaging platform. Zero-knowledge architecture. No metadata, no tracking, no compromise. Your conversations, truly private.</span><span data-i18n="pl">Platforma szyfrowanej komunikacji end-to-end. Architektura zero-knowledge. Bez metadanych, bez sledzenia. Twoje rozmowy, naprawde prywatne.</span></div>
|
||||
<div class="ad-badges"><span class="ad-badge">E2E</span><span class="ad-badge">Zero-knowledge</span><span class="ad-badge">Private</span></div>
|
||||
<span class="ad-cta">Spectre Chat →</span>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="https://nes.electricentropy.eu" target="_blank" rel="noopener" class="ad-card nes">
|
||||
<div class="ad-banner"><div class="ad-banner-glow"></div><div class="ad-banner-icon">📖</div></div>
|
||||
<div class="ad-body">
|
||||
<div class="ad-tag">Interactive Fiction</div>
|
||||
<div class="ad-name">NeverEnding Story</div>
|
||||
<div class="ad-desc"><span data-i18n="en" class="active">Immersive interactive fiction platform. Dark Fantasy, Sci-Fi, Horror, Romance, Thriller. Atmospheric particle effects, parallax storytelling. Choose your adventure.</span><span data-i18n="pl">Immersyjna platforma interaktywnej fikcji. Dark Fantasy, Sci-Fi, Horror, Romans, Thriller. Efekty czastek, paralaksa. Wybierz swoja przygode.</span></div>
|
||||
<div class="ad-badges"><span class="ad-badge">Stories</span><span class="ad-badge">Interactive</span><span class="ad-badge">6 genres</span></div>
|
||||
<span class="ad-cta">Read Now →</span>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div class="ads-nav">
|
||||
<button onclick="scrollAds(-1)" aria-label="Previous">←</button>
|
||||
<button onclick="scrollAds(1)" aria-label="Next">→</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<p><span style="color:var(--green)">entropymon</span> © 2026 <a href="https://electricentropy.eu">Electric Entropy Lab</a> | <a href="https://git.electricentropy.eu/ar3dh3l/entropymon">Source</a> | <a href="https://pypi.org/project/entropymon/">PyPI</a> | MIT</p>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// i18n: detect browser language, apply
|
||||
(function(){
|
||||
var supported = ['en','pl','de','es','fr','uk','zh'];
|
||||
var lang = (navigator.language || navigator.userLanguage || 'en').toLowerCase().split('-')[0];
|
||||
if (supported.indexOf(lang) === -1) lang = 'en';
|
||||
document.documentElement.lang = lang;
|
||||
var els = document.querySelectorAll('[data-i18n]');
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
var el = els[i];
|
||||
if (el.getAttribute('data-i18n') === lang) {
|
||||
el.classList.add('active');
|
||||
} else {
|
||||
el.classList.remove('active');
|
||||
}
|
||||
}
|
||||
// fallback: if no translation for this lang, show english
|
||||
var groups = {};
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
var p = els[i].parentNode;
|
||||
if (!groups[p]) groups[p] = [];
|
||||
// not a real grouping but check siblings
|
||||
}
|
||||
// Simple: if nothing active in parent, activate en
|
||||
var allParents = new Set();
|
||||
for (var i = 0; i < els.length; i++) allParents.add(els[i].parentNode);
|
||||
allParents.forEach(function(parent){
|
||||
var children = parent.querySelectorAll('[data-i18n]');
|
||||
var hasActive = false;
|
||||
for (var j = 0; j < children.length; j++) {
|
||||
if (children[j].classList.contains('active') && children[j].parentNode === parent) hasActive = true;
|
||||
}
|
||||
if (!hasActive) {
|
||||
for (var j = 0; j < children.length; j++) {
|
||||
if (children[j].getAttribute('data-i18n') === 'en' && children[j].parentNode === parent) {
|
||||
children[j].classList.add('active');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
// Ad carousel scroll
|
||||
function scrollAds(dir) {
|
||||
var track = document.getElementById('adsTrack');
|
||||
var card = track.querySelector('.ad-card');
|
||||
if (!card) return;
|
||||
var w = card.offsetWidth + 16;
|
||||
track.scrollBy({ left: dir * w, behavior: 'smooth' });
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
3
robots.txt
Normal file
3
robots.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Sitemap: https://entropymon.electricentropy.eu/sitemap.xml
|
||||
9
sitemap.xml
Normal file
9
sitemap.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://entropymon.electricentropy.eu/</loc>
|
||||
<lastmod>2026-03-25</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
Reference in New Issue
Block a user