diff --git a/memory/2026-02-14.md b/memory/2026-02-14.md index 0521998..5bbfc77 100644 --- a/memory/2026-02-14.md +++ b/memory/2026-02-14.md @@ -1,8 +1,12 @@ -# 2026-02-14 (Sâmbătă) +# 2026-02-14 (Vineri) -## Daily Audit - 09:30 -- 3 probleme găsite -- yt_download.py lipsă (referit în night-execute jobs) -- 6 cron jobs active nedocumentate în cron-jobs.md -- 4 scripturi nedocumentate în TOOLS.md -- Propuneri trimise pe #echo-work +## Procesate + +### YouTube +1. **Talk to Claude on 3CX Phone System Tutorial** (NetworkChuck) - tutorial cum să vorbești cu Claude Code prin telefon, 3CX gratuit + Raspberry Pi + 11Labs + Whisper API. Salvat: `kb/youtube/2025-02-13_talk-to-claude-3cx-phone.md` +2. **Cum să pornești sistemul limfatic? 4 metode** (Vladimir Colun) - vibrație, lovituri dinamice, dușuri contrast, detox digestiv. Salvat: `kb/youtube/2025-02-14_sistem-limfatic-4-metode.md` + +## Note +- Marius a trimis link-urile pe Discord #echo +- Primul link venit seara (23:35 București), al doilea dimineața (08:40 București) +- Ambele procesate imediat cu transcript + TL;DR + quote-uri + idei diff --git a/memory/kb/index.json b/memory/kb/index.json index 87375e3..bbfbbce 100644 --- a/memory/kb/index.json +++ b/memory/kb/index.json @@ -48,6 +48,25 @@ "video": "https://www.youtube.com/watch?v=hY67Fqd44tI", "tldr": "3. **Dușuri contrast:** Ai încercat vreodată? Dacă nu, ai fi dispus să începi doar cu picioarele? (progresiv, cum recomandă Colun)" }, + { + "file": "notes-data/projects/grup-sprijin/biblioteca/fisa-2026-02-19-umbra-iarna-din-suflet.md", + "title": "Fișă Întâlnire Grup Sprijin", + "date": "2026-02-14", + "tags": [ + "grup-sprijin" + ], + "domains": [ + "sprijin" + ], + "types": [ + "fisa" + ], + "category": "projects", + "project": "grup-sprijin", + "subdir": "biblioteca", + "video": "", + "tldr": "" + }, { "file": "notes-data/tools/cron-jobs.md", "title": "Cron Jobs - Lista completă", @@ -78,7 +97,7 @@ }, { "file": "memory/2026-02-14.md", - "title": "2026-02-14 (Sâmbătă)", + "title": "2026-02-14 (Vineri)", "date": "2026-02-14", "tags": [], "domains": [], @@ -89,7 +108,7 @@ "project": null, "subdir": null, "video": "", - "tldr": "- Propuneri trimise pe #echo-work" + "tldr": "- Ambele procesate imediat cu transcript + TL;DR + quote-uri + idei" }, { "file": "notes-data/coaching/2026-02-13-dimineata.md", @@ -4874,8 +4893,8 @@ "title": "Proiect: Vending Master - Integrare Website → ROA", "date": "2026-01-30", "tags": [ - "integrare", - "vending-master" + "vending-master", + "integrare" ], "domains": [ "work" @@ -5355,12 +5374,12 @@ } ], "stats": { - "total": 314, + "total": 315, "by_domain": { "work": 88, "health": 46, "growth": 140, - "sprijin": 30, + "sprijin": 31, "scout": 2 }, "by_category": { @@ -5371,7 +5390,7 @@ "exercitii": 4, "health": 2, "insights": 21, - "projects": 172, + "projects": 173, "reflectii": 3, "retete": 1, "tools": 6, diff --git a/memory/kb/projects/grup-sprijin/biblioteca/fisa-2026-02-19-umbra-iarna-din-suflet.md b/memory/kb/projects/grup-sprijin/biblioteca/fisa-2026-02-19-umbra-iarna-din-suflet.md new file mode 100644 index 0000000..264d78b --- /dev/null +++ b/memory/kb/projects/grup-sprijin/biblioteca/fisa-2026-02-19-umbra-iarna-din-suflet.md @@ -0,0 +1,112 @@ +# Fișă Întâlnire Grup Sprijin + +**Data:** Joi, 19 februarie 2026, ora 18:00 +**Tema:** Umbra — Iarna din suflet + +--- + +## 1. Check-in (15-20 min) + +**Întrebare de deschidere:** +- Ce s-a întâmplat în ultimele două săptămâni? +- Cum te simți acum? Ce emoții aduci cu tine în seara asta? +- Dacă starea ta de acum ar fi un anotimp — care ar fi? + +**Format:** Fiecare pe rând, fără întreruperi, fără sfaturi. Doar ascultare. + +--- + +## 2. Cadrare: Ce este Umbra? (10 min) + +**De citit/spus grupului:** + +Toți avem părți din noi pe care le ascundem — de alții, dar mai ales de noi înșine. Nu neapărat lucruri "rele". Pot fi calități, emoții, dorințe pe care le-am învățat că nu sunt ok. Le-am pus într-o cutie și am aruncat cheia. + +Carl Jung le-a numit **Umbre**. Nu sunt dușmani. Sunt părți din noi care așteaptă să fie văzute. + +Două lucruri importante despre umbre: +- **Consumă energie** ca să le ținem ascunse. E ca și cum ai ține un balon sub apă — nu e greu o secundă, dar dacă îl ții toată ziua, te epuizează. +- **Ne influențează fără să știm.** Ne irită la alții exact ce nu acceptăm la noi. Ne sabotează în moduri pe care nu le înțelegem. + +Vestea bună: nu trebuie să le "reparăm". Trebuie doar să le vedem. Să le acceptăm că sunt acolo. Asta singură eliberează energie. + +**De ce facem asta azi:** Nu pentru a rezolva ceva. Ci pentru a privi cu curiozitate, într-un loc sigur, unde nimeni nu judecă. Fiecare explorează cât vrea și cât se simte confortabil. Nu e nicio presiune să împărtășești mai mult decât simți. + +--- + +## 3. Exercițiu: Cele 4 întrebări ale Umbrei (30 min) + +**Cadrare (2-3 min):** + +Următoarele întrebări sunt ca niște oglinzi. Nu au răspunsuri corecte sau greșite. Scopul nu e să analizezi, ci să observi — ce apare? Ce simți când citești întrebarea? Uneori prima reacție (chiar și "nu știu" sau un discomfort) e cel mai sincer răspuns. + +**Întrebările** (fiecare primește foaia, 10-12 min reflecție individuală, în liniște): + +1. **Ce te irită la alții?** Gândește-te la cineva care te-a deranjat recent. Ce anume te-a supărat? Unde ai și tu acea trăsătură — poate în altă formă, poate mai mică? + +2. **Ce ascunzi despre tine?** Ce parte din tine nu arăți lumii? Ce ar fi surprinzător pentru alții să afle despre tine? + +3. **Ce ai face dacă nu te-ar judeca nimeni?** Dacă ai fi complet liber de privirea celorlalți — ce ai spune, ce ai face, cum ai trăi diferit? + +4. **Ce complimente refuzi sau minimizezi?** Când cineva îți spune ceva frumos, ce respingi? "A, nu e mare lucru..." — ce e în spatele acelui refuz? + +**Instrucțiune:** Alege 1-2 întrebări care "te prind". Scrie liber pe foaie, fără cenzură. Nimeni nu va citi ce scrii. + +**Împărtășire în grup (15-18 min):** +- Cine vrea să împărtășească ceva din ce a descoperit? +- Fără sfaturi, fără "și eu la fel". Doar ascultare și "mulțumesc". +- E ok să spui "am descoperit ceva dar nu vreau să împărtășesc acum" — și asta e valid. + +--- + +## 4. Reflecție: Tristețea ca mesager (15 min) + +**Cadrare (2-3 min):** + +Uneori simțim tristețe, gol, lipsă de sens — mai ales iarna, când e întuneric devreme și frigul pare că intră și înăuntru. Reacția normală e să vrem să scăpăm de aceste stări. Dar dacă am privi altfel? + +Tristețea, golul, lipsa de motivație — nu sunt dușmani. Sunt **mesageri**. Vin să ne spună ceva despre o nevoie pe care nu o vedem. + +La fel cum iarna nu e moartea naturii, ci **odihna** ei — poate și iarna din suflet are un rost. Sub zăpadă, rădăcinile cresc. + +**Exercițiu (5 min, individual):** +- Dacă tristețea ta (sau golul, sau oboseala) ar avea glas — **ce ți-ar spune?** +- **Ce nevoie** exprimă? (odihnă? conexiune? sens? recunoaștere? libertate?) +- Scrie 2-3 rânduri. + +**Împărtășire (7-8 min):** +- Cine vrea să spună ce a "auzit"? +- Același format: ascultare, fără sfaturi. + +--- + +## 5. Încheiere (10 min) + +**Întrebări de închidere (fiecare răspunde pe scurt):** +- Cu ce pleci de aici în seara asta? +- Ce ai observat nou despre tine? + +**Provocare pentru următoarele 2 săptămâni (opțional):** +Când simți o emoție pe care vrei să o "dai la o parte" — oprește-te o secundă și întreabă-o: "Ce vrei să îmi spui?" + +--- + +## Note practice + +- Pregătește foi A4 și pixuri pentru exercițiul de scriere +- Apă pentru toată lumea +- Scaune în cerc, lumină mai blândă dacă se poate +- Cronometrează exercițiile — e ușor să se depășească timpul la împărtășire + +--- + +## După întâlnire + +**Ce a mers bine:** + + +**Ce aș face diferit:** + + +**Observații despre grup:** + diff --git a/tools/generate_pdf.py b/tools/generate_pdf.py index c1a5b7d..9590b78 100644 --- a/tools/generate_pdf.py +++ b/tools/generate_pdf.py @@ -29,6 +29,12 @@ try: if dejavu_path.exists(): pdf.add_font("DejaVu", "", str(dejavu_path)) pdf.add_font("DejaVu", "B", "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf") + oblique_path = Path("/usr/share/fonts/truetype/dejavu/DejaVuSans-Oblique.ttf") + if oblique_path.exists(): + pdf.add_font("DejaVu", "I", str(oblique_path)) + bold_oblique = Path("/usr/share/fonts/truetype/dejavu/DejaVuSans-BoldOblique.ttf") + if bold_oblique.exists(): + pdf.add_font("DejaVu", "BI", str(bold_oblique)) pdf.set_font("DejaVu", "", 10) use_dejavu = True else: @@ -37,6 +43,42 @@ try: pdf.set_font("Helvetica", "", 10) use_dejavu = False + def render_rich_text(pdf, text, use_dejavu, size): + """Render text with inline **bold** and *italic* formatting.""" + font_name = "DejaVu" if use_dejavu else "Helvetica" + # Remove links but keep text + text = re.sub(r'\[(.*?)\]\(.*?\)', r'\1', text) + # Split on bold/italic markers, process segments + # Pattern: **bold**, __bold__, *italic*, _italic_ + parts = re.split(r'(\*\*.*?\*\*|__.*?__|\*.*?\*|_.*?_)', text) + for part in parts: + if not part: + continue + if part.startswith('**') and part.endswith('**'): + pdf.set_font(font_name, "B", size) + pdf.write(5, part[2:-2]) + pdf.set_font(font_name, "", size) + elif part.startswith('__') and part.endswith('__'): + pdf.set_font(font_name, "B", size) + pdf.write(5, part[2:-2]) + pdf.set_font(font_name, "", size) + elif part.startswith('*') and part.endswith('*') and len(part) > 2: + try: + pdf.set_font(font_name, "I", size) + except: + pass # italic not available, keep current font + pdf.write(5, part[1:-1]) + pdf.set_font(font_name, "", size) + elif part.startswith('_') and part.endswith('_') and len(part) > 2: + try: + pdf.set_font(font_name, "I", size) + except: + pass + pdf.write(5, part[1:-1]) + pdf.set_font(font_name, "", size) + else: + pdf.write(5, part) + # Parse markdown line by line lines = markdown_content.split('\n') i = 0 @@ -77,28 +119,25 @@ try: # Bullet point elif line.strip().startswith('- ') or line.strip().startswith('* '): text = line.strip().lstrip('-*').strip() - # Use simple dash for bullet - pdf.multi_cell(0, 5, '- ' + text, ln=True) + pdf.write(5, '- ') + render_rich_text(pdf, text, use_dejavu, 10) + pdf.ln(5) # Numbered list - elif re.match(r'^\s*\d+\.\s', line): - text = re.sub(r'^\s*\d+\.\s', '', line) - pdf.multi_cell(0, 5, text, ln=True) + elif re.match(r'^\s*(\d+\.)\s', line): + m = re.match(r'^\s*(\d+\.)\s(.*)', line) + prefix = m.group(1) + ' ' + text = m.group(2) + pdf.write(5, prefix) + render_rich_text(pdf, text, use_dejavu, 10) + pdf.ln(5) # Regular text with formatting else: - # Clean up markdown markers but keep structure text = line.strip() - - # Remove inline markdown - text = re.sub(r'\*\*(.*?)\*\*', r'\1', text) # Bold - text = re.sub(r'__(.*?)__', r'\1', text) # Bold - text = re.sub(r'\*(.*?)\*', r'\1', text) # Italic - text = re.sub(r'_(.*?)_', r'\1', text) # Italic - text = re.sub(r'\[(.*?)\]\(.*?\)', r'\1', text) # Links - if text: - pdf.multi_cell(0, 5, text, ln=True) + render_rich_text(pdf, text, use_dejavu, 10) + pdf.ln(5) i += 1