Ecosistem multi-agent complet
- SOUL-base.md partajat pentru toți agenții - 5 agenți specializați: work, health, growth, sprijin, scout - Fiecare agent cu SOUL.md, TOOLS.md, USER.md, AGENTS.md proprii - Symlinks pentru resurse partajate (notes/, kanban/, projects/) - Tags de domeniu (@work, @health, etc.) în YouTube notes - Script update_notes_index.py îmbunătățit cu domenii - HEARTBEAT.md cu verificări periodice - Grup sprijin pagină și fișe activități - Cleanup: șters agents/echo/ orfan
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
<title>Echo · Files</title>
|
||||
<link rel="stylesheet" href="common.css">
|
||||
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||||
<script src="swipe-nav.js"></script>
|
||||
<style>
|
||||
.main {
|
||||
@@ -240,6 +241,40 @@
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#markdownPreview {
|
||||
display: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: var(--space-5);
|
||||
overflow-y: auto;
|
||||
color: var(--text-secondary);
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
#markdownPreview h1, #markdownPreview h2, #markdownPreview h3 {
|
||||
color: var(--text-primary);
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
#markdownPreview h1 { font-size: 1.8em; border-bottom: 1px solid var(--border); padding-bottom: 0.3em; }
|
||||
#markdownPreview h2 { font-size: 1.4em; }
|
||||
#markdownPreview h3 { font-size: 1.2em; }
|
||||
|
||||
#markdownPreview p { margin-bottom: 1em; }
|
||||
#markdownPreview ul, #markdownPreview ol { margin-bottom: 1em; padding-left: 2em; }
|
||||
#markdownPreview li { margin-bottom: 0.3em; }
|
||||
#markdownPreview strong { color: var(--text-primary); }
|
||||
#markdownPreview hr { border: none; border-top: 1px solid var(--border); margin: 2em 0; }
|
||||
#markdownPreview code { background: var(--bg-surface); padding: 2px 6px; border-radius: 4px; font-family: var(--font-mono); }
|
||||
#markdownPreview pre { background: var(--bg-surface); padding: 1em; border-radius: 8px; overflow-x: auto; }
|
||||
#markdownPreview blockquote { border-left: 3px solid var(--accent); padding-left: 1em; margin-left: 0; color: var(--text-muted); }
|
||||
|
||||
.preview-active #codeEditor { display: none; }
|
||||
.preview-active #markdownPreview { display: block; }
|
||||
|
||||
.btn-preview.active { background: var(--accent); color: white; }
|
||||
|
||||
.editor-footer {
|
||||
padding: var(--space-2) var(--space-5);
|
||||
background: var(--bg-surface);
|
||||
@@ -301,6 +336,10 @@
|
||||
<i data-lucide="folder"></i>
|
||||
<span>Files</span>
|
||||
</a>
|
||||
<a href="grup-sprijin.html" class="nav-item">
|
||||
<i data-lucide="heart-handshake"></i>
|
||||
<span>Grup</span>
|
||||
</a>
|
||||
<button class="theme-toggle" onclick="toggleTheme()" title="Schimbă tema">
|
||||
<i data-lucide="sun" id="themeIcon"></i>
|
||||
</button>
|
||||
@@ -344,6 +383,9 @@
|
||||
<button class="btn btn-ghost" onclick="showBrowse()" title="Înapoi">
|
||||
<i data-lucide="arrow-left"></i>
|
||||
</button>
|
||||
<button class="btn btn-ghost btn-preview" onclick="togglePreview()" id="previewBtn" style="display:none;" title="Preview Markdown">
|
||||
<i data-lucide="eye"></i>
|
||||
</button>
|
||||
<button class="btn btn-ghost" onclick="reloadFile()" id="reloadBtn" disabled title="Reload">
|
||||
<i data-lucide="refresh-cw"></i>
|
||||
</button>
|
||||
@@ -353,8 +395,9 @@
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="editor-body">
|
||||
<div class="editor-body" id="editorBody">
|
||||
<textarea id="codeEditor" placeholder="Selectează un fișier..."></textarea>
|
||||
<div id="markdownPreview"></div>
|
||||
</div>
|
||||
<div class="editor-footer">
|
||||
<span id="statusText">Ready</span>
|
||||
@@ -536,6 +579,14 @@
|
||||
document.getElementById('reloadBtn').disabled = false;
|
||||
document.getElementById('fileInfo').textContent = formatSize(data.size);
|
||||
|
||||
// Show preview button for markdown files
|
||||
const isMarkdown = path.endsWith('.md');
|
||||
document.getElementById('previewBtn').style.display = isMarkdown ? 'flex' : 'none';
|
||||
|
||||
// Reset preview state
|
||||
document.getElementById('editorBody').classList.remove('preview-active');
|
||||
document.getElementById('previewBtn').classList.remove('active');
|
||||
|
||||
if (data.truncated) {
|
||||
setStatus('Fișier trunchiat', 'error');
|
||||
} else {
|
||||
@@ -546,6 +597,26 @@
|
||||
showEditor();
|
||||
}
|
||||
|
||||
function togglePreview() {
|
||||
const editorBody = document.getElementById('editorBody');
|
||||
const previewBtn = document.getElementById('previewBtn');
|
||||
const preview = document.getElementById('markdownPreview');
|
||||
const content = document.getElementById('codeEditor').value;
|
||||
|
||||
if (editorBody.classList.contains('preview-active')) {
|
||||
// Switch to edit mode
|
||||
editorBody.classList.remove('preview-active');
|
||||
previewBtn.classList.remove('active');
|
||||
setStatus('Edit mode', 'saved');
|
||||
} else {
|
||||
// Switch to preview mode
|
||||
preview.innerHTML = marked.parse(content);
|
||||
editorBody.classList.add('preview-active');
|
||||
previewBtn.classList.add('active');
|
||||
setStatus('Preview mode', 'saved');
|
||||
}
|
||||
}
|
||||
|
||||
async function saveFile() {
|
||||
if (!currentFile) return;
|
||||
|
||||
|
||||
497
kanban/grup-sprijin.html
Normal file
497
kanban/grup-sprijin.html
Normal file
@@ -0,0 +1,497 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ro">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Echo · Grup Sprijin</title>
|
||||
<link rel="stylesheet" href="common.css">
|
||||
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js"></script>
|
||||
<style>
|
||||
.main {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
padding: var(--space-5);
|
||||
}
|
||||
|
||||
.page-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: var(--space-6);
|
||||
flex-wrap: wrap;
|
||||
gap: var(--space-4);
|
||||
}
|
||||
|
||||
.page-title {
|
||||
font-size: var(--text-xl);
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.search-bar input {
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
.filters {
|
||||
display: flex;
|
||||
gap: var(--space-2);
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.filter-btn {
|
||||
padding: var(--space-2) var(--space-3);
|
||||
border-radius: var(--radius-md);
|
||||
border: 1px solid var(--border);
|
||||
background: var(--bg-surface);
|
||||
color: var(--text-secondary);
|
||||
cursor: pointer;
|
||||
font-size: var(--text-sm);
|
||||
transition: all var(--transition-fast);
|
||||
}
|
||||
|
||||
.filter-btn:hover {
|
||||
background: var(--bg-surface-hover);
|
||||
}
|
||||
|
||||
.filter-btn.active {
|
||||
background: var(--accent);
|
||||
color: white;
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
.items-grid {
|
||||
display: grid;
|
||||
gap: var(--space-4);
|
||||
}
|
||||
|
||||
.item-card {
|
||||
background: var(--bg-surface);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg);
|
||||
padding: var(--space-4);
|
||||
cursor: pointer;
|
||||
transition: all var(--transition-fast);
|
||||
}
|
||||
|
||||
.item-card:hover {
|
||||
border-color: var(--accent);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.item-card.used {
|
||||
opacity: 0.7;
|
||||
border-left: 3px solid var(--success);
|
||||
}
|
||||
|
||||
.item-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
margin-bottom: var(--space-2);
|
||||
}
|
||||
|
||||
.item-title {
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.item-type {
|
||||
font-size: var(--text-xs);
|
||||
padding: var(--space-1) var(--space-2);
|
||||
border-radius: var(--radius-sm);
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.item-type.exercitiu { background: rgba(59, 130, 246, 0.2); color: #3b82f6; }
|
||||
.item-type.meditatie { background: rgba(139, 92, 246, 0.2); color: #8b5cf6; }
|
||||
.item-type.intrebare { background: rgba(20, 184, 166, 0.2); color: #14b8a6; }
|
||||
.item-type.reflectie { background: rgba(249, 115, 22, 0.2); color: #f97316; }
|
||||
|
||||
.item-tags {
|
||||
display: flex;
|
||||
gap: var(--space-1);
|
||||
flex-wrap: wrap;
|
||||
margin-top: var(--space-2);
|
||||
}
|
||||
|
||||
.tag {
|
||||
font-size: var(--text-xs);
|
||||
padding: 2px 6px;
|
||||
background: var(--bg-surface-hover);
|
||||
border-radius: var(--radius-sm);
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.item-used {
|
||||
font-size: var(--text-xs);
|
||||
color: var(--success);
|
||||
margin-top: var(--space-2);
|
||||
}
|
||||
|
||||
/* Modal */
|
||||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0,0,0,0.7);
|
||||
z-index: 1000;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.modal.open {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background: #1a1a2e;
|
||||
border-radius: var(--radius-lg);
|
||||
max-width: 600px;
|
||||
width: 90%;
|
||||
max-height: 80vh;
|
||||
overflow-y: auto;
|
||||
padding: var(--space-5);
|
||||
box-shadow: 0 20px 50px rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
[data-theme="light"] .modal-content {
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.modal-title {
|
||||
font-size: var(--text-lg);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.modal-close {
|
||||
background: none;
|
||||
border: none;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
padding: var(--space-1);
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
color: var(--text-secondary);
|
||||
line-height: 1.6;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.modal-actions {
|
||||
margin-top: var(--space-4);
|
||||
display: flex;
|
||||
gap: var(--space-2);
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: var(--space-2) var(--space-4);
|
||||
border-radius: var(--radius-md);
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
font-size: var(--text-sm);
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background: var(--accent);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background: var(--bg-surface);
|
||||
color: var(--text-secondary);
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.stats {
|
||||
display: flex;
|
||||
gap: var(--space-4);
|
||||
margin-bottom: var(--space-4);
|
||||
font-size: var(--text-sm);
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.error-msg {
|
||||
background: rgba(239, 68, 68, 0.1);
|
||||
border: 1px solid rgba(239, 68, 68, 0.3);
|
||||
color: #ef4444;
|
||||
padding: var(--space-4);
|
||||
border-radius: var(--radius-md);
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="header">
|
||||
<a href="index.html" class="logo">
|
||||
<i data-lucide="circle-dot"></i>
|
||||
Echo
|
||||
</a>
|
||||
<nav class="nav">
|
||||
<a href="index.html" class="nav-item">
|
||||
<i data-lucide="layout-list"></i>
|
||||
<span>Tasks</span>
|
||||
</a>
|
||||
<a href="notes.html" class="nav-item">
|
||||
<i data-lucide="file-text"></i>
|
||||
<span>Notes</span>
|
||||
</a>
|
||||
<a href="files.html" class="nav-item">
|
||||
<i data-lucide="folder"></i>
|
||||
<span>Files</span>
|
||||
</a>
|
||||
<a href="grup-sprijin.html" class="nav-item active">
|
||||
<i data-lucide="heart-handshake"></i>
|
||||
<span>Grup</span>
|
||||
</a>
|
||||
<button class="theme-toggle" onclick="toggleTheme()" title="Schimbă tema">
|
||||
<i data-lucide="sun" id="themeIcon"></i>
|
||||
</button>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="main">
|
||||
<div class="page-header">
|
||||
<h1 class="page-title">Grup Sprijin - Exerciții & Întrebări</h1>
|
||||
<div class="search-bar">
|
||||
<input type="text" class="input" placeholder="Caută..." id="searchInput">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stats" id="stats"></div>
|
||||
|
||||
<div class="fise-section" id="fiseSection" style="margin-bottom: var(--space-5); display: none;">
|
||||
<h2 style="font-size: var(--text-lg); margin-bottom: var(--space-3); color: var(--text-primary);">Fișe întâlniri</h2>
|
||||
<div class="fise-list" id="fiseList" style="display: flex; gap: var(--space-2); flex-wrap: wrap;"></div>
|
||||
</div>
|
||||
|
||||
<div class="filters" id="filters">
|
||||
<button class="filter-btn active" data-filter="all">Toate</button>
|
||||
<button class="filter-btn" data-filter="exercitiu">Exerciții</button>
|
||||
<button class="filter-btn" data-filter="meditatie">Meditații</button>
|
||||
<button class="filter-btn" data-filter="intrebare">Întrebări</button>
|
||||
<button class="filter-btn" data-filter="reflectie">Reflecții</button>
|
||||
<button class="filter-btn" data-filter="unused">Nefolosite</button>
|
||||
<button class="filter-btn" data-filter="used">Folosite</button>
|
||||
</div>
|
||||
|
||||
<div class="items-grid" id="itemsGrid">
|
||||
<p>Se încarcă...</p>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div class="modal" id="modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<div>
|
||||
<h2 class="modal-title" id="modalTitle"></h2>
|
||||
<span class="item-type" id="modalType"></span>
|
||||
</div>
|
||||
<button class="modal-close" onclick="closeModal()">
|
||||
<i data-lucide="x"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body" id="modalBody"></div>
|
||||
<div class="item-tags" id="modalTags"></div>
|
||||
<div class="modal-actions">
|
||||
<button class="btn btn-primary" id="markUsedBtn" onclick="toggleUsed()">Marchează folosit</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Theme
|
||||
function toggleTheme() {
|
||||
const body = document.body;
|
||||
const current = body.getAttribute('data-theme') || 'dark';
|
||||
const next = current === 'dark' ? 'light' : 'dark';
|
||||
body.setAttribute('data-theme', next);
|
||||
localStorage.setItem('theme', next);
|
||||
updateThemeIcon();
|
||||
}
|
||||
|
||||
function updateThemeIcon() {
|
||||
const theme = document.body.getAttribute('data-theme') || 'dark';
|
||||
const icon = document.getElementById('themeIcon');
|
||||
if (icon) {
|
||||
icon.setAttribute('data-lucide', theme === 'dark' ? 'sun' : 'moon');
|
||||
lucide.createIcons();
|
||||
}
|
||||
}
|
||||
|
||||
// Load saved theme
|
||||
const savedTheme = localStorage.getItem('theme') || 'dark';
|
||||
document.body.setAttribute('data-theme', savedTheme);
|
||||
|
||||
// Data
|
||||
const API_BASE = window.location.pathname.includes('/echo/') ? '/echo' : '';
|
||||
let items = [];
|
||||
let currentFilter = 'all';
|
||||
let currentItem = null;
|
||||
|
||||
async function loadItems() {
|
||||
try {
|
||||
const response = await fetch('grup-sprijin/index.json?t=' + Date.now());
|
||||
if (!response.ok) throw new Error('Nu am găsit fișierul');
|
||||
items = await response.json();
|
||||
render();
|
||||
} catch (e) {
|
||||
console.error('Error loading items:', e);
|
||||
document.getElementById('itemsGrid').innerHTML = `
|
||||
<div class="error-msg">
|
||||
Eroare la încărcare: ${e.message}<br>
|
||||
<small>Verifică dacă fișierul grup-sprijin/index.json există</small>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
function render() {
|
||||
const search = document.getElementById('searchInput').value.toLowerCase();
|
||||
|
||||
let filtered = items.filter(item => {
|
||||
if (search && !item.title.toLowerCase().includes(search) &&
|
||||
!item.content.toLowerCase().includes(search) &&
|
||||
!item.tags.some(t => t.toLowerCase().includes(search))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (currentFilter === 'all') return true;
|
||||
if (currentFilter === 'used') return item.used;
|
||||
if (currentFilter === 'unused') return !item.used;
|
||||
return item.type === currentFilter;
|
||||
});
|
||||
|
||||
const total = items.length;
|
||||
const used = items.filter(i => i.used).length;
|
||||
document.getElementById('stats').innerHTML = `
|
||||
<span>Total: ${total}</span>
|
||||
<span>Folosite: ${used}</span>
|
||||
<span>Nefolosite: ${total - used}</span>
|
||||
`;
|
||||
|
||||
const grid = document.getElementById('itemsGrid');
|
||||
if (filtered.length === 0) {
|
||||
grid.innerHTML = '<p style="color: var(--text-muted);">Niciun rezultat</p>';
|
||||
return;
|
||||
}
|
||||
|
||||
grid.innerHTML = filtered.map(item => `
|
||||
<div class="item-card ${item.used ? 'used' : ''}" onclick="openModal('${item.id}')">
|
||||
<div class="item-header">
|
||||
<span class="item-title">${item.title}</span>
|
||||
<span class="item-type ${item.type}">${item.type}</span>
|
||||
</div>
|
||||
<div class="item-tags">
|
||||
${item.tags.map(t => `<span class="tag">${t}</span>`).join('')}
|
||||
</div>
|
||||
${item.used ? `<div class="item-used">✓ Folosit: ${item.used}</div>` : ''}
|
||||
</div>
|
||||
`).join('');
|
||||
|
||||
lucide.createIcons();
|
||||
}
|
||||
|
||||
function openModal(id) {
|
||||
currentItem = items.find(i => i.id === id);
|
||||
if (!currentItem) return;
|
||||
|
||||
document.getElementById('modalTitle').textContent = currentItem.title;
|
||||
document.getElementById('modalType').textContent = currentItem.type;
|
||||
document.getElementById('modalType').className = `item-type ${currentItem.type}`;
|
||||
document.getElementById('modalBody').textContent = currentItem.content;
|
||||
document.getElementById('modalTags').innerHTML = currentItem.tags.map(t => `<span class="tag">${t}</span>`).join('');
|
||||
document.getElementById('markUsedBtn').textContent = currentItem.used ? 'Marchează nefolosit' : 'Marchează folosit';
|
||||
|
||||
document.getElementById('modal').classList.add('open');
|
||||
lucide.createIcons();
|
||||
}
|
||||
|
||||
function closeModal() {
|
||||
document.getElementById('modal').classList.remove('open');
|
||||
currentItem = null;
|
||||
}
|
||||
|
||||
async function toggleUsed() {
|
||||
if (!currentItem) return;
|
||||
|
||||
const idx = items.findIndex(i => i.id === currentItem.id);
|
||||
if (idx === -1) return;
|
||||
|
||||
if (items[idx].used) {
|
||||
items[idx].used = null;
|
||||
} else {
|
||||
items[idx].used = new Date().toLocaleDateString('ro-RO');
|
||||
}
|
||||
|
||||
try {
|
||||
await fetch(`${API_BASE}/api/files`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
path: 'grup-sprijin/index.json',
|
||||
content: JSON.stringify(items, null, 2)
|
||||
})
|
||||
});
|
||||
} catch (e) {
|
||||
console.error('Error saving:', e);
|
||||
}
|
||||
|
||||
closeModal();
|
||||
render();
|
||||
}
|
||||
|
||||
document.querySelectorAll('.filter-btn').forEach(btn => {
|
||||
btn.addEventListener('click', () => {
|
||||
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
|
||||
btn.classList.add('active');
|
||||
currentFilter = btn.dataset.filter;
|
||||
render();
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('searchInput').addEventListener('input', render);
|
||||
|
||||
document.getElementById('modal').addEventListener('click', (e) => {
|
||||
if (e.target.id === 'modal') closeModal();
|
||||
});
|
||||
|
||||
// Load fise
|
||||
async function loadFise() {
|
||||
try {
|
||||
const response = await fetch(`${API_BASE}/api/files?path=kanban/grup-sprijin&action=list`);
|
||||
const data = await response.json();
|
||||
if (data.items) {
|
||||
const fise = data.items.filter(f => f.name.startsWith('fisa-') && f.name.endsWith('.md'));
|
||||
if (fise.length > 0) {
|
||||
document.getElementById('fiseSection').style.display = 'block';
|
||||
document.getElementById('fiseList').innerHTML = fise.map(f => `
|
||||
<a href="files.html#kanban/grup-sprijin/${f.name}" class="filter-btn" style="text-decoration: none;">
|
||||
${f.name.replace('fisa-', '').replace('.md', '')}
|
||||
</a>
|
||||
`).join('');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('No fise yet');
|
||||
}
|
||||
}
|
||||
|
||||
// Init
|
||||
loadItems();
|
||||
loadFise();
|
||||
lucide.createIcons();
|
||||
updateThemeIcon();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
102
kanban/grup-sprijin/fisa-2026-02-05-ancorare-oglinda.md
Normal file
102
kanban/grup-sprijin/fisa-2026-02-05-ancorare-oglinda.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# Fișă Întâlnire Grup Sprijin
|
||||
|
||||
**Data:** Joi, 5 februarie 2026, ora 18:00
|
||||
**Tema:** Ancorare emoții pozitive & Oglinda celorlalți
|
||||
|
||||
---
|
||||
|
||||
## 1. Check-in (15-20 min)
|
||||
|
||||
**Întrebare de deschidere:**
|
||||
- Ce s-a întâmplat în ultimele două săptămâni?
|
||||
- Ce emoții ai avut? (bucurie, frustrare, teamă, energie, oboseală...)
|
||||
- Ce simți în corp acum, în acest moment?
|
||||
|
||||
**Format:** Fiecare pe rând, fără întreruperi, fără sfaturi. Doar ascultare.
|
||||
|
||||
---
|
||||
|
||||
## 2. Exercițiu principal: Ancorarea emoțiilor (25-30 min)
|
||||
|
||||
**Scop:** Să învățăm să accesăm o emoție pozitivă când avem nevoie de ea.
|
||||
|
||||
**Introducere (5 min):**
|
||||
Când vrei să simți liniște, încredere, energie sau bucurie - poți să "ancorezi" acea emoție și să o reactivezi printr-un gest, cuvânt sau imagine.
|
||||
|
||||
**Pași pentru exercițiu:**
|
||||
|
||||
1. **Alege emoția** (2 min)
|
||||
- Ce emoție ți-ai dori să poți accesa mai ușor?
|
||||
- (liniște, încredere, bucurie, energie, curaj...)
|
||||
|
||||
2. **Găsește momentul** (5 min)
|
||||
- Gândește-te la un moment din viața ta când ai simțit puternic acea emoție
|
||||
- Unde erai? Cu cine? Ce făceai?
|
||||
- Închide ochii și retrăiește acel moment
|
||||
|
||||
3. **Simte în corp** (5 min)
|
||||
- Unde simți emoția în corp?
|
||||
- Ce senzații ai? (căldură, expansiune, ușurătate...)
|
||||
- Amplifică senzația
|
||||
|
||||
4. **Ancorează** (3 min)
|
||||
- În punctul de intensitate maximă, fă un gest (ex: strânge pumnul, atinge inelul)
|
||||
- Sau spune un cuvânt în gând
|
||||
- Sau vizualizează o imagine/culoare
|
||||
|
||||
5. **Testează** (5 min)
|
||||
- Deschide ochii, scutură corpul
|
||||
- Acum fă gestul/spune cuvântul
|
||||
- Observă: revine emoția?
|
||||
|
||||
**Discuție în perechi:** Cum a fost? Ce emoție ai ancorat? (5 min)
|
||||
|
||||
---
|
||||
|
||||
## 3. Reflecție: Oglinda celorlalți (15 min)
|
||||
|
||||
**Idee centrală:**
|
||||
"Tot ce văd la tine, am și eu în mine."
|
||||
|
||||
Când ne irită ceva la altcineva, adesea e ceva ce nu acceptăm la noi. Când admirăm ceva, e ceva ce avem dar nu recunoaștem.
|
||||
|
||||
**Întrebări pentru reflecție individuală (5 min):**
|
||||
- Cine te-a iritat recent? Ce anume te-a deranjat la acea persoană?
|
||||
- Unde ai și tu acea trăsătură, poate în altă formă?
|
||||
|
||||
**Discuție în grup (10 min):**
|
||||
- Cine vrea să împărtășească?
|
||||
- Fără sfaturi, doar ascultare și "mulțumesc"
|
||||
|
||||
---
|
||||
|
||||
## 4. Încheiere (10 min)
|
||||
|
||||
**Întrebări de închidere (fiecare răspunde pe scurt):**
|
||||
- Cu ce pleci de aici?
|
||||
- Ce vrei să faci diferit până data viitoare?
|
||||
|
||||
**Temă pentru acasă (opțional):**
|
||||
Practică ancora de 2-3 ori pe zi. Observă când ai nevoie de ea.
|
||||
|
||||
---
|
||||
|
||||
## Note pentru facilitator
|
||||
|
||||
- Adu apă pentru toată lumea
|
||||
- Pregătește spațiul: scaune în cerc
|
||||
- Cronometrează exercițiile
|
||||
- Dacă cineva vorbește prea mult la check-in, întreabă blând "Mai ai ceva esențial?"
|
||||
|
||||
---
|
||||
|
||||
## După întâlnire
|
||||
|
||||
**Ce a mers bine:**
|
||||
|
||||
|
||||
**Ce aș face diferit:**
|
||||
|
||||
|
||||
**Observații despre grup:**
|
||||
|
||||
74
kanban/grup-sprijin/index.json
Normal file
74
kanban/grup-sprijin/index.json
Normal file
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"id": "ancorare-emotii",
|
||||
"title": "Exercițiu de ancorare a emoțiilor",
|
||||
"type": "exercitiu",
|
||||
"tags": ["NLP", "ancorare", "emotii", "corp"],
|
||||
"used": null,
|
||||
"content": "Să simți o emoție pozitivă pe care ți-o dorești și apoi să faci exercițiul cu ancorarea emoției. Când vrei să simți liniște, satisfacție, bucurie, energie - să revină în corp.\n\nPași:\n1. Gândește-te la un moment în care ai simțit emoția dorită\n2. Simte-o în corp\n3. Ancoreaz-o (gest, cuvânt, imagine)\n4. Testează ancora"
|
||||
},
|
||||
{
|
||||
"id": "meditatie-demnitate",
|
||||
"title": "Meditația cu demnitatea",
|
||||
"type": "meditatie",
|
||||
"tags": ["meditatie", "demnitate", "sine"],
|
||||
"used": null,
|
||||
"content": "Meditație despre demnitate personală.\n\n(De dezvoltat - Marius să adauge textul complet)"
|
||||
},
|
||||
{
|
||||
"id": "meditatie-eu-sunt-mai-mare",
|
||||
"title": "Eu sunt mai mare decât gândurile și emoțiile mele",
|
||||
"type": "meditatie",
|
||||
"tags": ["meditatie", "ganduri", "emotii", "distantare"],
|
||||
"used": null,
|
||||
"content": "Meditație: Eu sunt mai mare decât gândurile mele, mai mare decât emoțiile mele.\n\nIdee: Creezi distanță între tine și gânduri/emoții. Tu ești observatorul, nu gândul."
|
||||
},
|
||||
{
|
||||
"id": "meditatie-mindfulness",
|
||||
"title": "Moment de mindfulness",
|
||||
"type": "meditatie",
|
||||
"tags": ["meditatie", "mindfulness", "prezent"],
|
||||
"used": null,
|
||||
"content": "Un moment de mindfulness - prezență în aici și acum.\n\n(De dezvoltat)"
|
||||
},
|
||||
{
|
||||
"id": "intrebare-bucurie-azi",
|
||||
"title": "Ce ai făcut azi care ți-a adus bucurie?",
|
||||
"type": "intrebare",
|
||||
"tags": ["introspectie", "bucurie", "energie", "recunostinta"],
|
||||
"used": null,
|
||||
"content": "Întrebări în secvență:\n1. Ce îți dorești să simți? (bucurie, energie, entuziasm, motivație)\n2. Când ai mai simțit asta?\n3. Ce ai făcut ASTĂZI care să îți aducă acea emoție?"
|
||||
},
|
||||
{
|
||||
"id": "intrebare-copil-interior",
|
||||
"title": "Ce îți aducea bucurie când erai mic?",
|
||||
"type": "intrebare",
|
||||
"tags": ["introspectie", "copilarie", "pasiune", "bucurie"],
|
||||
"used": null,
|
||||
"content": "Ce îți doreai să faci când erai mic? Ce îți aducea bucurie, entuziasm, satisfacție?\n\nCare era emoția? Ce poți să faci ACUM care să îți dea aceeași emoție?\n\nAdu-ți aminte de copilul care erai (poate mai ești și acum). Ce dorește să facă? Ce simțea? Când ai simțit acele emoții?"
|
||||
},
|
||||
{
|
||||
"id": "reflectie-barbati-energie",
|
||||
"title": "Credințe despre bărbați și cerut ajutor",
|
||||
"type": "reflectie",
|
||||
"tags": ["credinte", "masculin", "ajutor", "energie", "vulnerabilitate"],
|
||||
"used": null,
|
||||
"content": "Credințe limitatoare:\n- Bărbații sunt puternici\n- Bărbații trebuie să facă totul singuri\n- Bărbații nu trebuie să ceară ajutor\n\nȘi pentru femei - când trebuie să facă totul singure, nu cer ajutor, se încarcă, trag, împing dintr-o energie masculină.\n\nE OK să faci, dar te oprește de la resursele de energie și creativitate.\n\nÎntrebare: Unde tragi singur când ai putea cere ajutor?"
|
||||
},
|
||||
{
|
||||
"id": "reflectie-oglinda",
|
||||
"title": "Tot ce văd la tine am și eu în mine",
|
||||
"type": "reflectie",
|
||||
"tags": ["oglinda", "proiectie", "emotii", "autocunoastere"],
|
||||
"used": null,
|
||||
"content": "Tot ce văd la tine am și eu în mine:\n- Sentimentul de vină, de rușine\n- Nu în aceleași situații\n- Furie, frustrare, jenă\n- Dar și bucurie\n\nCeilalți sunt oglinzi pentru noi."
|
||||
},
|
||||
{
|
||||
"id": "beneficiu-grup-siguranta",
|
||||
"title": "Beneficiul grupului - siguranță",
|
||||
"type": "reflectie",
|
||||
"tags": ["grup", "siguranta", "energie", "vulnerabilitate"],
|
||||
"used": null,
|
||||
"content": "Câtă energie consum să arăt ce trebuie?\n\nÎn grup nu mai este nevoie de energie să mențin scutul sus, să țin sub apă balonul.\n\nÎntr-un grup de sprijin, mă simt în siguranță, nu sunt judecat."
|
||||
}
|
||||
]
|
||||
69
kanban/grup-sprijin/template-fisa.md
Normal file
69
kanban/grup-sprijin/template-fisa.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# Fișă Întâlnire Grup Sprijin
|
||||
|
||||
**Data:** [DATA]
|
||||
**Tema:** [TEMA PRINCIPALA]
|
||||
|
||||
---
|
||||
|
||||
## 1. Check-in (15-20 min)
|
||||
|
||||
**Întrebare de deschidere:**
|
||||
- Ce s-a întâmplat în ultima perioadă?
|
||||
- Ce emoții ai avut?
|
||||
- Ce simți în corp acum?
|
||||
|
||||
**Format:** Fiecare pe rând, fără întreruperi, fără sfaturi
|
||||
|
||||
---
|
||||
|
||||
## 2. Exercițiu principal (20-30 min)
|
||||
|
||||
**Exercițiu:** [NUMELE EXERCITIULUI]
|
||||
|
||||
**Descriere:**
|
||||
[DESCRIERE]
|
||||
|
||||
**Întrebări pentru reflecție:**
|
||||
-
|
||||
-
|
||||
-
|
||||
|
||||
**Format:** Individual / Perechi / Grup mare
|
||||
|
||||
---
|
||||
|
||||
## 3. Exercițiu secundar (opțional, 15 min)
|
||||
|
||||
**Exercițiu:** [NUMELE]
|
||||
|
||||
**Descriere:**
|
||||
[DESCRIERE]
|
||||
|
||||
---
|
||||
|
||||
## 4. Încheiere (10 min)
|
||||
|
||||
**Întrebare de închidere:**
|
||||
- Cu ce pleci de aici?
|
||||
- Ce ai învățat?
|
||||
- Ce vrei să faci diferit?
|
||||
|
||||
---
|
||||
|
||||
## Note pentru facilitator
|
||||
|
||||
-
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## După întâlnire
|
||||
|
||||
**Ce a mers bine:**
|
||||
|
||||
|
||||
**Ce aș face diferit:**
|
||||
|
||||
|
||||
**Feedback primit:**
|
||||
|
||||
@@ -341,6 +341,10 @@
|
||||
<i data-lucide="folder"></i>
|
||||
<span>Files</span>
|
||||
</a>
|
||||
<a href="grup-sprijin.html" class="nav-item">
|
||||
<i data-lucide="heart-handshake"></i>
|
||||
<span>Grup</span>
|
||||
</a>
|
||||
<button class="theme-toggle" onclick="toggleTheme()" title="Schimbă tema">
|
||||
<i data-lucide="sun" id="themeIcon"></i>
|
||||
</button>
|
||||
|
||||
@@ -407,6 +407,10 @@
|
||||
<i data-lucide="folder"></i>
|
||||
<span>Files</span>
|
||||
</a>
|
||||
<a href="grup-sprijin.html" class="nav-item">
|
||||
<i data-lucide="heart-handshake"></i>
|
||||
<span>Grup</span>
|
||||
</a>
|
||||
<button class="theme-toggle" onclick="toggleTheme()" title="Schimbă tema">
|
||||
<i data-lucide="sun" id="themeIcon"></i>
|
||||
</button>
|
||||
@@ -477,47 +481,21 @@
|
||||
lucide.createIcons();
|
||||
|
||||
const notesCache = {};
|
||||
|
||||
const notesIndex = [
|
||||
{
|
||||
"file": "2026-01-29_remotion-skill-claude-code.md",
|
||||
"title": "How people are generating videos with Claude Code",
|
||||
"date": "2026-01-29",
|
||||
"tags": ["claude", "remotion", "video", "automation"]
|
||||
},
|
||||
{
|
||||
"file": "2026-01-29_gsd-framework-claude-code.md",
|
||||
"title": "Forget Ralph Loops: The New GSD Framework for Claude",
|
||||
"date": "2026-01-29",
|
||||
"tags": ["claude-code", "gsd", "framework", "sub-agents"]
|
||||
},
|
||||
{
|
||||
"file": "2026-01-29_greseli-post-apa.md",
|
||||
"title": "Greșeli frecvente în timpul postului doar cu apă",
|
||||
"date": "2026-01-29",
|
||||
"tags": ["post", "water-fasting", "sănătate"]
|
||||
},
|
||||
{
|
||||
"file": "2026-01-29_clawdbot-security-vulnerabilities.md",
|
||||
"title": "It Got Worse (Clawdbot) - Security Vulnerabilities",
|
||||
"date": "2026-01-29",
|
||||
"tags": ["clawdbot", "security", "vulnerabilities"]
|
||||
},
|
||||
{
|
||||
"file": "2025-01-30_clawdbot-5-use-cases.md",
|
||||
"title": "5 Insane ClawdBot Use Cases You Need To Do Immediately",
|
||||
"date": "2025-01-30",
|
||||
"tags": ["clawdbot", "automation", "productivity"]
|
||||
},
|
||||
{
|
||||
"file": "2025-01-30_claude-code-do-work-pattern.md",
|
||||
"title": "The Most Powerful Claude Code Pattern I've Found",
|
||||
"date": "2025-01-30",
|
||||
"tags": ["claude-code", "skills", "workflow"]
|
||||
}
|
||||
];
|
||||
|
||||
let notesIndex = [];
|
||||
const notesBasePath = "youtube-notes/";
|
||||
const indexPath = notesBasePath + "index.json";
|
||||
|
||||
// Load notes index from JSON
|
||||
async function loadNotesIndex() {
|
||||
try {
|
||||
const response = await fetch(indexPath + '?t=' + Date.now());
|
||||
notesIndex = await response.json();
|
||||
console.log(`Loaded ${notesIndex.length} notes from index.json`);
|
||||
} catch (e) {
|
||||
console.error('Failed to load notes index:', e);
|
||||
notesIndex = [];
|
||||
}
|
||||
}
|
||||
let selectedTags = new Set();
|
||||
|
||||
// Extract all tags with counts
|
||||
@@ -762,11 +740,15 @@
|
||||
if (e.key === 'Escape') closeNote();
|
||||
});
|
||||
|
||||
// Init
|
||||
renderTagPills();
|
||||
renderNotesAccordion();
|
||||
preloadNotes();
|
||||
checkHash();
|
||||
// Init - load index first, then render
|
||||
async function init() {
|
||||
await loadNotesIndex();
|
||||
renderTagPills();
|
||||
renderNotesAccordion();
|
||||
preloadNotes();
|
||||
checkHash();
|
||||
}
|
||||
init();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"lastUpdated": "2026-01-29T14:54:25.803288Z",
|
||||
"lastUpdated": "2026-01-29T20:43:29.785Z",
|
||||
"columns": [
|
||||
{
|
||||
"id": "backlog",
|
||||
@@ -30,6 +30,14 @@
|
||||
"id": "done",
|
||||
"name": "Done",
|
||||
"tasks": [
|
||||
{
|
||||
"id": "task-029",
|
||||
"title": "Test sortare timestamp",
|
||||
"description": "Verificare sortare",
|
||||
"created": "2026-01-29T14:54:17Z",
|
||||
"priority": "medium",
|
||||
"completed": "2026-01-29T14:54:25Z"
|
||||
},
|
||||
{
|
||||
"id": "task-027",
|
||||
"title": "UI fixes: kanban icons + notes tags",
|
||||
@@ -190,14 +198,6 @@
|
||||
"created": "2026-01-29",
|
||||
"priority": "medium",
|
||||
"completed": "2026-01-29"
|
||||
},
|
||||
{
|
||||
"id": "task-029",
|
||||
"title": "Test sortare timestamp",
|
||||
"description": "Verificare sortare",
|
||||
"created": "2026-01-29T14:54:17Z",
|
||||
"priority": "medium",
|
||||
"completed": "2026-01-29T14:54:25Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user