Compare commits

...

13 Commits

Author SHA1 Message Date
2b25819027 Rozšíření hastagu + db date 2026-01-06 21:24:29 +01:00
c895b0b85d new data music 2026-01-06 20:29:15 +01:00
c9ed64b047 březen 2025-12-30 13:59:52 +01:00
c55a909f0f skoro březen 2025-12-26 13:48:47 +01:00
501d794001 úpravy grafiky 2025-12-26 07:50:33 +01:00
78f928b4b8 unor komplet 2025-12-25 18:46:54 +01:00
5d2cf2788c oprava linku, rozšíření DB, Full web(bez db) 2025-12-25 00:51:40 +01:00
f8762aa023 Leden komplet 2025-12-24 19:09:32 +01:00
73735b1baa komplet grafika 2025-12-24 17:51:16 +01:00
36bc232106 nová sekce about, nové grafické rozhraní 2025-12-24 01:55:16 +01:00
ea40bbb8a0 nasazen ostrý provoz, social, propagace 2025-12-23 21:38:48 +01:00
1e6a38f6b0 Databaze alb, změna stylu do tmavého, historie alb 2025-12-22 22:10:16 +01:00
770a361676 výzva začíná 2025-12-22 19:03:54 +01:00
14 changed files with 1851 additions and 2 deletions

8
.htaccess Normal file
View File

@@ -0,0 +1,8 @@
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Přesměrování na HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

View File

