Files
oscloud-news/public/posts/vikunja-na-oscloud/index.html
T

394 lines
27 KiB
HTML

<!DOCTYPE html>
<html lang="en" dir="auto" data-theme="auto">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow">
<title>Vikunja na OSCloud: todo aplikace, kterou si nemusíte hostovat sami | Oscloud News</title>
<meta name="keywords" content="vikunja, todo, produktivita, self-hosted, oscloud">
<meta name="description" content="Todo aplikací je mraky. Většina běžných (Todoist, Microsoft To Do, Trello, Asana) ale běží na cizích serverech, má různé &ldquo;free&rdquo; limity a vaše úkoly — včetně těch osobních a pracovních — leží někde, kam nevidíte. Vikunja je open-source alternativa, kterou na OSCloud provozujeme pro komunitu na adrese todo.oscloud.cz. Tenhle článek je o tom, co Vikunja umí a jak ji používat přes OSCloud — žádné dockery, žádné instalace.
Co je Vikunja
Vikunja je open-source správa úkolů a projektů. V základu je to klasická todo aplikace — vytvoříte si projekt, hodíte do něj úkoly, nastavíte termíny, štítky, priority. Navíc to ale umí věci, kvůli kterým lidi obvykle platí Todoist nebo Trello: kanban nástěnky, Gantt diagramy, tabulkové zobrazení, filtry, sdílení projektů s dalšími uživateli, komentáře k úkolům, přílohy.">
<meta name="author" content="oscloud">
<link rel="canonical" href="http://localhost:1313/posts/vikunja-na-oscloud/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.01de0cf7a606abfce8ed6089ab89e1538996376aac8ff05d3c7d2340f377b07c.css" integrity="sha256-Ad4M96YGq/zo7WCJq4nhU4mWN2qsj/BdPH0jQPN3sHw=" rel="preload stylesheet" as="style">
<link rel="icon" href="http://localhost:1313/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="http://localhost:1313/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="http://localhost:1313/favicon-32x32.png">
<link rel="apple-touch-icon" href="http://localhost:1313/apple-touch-icon.png">
<link rel="mask-icon" href="http://localhost:1313/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="http://localhost:1313/posts/vikunja-na-oscloud/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
color-scheme: dark;
}
.list {
background: var(--theme);
}
.toc {
background: var(--entry);
}
}
@media (prefers-color-scheme: light) {
.list::-webkit-scrollbar-thumb {
border-color: var(--code-bg);
}
}
</style>
</noscript>
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.querySelector("html").dataset.theme = 'dark';
} else if (localStorage.getItem("pref-theme") === "light") {
document.querySelector("html").dataset.theme = 'light';
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.querySelector("html").dataset.theme = 'dark';
} else {
document.querySelector("html").dataset.theme = 'light';
}
</script><script defer src="https://analytics.oscloud.cz/script.js" data-website-id="70aaf052-385c-41fb-9cfe-d3b3c6f54f2d"></script>
</head>
<body id="top">
<header class="header">
<nav class="nav">
<div class="logo">
<a href="http://localhost:1313/" accesskey="h" title="Oscloud News (Alt + H)">
<img src="http://localhost:1313/logo.png" alt="" aria-label="logo"
height="32">Oscloud News</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="http://localhost:1313/" title="🇨🇿">
<span>🇨🇿</span>
</a>
</li>
<li>
<a href="http://localhost:1313/archives/" title="Archiv">
<span>Archiv</span>
</a>
</li>
<li>
<a href="http://localhost:1313/search/" title="Vyhledávání">
<span>Vyhledávání</span>
</a>
</li>
<li>
<a href="http://localhost:1313/tags/" title="Tagy">
<span>Tagy</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
<div class="breadcrumbs"><a href="http://localhost:1313/">Home</a>&nbsp;»&nbsp;<a href="http://localhost:1313/posts/">Posts</a></div>
<h1 class="post-title entry-hint-parent">
Vikunja na OSCloud: todo aplikace, kterou si nemusíte hostovat sami
</h1>
<div class="post-meta"><span title='2026-04-24 00:00:00 +0000 UTC'>April 24, 2026</span>&nbsp;·&nbsp;<span>8 min</span>&nbsp;·&nbsp;<span>oscloud</span>
</div>
</header>
<div class="post-content"><p>Todo aplikací je mraky. Většina běžných (Todoist, Microsoft To Do, Trello, Asana) ale běží na cizích serverech, má různé &ldquo;free&rdquo; limity a vaše úkoly — včetně těch osobních a pracovních — leží někde, kam nevidíte. Vikunja je open-source alternativa, kterou na OSCloud provozujeme pro komunitu na adrese <a href="https://todo.oscloud.cz/">todo.oscloud.cz</a>. Tenhle článek je o tom, co Vikunja umí a jak ji používat přes OSCloud — žádné dockery, žádné instalace.</p>
<h2 id="co-je-vikunja">Co je Vikunja<a hidden class="anchor" aria-hidden="true" href="#co-je-vikunja">#</a></h2>
<p>Vikunja je open-source správa úkolů a projektů. V základu je to klasická todo aplikace — vytvoříte si projekt, hodíte do něj úkoly, nastavíte termíny, štítky, priority. Navíc to ale umí věci, kvůli kterým lidi obvykle platí Todoist nebo Trello: kanban nástěnky, Gantt diagramy, tabulkové zobrazení, filtry, sdílení projektů s dalšími uživateli, komentáře k úkolům, přílohy.</p>
<p>Celý projekt je pod licencí AGPLv3, takže kód je veřejný a kdokoliv si ho může zkontrolovat nebo provozovat sám. Pro nás, co máme rádi kontrolu nad daty, je to důležité.</p>
<p><img alt="Přehled Vikunji - dashboard s projekty a úkoly" loading="lazy" src="/images/vikunja-prehled.png"></p>
<h3 id="proč-místo-trella-nebo-todoistu">Proč místo Trella nebo Todoistu<a hidden class="anchor" aria-hidden="true" href="#proč-místo-trella-nebo-todoistu">#</a></h3>
<p>Upřímně — Todoist má hezčí mobilní aplikaci a lepší parsování termínů v přirozeném jazyce. Trello má propracovanější integrace. Vikunja nejde proti nim funkcemi, ale filozofií:</p>
<ul>
<li><strong>Data jsou vaše.</strong> Neběží to na serveru nějaké firmy, která se z nich snaží udělat byznys model.</li>
<li><strong>Žádné předplatné za základní funkce.</strong> U Todoistu jsou připomenutí, štítky nebo historie za placeným plánem. Vikunja to má celé zadarmo.</li>
<li><strong>Žádné sledování a analytika.</strong> Nevznikají profily, nikdo nečte, co si píšete do úkolů.</li>
<li><strong>Otevřené API.</strong> Pokud chcete automatizaci, import z jiných nástrojů nebo vlastního bota, je to jednoduché.</li>
</ul>
<p>Jestli potřebujete jednoduchý nákupní seznam, je Vikunja overkill. Jestli chcete jeden nástroj na osobní úkoly, rodinné plánování, práci i správu projektů, dává to smysl.</p>
<h2 id="vikunja-na-oscloud">Vikunja na OSCloud<a hidden class="anchor" aria-hidden="true" href="#vikunja-na-oscloud">#</a></h2>
<p>Na <a href="https://todo.oscloud.cz/">todo.oscloud.cz</a> běží instance Vikunji, kterou spravujeme pro komunitu OSCloud. Pro uživatele to znamená jednu věc: nemusíte nic instalovat, nic konfigurovat, nic aktualizovat. Otevřete prohlížeč, přihlásíte se a používáte.</p>
<p>Kdy to dává smysl:</p>
<ul>
<li>Chcete Vikunju zkusit, ale nechcete kvůli tomu zvedat server.</li>
<li>Nemáte chuť ani čas se starat o zálohy, aktualizace a bezpečnost instance.</li>
<li>Věříte komunitnímu provozu víc než komerčnímu SaaSu — infrastruktura běží na dedikovaných EU serverech v Hetzneru a projekt je transparentní.</li>
<li>Chcete mít todo aplikaci propojenou s ostatními službami OSCloud (Nextcloud, Mastodon, Matrix, CryptPad a další) pod jedním účtem.</li>
</ul>
<p>Kdy to naopak smysl nedává: pokud máte vlastní homelab a chcete si Vikunju hostovat sami — to samozřejmě jde, ale to je jiný článek.</p>
<h2 id="přihlášení">Přihlášení<a hidden class="anchor" aria-hidden="true" href="#přihlášení">#</a></h2>
<p>Na <a href="https://todo.oscloud.cz/">todo.oscloud.cz</a> jsou dvě cesty:</p>
<p><strong>Klasická registrace e-mailem a heslem.</strong> Otevřené veřejné registrace jsou momentálně zavřené — o přístup je potřeba požádat přes helpdesk: <a href="https://helpdesk.oscloud.cz/help/3020290644">helpdesk.oscloud.cz/help/3020290644</a>. Po schválení dostanete samostatný účet jen pro todo aplikaci.</p>
<p><strong>Přihlášení přes OSCloud účet (SSO).</strong> Pokud už máte účet na OSCloud, není potřeba zakládat další. Kliknete na přihlášení přes OSCloud, potvrdíte přístup a jste uvnitř. Stejně jako u ostatních služeb.</p>
<p>SSO (Single Sign-On) je v tomhle případě prakticky užitečná věc, ne marketing. Jedno přihlášení pro Vikunju, Nextcloud, Matrix, Mastodon, CryptPad, Gitea a další služby. Jedno heslo navíc k zapamatování, jeden účet na správu, jedno místo, kde případně vypnete přístup. Když změníte heslo v OSCloud, změní se pro všechny služby naráz.</p>
<p>Pokud si plánujete Vikunju používat dlouhodobě a máte i ostatní služby, SSO je logická volba. Pokud chcete jen rychle zkusit a ostatní služby neřešíte, stačí klasická registrace.</p>
<h2 id="bezpečnost-a-soukromí">Bezpečnost a soukromí<a hidden class="anchor" aria-hidden="true" href="#bezpečnost-a-soukromí">#</a></h2>
<p>Tohle je oblast, kde se dají snadno slibovat věci, které nejsou pravda, takže to napíšu na rovinu.</p>
<p><strong>Co platí:</strong> OSCloud je komunitní projekt, kód Vikunji je otevřený, neprodáváme vaše data, neanalyzujeme je, neprofilujeme uživatele a neukazujeme reklamy. Infrastruktura běží v EU.</p>
<p><strong>Co platí realisticky:</strong> administrátor má technicky přístup k infrastruktuře, což je nutné pro provoz, zálohy a řešení problémů. Neznamená to, že se někdo probírá ve vašich úkolech — znamená to, že technická možnost existuje. Stejné je to u každé hostované služby, včetně komerčních. Rozdíl je v tom, že u nás nemáme ekonomický motiv s daty cokoliv dělat.</p>
<p><strong>Co byste měli dělat vy:</strong></p>
<ul>
<li><strong>Silné a unikátní heslo.</strong> Ideálně ze správce hesel (Bitwarden, KeePassXC).</li>
<li><strong>Dvoufaktorová autentizace (2FA).</strong> Pokud používáte SSO přes OSCloud, nastavte si 2FA na úrovni OSCloud účtu — pokryje tím všechny připojené služby.</li>
</ul>
<h2 id="základní-funkce">Základní funkce<a hidden class="anchor" aria-hidden="true" href="#základní-funkce">#</a></h2>
<p>Vikunja má víc funkcí, než většina lidí reálně používá. Tady je to, co se hodí znát pro běžné použití.</p>
<h3 id="projekty-dříve-seznamy">Projekty (dříve &ldquo;seznamy&rdquo;)<a hidden class="anchor" aria-hidden="true" href="#projekty-dříve-seznamy">#</a></h3>
<p>Projekt je základní organizační jednotka — třeba &ldquo;Práce&rdquo;, &ldquo;Domácnost&rdquo;, &ldquo;Server Arch&rdquo;, &ldquo;Nákupy&rdquo;. Projekty lze vnořovat do sebe, takže si můžete udělat strukturu ve stylu &ldquo;Osobní → Byt → Rekonstrukce kuchyně&rdquo;. Každý projekt má vlastní úkoly a lze ho sdílet s dalšími uživateli.</p>
<h3 id="úkoly">Úkoly<a hidden class="anchor" aria-hidden="true" href="#úkoly">#</a></h3>
<p>Samotný úkol má kromě názvu i popis (s Markdown formátováním), termín, prioritu, štítky, podúkoly, přílohy, komentáře a přiřazení dalším lidem. Nemusíte používat všechno — v 90 % případů stačí &ldquo;napiš článek&rdquo; a datum.</p>
<h3 id="štítky-labels">Štítky (labels)<a hidden class="anchor" aria-hidden="true" href="#štítky-labels">#</a></h3>
<p>Barevné tagy napříč projekty. Typické použití: <code>urgent</code>, <code>čekám-na-odpověď</code>, <code>doma</code>, <code>vpráci</code>, <code>telefon</code>. Výhoda proti projektům je v tom, že úkol může mít víc štítků a dají se podle nich filtrovat napříč vším.</p>
<h3 id="priority">Priority<a hidden class="anchor" aria-hidden="true" href="#priority">#</a></h3>
<p>Pět úrovní od &ldquo;žádná&rdquo; po &ldquo;DO IT NOW&rdquo;. Osobně je moc neřeším — termín obvykle řekne víc než priorita. Ale pokud pracujete v týmu a potřebujete rozlišit, co je kritické, hodí se.</p>
<h3 id="termíny-deadlines">Termíny (deadlines)<a hidden class="anchor" aria-hidden="true" href="#termíny-deadlines">#</a></h3>
<p>Každý úkol může mít datum splnění, datum začátku a datum ukončení. Do toho opakování (&ldquo;každý pátek&rdquo;, &ldquo;poslední den měsíce&rdquo;) a připomenutí. Vikunja umí úkoly zobrazit jako Gantt diagram, takže pokud vedete projekt s navazujícími úkoly, máte přehled.</p>
<p><img alt="Gantt zobrazení časové osy" loading="lazy" src="/images/vikunja-gantt.png"></p>
<h3 id="zobrazení">Zobrazení<a hidden class="anchor" aria-hidden="true" href="#zobrazení">#</a></h3>
<p>Každý projekt se dá prohlížet jako:</p>
<ul>
<li><strong>Seznam</strong> — klasický todo list.</li>
<li><strong>Kanban</strong> — sloupce (typicky To Do / In Progress / Done), do kterých taháte úkoly.</li>
<li><strong>Gantt</strong> — časová osa s délkou úkolů.</li>
<li><strong>Tabulka</strong> — přehled všech polí najednou, jako v Excelu.</li>
</ul>
<p>Zobrazení nic nemění na datech — je to jenom pohled. Stejný projekt můžete střídavě používat jako seznam i jako kanban.</p>
<p><img alt="Kanban zobrazení ve Vikunji" loading="lazy" src="/images/vikunja-kanban.avif"></p>
<h2 id="praktické-použití">Praktické použití<a hidden class="anchor" aria-hidden="true" href="#praktické-použití">#</a></h2>
<h3 id="osobní-úkoly">Osobní úkoly<a hidden class="anchor" aria-hidden="true" href="#osobní-úkoly">#</a></h3>
<p>Projekt &ldquo;Osobní&rdquo; se štítky <code>dnes</code>, <code>týden</code>, <code>někdy</code>. Úkoly typu &ldquo;zavolat na úřad&rdquo;, &ldquo;koupit baterie do hodin&rdquo;, &ldquo;dodělat daňové přiznání&rdquo;. Termíny tam, kde to dává smysl, jinak nic. Opakované úkoly na věci jako &ldquo;platit pojištění&rdquo; nebo &ldquo;vynést popelnice&rdquo;.</p>
<h3 id="práce">Práce<a hidden class="anchor" aria-hidden="true" href="#práce">#</a></h3>
<p>Projekt nebo víc projektů podle klientů/úkolů. Kanban zobrazení se hodí pro rozpracované věci — vidíte, co právě máte rozdělaného a kde se to zaseklo. Komentáře u úkolů jsou užitečné, když si pracujete ve dvou a potřebujete něco zdokumentovat.</p>
<h3 id="správa-serverů-a-projektů">Správa serverů a projektů<a hidden class="anchor" aria-hidden="true" href="#správa-serverů-a-projektů">#</a></h3>
<p>Tohle je use case, který sám hodně používám. Pro každou službu (Matrix, PeerTube, Mastodon) mám projekt, do kterého si házím věci typu &ldquo;aktualizovat Synapse&rdquo;, &ldquo;prověřit backupy&rdquo;, &ldquo;opravit nginx config po updatu&rdquo;. Štítky <code>údržba</code>, <code>migrace</code>, <code>bug</code> napříč. U dlouhodobějších věcí pomůže Gantt, u rozpracovaných kanban.</p>
<p>Pro dev projekty na Gitea nebo podobně se dá Vikunja použít jako lightweight issue tracker — mimo rozsah samotného gitea issues, třeba pro roadmap nebo osobní plánování kolem projektu.</p>
<h3 id="sdílení-a-spolupráce">Sdílení a spolupráce<a hidden class="anchor" aria-hidden="true" href="#sdílení-a-spolupráce">#</a></h3>
<p>Projekty můžete sdílet s konkrétními uživateli (s různými právy) nebo s celým týmem. Užitečné pro rodinné věci, komunitní projekty nebo malé týmy. Nebudete s tím řídit padesátičlennou firmu, ale na pár lidí je to dostatečné.</p>
<h2 id="mobilní-aplikace">Mobilní aplikace<a hidden class="anchor" aria-hidden="true" href="#mobilní-aplikace">#</a></h2>
<p>Mobilní appky Vikunji jsou v použitelném stavu na obou platformách, i když web je pořád nejkompletnější.</p>
<p><strong>Android:</strong> oficiální aplikace <a href="https://play.google.com/store/apps/details?id=io.vikunja.app">Vikunja</a> je v Google Play. Po instalaci stačí zadat adresu vlastní instance (<code>https://todo.oscloud.cz</code>) a přihlásit se — buď klasickým účtem Vikunji, nebo přes OSCloud SSO. Oboje funguje, osobně ověřeno. Aplikace pokrývá to, co od mobilní todo appky člověk čeká: přidávání úkolů, termíny, štítky, projekty. Není to feature-complete proti webu, ale pro běžné použití na cestě to stačí. Alternativně — pokud chcete úkoly přímo v kalendáři — se dá Vikunja propojit přes CalDAV s DAVx⁵ a libovolným klientem.</p>
<p><strong>iOS:</strong> je nativní aplikace v App Store (jmenuje se jednoduše &ldquo;Vikunja&rdquo;), kterou mám osobně vyzkoušenou a v základní podobě funguje dobře — podporuje přidávání a úpravu úkolů, push notifikace, sync s kalendářem a propojení s vlastní instancí. Komunita navíc vyvíjí appku &ldquo;Kuna&rdquo; zaměřenou na integraci s iOS kalendářem přes EventKit. Situace na iOS je tedy lepší než na Androidu.</p>
<p><strong>Připojení k vlastní instanci:</strong> všechny zmíněné aplikace podporují zadání vlastní server URL. U OSCloud zadáte <code>https://todo.oscloud.cz</code> a přihlásíte se stejnými údaji jako ve webu. Pozor — u některých verzí appek nesmí URL končit lomítkem.</p>
<p><strong>Co reálně funguje nejlíp:</strong> pro mě osobně je nejpoužitelnější webová verze v prohlížeči na mobilu. Vikunja má responzivní UI, dá se přidat na plochu jako PWA a funguje to překvapivě dobře. Na rychlé přidání úkolu to stačí, na plné řešení projektů v mobilu taky. Nativní appky zatím dohánějí web, to se časem nejspíš změní.</p>
<h2 id="výhody-pro-komunitu-oscloud">Výhody pro komunitu OSCloud<a hidden class="anchor" aria-hidden="true" href="#výhody-pro-komunitu-oscloud">#</a></h2>
<p>Vikunja zapadá do ekosystému OSCloud jednou věcí: je to další střípek do mozaiky služeb, které spolu sdílí přihlášení a filozofii. Stejný účet vám dává:</p>
<ul>
<li><strong>Nextcloud</strong> na soubory a kalendář</li>
<li><strong>Matrix (mxchat.cz)</strong> na chat</li>
<li><strong>Mastodon (mamutovo.cz)</strong> na sociální síť</li>
<li><strong>PeerTube (vhsky.cz)</strong> na videa</li>
<li><strong>CryptPad</strong> na zabezpečenou spolupráci</li>
<li><strong>Gitea</strong> na git repozitáře</li>
<li><strong>Linkwarden</strong> na záložky</li>
<li><strong>Vikunja (todo.oscloud.cz)</strong> na úkoly</li>
</ul>
<p>Nejde o jeden produkt, ale o samostatné open-source projekty, které mají společné přihlášení a běží na společné infrastruktuře. Když budete v budoucnu chtít odejít, data si vyexportujete a poběžíte dál — na vlastním serveru nebo jinde. Žádný lock-in.</p>
<h2 id="závěr">Závěr<a hidden class="anchor" aria-hidden="true" href="#závěr">#</a></h2>
<p>Vikunja není dokonalá — mobilní aplikace ještě dozrávají a UI má místy drobnosti, které by šly vyhladit. Ale jako otevřená, soběstačná todo aplikace, která se vejde mezi Todoist a Trello a nikomu neprodává vaše data, je to jedna z nejlepších možností, co teď je.</p>
<p>Na OSCloud ji najdete připravenou k použití na <a href="https://todo.oscloud.cz/">todo.oscloud.cz</a>. Hodí se vám, pokud:</p>
<ul>
<li>chcete todo aplikaci, kde kontrolujete vlastní data,</li>
<li>už používáte ostatní služby OSCloud a chcete je mít pod jedním účtem,</li>
<li>vám nestačí jednoduché poznámky a chcete i kanban, Gantt, sdílení a filtry,</li>
<li>nechcete platit předplatné za to, co by mělo být základ.</li>
</ul>
<p>Pokud vám stačí papírek na lednici, klidně u něj zůstaňte. Ale pokud řešíte víc věcí a chcete je mít pohromadě bez toho, aby někdo koukal, co si píšete — zkuste to.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
<li><a href="http://localhost:1313/tags/vikunja/">Vikunja</a></li>
<li><a href="http://localhost:1313/tags/todo/">Todo</a></li>
<li><a href="http://localhost:1313/tags/produktivita/">Produktivita</a></li>
<li><a href="http://localhost:1313/tags/self-hosted/">Self-Hosted</a></li>
<li><a href="http://localhost:1313/tags/oscloud/">Oscloud</a></li>
</ul>
<nav class="paginav">
<a class="next" href="http://localhost:1313/posts/spoustime-webhosting-oscloud-site/">
<span class="title">Next »</span>
<br>
<span>Novinka: Teď nabízíme i webhosting!</span>
</a>
</nav>
</footer>
</article>
</main>
<footer class="footer">
<span>&copy; 2026 <a href="http://localhost:1313/">Oscloud News</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu');
if (menu) {
const scrollPosition = localStorage.getItem("menu-scroll-position");
if (scrollPosition) {
menu.scrollLeft = parseInt(scrollPosition, 10);
}
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
const html = document.querySelector("html");
if (html.dataset.theme === "dark") {
html.dataset.theme = 'light';
localStorage.setItem("pref-theme", 'light');
} else {
html.dataset.theme = 'dark';
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>