new-doxa-monorepo

This commit is contained in:
kankys committed 2026-08-07 09:48:59 +02:00
1 parent b4401527a3
commit 5eacbb0182
162 files changed
+21820 -2

No files matched your search

+104
View File
@@ -0,0 +1,104 @@
<!doctype html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<title>O projektu — DOXA</title>
<link rel="stylesheet" href="assets/style/style.css" />
<link rel="shortcut icon" href="assets/img/brain-solid-full.svg" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/default.min.css"
/>
<script src="https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dompurify/dist/purify.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
</head>
<body>
<div class="container">
<nav class="top-nav">
<a href="index.html">Domů</a>
<a href="navod.html">Návod</a>
<a href="privacy.html">Ochrana soukromí</a>
<a href="about.html">O projektu</a>
<button
id="themeToggle"
class="theme-toggle"
aria-label="Přepnout motiv"
>
🌙
</button>
</nav>
<h1>O projektu — DOXA</h1>
<p><img src="assets/img/doxa.png" alt="Doxa notes" width="50%" height="auto" style="display: block; margin: 0 auto;" /></p>
<h2>Manifest digitální suverenity a minimalistického myšlení</h2>
<p><strong>Záměr projektu:</strong></p>
<p>Vytvořit absolutně nezávislé, bezpečné a minimalistické prostředí pro uchovávání lidských myšlenek, poznámek a životních reflexí. V souladu se základními principy osobní svobody a soběstačnosti aplikace vědomě odmítá cloudové databáze, servery třetích stran a centralizovaná API. Doxa věří, že lidská mysl nepotřebuje být sledována algoritmy, aby mohla růst.</p>
<h3>1. Radikální Local-First Filozofie</h3>
<p>Aplikace funguje na principu absolutní decentralizace. Běží na tvém zařízení a tam také umírá i žije.</p>
<ul>
<li>Žádný backend, žádné API: Doxa vědomě neobsahuje žádný kód pro odesílání dat na vzdálené servery. Tím je eliminováno riziko úniku dat, výpadku serveru nebo změny obchodních podmínek poskytovatele.</li>
<li>Absolutní soukromí: Data jsou uložena výhradně v tvém prohlížeči (localStorage) nebo lokálním souboru. Co napíšeš, to zůstává tvým výhradním vlastnictvím.</li>
</ul>
<h3>2. Formát JSON: Trvanlivost napříč dekádami</h3>
<p>Data jsou strukturována do otevřeného, čistého a lidsky čitelného formátu JSON. Žádné proprietární databáze.</p>
<ul>
<li>Tvá data ti patří. Díky možnosti manuálního exportu si můžeš svůj myšlenkový fond odnést kamkoli – uložit si ho na svůj bezpečný lokální disk, nahrát na vlastní Git (GitHub/Gitea), nebo jej synchronizovat skrze cloudovou službu, kterou ty sám uznáš za bezpečnou.</li>
<li>Čistota formátu zaručuje, že tvé poznámky budou čitelné i za dvacet let na jakémkoli zařízení, bez ohledu na to, zda Doxa bude stále existovat.</li>
</ul>
<h3>3. Technická čistota a minimalismus (Vanilla Stack)</h3>
<p>Pro zachování maximální rychlosti, nezávislosti a nulových externích závislostí je aplikace postavena výhradně na čistých webových standardech: </p>
<ul>
<li>Frontend (HTML5/CSS3): Minimalistické rozhraní, které nezatěžuje mysl barevným chaosem a vizuálním balastem moderního internetu.</li>
<li>Logika (Vanilla JavaScript ES6+): Žádné těžkopádné frameworky (React/Vue), které podléhají módním trendům a neustálým změnám. Čistý kód je trvanlivý jako tesání do kamene.</li>
</ul>
<p>„Nezáleží na tom, jak složité jsou okolnosti kolem tebe. Když stavíš vlastní chrám myšlenek, začínáš od prvního kamene. Tento kód a tvá data jsou tvým vlastním, nedobytným hradem.“
— Stoický odkaz pro svobodné myslitele</p>
<hr>
<h2>Architektura</h2>
<ul>
<li>Frontend: čisté HTML/CSS/JS (bez frameworků).</li>
<li>Datový formát: otevřený JSON — trvanlivý a přenosný.</li>
<li>
Local‑first: data jsou lokální (localStorage nebo soubor).
</li>
</ul>
<h2>Co bylo přidáno naposledy</h2>
<li>Podpora více poznámek v jednom JSON (název + obsah).</li>
<li>Přidání, editace (inline + modal), mazání poznámek.</li>
<li>Přesouvání pořadí (šípky + drag & drop).</li>
<li>
Import / Export JSON a fallback mezi localStorage a lokálním
souborem (Electron).
</li>
<li>Přidána Markdown podpora</li>
</ul>
<h2>Další plány</h2>
<ul>
<li>Rozšíření UI (hledání, tagy, historie/undo).</li>
</ul>
<hr>
<p>
Projekt najdeš v repozitáři
<a href="https://codeberg.org/kankys/doxa" target="_blank"
>Codeberg</a
>. Pokud chceš přispět, otevři issue nebo PR.
</p>
<p>Web autora, další projekty a podpora: <a href="https://lukaskanka.cz/" target="_blank">Lukáš Kanka</a></p>
<p>Aplikace je open-source a licencována pod MIT licencí.</p>
<br/>
<p><a href="index.html">Zpět na hlavní stránku</a></p>
</div>
<footer><p class="copyright">&copy;2026 Doxa Notes - <a href="https://lukaskanka.cz/" target="_blank">Kankys</a></p></a</footer>
<script src="assets/js/script.js"></script>
</body>
</html>
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M184 120C184 89.1 209.1 64 240 64L264 64C281.7 64 296 78.3 296 96L296 544C296 561.7 281.7 576 264 576L232 576C202.2 576 177.1 555.6 170 528C169.3 528 168.7 528 168 528C123.8 528 88 492.2 88 448C88 430 94 413.4 104 400C84.6 385.4 72 362.2 72 336C72 305.1 89.6 278.2 115.2 264.9C108.1 252.9 104 238.9 104 224C104 179.8 139.8 144 184 144L184 120zM456 120L456 144C500.2 144 536 179.8 536 224C536 239 531.9 253 524.8 264.9C550.5 278.2 568 305 568 336C568 362.2 555.4 385.4 536 400C546 413.4 552 430 552 448C552 492.2 516.2 528 472 528C471.3 528 470.7 528 470 528C462.9 555.6 437.8 576 408 576L376 576C358.3 576 344 561.7 344 544L344 96C344 78.3 358.3 64 376 64L400 64C430.9 64 456 89.1 456 120z"/></svg>