@@ -1,3 +1,8 @@
# musicCalendar
# 💿 Každý den jedno album. 🎸 Zažíj numetal a grunge každý den.
## 💪 Zvládneš tuto výzvu v roce 2026?
## 🤟 Ukaž že na to máš .
Odkaz na [výzvu](https://music.lukan.cz)
Na každý den jedno album. Numetal či grunge s odkazy na Tidal a Spotify.
Do konce roku jedeme v testovacím režimu, od 1.1.2026 začínáme na ostro.

217
about.html Normal file
View File

@@ -0,0 +1,217 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>O projektu a další žvásty</title>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://music.lukan.cz/" />
<meta property="og:title" content="Hudební Výzva 2026: Grunge & Nu-Metal" />
<meta
property="og:description"
content="Každý den jedno zásadní album. Zvládneš to se mnou? 365 dní, 365 desek."
/>
<meta
property="og:image"
content="https://music.lukan.cz/img/vyzva-EDIT.jpg"
/>
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="Hudební Výzva 2026: Grunge & Nu-Metal"
/>
<meta
name="twitter:description"
content="Každý den jedno zásadní album. Přidej se!"
/>
<meta
name="twitter:image"
content="https://music.lukan.cz/img/vyzva-EDIT.jpg"
/>
<meta
name="Hudební kalendář"
content="Každý den jedno album. Zažíj numetal a grunge každý den."
/>
<link rel="stylesheet" href="styleabout.css" />
<link rel="shortcut icon" href="img/electric-guitar_12494348.png" />
<link rel="stylesheet" href="style.css" />
<style>
/* Specifické styly pro textovou stránku */
.about-container {
max-width: 800px;
margin: 0 auto;
text-align: left;
background: white;
padding: 40px;
border-radius: 10px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
line-height: 1.6;
}
.about-container h1 {
text-align: center;
text-transform: uppercase;
color: #d32f2f; /* Trochu agresivní červená */
font-size: 2.5em;
margin-bottom: 10px;
}
.subtitle {
text-align: center;
color: #666;
font-style: italic;
margin-bottom: 40px;
font-size: 1.2em;
}
.about-section {
margin-bottom: 30px;
border-bottom: 1px solid #eee;
padding-bottom: 20px;
}
.about-section:last-child {
border-bottom: none;
}
h3 {
color: #222;
font-weight: 900; /* Extra tučné */
}
.back-btn {
display: block;
width: fit-content;
margin: 40px auto 0;
text-align: center;
}
footer {
text-align: center;
}
</style>
</head>
<body>
<div class="about-container">
<h1>🎸 Zažij numetal a grunge každý den, po celý rok. 💿</h1>
<p class="subtitle">
<strong
>💿 Každý den jedno album. 💪 Zvládneš tuto výzvu v roce 2026? 🤟 Ukaž
že na to máš.</strong
>
</p>
<div class="about-section">
<h3>O projektu</h3>
<p>
Všimli jste si, jak nás algoritmy Spotify a dalších hudebních stream
služeb neustále točí v kruhu? Nabízejí nám pořád to samé, co už známe.
Řekl jsem si to není pro mne. Chtěl jsem se vrátit k poslechu od
první do poslední skladby. A tak vznikl můj projekt: Hudební výzva
2026.
</p>
<br />
<p>
Každý den jedno album. To nejšpinavější a nejupřímnější, co hudba za
posledních 30 let nabídla: Grunge a Nu-Metal.
</p>
<p>
Mnoho lidí tyto dva žánry odděluje. Grunge je pro ně "ta stará hudba v
kostkovaných košilích" a Nu-Metal jsou "ti týpci v kšiltovkách a
širokých kalhotách". Ale když se zaposloucháte pozorně, zjistíte, že
jsou to pokrevní bratři.
</p>
<br />
<p>
Když Seattle zhasnul světla Grunge (Nirvana, Soundgarden, Pearl Jam)
na začátku 90. let smetl nablýskaný rock. Byla to hudba deště, deprese
a reality. Žádná póza, jen syrová emoce a kytary, které zněly jako by
je někdo tahal bahnem.
</p>
<p>
Jenže v polovině 90. let grunge s smrtí Kurta Cobaina a rozpadem scény
utichl. Vzniklo ticho. A v tom tichu se začalo rodit něco nového,
agresivnějšího.
</p>
<br />
<p>
Nástup Nu-Metalu: Vzteklý mladší brácha Zatímco grunge byl o smutku a
apatii, Nu-Metal (Korn, Linkin Park, Limp Bizkit, Slipknot) byl o
čistém vzteku. Vzali ty podladěné, těžké kytary z grunge, ale místo
pomalého tempa přidali rytmiku hip-hopu a elektroniku.
</p>
<p>
Kytarista Alice in Chains Jerry Cantrell nebo soundgardenovský Kim
Thayil položili základy pro zvuk, který později kapely jako Korn
dotáhly do extrému sedmistrunnými kytarami.
</p>
<br />
<p>
Ta energie je nenahraditelná. V dnešní době vyžehleného popu chybí ta
lidská nedokonalost a dravost.
</p>
<br />
<p>
Vytvořil jsem jednoduchou webovou aplikaci, která mi (a teď i vám)
každý den servíruje jedno zásadní album z této éry. Někdy je to
depresivní grungeová balada, jindy agresivní nu-metalová smršť.
</p>
<br />
<p>
Zvu vás, abyste do toho šli se mnou. Nemusíte hledat, co si pustit.
Stačí otevřít aplikaci a nechat se vést.
</p>
<br />
<p>
(PS: Aplikaci jsem si naprogramoval sám, tak buďte shovívaví, jde
hlavně o tu hudbu! 🤘 Budu velmi rád za sdílení 🙏)
</p>
</div>
<div class="back-btn">
<a href="index.html" class="btn-main" style="text-decoration: none"
>🎸 Zpět na hudbu</a
>
</div>
<div class="footer-section>">
<footer>
<p style="padding-top: 30px;">Líbí se ti výběr? Sleduj mě:</p>
<div class="socials">
<a
href="https://bsky.app/profile/kankys.bsky.social"
target="_blank" class="links"
>Bluesky</a
>
<br />
<a href="https://codeberg.org/Kankys" target="_blank" class="links">Codeberg</a>
<br />
<a
href="https://lukaskanka.cz/index/about/index.html"
target="_blank" class="links"
>Pokud chčeš podpořit tento projekt veškeré informace najdeš
zde.</a
>
<p class="hastag">
#GrungeMetalRok #HudebniVyzva #NuMetal #AlbumDne #TipNaHudbu
#DnesPosloucham #Tidal #Spotify #KazdyDenJednoAlbum
</p>
</div>
<p class="copyright">&copy; 2025 Tvůj Hudební Kurátor Kankys</p>
<p style="font-size: 0.8em; margin-top: 10px">
<a href="gdpr.html" class="links"
>Ochrana soukromí a jiné žvásty (GDPR)</a
>
</p>
<section class="photo">
<img
id="vyzva"
class="zoom"
src="./img/vyzva-EDIT.jpg"
alt="Výzva"
/>
</section>
<a href="https://www.facebook.com/groups/1802260010492466" target="_blank" style="color: rgb(88, 88, 227);"><h3>FACEBOOK</h3></a>
</footer>
</div>
</div>
<script src="scriptabout.js"></script>
</body>
</html>

96
gdpr.html Normal file
View File

@@ -0,0 +1,96 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GDPR | Nikoho nezajímáš</title>
<link rel="stylesheet" href="style.css">
<style>
/* Specifické styly pro textovou stránku */
.gdpr-container {
max-width: 800px;
margin: 0 auto;
text-align: left;
background: white;
padding: 40px;
border-radius: 10px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
line-height: 1.6;
}
.gdpr-container h1 {
text-align: center;
text-transform: uppercase;
color: #d32f2f; /* Trochu agresivní červená */
font-size: 2.5em;
margin-bottom: 10px;
}
.subtitle {
text-align: center;
color: #666;
font-style: italic;
margin-bottom: 40px;
font-size: 1.2em;
}
.gdpr-section {
margin-bottom: 30px;
border-bottom: 1px solid #eee;
padding-bottom: 20px;
}
.gdpr-section:last-child {
border-bottom: none;
}
h3 {
color: #222;
font-weight: 900; /* Extra tučné */
}
.back-btn {
display: block;
width: fit-content;
margin: 40px auto 0;
text-align: center;
}
</style>
</head>
<body>
<div class="gdpr-container">
<h1>GDPR & Soukromí</h1>
<p class="subtitle">Aneb: "We don't care about your data, we care about the music."</p>
<div class="gdpr-section">
<h3>1. Kdo jsem?</h3>
<p>Jsem Lukáš. Mám rád hudbu, kódování a klid. Nejsem korporát, nemám právní oddělení a nemám zájem tě špehovat. Mark Zuckerberg o tobě ví všechno, já nevím nic. A tak to zůstane.</p>
</div>
<div class="gdpr-section">
<h3>2. Sbírám Cookies?</h3>
<p><strong>Ne.</strong> Jediné cookies, které mě zajímají, jsou ty čokoládové, co jsem snědl, když jsem tuhle stránku programoval ve tři ráno. Limp Bizkit sice zpívali "Do it all for the Nookie", ale nedělám to pro Cookie.</p>
<p>Tato stránka nepoužívá Google Analytics, Facebook Pixel, ani žádné jiné šmírovací nástroje. </p>
</div>
<div class="gdpr-section">
<h3>3. Co o tobě vím?</h3>
<p>Vlastně nic. Tato aplikace běží ve tvém prohlížeči. </p>
<p><em>Technická vsuvka pro rýpaly:</em> Web běží na běžném hostingu (Lukan.cz). Hostingové servery si ze zákona a z bezpečnostních důvodů mohou ukládat do logů tvoji IP adresu, aby věděly, kam tu stránku poslat. Já ty logy nečtu. Je v nich nuda.</p>
</div>
<div class="gdpr-section">
<h3>4. Spotify, Tidal a ti druzí</h3>
<p>Na webu jsou tlačítka, která vedou na Spotify, Tidal. Jakmile na ně klikneš a odejdeš z mého webu, jsi v jejich teritoriu. </p>
<p>Oni už data sbírají. Vědí, že tajně posloucháš Britney Spears, i když tvrdíš, že jsi drsňák. To už je mezi tebou a jimi. Já za to nemůžu.</p>
</div>
<div class="gdpr-section">
<h3>5. Kontakt</h3>
<p>Pokud máš pocit, že jsem narušil tvou auru nebo máš dotaz:</p>
<p>📧 Napiš mi. <a href="https://lukaskanka.cz/index/about/index.html" target="_blank" class="links">Kontakt</a> najdeš na mém hlavním <a href="https://lukaskanka.cz/index/about/index.html" target="_blank" class="links">webu</a>. Nebo na <a href="https://bsky.app/profile/kankys.bsky.social" target="_blank" class="links">Bluesky</a>. Nebo si prostě pusť Nirvanu a neřeš to.</p>
</div>
<div class="back-btn">
<a href="index.html" class="btn-main" style="text-decoration: none;">🎸 Zpět na hudbu</a>
</div>
</div>
</body>
</html>

BIN
img/4525586.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
img/nu-metal-wallpapers.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

BIN
img/so0naj17qrh91.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
img/vyzva-EDIT.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

70
index.html Normal file
View File

@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<title>Zažij numetal a grunge každý den, po celý rok. 💿</title>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://music.lukan.cz/" />
<meta property="og:title" content="Hudební Výzva 2026: Grunge & Nu-Metal" />
<meta
property="og:description"
content="Každý den jedno zásadní album. Zvládneš to se mnou? 365 dní, 365 desek."
/>
<meta
property="og:image"
content="https://music.lukan.cz/img/vyzva-EDIT.jpg"
/>
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="Hudební Výzva 2026: Grunge & Nu-Metal"
/>
<meta
name="twitter:description"
content="Každý den jedno zásadní album. Přidej se!"
/>
<meta
name="twitter:image"
content="https://music.lukan.cz/img/vyzva-EDIT.jpg"
/>
<meta
name="Hudební kalendář"
content="Každý den jedno album. Zažíj numetal a grunge každý den."
/>
<link rel="stylesheet" href="style.css" />
<link rel="shortcut icon" href="img/electric-guitar_12494348.png" />
</head>
<body>
<h1>🎸 Zažij numetal a grunge každý den, po celý rok. 💿</h1>
<p>
<strong
>💿 Každý den jedno album. 💪 Zvládneš tuto výzvu v roce 2026? 🤟 Ukaž
že na to máš.</strong
>
</p>
<div id="zobrazeni-alba"></div>
<div style="margin-top: 30px; margin-bottom: 20px">
<button id="btn-archiv" class="btn-main">
📂 Zobrazit předchozí alba
</button>
</div>
<div id="archiv-container" class="archiv-grid"></div>
<div style="margin-top: 30px; margin-bottom: 20px">
<button id="btn-footer" class="btn-footer"><br/>
<a href="gdpr.html" class="link-footer"
>Ochrana soukromí a jiné žvásty (GDPR)
<p class="copyright">&copy; 2025 Tvůj Hudební Kurátor Kankys</p></a
>
</button>
</div>
<section class="photo">
<img id="vyzva" class="zoom" src="./img/vyzva-EDIT.jpg" alt="Výzva" />
</section>
<br>
<a href="https://www.facebook.com/groups/1802260010492466" target="_blank" style="color: rgb(88, 88, 227);"><h3>FACEBOOK</h3></a>
<script src="musicData.js"></script>
<script src="script.js"></script>
</body>
</html>

1174
musicData.js Normal file

File diff suppressed because it is too large Load Diff

101
script.js Normal file
View File

@@ -0,0 +1,101 @@
// --- 2. ZJIŠTĚNÍ DNEŠNÍHO DATA ---
// objekt s aktuálním časem
const datum = new Date();
// rok, měsíc a den podle LOKÁLNÍHO času počítače
const rok = datum.getFullYear();
// Leden je v JS 0, proto přičíst 1.
// .padStart(2, '0') zajistí, že před jednociferné číslo se dá nula (např. "05")
const mesic = String(datum.getMonth() + 1).padStart(2, '0');
const den = String(datum.getDate()).padStart(2, '0');
// formát "RRRR-MM-DD"
const dnes = `${rok}-${mesic}-${den}`;
// výpis do konzole
// console.log("Opravené datum (lokální):", dnes);
// Pro testování:
// const dnes = "2025-12-24";
console.log("Dnes je:", dnes);
// --- 3. HLEDÁNÍ V SEZNAMU ---
// Funkce .find() projde pole 'kalendarAlb' a hledá shodu data
const dnesniAlbum = kalendarAlb.find(album => album.datum === dnes);
// --- 4. ZOBRAZENÍ NA STRÁNCE ---
const vystup = document.getElementById('zobrazeni-alba');
if (dnesniAlbum) {
// Dnešní album
vystup.innerHTML = `
<div class="album-card">
<div class="datum">🗓️ ${dnesniAlbum.datum}</div>
<img src="${dnesniAlbum.img}" alt="Obal alba">
<h2>${dnesniAlbum.umelec} - ${dnesniAlbum.nazev}</h2>
<p><strong>Vyšlo</strong> ${dnesniAlbum.vydano}</p>
<p>${dnesniAlbum.recenze}</p>
<a href="${dnesniAlbum.tidal}" target="_blank" class="btn tidal">Tidal</a> - <a href="${dnesniAlbum.spotify}" target="_blank" class="btn spotify">Spotify</a>
<p><a href="./about.html" class="btn about">👉🏻 O projektu 👈🏻</a></p>
</div>
`;
} else {
// Alert bez alba
vystup.innerHTML = `
<div class="album-card">
<h3>Dnes není v plánu žádné album 🎵</h3>
<p>Zkus se podívat zítra!</p>
</div>
`;
}
// --- 6. LOGIKA PRO ARCHIV (Předchozí alba) ---
const btnArchiv = document.getElementById('btn-archiv');
const divArchiv = document.getElementById('archiv-container');
btnArchiv.addEventListener('click', () => {
// A. Zkontrolujeme, jestli je archiv už otevřený
if (divArchiv.innerHTML !== "") {
divArchiv.innerHTML = ""; // Pokud ano, vymažeme ho (zavřeme)
btnArchiv.textContent = "📂 Zobrazit předchozí alba";
return; // Ukončíme funkci
}
// B. Vyfiltrujeme alba, která jsou starší než dnešek
// (Předpokládá, že proměnná 'dnes' a 'kalendarAlb' existují z předchozího kódu)
const minulaAlba = kalendarAlb.filter(album => album.datum < dnes);
// C. Seřadíme je, aby nahoře bylo to nejnovější z minulosti
minulaAlba.sort((a, b) => b.datum.localeCompare(a.datum));
// D. Pokud žádná minulá alba nejsou
if (minulaAlba.length === 0) {
divArchiv.innerHTML = "<p>Zatím tu žádná historie není. Přijď zítra! ⏳</p>";
return;
}
// E. Vykreslíme kartičky
let htmlObsah = "";
minulaAlba.forEach(album => {
htmlObsah += `
<div class="archiv-item">
<div class="datum">${album.datum}</div>
<img src="${album.img}" alt="${album.nazev}">
</a>
<h3>${album.umelec}</h3>
<div>${album.nazev}</div>
</div>
`;
});
divArchiv.innerHTML = htmlObsah;
btnArchiv.textContent = "❌ Zavřít archiv";
});

10
scriptabout.js Normal file
View File

@@ -0,0 +1,10 @@
// --- 5. Photo Gallery -> section (zoom)
const img = document.querySelector(".zoom");
img.addEventListener("mouseenter", () => {
img.style.transform = "scale(10.2)";
});
img.addEventListener("mouseleave", () => {
img.style.transform = "scale(1)";
});

168
style.css Normal file
View File

@@ -0,0 +1,168 @@
body {
font-family: sans-serif;
text-align: center;
padding: 50px;
background-image: url(./img/4525586.jpg);
/* Tímto zajistíte, že se tapeta při scrollování nehýbe */
background-attachment: fixed;
/* Tímto zakážete opakování obrázku "dokola" */
background-repeat: no-repeat;
/* DOPORUČENÉ: Roztáhne obrázek přes celou obrazovku */
background-size: cover;
/* Vycentruje obrázek, aby byl vždy uprostřed */
background-position: center;
}
.album-card {
background: grey;
padding: 20px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
display: inline-block;
max-width: 400px;
}
img {
width: 100%;
border-radius: 5px;
margin-bottom: 15px;
}
h1 {
color: black;
}
h2 {
color: black;
}
.smile {
color: black;
}
.datum {
color: red;
font-size: 0.9em;
margin-bottom: 10px;
font-weight: bold;
}
.hastag {
color: black;
}
#vyzva {
width: 7%;
height: auto;
}
/* Styl pro tlačítka streamovacích služeb */
.btn {
display: inline-block; /* Aby měly rozměry */
text-decoration: none; /* Zruší podtržení */
padding: 10px 20px; /* Vnitřní odsazení (prostor kolem textu) */
border-radius: 25px; /* Kulaté rohy */
color: white; /* Bílé písmo */
font-weight: bold;
margin: 5px; /* Mezera mezi tlačítky */
transition: transform 0.2s; /* Animace při najetí */
}
/* Barvy pro konkrétní služby */
.tidal {
background-color: #000000;
} /* Černá pro Tidal */
.spotify {
background-color: #1db954;
} /* Zelená pro Spotify */
.about {
background-color: #333;
} /* Hmědá o projektu */
.btn:hover {
transform: scale(1.05); /* Při najetí myší se tlačítko trochu zvětší */
opacity: 0.9;
}
@media (max-width: 768px) {
body {
padding: 10px;
}
/* .album-card {
width: 90%;
margin: 0 auto;
padding: 20px;
background-color: #f0f0f0;
} */
}
/*Archív alb */
/* Styl pro hlavní tlačítko archivu */
.btn-main {
background-color: #333;
color: white;
padding: 15px 30px;
border: none;
border-radius: 50px;
font-size: 1.1em;
cursor: pointer;
transition: background 0.3s;
font-weight: bold;
}
.btn-main:hover {
background-color: #555;
}
/* Mřížka pro archiv (aby byly kartičky vedle sebe) */
.archiv-grid {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 20px;
max-width: 1000px;
margin: 0 auto;
}
/* Menší kartička pro archiv */
.archiv-item {
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
width: 250px; /* Pevná šířka */
text-align: center;
}
.archiv-item img {
width: 100%;
border-radius: 4px;
margin-bottom: 10px;
}
.archiv-item h3 {
font-size: 1em;
margin: 5px 0;
}
.archiv-item .datum {
font-size: 0.8em;
color: #888;
}
.btn-footer {
/* background-color: #333;
color: white;
padding: 15px 30px; */
border: none;
border-radius: 20px;
/* font-size: 1.1em; */
cursor: pointer;
transition: background 0.3s;
font-weight: bold;
background-color: violet;
}
.link-footer {
text-decoration: none; /* Zruší podtržení */
color: black;
}
/* odkazy */
.links {
color: blueviolet; text-decoration: none;
}