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:
Echo
2026-01-30 13:46:57 +00:00
parent 75aa1702a0
commit f371f579a1
79 changed files with 3343 additions and 222 deletions

View File

@@ -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
View 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>

View 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:**

View 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."
}
]

View 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:**

View File

@@ -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>

View File

@@ -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>

View File

@@ -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"
}
]
}