After

Width:  |  Height:  |  Size: 920 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 KiB

@@ -0,0 +1,3 @@
{
"notes": []
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,382 @@
/* Theme variables */
:root {
--bg: #fafafa;
--text: #333333;
--muted: #666666;
--button-bg: #333333;
--button-text: #ffffff;
--note-bg: #ffffff;
--note-border: #dddddd;
--note-hover: #f5f5f5;
--accent: #0b63d6;
--modal-bg: #ffffff;
--modal-overlay: rgba(0, 0, 0, 0.45);
--active-bg: #e6f0ff;
--active-border: #a6c8ff;
}
/* Dark theme overrides */
body.dark {
--bg: #0b1220;
--text: #e6eef8;
--muted: #9aa6b2;
--button-bg: #1f2937;
--button-text: #ffffff;
--note-bg: #071022;
--note-border: #263046;
--note-hover: #092033;
--accent: #3b82f6;
--modal-bg: #0b1220;
--modal-overlay: rgba(0, 0, 0, 0.6);
--active-bg: rgba(59, 130, 246, 0.14);
--active-border: #60a5fa;
}
/* Base */
body {
font-family: monospace;
background: var(--bg);
padding: 40px;
color: var(--text);
transition:
background 200ms ease,
color 200ms ease;
}
.top-nav {
display: flex;
gap: 8px;
margin-bottom: 12px;
align-items: center;
flex-wrap: wrap;
}
.top-nav a,
.top-nav .theme-toggle {
background: var(--button-bg);
color: var(--button-text);
text-decoration: none;
padding: 8px 12px;
border-radius: 4px;
font-family: monospace;
font-size: 14px;
border: none;
cursor: pointer;
}
.top-nav a:hover,
.top-nav .theme-toggle:hover {
background: #555;
}
.top-nav a.active {
background: var(--accent);
}
.container {
max-width: 600px;
margin: 0 auto;
}
#noteTitle {
width: 100%;
padding: 10px;
margin-bottom: 8px;
font-family: monospace;
color: var(--text);
background: var(--note-bg);
border: 1px solid var(--note-border);
}
textarea {
width: 100%;
height: 150px;
padding: 10px;
margin-bottom: 10px;
font-family: monospace;
color: var(--text);
background: var(--note-bg);
border: 1px solid var(--note-border);
}
button {
background: var(--button-bg);
color: var(--button-text);
border: none;
padding: 10px 20px;
cursor: pointer;
font-family: monospace;
}
button:hover {
background: #555;
}
#notesContainer {
margin-top: 10px;
border-top: 1px solid var(--note-border);
padding-top: 10px;
display: flex;
flex-direction: column;
gap: 6px;
}
.note-item {
padding: 8px;
border: 1px solid var(--note-border);
cursor: pointer;
background: var(--note-bg);
}
.note-item:hover {
background: var(--note-hover);
}
.note-item.active {
background: var(--active-bg);
border-color: var(--active-border);
}
.no-notes {
color: var(--muted);
font-style: italic;
padding: 6px;
}
/* Note list layout */
.note-item {
display: flex;
align-items: center;
justify-content: space-between;
}
.note-left {
flex: 1 1 auto;
padding-right: 10px;
cursor: pointer;
}
.note-title {
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.note-preview {
font-size: 12px;
color: var(--muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.note-controls {
display: flex;
gap: 6px;
align-items: center;
}
.note-controls button {
background: transparent;
border: none;
padding: 6px 8px;
cursor: pointer;
font-family: monospace;
border-radius: 4px;
color: var(--text);
}
.note-controls button:hover {
background: rgba(255, 255, 255, 0.03);
}
.note-item.drag-over {
border-style: dashed;
}
.note-item.drag-after {
box-shadow: inset 0 -3px 0 0 rgba(0, 123, 255, 0.25);
}
.note-item.dragging {
opacity: 0.5;
}
/* Modal */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--modal-overlay);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.modal-overlay.hidden {
display: none;
}
.modal {
background: var(--modal-bg);
padding: 16px;
border-radius: 8px;
width: 92%;
max-width: 720px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
position: relative;
}
.modal .modal-close {
position: absolute;
right: 8px;
top: 8px;
border: none;
background: transparent;
font-size: 16px;
cursor: pointer;
}
.modal input,
.modal textarea {
width: 100%;
padding: 8px;
margin-bottom: 8px;
font-family: monospace;
color: var(--text);
background: var(--note-bg);
border: 1px solid var(--note-border);
}
.modal-actions {
display: flex;
gap: 8px;
justify-content: flex-end;
}
@media (min-width: 800px) {
.container {
max-width: 900px;
}
}
.notes-hint {
margin-top: 8px;
color: var(--muted);
font-size: 13px;
}
/* Editor toolbar & preview */
.editor-toolbar {
display: flex;
gap: 6px;
margin-bottom: 8px;
flex-wrap: wrap;
}
.editor-toolbar button {
background: transparent;
border: 1px solid var(--note-border);
color: var(--text);
padding: 6px 8px;
cursor: pointer;
border-radius: 4px;
font-family: monospace;
}
.editor-toolbar button:hover {
background: var(--note-hover);
}
/* active toolbar button */
.editor-toolbar button.active {
background: var(--accent);
color: var(--button-text);
}
.editor-wrap {
display: flex;
gap: 12px;
align-items: flex-start;
}
.editor-wrap textarea {
flex: 1 1 60%;
min-height: 160px;
}
.preview {
flex: 1 1 40%;
border: 1px solid var(--note-border);
background: var(--note-bg);
padding: 10px;
border-radius: 4px;
overflow: auto;
max-height: 320px;
}
.hidden {
display: none;
}
.editor-actions {
margin-top: 8px;
display: flex;
gap: 8px;
align-items: center;
}
.save-status {
margin-left: 8px;
font-size: 13px;
color: var(--muted);
min-width: 80px;
}
/* Rendered markdown styles */
.preview h1,
.preview h2,
.preview h3 {
margin: 6px 0;
}
.preview pre {
background: rgba(0, 0, 0, 0.04);
padding: 8px;
overflow: auto;
}
.preview code {
background: rgba(0, 0, 0, 0.06);
padding: 2px 4px;
border-radius: 4px;
}
@media (max-width: 800px) {
.editor-wrap {
flex-direction: column;
}
.preview {
max-height: 240px;
}
}
footer {
margin-top: 16px;
text-align: center;
font-size: 13px;
color: var(--muted);
}
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M184 120C184 89.1 209.1 64 240 64L264 64C281.7 64 296 78.3 296 96L296 544C296 561.7 281.7 576 264 576L232 576C202.2 576 177.1 555.6 170 528C169.3 528 168.7 528 168 528C123.8 528 88 492.2 88 448C88 430 94 413.4 104 400C84.6 385.4 72 362.2 72 336C72 305.1 89.6 278.2 115.2 264.9C108.1 252.9 104 238.9 104 224C104 179.8 139.8 144 184 144L184 120zM456 120L456 144C500.2 144 536 179.8 536 224C536 239 531.9 253 524.8 264.9C550.5 278.2 568 305 568 336C568 362.2 555.4 385.4 536 400C546 413.4 552 430 552 448C552 492.2 516.2 528 472 528C471.3 528 470.7 528 470 528C462.9 555.6 437.8 576 408 576L376 576C358.3 576 344 561.7 344 544L344 96C344 78.3 358.3 64 376 64L400 64C430.9 64 456 89.1 456 120z"/></svg>

After

Width:  |  Height:  |  Size: 920 B

+180
View File
@@ -0,0 +1,180 @@
<!doctype html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<title>Doxa</title>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://doxa.lukan.cz/" />
<meta
property="og:title"
content="Doxa je navržena jako local‑first aplikace — soukromí je primární designový princip."
/>
<meta
property="og:description"
content="Krátké shrnutí: Doxa je minimalistická, local‑first poznámková aplikace založená na otevřeném JSON formátu. Data zůstávají lokálně (localStorage nebo soubor) — aplikace nic sama neodesílá."
/>
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="Doxa je navržena jako local‑first aplikace — soukromí je primární designový princip."
/>
<meta
name="twitter:description"
content="Doxa je navržena jako local‑first aplikace — soukromí je primární designový princip."
/>
<meta
name="Doxa"
content="Doxa je navržena jako local‑first aplikace — soukromí je primární designový princip."
/>
<link rel="stylesheet" href="assets/style/style.css" />
<link rel="shortcut icon" href="assets/img/brain-solid-full.svg" />
<!-- Markdown and sanitization libraries (used for preview). CDN fallback; if offline, preview will be disabled. -->
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/default.min.css"
/>
<script src="https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dompurify/dist/purify.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
</head>
<body>
<div class="container">
<nav class="top-nav">
<a href="index.html">Domů</a>
<a href="navod.html">Návod</a>
<a href="privacy.html">Ochrana soukromí</a>
<a href="about.html">O projektu</a>
<button
id="themeToggle"
class="theme-toggle"
aria-label="Přepnout motiv"
>
🌙
</button>
</nav>
<h1>Doxa</h1>
<input id="noteTitle" placeholder="Název poznámky" />
<div class="editor-toolbar" id="editorToolbar">
<button type="button" data-action="h1" title="Nadpis H1">
H1
</button>
<button type="button" data-action="h2" title="Nadpis H2">
H2
</button>
<button type="button" data-action="h3" title="Nadpis H3">
H3
</button>
<button type="button" data-action="bold" title="Tučné (Ctrl+B)">
<strong>B</strong>
</button>
<button
type="button"
data-action="italic"
title="Kurzíva (Ctrl+I)"
>
<em>I</em>
</button>
<button type="button" data-action="strike" title="Přeškrtnutí">
S
</button>
<button type="button" data-action="ul" title="Odrážkový seznam">
•
</button>
<button type="button" data-action="ol" title="Číslovaný seznam">
1.
</button>
<button
type="button"
data-action="task"
title="Úkol (checkbox)"
>
☐
</button>
<button type="button" data-action="quote" title="Citace">
❝
</button>
<button type="button" data-action="hr" title="Vodorovná čára">
—
</button>
<button type="button" data-action="code" title="Inline kód">
`kód`
</button>
<button type="button" data-action="codeblock" title="Blok kódu">
&lt;/&gt;
</button>
<button type="button" data-action="link" title="Vložit odkaz">
🔗
</button>
<button
type="button"
data-action="image"
title="Vložit obrázek"
>
🖼
</button>
<button
type="button"
data-action="table"
title="Vložit tabulku"
>
▦
</button>
<button
type="button"
id="livePreviewToggle"
title="Živý náhled"
>
Live
</button>
<button type="button" id="togglePreviewMain" title="Náhled">
Náhled
</button>
</div>
<div class="editor-wrap">
<textarea
id="noteInput"
placeholder="Zapiš poznámku..."
></textarea>
<div
id="notePreview"
class="preview hidden"
aria-hidden="true"
></div>
</div>
<div class="editor-actions">
<button
onclick="saveCurrentNote()"
title="Uložit nyní (manuální uložení)"
aria-label="Uložit nyní"
>
Uložit nyní
</button>
<button onclick="saveNotesToFile(true)">Exportovat JSON</button>
<button onclick="importujPoznamky()">Importovat JSON</button>
<button id="newNoteButton">➕ Nová poznámka</button>
<span
id="saveStatus"
class="save-status"
aria-live="polite"
></span>
</div>
<div id="notesContainer"></div>
<div id="notesHint" class="notes-hint">
Přetáhněte poznámky pro změnu pořadí nebo použijte šipky vedle
položek.
</div>
</div>
<script src="assets/js/script.js"></script>
</body>
</html>
+32
View File
@@ -0,0 +1,32 @@
const { app, BrowserWindow } = require('electron');
const path = require('path');
function createWindow() {
const win = new BrowserWindow({
width: 1200,
height: 800,
icon: path.join(__dirname, 'brain-solid-full.svg'), // Pokud máš ikonu, jinak můžeš řádek smazat
webPreferences: {
nodeIntegration: false,
contextIsolation: true
}
});
// Načte tvůj hlavní HTML soubor webu
win.loadFile('index.html');
// Skryje horní menu (File, Edit atd.) pro čistý, minimalistický vzhled
win.setMenu(null);
}
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});
+164
View File
@@ -0,0 +1,164 @@
<!doctype html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<title>Návod — Doxa</title>
<link rel="stylesheet" href="assets/style/style.css" />
<link rel="shortcut icon" href="assets/img/brain-solid-full.svg" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/default.min.css" />
<script src="https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dompurify/dist/purify.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
</head>
<body>
<div class="container">
<nav class="top-nav">
<a href="index.html">Domů</a>
<a href="navod.html">Návod</a>
<a href="privacy.html">Ochrana soukromí</a>
<a href="about.html">O projektu</a>
<button id="themeToggle" class="theme-toggle" aria-label="Přepnout motiv">🌙</button>
</nav>
<h1>Návod k použití — Doxa (v26.6.04.beta)</h1>
<p>Krátké shrnutí: Doxa je minimalistická, <strong>local‑first</strong> poznámková aplikace založená na otevřeném JSON formátu s podporou Markdown. Data zůstávají lokálně (localStorage nebo soubor) — aplikace nic sama neodesílá.</p>
<h2>Rychlý start - pouze pro variantu spouštění aplikace u sebe lokalně</h2>
<p>Pokud aplikaci spouštíš z webu <strong>https://doxa.lukan.cz/</strong> pokračuj dalším bodem!</p>
<ol>
<li>Stáhni/klonuj repozitář a přejdi do složky aplikace:
<pre><strong>cd doxa/web_app</strong></pre>
</li>
<li>Spusť jednoduchý lokální server (doporučeno):
<pre><strong>python3 -m http.server 8000</strong></pre>
a otevři v prohlížeči: <code><strong>http://localhost:8000</strong></code>
</li>
<li>alternativně můžeš použít Node.js a pomocí npm install nainstaluj live-server a následně spusť pomocí příkazu: <code><strong>live-server</strong></code> ve složce aplikace.
</li>
</ol>
<h2>Desktová aplikace</h2>
<p>1. Desktová aplikace je dostupná pro Windows a Linux. Stačí si ji stáhnout z <a href="https://codeberg.org/Kankys/doxa/releases" target="_blank">Codeberg</a> a spustit.</p>
<p>2. Staženou aplikaci spustíš spustíš otevřením souboru linux - .AppImage</p>
<p>3. Soubory aplikací najdeš ve složce:</p>
<p><strong>Linux:</strong> <code>~/.config/doxa/</code></p>
<p><strong>Nezapomeň si dělat pravidélné zálohy JSON (exportovat JSON)</strong></p>
<p><strong>Nezapomeň si pravidelně aktualizovat aplikaci, abys mohl mít nejnovější verzi.</strong></p>
<p><strong>POZOR: v desktop verzi se nachází chyba s přidáváním nových poznámek. Aby jste mohli přidat novou poznámku, musíte nejprve kliknout na jinou záložku v menu a poté zpět na záložku poznámek.</strong></p>
<hr>
<h2>Vytvoření nové poznámky</h2>
<ol>
<li>Klikni na tlačítko <strong>➕ Nová poznámka</strong> a zadej název.</li>
<li>Položka se objeví v seznamu. Klikem načteš název a obsah do editoru nahoře.</li>
<li>Uprav obsah a klikni <strong>Uložit nyní</strong>.</li>
</ol>
<h2>Editace a mazání</h2>
<ul>
<li>Inline: klikni na poznámku, uprav obsah a stiskni <strong>Uložit nyní</strong>.</li>
<li>Modal: klikni na ikonu ✎ vedle položky pro pokročilou editaci v modal okně.</li>
<li>Mazání: ikona 🗑 u položky — po potvrzení se poznámka smaže.</li>
</ul>
<h2>Přesouvání pořadí poznámek</h2>
<ul>
<li>Použij šipky ↑ / ↓ u položek.</li>
<li>Nebo přetahuj položky (drag & drop) na požadované místo — při přetažení se ukáže indikátor vložení.</li>
</ul>
<h2>Přepínání vzhledu</h2>
<p>V horním menu najdeš tlačítko pro přepínání vzhledu. Aplikace podporuje tři režimy:
<ul>
<li><strong>Světlý</strong> — ikona: ☀️</li>
<li><strong>Tmavý</strong> — ikona: 🌙</li>
<li><strong>Respektovat systém</strong> — ikona: 🌓 — aplikace bude sledovat systémovou volbu (prefers-color-scheme) a automaticky se přepne, pokud se změní systémový motiv.</li>
</ul>
Kliknutím na tlačítko v menu cyklíš mezi režimy (Light → Dark → System). Vybraná volba se uloží do <code>localStorage</code> pod klíčem <code>doxa_theme</code> a přetrvá mezi stránkami a obnovami. Pokud chceš volbu resetovat, otevři konzoli prohlížeče a spusť: <code>localStorage.removeItem('doxa_theme')</code> nebo vymaž storage v nástrojích pro vývojáře.</p>
<h2>Automatické ukládání</h2>
<p>Aplikace nyní automaticky ukládá změny poznámek lokálně během psaní (autosave). V běžném prohlížeči se změny ukládají do <code>localStorage</code> (klíč <code>doxa_notes_v1</code>) bez nutnosti manuálního ukládání — data se uloží po krátké prodlevě. Pokud aplikaci spouštíš v Electron/Node režimu, změny se zapisují přímo do lokálního souboru.</p>
<p style="color: red;"><strong>Průběžně si úkládej i JSON soubor manuálně!!</strong></p>
<h2>Manuální uložení</h2>
<p>Vedle editoru najdeš tlačítko <strong>Uložit nyní</strong>. I když autosave ukládá průběžně, tlačítko je užitečné v těchto případech:</p>
<ul>
<li><strong>Okamžité uložení</strong> — provede persist bez čekání na autosave (užitečné před zavřením aplikace nebo pokud chcete rychlou jistotu, že jsou změny zapsány).</li>
<li><strong>Vizuální potvrzení</strong> — po uložení se zobrazí stav „Uloženo“, což dává uživateli okamžitou zpětnou vazbu.</li>
<li><strong>Bez stažení</strong> — tlačítko <strong>Uložit poznámku</strong> neprovádí stažení souboru; pokud chcete stáhnout JSON, použijte tlačítko <strong>Exportovat JSON</strong>.</li>
</ul>
<p>Pro přenos dat mezi zařízeními použijte tlačítko <strong>Exportovat JSON</strong> (stáhne soubor <code>doxa.json</code>), nebo z konzole spusťte <code>saveNotesToFile(true)</code>.</p>
<h2>Import / Export</h2>
<p>Pro import klikni <strong>Importovat JSON</strong> a vyber soubor. Podporované formáty:
<ul>
<li>Objekt s polem <code>notes</code>: <code>{ "notes": [ ... ] }</code></li>
<li>Přímo pole: <code>[ { ... }, { ... } ]</code></li>
</ul>
Export je nyní dostupný přes tlačítko <strong>Exportovat JSON</strong> (vedle tlačítka Uložit). Aplikace zároveň provádí autosave lokálně — nic neztratíte, pokud zapomenete manuálně uložit. Chcete-li stáhnout JSON přes skript, můžete také spustit v konzoli <code>saveNotesToFile(true)</code>.</p>
<h2>Bezpečnost a zálohy</h2>
<p>Výchozí režim je <strong>local‑first</strong>: data zůstávají ve tvém prohlížeči (localStorage) nebo lokálním souboru, aplikace je sama neodesílá.</p>
<hr>
<h2>Editor používá Markdown</h2>
<p>Editor pracuje s <strong>Markdown</strong> syntaxí. Všechny úpravy se ukládají jako Markdown (čistý text) — náhled ukazuje vykreslené HTML. Níže základní příklady (vložte je přímo do editoru nebo použijte tlačítka v toolbaru):</p>
<pre><code>Tučné: **tučný text**
Kurzíva: *kurzíva*
Přeškrtnutí: ~~přeškrtnuté~~
Inline kód: `kód`
Kódový blok:
```
console.log('hello')
```
Nadpisy:
# Nadpis H1
## Nadpis H2
### Nadpis H3
Seznam (odrážky):
- položka 1
- položka 2
Číslovaný seznam:
1. první
2. druhý
Citace:
> Toto je citace
Tabulka:
| Sloupec 1 | Sloupec 2 |
| --- | --- |
| bunka 1 | bunka 2 |
| bunka 3 | bunka 4 |
Obrázek (referenční URL):
![alt text](https://example.com/obrazek.png)
Odkaz:
[text](https://example.com)
Úkoly (task list):
- [ ] nedokončeno
- [x] hotovo
</code></pre>
<p>Důležité tipy:</p>
<ul>
<li>Kliknutím na tlačítka v toolbaru vložíte potřebné Markdown tokeny automaticky.</li>
<li>Stiskněte <kbd>Ctrl/Cmd+B</kbd> pro tučné, <kbd>Ctrl/Cmd+I</kbd> pro kurzívu a <kbd>Ctrl/Cmd+`</kbd> pro inline kód.</li>
<li>Tlačítko <strong>Náhled</strong> přepne vykreslení Markdownu; používejte jej k ověření výsledku.</li>
<li>Tlačítko <strong>Live</strong> zapne průběžný živý náhled — preview se automaticky aktualizuje během psaní a zobrazí se, pokud nebyl ručně skrytý.</li>
<li>Tlačítko <strong>Tabulka</strong> (▦) vloží šablonu tabulky a během vložení vás vyzve na počet sloupců a řádků.</li>
<li>Obrázky vkládejte jako URL — aplikace obrázky nesynchronizuje ani nahrává.</li>
<li>Markdown je přenosný: poznámky zůstávají čitelné i bez aplikace (export/import).</li>
</ul>
<h2>Časté problémy</h2>
<ul>
<li>Při otevírání přes <code>file://</code> může fetch statického JSONu selhávat — použij lokální server nebo Electron.</li>
<li>Přenos dat mezi zařízeními? Stáhni JSON a importuj ho na druhém zařízení.</li>
</ul>
<p><a href="index.html">Zpět na hlavní stránku</a></p>
</div>
<footer><p class="copyright">&copy;2026 Doxa Notes - <a href="https://lukaskanka.cz/" target="_blank">Kankys</a></p></a</footer>
<script src="assets/js/script.js"></script>
</body>
</html>
@@ -0,0 +1,29 @@
{
"name": "doxa",
"version": "1.0.0",
"description": "Ostrovy myšlenek v moři chaosu",
"author": "Kankys",
"main": "main.js",
"scripts": {
"start": "npx electron .",
"dist": "electron-builder"
},
"devDependencies": {
"electron": "30.5.1",
"electron-builder": "^24.13.0"
},
"allowScripts": {
"electron": true
},
"build": {
"appId": "cz.lukan.doxa",
"productName": "Doxa.26.06.03.beta",
"electronVersion": "30.5.1",
"win": {
"target": ["nsis"]
},
"linux": {
"target": ["AppImage"]
}
}
}
@@ -0,0 +1,93 @@
<!doctype html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<title>Ochrana soukromí — Doxa</title>
<link rel="stylesheet" href="assets/style/style.css" />
<link rel="shortcut icon" href="assets/img/brain-solid-full.svg" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/default.min.css"
/>
<script src="https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dompurify/dist/purify.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
</head>
<body>
<div class="container">
<nav class="top-nav">
<a href="index.html">Domů</a>
<a href="navod.html">Návod</a>
<a href="privacy.html">Ochrana soukromí</a>
<a href="about.html">O projektu</a>
<button
id="themeToggle"
class="theme-toggle"
aria-label="Přepnout motiv"
>
🌙
</button>
</nav>
<h1>Ochrana soukromí</h1>
<p>
Doxa je navržena jako <strong>local‑first</strong> aplikace
— soukromí je primární designový princip. Níže shrnutí, jak
zacházím s daty v aktuálním stavu projektu.
</p>
<h2>Co aplikace ukládá</h2>
<ul>
<li>
Poznámky: <code>id</code>, <code>name</code>,
<code>content</code>, <code>created_at</code>,
<code>modified_at</code> (pokud existuje).
</li>
<li>
Žádné automatické telemetry ani sledování není
implementováno.
</li>
</ul>
<h2>Kde jsou data uložena</h2>
<ul>
<li>
V prohlížeči: <strong>localStorage</strong> (klíč
<code>Doxa_notes_v1</code>).
</li>
<li>
V Electron/Node režimu: soubor na disku (např.
<code>assets/js/data/doxa.json</code>).
</li>
<li>
Export/import: uživatel může stáhnout JSON a nahrát ho na
jiném zařízení — je to manuální proces.
</li>
</ul>
<h2>Co aplikace NEODESÍLÁ</h2>
<ul>
<li>
Výchozí instalace neposílá poznámky na žádný vzdálený
server.
</li>
<li>
Bez implementace serverové synchronizace nejsou data
odesílána ani zálohována vůči třetím stranám.
</li>
</ul
<h2>Odpovědnost uživatele</h2>
<p>
Protože data jsou lokální, odpovědnost za zálohy a bezpečnou
konfiguraci serveru (pokud použita) nese vlastník instalace.
Doporučuji pravidelné exporty a bezpečné úložiště záloh.
</p>
<p><a href="index.html">Zpět na hlavní stránku</a></p>
</div>
<footer><p class="copyright">&copy;2026 Doxa Notes - <a href="https://lukaskanka.cz/" target="_blank">Kankys</a></p></a</footer>
<script src="assets/js/script.js"></script>
</body>
</html>