fix(newsletter): elimină jobul APScheduler intern duplicat și bugged
Jobul intern rula pe zile greșite (vineri/sâmbătă/marți în loc de joi/vineri/luni) din cauza convenției diferite de day-of-week dintre APScheduler și crontab standard. Scriptul standalone via OS crontab e mecanismul corect și funcțional — rămâne singura sursă. chore: sync stare working-tree — cron, KB notes, anaf-monitor snapshots
This commit is contained in:
@@ -60,11 +60,6 @@
|
|||||||
"git": 14400
|
"git": 14400
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"newsletter_cercetasi": {
|
|
||||||
"enabled": true,
|
|
||||||
"cron": "0 17 * * 4,5,1",
|
|
||||||
"channel": "echo-core"
|
|
||||||
},
|
|
||||||
"allowed_tools": [
|
"allowed_tools": [
|
||||||
"Read",
|
"Read",
|
||||||
"Edit",
|
"Edit",
|
||||||
@@ -109,7 +104,7 @@
|
|||||||
"949388626146517022"
|
"949388626146517022"
|
||||||
],
|
],
|
||||||
"user_name": "Marius",
|
"user_name": "Marius",
|
||||||
"default_voice": "F1",
|
"default_voice": "M1",
|
||||||
"auto_leave_minutes": 5,
|
"auto_leave_minutes": 5,
|
||||||
"stt_model": "/home/moltbot/echo-core/models/whisper-small-ro-cv11-int8"
|
"stt_model": "/home/moltbot/echo-core/models/whisper-small-ro-cv11-int8"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,9 +11,9 @@
|
|||||||
"report_on": "changes",
|
"report_on": "changes",
|
||||||
"timeout": 120,
|
"timeout": 120,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"last_run": "2026-06-27T16:00:00.001505+00:00",
|
"last_run": "2026-07-09T10:00:00.001988+00:00",
|
||||||
"last_status": "ok",
|
"last_status": "ok",
|
||||||
"next_run": "2026-06-30T10:00:00+00:00"
|
"next_run": "2026-07-09T16:00:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "security-audit-daily",
|
"name": "security-audit-daily",
|
||||||
@@ -43,9 +43,9 @@
|
|||||||
"report_on": "never",
|
"report_on": "never",
|
||||||
"timeout": 120,
|
"timeout": 120,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"last_run": "2026-06-27T03:30:00.002414+00:00",
|
"last_run": "2026-07-09T03:30:00.002154+00:00",
|
||||||
"last_status": "ok",
|
"last_status": "ok",
|
||||||
"next_run": "2026-06-28T03:30:00+00:00"
|
"next_run": "2026-07-10T03:30:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "archive-tasks-daily",
|
"name": "archive-tasks-daily",
|
||||||
@@ -59,9 +59,9 @@
|
|||||||
"report_on": "changes",
|
"report_on": "changes",
|
||||||
"timeout": 60,
|
"timeout": 60,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"last_run": "2026-06-27T03:00:00.001794+00:00",
|
"last_run": "2026-07-09T03:00:00.001431+00:00",
|
||||||
"last_status": "ok",
|
"last_status": "ok",
|
||||||
"next_run": "2026-06-28T03:00:00+00:00"
|
"next_run": "2026-07-10T03:00:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "backup-config",
|
"name": "backup-config",
|
||||||
@@ -75,9 +75,9 @@
|
|||||||
"report_on": "never",
|
"report_on": "never",
|
||||||
"timeout": 120,
|
"timeout": 120,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"last_run": "2026-06-27T02:00:00.001781+00:00",
|
"last_run": "2026-07-09T02:00:00.001391+00:00",
|
||||||
"last_status": "ok",
|
"last_status": "ok",
|
||||||
"next_run": "2026-06-28T02:00:00+00:00"
|
"next_run": "2026-07-10T02:00:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "insights-extract",
|
"name": "insights-extract",
|
||||||
@@ -243,9 +243,9 @@
|
|||||||
"prompt": "Heartbeat check. Rulează src/heartbeat.py printr-un scurt raport de status.\nDacă nu e nimic de raportat (email=0, calendar nu are evenimente <2h, kb ok), răspunde doar cu HEARTBEAT_OK și oprește-te — nu trimite mesaj.\nDacă e ceva: raport scurt pe Discord #echo-work.",
|
"prompt": "Heartbeat check. Rulează src/heartbeat.py printr-un scurt raport de status.\nDacă nu e nimic de raportat (email=0, calendar nu are evenimente <2h, kb ok), răspunde doar cu HEARTBEAT_OK și oprește-te — nu trimite mesaj.\nDacă e ceva: raport scurt pe Discord #echo-work.",
|
||||||
"allowed_tools": [],
|
"allowed_tools": [],
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"last_run": "2026-06-27T18:00:00.001107+00:00",
|
"last_run": "2026-07-09T14:00:00.001126+00:00",
|
||||||
"last_status": "ok",
|
"last_status": "ok",
|
||||||
"next_run": "2026-06-28T06:00:00+00:00"
|
"next_run": "2026-07-09T18:00:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "night-execute",
|
"name": "night-execute",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"last_sent": 24,
|
"last_sent": 25,
|
||||||
"year": 2026,
|
"year": 2026,
|
||||||
"last_sent_at": "2026-06-25T17:01:48.783259+00:00"
|
"last_sent_at": "2026-07-02T19:00:58.783724+00:00"
|
||||||
}
|
}
|
||||||
|
|||||||
60
memory/kb/facebook/2026-06-29_tony-robbins-top-two-needs.md
Normal file
60
memory/kb/facebook/2026-06-29_tony-robbins-top-two-needs.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# Cele 6 Nevoi Fundamentale — Tony Robbins
|
||||||
|
|
||||||
|
**Sursa:** https://www.facebook.com/share/v/18up5bw3Co/
|
||||||
|
**Data:** 2026-06-29
|
||||||
|
**Tags:** @coaching @growth @psychology
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Tony Robbins explica cele 6 nevoi fundamentale ale omului si cum primele doua (top two needs) iti guverneaza toate deciziile. Exercitiu practic: identifica-ti top 2 nevoi actuale, costul lor, si ce nevoi ti-ar trebui pentru a trece la urmatorul nivel.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cele 6 Nevoi Fundamentale (Human Needs Psychology)
|
||||||
|
|
||||||
|
1. **Certainty** (siguranta, confort, predictibilitate)
|
||||||
|
2. **Uncertainty / Variety** (noutate, surpriza, adrenalina)
|
||||||
|
3. **Significance** (a fi unic, important, special, remarcat)
|
||||||
|
4. **Love & Connection** (iubire, apartenta, legatura cu ceilalti)
|
||||||
|
5. **Growth** (crestere, evolutie, progres)
|
||||||
|
6. **Contribution** (a contribui la ceva mai mare decat tine)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Povestea ilustrativa — fata goth de 13 ani
|
||||||
|
|
||||||
|
Tony vede o fata cu look goth (13 cercelusi, machiaj intens) care urmareste un baiat. Conversatie rapida dezvaluie:
|
||||||
|
- **Nevoie #1: Significance** — 13 cercelusi, "nu sunt ca ceilalti, sunt unica, speciala, diferita"
|
||||||
|
- **Nevoie #2: Certainty / Comfort** — breloc Tigger de la tata, cearceafuri Tigger, tapet Tigger — confortul copilariei ca ancora
|
||||||
|
|
||||||
|
Observatie: toata "duritatea" exterioara era o strategie de significance. Sub ea, nevoia de confort era la fel de puternica.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exercitiu practic (din video)
|
||||||
|
|
||||||
|
### Intrebarea 1 — Nevoi actuale (cum ai trait pana acum)
|
||||||
|
- Care sunt top 2 nevoi **dupa care ai trait** (nu ce ai vrut, ci cum ai functionat)?
|
||||||
|
- Ce te-a costat sa ai aceste nevoi in top? Ce ai pierdut? Ce relatii/sanatate/energie a suferit?
|
||||||
|
|
||||||
|
### Intrebarea 2 — Nevoi pentru urmatorul nivel
|
||||||
|
- Care ar trebui sa fie top 2 nevoi pentru a merge la urmatorul nivel al vietii?
|
||||||
|
- Daca ai face schimbarea, cum s-ar schimba viata in bine?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Insight-uri cheie
|
||||||
|
|
||||||
|
- **Nu ce vrei, ci cum traiesti** — toata lumea "vrea" iubire, dar multi pun certainty sau significance inaintea ei, deci de fapt iubirea nu e prima nevoie operationala.
|
||||||
|
- **Top 2 nevoi iti ghideaza toate deciziile** — cand stii ale tale si ale celorlalti, stii ce probleme vor aparea.
|
||||||
|
- **Schimbarea de nevoi = schimbare de identitate** — nu e mintala, e somatica ("inside your body, not just your mind").
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idei acționabile
|
||||||
|
|
||||||
|
- [ ] Scrie top 2 nevoi dupa care ai trait pana acum — fii sincer, nu ce vrei sa fie @coaching
|
||||||
|
- [ ] Scrie costul concret: ce ai ratat/stricat avand acele nevoi in top @growth
|
||||||
|
- [ ] Decide top 2 nevoi pentru urmatorul nivel si descrie cum s-ar schimba viata @growth
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Index — facebook/
|
# Index — facebook/
|
||||||
|
|
||||||
> 10 note. Citește acest index întâi; deschide doar fișierele relevante.
|
> 11 note. Citește acest index întâi; deschide doar fișierele relevante.
|
||||||
|
|
||||||
- **[Love Yourself Even If They Don't](2026-04-29_julien-blanc-love-yourself.md)** `#self-love #self-esteem #social-approval #mindset`
|
- **[Love Yourself Even If They Don't](2026-04-29_julien-blanc-love-yourself.md)** `#self-love #self-esteem #social-approval #mindset`
|
||||||
Julien Blanc face un exercițiu pe stradă: îl întreabă pe un trecător care e artistul lui preferat. Răspunsul: Glenn Gould. Nimeni din grup n
|
Julien Blanc face un exercițiu pe stradă: îl întreabă pe un trecător care e artistul lui preferat. Răspunsul: Glenn Gould. Nimeni din grup n
|
||||||
@@ -22,3 +22,5 @@
|
|||||||
Creierul tău poate schimba starea în 15 secunde fără să-ți schimbi viața. Trei trucuri: (1) **Face feedback** — relaxează fața ușor 15 sec,
|
Creierul tău poate schimba starea în 15 secunde fără să-ți schimbi viața. Trei trucuri: (1) **Face feedback** — relaxează fața ușor 15 sec,
|
||||||
- **[7 Micro Habits That Rewire Your Happiness](2026-06-07_7-micro-habits-rewire-happiness.md)**
|
- **[7 Micro Habits That Rewire Your Happiness](2026-06-07_7-micro-habits-rewire-happiness.md)**
|
||||||
7 micro-obiceiuri bazate pe psihologie pentru a reprograma creierul spre fericire: zâmbetul de 3 secunde (declanșează dopamină/serotonină),
|
7 micro-obiceiuri bazate pe psihologie pentru a reprograma creierul spre fericire: zâmbetul de 3 secunde (declanșează dopamină/serotonină),
|
||||||
|
- **[Cele 6 Nevoi Fundamentale — Tony Robbins](2026-06-29_tony-robbins-top-two-needs.md)** `@growth`
|
||||||
|
Tony Robbins explica cele 6 nevoi fundamentale ale omului si cum primele doua (top two needs) iti guverneaza toate deciziile. Exercitiu prac
|
||||||
|
|||||||
@@ -1,5 +1,106 @@
|
|||||||
{
|
{
|
||||||
"notes": [
|
"notes": [
|
||||||
|
{
|
||||||
|
"file": "notes-data/youtube/2026-07-08_fine-tune-modele-mari-kimi-k27.md",
|
||||||
|
"title": "Fine-Tune the biggest open-source models (even with a bad PC)",
|
||||||
|
"date": "2026-07-08",
|
||||||
|
"tags": [],
|
||||||
|
"domains": [
|
||||||
|
"work",
|
||||||
|
"growth"
|
||||||
|
],
|
||||||
|
"types": [],
|
||||||
|
"category": "youtube",
|
||||||
|
"project": null,
|
||||||
|
"subdir": null,
|
||||||
|
"video": "",
|
||||||
|
"tldr": "Tutorial complet despre cum se fine-tunează modele AI masive (ex: Kimi K2.7 — 1 trilion parametri) pe date proprii, fără hardware de sute de mii de dolari, folosind platforma **Fireworks AI** și tehni..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "notes-data/youtube/2026-07-04_anti-aging-mitochondria-martin-picard.md",
|
||||||
|
"title": "Anti-Aging Expert: This Reverses Gray Hairs, Restores Your Youth & Boosts Your Energy!",
|
||||||
|
"date": "2026-07-04",
|
||||||
|
"tags": [],
|
||||||
|
"domains": [
|
||||||
|
"health",
|
||||||
|
"growth"
|
||||||
|
],
|
||||||
|
"types": [],
|
||||||
|
"category": "youtube",
|
||||||
|
"project": null,
|
||||||
|
"subdir": null,
|
||||||
|
"video": "",
|
||||||
|
"tldr": "Dr. Martin Picard explică de ce mitochondriile — nu genele — determina cat de repede imbatranesti. Secretul anti-aging nu e o suplimentare sau dieta, ci **alocarea eficienta a energiei**. Stresul cron..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "notes-data/youtube/2026-07-04_multi-millionaire-10x-income-side-hustles.md",
|
||||||
|
"title": "Multi-Millionaire: Cele mai bune side hustles pentru 10x Income",
|
||||||
|
"date": "2026-07-04",
|
||||||
|
"tags": [],
|
||||||
|
"domains": [
|
||||||
|
"growth"
|
||||||
|
],
|
||||||
|
"types": [],
|
||||||
|
"category": "youtube",
|
||||||
|
"project": null,
|
||||||
|
"subdir": null,
|
||||||
|
"video": "",
|
||||||
|
"tldr": "Chris Koerner explică cum pornești o afacere cu $1k-$5k și ce principii l-au dus la succes cu 35+ proprietăți RV și multiple business-uri. Esența: alege unsexy, caută unfair advantage personal, evită ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "notes-data/youtube/2026-07-04_hiking-food-250g-protein-endurance.md",
|
||||||
|
"title": "Hiking Food: 250g Protein Secret for Endurance",
|
||||||
|
"date": "2026-07-04",
|
||||||
|
"tags": [],
|
||||||
|
"domains": [
|
||||||
|
"health",
|
||||||
|
"growth"
|
||||||
|
],
|
||||||
|
"types": [],
|
||||||
|
"category": "youtube",
|
||||||
|
"project": null,
|
||||||
|
"subdir": null,
|
||||||
|
"video": "",
|
||||||
|
"tldr": "Un hiker cu 20.000 de mile pe trasee explică sistemul lui de nutriție optimizat pentru endurance: proteina ridicată (1.3-1.5g/kg corp), grăsimi ca sursă primară de energie, carbohidrați naturali doar ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "notes-data/facebook/2026-06-29_tony-robbins-top-two-needs.md",
|
||||||
|
"title": "Cele 6 Nevoi Fundamentale — Tony Robbins",
|
||||||
|
"date": "2026-06-29",
|
||||||
|
"tags": [],
|
||||||
|
"domains": [
|
||||||
|
"growth"
|
||||||
|
],
|
||||||
|
"types": [
|
||||||
|
"coaching"
|
||||||
|
],
|
||||||
|
"category": "facebook",
|
||||||
|
"project": null,
|
||||||
|
"subdir": null,
|
||||||
|
"video": "",
|
||||||
|
"tldr": "Tony Robbins explica cele 6 nevoi fundamentale ale omului si cum primele doua (top two needs) iti guverneaza toate deciziile. Exercitiu practic: identifica-ti top 2 nevoi actuale, costul lor, si ce ne..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "notes-data/youtube/2026-06-29_launch-million-dollar-startup-ai.md",
|
||||||
|
"title": "Watch me launch a million dollar startup with AI (live)",
|
||||||
|
"date": "2026-06-29",
|
||||||
|
"tags": [
|
||||||
|
"antreprenoriat",
|
||||||
|
"ai-marketing",
|
||||||
|
"validare",
|
||||||
|
"startup"
|
||||||
|
],
|
||||||
|
"domains": [
|
||||||
|
"work",
|
||||||
|
"growth"
|
||||||
|
],
|
||||||
|
"types": [],
|
||||||
|
"category": "youtube",
|
||||||
|
"project": null,
|
||||||
|
"subdir": null,
|
||||||
|
"video": "",
|
||||||
|
"tldr": "Un playbook de 9 prompts copy-paste care duce de la idee la landing page live cu reclame Meta, în sub 30 de minute. Cheia: \"vibe marketing\" (nu coding) + validare pre-vânzare ÎNAINTE să construiești p..."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"file": "notes-data/youtube/2026-06-27_jeremy-grantham-ai-bubble-warning.md",
|
"file": "notes-data/youtube/2026-06-27_jeremy-grantham-ai-bubble-warning.md",
|
||||||
"title": "Billionaire's WARNING: I'm SELLING. The Crash Is Already Here! — Jeremy Grantham",
|
"title": "Billionaire's WARNING: I'm SELLING. The Crash Is Already Here! — Jeremy Grantham",
|
||||||
@@ -22,7 +123,38 @@
|
|||||||
"project": null,
|
"project": null,
|
||||||
"subdir": null,
|
"subdir": null,
|
||||||
"video": "https://www.youtube.com/watch?v=32u5T6lO8qk",
|
"video": "https://www.youtube.com/watch?v=32u5T6lO8qk",
|
||||||
"tldr": "*Notă: Sumarizarea va fi adăugată de Echo.*"
|
"tldr": "Jeremy Grantham — 87 ani, 60 ani experiență, 165 miliarde $ gestionați — avertizează că suntem în cea mai mare bulă investițională din istoria SUA, generată de AI. Sfatul său: vinde actiunile US tech ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "notes-data/youtube/2026-06-27_djokovic-discipline-changes-everything.md",
|
||||||
|
"title": "Discipline Changes Everything | Novak Djokovic",
|
||||||
|
"date": "2026-06-27",
|
||||||
|
"tags": [],
|
||||||
|
"domains": [
|
||||||
|
"growth",
|
||||||
|
"health"
|
||||||
|
],
|
||||||
|
"types": [
|
||||||
|
"coaching"
|
||||||
|
],
|
||||||
|
"category": "youtube",
|
||||||
|
"project": null,
|
||||||
|
"subdir": null,
|
||||||
|
"video": "",
|
||||||
|
"tldr": "Djokovic vorbeste despre transformarea sa prin disciplina, nutritie si mentalitate. Punctul central: limitele sunt constructe mentale, nu realitate. Mediul inconjurator face sau desface un obicei. Rel..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "notes-data/youtube/2026-06-27_cody-sanchez-unwanted-land.md",
|
||||||
|
"title": "Why I'm Buying UNWANTED Land (And You Should Too) | Cody Sanchez",
|
||||||
|
"date": "2026-06-27",
|
||||||
|
"tags": [],
|
||||||
|
"domains": [],
|
||||||
|
"types": [],
|
||||||
|
"category": "youtube",
|
||||||
|
"project": null,
|
||||||
|
"subdir": null,
|
||||||
|
"video": "",
|
||||||
|
"tldr": "Cody Sanchez cumpara 10 acri in West Texas pentru sub $10,000 in mai putin de o saptamana — ca experiment sa vada daca visul american e inca accesibil la pret mic. Concluzia: poti cumpara teren fara m..."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "notes-data/youtube/2026-06-27_google-open-knowledge-format.md",
|
"file": "notes-data/youtube/2026-06-27_google-open-knowledge-format.md",
|
||||||
@@ -10060,11 +10192,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"stats": {
|
"stats": {
|
||||||
"total": 581,
|
"total": 589,
|
||||||
"by_domain": {
|
"by_domain": {
|
||||||
"work": 199,
|
"work": 201,
|
||||||
"health": 101,
|
"health": 104,
|
||||||
"growth": 267,
|
"growth": 274,
|
||||||
"sprijin": 39,
|
"sprijin": 39,
|
||||||
"scout": 9
|
"scout": 9
|
||||||
},
|
},
|
||||||
@@ -10074,14 +10206,14 @@
|
|||||||
"conversations": 0,
|
"conversations": 0,
|
||||||
"emails": 22,
|
"emails": 22,
|
||||||
"exercitii": 4,
|
"exercitii": 4,
|
||||||
"facebook": 10,
|
"facebook": 11,
|
||||||
"health": 6,
|
"health": 6,
|
||||||
"insights": 46,
|
"insights": 46,
|
||||||
"projects": 234,
|
"projects": 234,
|
||||||
"reflectii": 3,
|
"reflectii": 3,
|
||||||
"retete": 1,
|
"retete": 1,
|
||||||
"tools": 7,
|
"tools": 7,
|
||||||
"youtube": 151,
|
"youtube": 158,
|
||||||
"memory": 44
|
"memory": 44
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||
- **[conversations/](conversations/index.md)** — 1 note
|
- **[conversations/](conversations/index.md)** — 1 note
|
||||||
- **[emails/](emails/index.md)** — 22 note
|
- **[emails/](emails/index.md)** — 22 note
|
||||||
- **[exercitii/](exercitii/index.md)** — 4 note
|
- **[exercitii/](exercitii/index.md)** — 4 note
|
||||||
- **[facebook/](facebook/index.md)** — 10 note
|
- **[facebook/](facebook/index.md)** — 11 note
|
||||||
- **[health/](health/index.md)** — 6 note
|
- **[health/](health/index.md)** — 6 note
|
||||||
- **[insights/](insights/index.md)** — 46 note
|
- **[insights/](insights/index.md)** — 46 note
|
||||||
- **[projects/](projects/index.md)** — 234 note
|
- **[projects/](projects/index.md)** — 234 note
|
||||||
- **[reflectii/](reflectii/index.md)** — 3 note
|
- **[reflectii/](reflectii/index.md)** — 3 note
|
||||||
- **[retete/](retete/index.md)** — 1 note
|
- **[retete/](retete/index.md)** — 1 note
|
||||||
- **[tools/](tools/index.md)** — 7 note
|
- **[tools/](tools/index.md)** — 7 note
|
||||||
- **[youtube/](youtube/index.md)** — 151 note
|
- **[youtube/](youtube/index.md)** — 158 note
|
||||||
|
|
||||||
## Note la rădăcină
|
## Note la rădăcină
|
||||||
|
|
||||||
|
|||||||
84
memory/kb/youtube/2026-06-27_cody-sanchez-unwanted-land.md
Normal file
84
memory/kb/youtube/2026-06-27_cody-sanchez-unwanted-land.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# Why I'm Buying UNWANTED Land (And You Should Too) | Cody Sanchez
|
||||||
|
|
||||||
|
**Sursa:** https://youtu.be/qewYYObfsiA
|
||||||
|
**Data:** 2026-06-27
|
||||||
|
**Durata:** 21:00
|
||||||
|
**Tags:** @money @real-estate @business
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Cody Sanchez cumpara 10 acri in West Texas pentru sub $10,000 in mai putin de o saptamana — ca experiment sa vada daca visul american e inca accesibil la pret mic. Concluzia: poti cumpara teren fara multi bani, mai repede decat ti se spune, si fara permisiunea altora.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cum a facut-o — framework in 3 pasi
|
||||||
|
|
||||||
|
1. **Criterii** — ce vrei? (locatie, suprafata, restrictii)
|
||||||
|
2. **Budget** — cat max? (al lui: $10K)
|
||||||
|
3. **Timeline** — cand inchei? (al lui: 1 saptamana)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cum a gasit terenul
|
||||||
|
|
||||||
|
- Platforma: **land.com** — favoriteaza listinguri, filtrezi dupa locatie + pret
|
||||||
|
- Strategia de locatie: West Texas (langa Marfa) = teren ieftin + aproape de national parks = turisti
|
||||||
|
- **Realtor specialist** in teren raw, nu generic — Phil i-a gasit in final ce voia
|
||||||
|
- Regula de trei la apeluri: suni 3 realtor-i, astepti sa te sune unul inapoi
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Costuri reale (all-in)
|
||||||
|
|
||||||
|
| Item | Cost |
|
||||||
|
|------|------|
|
||||||
|
| 10 acri teren | $9,000 |
|
||||||
|
| Benzina/transport | $200 |
|
||||||
|
| Title check | $500 |
|
||||||
|
| Comision realtor | $300 |
|
||||||
|
| **Total** | **~$10,000** |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modele de profit pe teren raw
|
||||||
|
|
||||||
|
- **Glamping / camping** — rulota/camper turnkey de pe Facebook Marketplace (~$16K), inchiriata la $80–150/noapte
|
||||||
|
- **Yurt-uri** (Mongolian gur) — $125–150K per unitate construit; un complex de 10 yurturi face $800K gross / $300K net pe an
|
||||||
|
- **TP tents / containere** — setup ieftin ($10–30K)
|
||||||
|
- **Agricultural exemptions** — taxe mai mici daca ai vaci, albine, wildlife monitoring (vanatoare/numaratoare cerbi) — minim 10 acri
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5 scam-uri de evitat la teren
|
||||||
|
|
||||||
|
1. **Vanzatorul nu detine terenul** → verifica intotdeauna titlul (title policy ~$500)
|
||||||
|
2. **Terenul nu e ce zic** → inspectie in option period (10 zile)
|
||||||
|
3. **Owner financing abuziv** → clauze care permit recuperarea integrala a terenului la o singura intarziere de plata
|
||||||
|
4. **Flood planes** — chiar si in desert, drenajul conteaza
|
||||||
|
5. **Mineral rights** — o companie energetica poate detine drepturi sa foreze pe terenul tau
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hack-uri practice
|
||||||
|
|
||||||
|
- **Locatie**: cumpara ieftin langa un oras turistic (Marfa, Big Bend) — turistii vin, dar se intorc la tine sa "scape de multime"
|
||||||
|
- **Option period**: negociaza 10 zile sa verifici: apa (foraj put), septic, electricitate
|
||||||
|
- **Survey**: cere title company sa comande un survey — mizeaza steak-uri la colturile terenului
|
||||||
|
- **Parteneri**: poti pune un camper/rulota pe terenul altcuiva — impart profitul
|
||||||
|
- **Procese, nu job**: checklist-uri per unitate + staff = business, nu job glorificat
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quote
|
||||||
|
|
||||||
|
> "Those who say it's impossible should get out of the way of those of us who are doing it."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idei acționabile
|
||||||
|
|
||||||
|
- [ ] Exploreaza land.com pentru terenuri in zone rurale ieftine langa atractii turistice @real-estate
|
||||||
|
- [ ] Calculeaza: 1 rulota/camper $16K → $100/noapte × 200 nopti = $20K/an = breakeven in 1 an @money
|
||||||
|
- [ ] La orice cumparare teren: title policy + option period 10 zile + verify water/electric/septic @real-estate
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
# Discipline Changes Everything | Novak Djokovic
|
||||||
|
|
||||||
|
**Sursa:** https://youtu.be/Gj8TdHnIfuk
|
||||||
|
**Data:** 2026-06-27
|
||||||
|
**Durata:** 15:24
|
||||||
|
**Tags:** @growth @health @coaching
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Djokovic vorbeste despre transformarea sa prin disciplina, nutritie si mentalitate. Punctul central: limitele sunt constructe mentale, nu realitate. Mediul inconjurator face sau desface un obicei. Relatia cu tatalsau si sentimentul de "a nu fi de ajuns" l-au condus mai departe decat succesul in sine. La 38 de ani, inca testeaza limite — din curiozitate, nu din ego.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Puncte cheie
|
||||||
|
|
||||||
|
- **Mediul e totul** — stiinta spune 21 de zile pentru un nou obicei, dar fara mediu suportiv e aproape imposibil. Suntem fiinte sociale, tribale — avem nevoie sa apartinem chiar si unui singur om.
|
||||||
|
- **Limitele sunt constructe mentale** — nu se considera ca are limite. Crede ca oamenii isi construiesc propriile plafoane in minte.
|
||||||
|
- **Nutritia l-a transformat** — dupa 3 ani fara slam, ajustarea nutritiei a schimbat totul. Urca in sus.
|
||||||
|
- **Analiza infrângerilor** — Kobe Bryant il sfatuia sa revada intervale specifice din meciurile pierdute, indiferent de disconfort. Acolo e lectia reala.
|
||||||
|
- **Sentimentul de "nu sunt de ajuns"** — vine din relatia cu tatal sau. Il motiveaza, dar e si o batalie zilnica. Nu cauta sa-l elimine, cauta echilibrul.
|
||||||
|
- **Ego vs umilinta** — dupa ce "umblai pe apa", egoul te duce in locuri din care e greu sa revii. Lectia: ce a functionat 20 de ani nu e garantat sa functioneze acum.
|
||||||
|
- **Plictiseala ca instrument** — fiului sau ii spune: sta cu gandurile tale. Nu pune ecranul imediat. Plictiseala e momentul cel mai creativ.
|
||||||
|
- **Sportul ca viata condensata** — un meci de tenis e o viata intr-o ora: esti egal la start, treci prin indoieli, frici, ups and downs, si la final câstigi sau pierzi. De aceea oamenii se identifica cu atletii.
|
||||||
|
- **Transitia dupa sport** — adrenalina trebuie re-canalizata, nu pur si simplu oprita. Isi pregateste urmatoarea pasiune: sanatate, wellness, wellbeing.
|
||||||
|
- **Battlefield = crestere** — a ales LA tocmai pentru ca acolo vede cel mai bun si cel mai rau din el. Slabiciunea te tine pe drum, forta te ajuta sa impartasesti.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quote-uri
|
||||||
|
|
||||||
|
> "Not having success is not an option. It's basically a matter of existence, a survival of my family."
|
||||||
|
|
||||||
|
> "The limits are normally constructs in our mind."
|
||||||
|
|
||||||
|
> "I feel like I can use tennis as a platform to evolve into a better human being."
|
||||||
|
|
||||||
|
> "When you are bored, you don't have to instantly take a book or a screen. You need to also learn how to be with your thoughts."
|
||||||
|
|
||||||
|
> "On the battlefield, you see the best of yourself and the worst of yourself. And the worst of myself reminds me to keep going."
|
||||||
|
|
||||||
|
> "If you are only reminded of your strength, you just have your ego. If you were only reminded of your weaknesses, you would be depressed. It's that dichotomy."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idei acționabile
|
||||||
|
|
||||||
|
- [ ] **Audit mediu** — cine sunt oamenii din jur? Sustin schimbarile pe care vrei sa le faci? @growth
|
||||||
|
- [ ] **Revede un esec recent** — un interval specific dintr-o situatie pierduta. Ce ai putea face diferit? @coaching
|
||||||
|
- [ ] **10 minute fara ecran** — dimineata sau seara, sta cu gandurile. Nu cauta sa le umpli. @health
|
||||||
|
- [ ] **Battlefield personal** — ce situatie/mediu te scoate din zona de confort si te face sa cresti? Mergi acolo mai des. @growth
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
# Watch me launch a million dollar startup with AI (live)
|
||||||
|
|
||||||
|
**URL:** https://youtu.be/Tz881ee0f8M
|
||||||
|
**Durata:** 21:59
|
||||||
|
**Canal:** L7V (Michia — serial entrepreneur, VC)
|
||||||
|
**Data:** 2026-06-29
|
||||||
|
**Tags:** @work @growth #antreprenoriat #ai-marketing #validare #startup
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Un playbook de 9 prompts copy-paste care duce de la idee la landing page live cu reclame Meta, în sub 30 de minute. Cheia: "vibe marketing" (nu coding) + validare pre-vânzare ÎNAINTE să construiești produsul. Tools: AppMagic (research piață), Claude Code + MCP-uri (Higgsfield, Meta Ads, Vercel). Filosofia centrală: găsești o categorie care deja câștigă bani → cauți "blue ocean" în acea categorie → lansezi landing page → testezi cu reclame plătite → construiești doar dacă oamenii își dau emailul.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Puncte cheie
|
||||||
|
|
||||||
|
- **Validare înainte de construire** — cheltuie bani pe reclame să testezi ideea ÎNAINTE să scrii cod. E mai ieftin să afli că nimeni nu vrea produsul decât să-l construiești și să afli după.
|
||||||
|
- **AppMagic.rocks** (gratuit) — vezi ce aplicații câștigă deja bani în categoria ta. Nu ghici piața, caut-o în date reale.
|
||||||
|
- **Blue ocean în categorii dovedite** — nu concura direct, găsește un unghi nou în nișa care deja are tracțiune (ex: plant identifier → AI garden designer cu before/after viral).
|
||||||
|
- **9 prompts, tot playbook-ul** — disponibile gratuit la l7v.com/ai, mereu actualizate cu cele mai noi modele.
|
||||||
|
- **MCP-uri conectate la Claude** — Higgsfield (imagini + video ads), Meta Ads Manager, Vercel. Claude orchestrează totul fără să scrii cod.
|
||||||
|
- **Higgsfield Marketing Studio** — template-uri de ad-uri dovedite (UGC, before/after, comparison table). Nu inventezi formate, le folosești pe cele care funcționează.
|
||||||
|
- **Pixel Meta din prima zi** — setezi tracking înainte să pornești reclame ca Meta's AI să învețe cine convertește și să găsească mai mulți.
|
||||||
|
- **Self-improving loop** — ultimul prompt: extrage ad-urile cu cel mai mic cost per conversie → iterează cu Higgsfield → trimite noi teste. Se îmbunătățește singur în timp.
|
||||||
|
- **Vercel gratuit** pentru deployment — URL-ul de vercel.app convertește, nu e nevoie de domeniu propriu în faza de validare.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quotes notabile
|
||||||
|
|
||||||
|
> "Forget vibe coding. Vibe marketing is printing millionaires faster than any time in history."
|
||||||
|
|
||||||
|
> "AI does the work, we get to have a bit more fun in life. That's the whole point, right?"
|
||||||
|
|
||||||
|
> "If you are not taking advantage of this, you are being left behind by the guys that are."
|
||||||
|
|
||||||
|
> "It's much cheaper for you to validate people will buy what you're building than build it and then hope they will buy."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Flow complet (9 pași)
|
||||||
|
|
||||||
|
1. **AppMagic** → găsești categoria cu tracțiune + top apps
|
||||||
|
2. **Prompt 1 Claude** → analizează app-ul, propune 5 blue ocean ideas
|
||||||
|
3. **Prompt 2** → alegi idea, Claude generează product spec complet (UX, culori, viral hooks)
|
||||||
|
4. **Prompt 3 + Higgsfield MCP** → generează mockup-uri și screenshot-uri app
|
||||||
|
5. **Prompt 4** → landing page cu quiz + email capture + dashboard admin
|
||||||
|
6. **Meta Ads Manager** → setezi pixel de conversie
|
||||||
|
7. **Prompt 5** → Claude adaugă pixelul în landing page via Meta MCP
|
||||||
|
8. **Higgsfield Marketing Studio prompt** → 20 reclame (UGC, before/after, video)
|
||||||
|
9. **Vercel MCP** → deploy landing page live
|
||||||
|
10. **Meta Ads prompt** → Claude uploadează și configurează campaniile automat
|
||||||
|
11. **Self-improve prompt** → rulezi periodic, extrage winners, iterează
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Aplicabilitate pentru Marius
|
||||||
|
|
||||||
|
- Playbook util pentru validarea rapidă a oricărui SaaS/tool înainte de investit timp în dev
|
||||||
|
- Pattern "găsești ce câștigă deja → blue ocean" — aplicabil și pentru features ERP ROA
|
||||||
|
- MCP-uri pentru Claude Code — model de referință pentru integrări externe
|
||||||
|
- l7v.com/ai — bookmark, prompts actualizate automat
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
# Anti-Aging Expert: This Reverses Gray Hairs, Restores Your Youth & Boosts Your Energy!
|
||||||
|
|
||||||
|
**Sursa:** https://m.youtube.com/watch?v=6xlmaorRY0w
|
||||||
|
**Invitat:** Dr. Martin Picard — Profesor Behavioral Medicine, Columbia; Director Mitochondrial Psychobiology Group
|
||||||
|
**Durata:** 2h 38min
|
||||||
|
**Tags:** @health @growth @antrenament @energie @longevitate
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Dr. Martin Picard explică de ce mitochondriile — nu genele — determina cat de repede imbatranesti. Secretul anti-aging nu e o suplimentare sau dieta, ci **alocarea eficienta a energiei**. Stresul cronic fura 60% din energia zilnica. Scopul de viata, miscarrea si somnul sunt cele mai puternice "medicamente" pentru mitocondrii. Parul alb poate fi reversibil.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Puncte cheie
|
||||||
|
|
||||||
|
- **Suntem energie**: mitochondriile genereaza ATP — tot ce facem (gandire, emotii, miscare) consuma aceasta energie dintr-un buget finit.
|
||||||
|
- **Stresul = furt de energie**: hormonii de stres cresc consumul energetic cu **60%** — energia e furata de la procesele care te mentin tanar (imunitate, reparare ADN, productie de colagen).
|
||||||
|
- **Nu stresul, ci raspunsul la stres**: problema nu e stresul acut (e sanatos), ci stresul cronic si **rezistenta la stres** (a nu accepta ce nu poti controla).
|
||||||
|
- **Parul alb e reversibil**: cercetarile Picard arata ca stresul intens albesteste parul, iar reducerea stresului poate inversa procesul — dovada directa ca imbatranirea nu e unidirectionala.
|
||||||
|
- **Rezistenta la energie**: diabetul, Alzheimer, cancerul sunt boli de "rezistenta energetica" — celulele nu mai pot procesa energia eficient (similar cu rezistenta la insulina).
|
||||||
|
- **Scopul de viata = mitocondrii mai puternice**: studii pe creiere de oameni decedati arata ca cei cu sens puternic de viata au mitocondrii mai eficiente.
|
||||||
|
- **Mancatul mai mult NU = mai multa energie**: calitatea si sincronizarea conteaza mai mult decat cantitatea; breakfast nu e obligatoriu pentru toata lumea.
|
||||||
|
- **Maratonul dubleaza mitochondriile**: antrenamentul de rezistenta este cel mai puternic stimul pentru biogeneza mitocondrala.
|
||||||
|
- **Dementa = "Diabet tip 3"**: creierul isi pierde capacitatea de a procesa glucoza; comunitatile cu stil de viata activ + social au rate mult mai mici de dementa.
|
||||||
|
- **Red light therapy**: are potential pentru mitochondrii (fotobiomodulare), dar calitatea dispozitivelor variaza enorm — alege cu atentie.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quotes
|
||||||
|
|
||||||
|
> "It's not the stress that burns us down, it's the **response to stress**."
|
||||||
|
|
||||||
|
> "We are really in service of the mitochondria. They allow us to be alive."
|
||||||
|
|
||||||
|
> "The secret to anti-aging is the **proper allocation of energy**."
|
||||||
|
|
||||||
|
> "Energy is real — it's the difference between feeling like you can change the world or feeling completely drained."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idei actionabile
|
||||||
|
|
||||||
|
- [ ] **Reduceti rezistenta**: cand simti tensiune (trafic, conflict, deadline) — nu lupta, accepta si redirecționeaza energia spre ce controlezi @health
|
||||||
|
- [ ] **Miscare aerobica regulata**: minim 3x/saptamana, zona 2 (conversation pace) — cel mai bun stimul mitocondrial @health
|
||||||
|
- [ ] **Dormit serios**: somnul e cand mitochondriile se repara — prioritate, nu optiune @health
|
||||||
|
- [ ] **Sens de viata clar**: oamenii cu scop puternic au mitocondrii mai eficiente — nu e woo, e biologie @growth
|
||||||
|
- [ ] **Stres acut DA, stres cronic NU**: expunere voluntara (sport, dus rece, post) = antrenament mitocondrial. Stres cronic (ruminate, ingrijorare) = furt de energie @health
|
||||||
|
- [ ] **Analize recomandate**: lactate la efort, GDF-15 (marker inflamatie mitocondriale), HbA1c
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Salvat: 2026-07-04*
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# Hiking Food: 250g Protein Secret for Endurance
|
||||||
|
|
||||||
|
**Sursa:** https://youtu.be/-cKnhhJsaRs?si=ZFbpiFVGGGZ2tyDt
|
||||||
|
**Durata:** 19:22
|
||||||
|
**Data:** 2026-07-04
|
||||||
|
**Tags:** @health @growth
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Un hiker cu 20.000 de mile pe trasee explică sistemul lui de nutriție optimizat pentru endurance: proteina ridicată (1.3-1.5g/kg corp), grăsimi ca sursă primară de energie, carbohidrați naturali doar ca supliment în momentele de efort intens. Mâncare reală, neprocesată, puțini ingredienți. Plus suplimente esențiale: creatină, omega-3, magneziu, teanină pentru somn.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Puncte cheie
|
||||||
|
|
||||||
|
- **Proteina e prioritatea #1** — 1.3-1.5g per livră de greutate corporală la eforturi intense. La 175 lbs = ~250g proteină/zi. Lipsa proteinei duce la catabolism muscular, oboseală și dureri.
|
||||||
|
|
||||||
|
- **Grăsimile = combustibil de durata lungă** — Zone 1-2 de frecvența cardiacă (sub 150 bpm) = ardere predominant de grăsimi. Fat-adapted = poți merge ore fără a mânca, corpul folosește rezervele proprii.
|
||||||
|
|
||||||
|
- **Carbohidrații = supliment, nu aliment de bază** — Zahăr natural (curmale, miere, fructe) din 90 în 90 calorii pe oră, nu bulk. Prea mult deodată → insulina → oboseală. RX Bars (5 ingrediente: curmale, albuș, migdale, caju, fructe) > geluri procesate.
|
||||||
|
|
||||||
|
- **Mâncarea de pe traseu a lui:**
|
||||||
|
- Dimineața: pui/vită freeze-dried (2 cups reconstituit) + miere (12g zahăr natural) + bone broth + 1oz ulei de măsline
|
||||||
|
- Ziua: fistic (1800 cal/zi), beef jerky zero zahăr (3oz), 4-5 RX Bars (tăiate în jumătate, 1 jumate/oră)
|
||||||
|
- Seara: același meniu ca dimineața
|
||||||
|
|
||||||
|
- **Suplimente zilnice:**
|
||||||
|
- Dimineața: greens powder (vitamine/minerale/probiotice) + creatina monohidrat 10g + vitamina D3 10.000UI + K2
|
||||||
|
- Ziua: omega-3 3g + cofeina 100mg de 3x (300mg total)
|
||||||
|
- Seara: teanina + magneziu 1500mg (recuperare și frecventa cardiacă)
|
||||||
|
|
||||||
|
- **Zone de antrenament:** 90% zone 1-2, 1x/săptămână V2max (sprinturi în urcare). Zone 3 = "zona gri" — nu antrenează nici endurance nici putere.
|
||||||
|
|
||||||
|
- **Fat adaptation** — Keto/carnivore 1.5 ani → corp adaptat să ardă grăsimi primul. Fructele au revenit ca sursă de carbohidrați. Body fat 14% → 7-9%.
|
||||||
|
|
||||||
|
- **App recomandat:** Cronometer — pentru calculat macros
|
||||||
|
|
||||||
|
- **Carti recomandate:** "Training for the Uphill Athlete" și "The PE Diet"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Citate
|
||||||
|
|
||||||
|
> "Most hikers are eating low protein, high carb, poisonous, pre-made meals with tons of ingredients you can't pronounce."
|
||||||
|
|
||||||
|
> "Carbs are not required, but they can be very useful when used as a supplement for different activities."
|
||||||
|
|
||||||
|
> "If you're finishing hiking days off sore, stiff, and exhausted, there's a simple fix."
|
||||||
|
|
||||||
|
> "Your body is going to want to use fats as a great energy source for long endurance."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idei acționabile
|
||||||
|
|
||||||
|
- [ ] Dacă faci drumetii/sport de anduranta: prioritizeaza proteina peste carbohidrati
|
||||||
|
- [ ] Creatina monohidrat — simpla, ieftina, eficienta pentru creier + muschi + energie
|
||||||
|
- [ ] Magneziu + teanina seara = somn mai bun dupa efort fizic
|
||||||
|
- [ ] Mancare reala > mese procesate pre-ambalate (citeste ingredientele)
|
||||||
|
- [ ] Principiu aplicabil si non-hiking: carbohidratii naturali ca supliment, nu baza
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
# Multi-Millionaire: Cele mai bune side hustles pentru 10x Income
|
||||||
|
|
||||||
|
**Sursa:** https://youtu.be/0K5a1ql3Oc0?si=Uqfps8H9NZr12oQL
|
||||||
|
**Durata:** 21:49
|
||||||
|
**Invitat:** Chris Koerner — multi-milionar antreprenor, RV parks, e-commerce, ~$3-4M/an venit
|
||||||
|
**Data:** 2026-07-04
|
||||||
|
**Tags:** @growth @business @money
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Chris Koerner explică cum pornești o afacere cu $1k-$5k și ce principii l-au dus la succes cu 35+ proprietăți RV și multiple business-uri. Esența: alege unsexy, caută unfair advantage personal, evită "mirage opportunities", găsește operatori buni și plătești-i din profit (nu equity).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idei cu $1.000
|
||||||
|
|
||||||
|
### Wedding arch rental
|
||||||
|
- Construiești un arc din lemn ($300 materiale) → îl închiriezi la nunți pentru ~$1.000/eveniment
|
||||||
|
- NU mergi direct la mirese — mergi la **wedding planners** (suprafață mare, ating zeci de nunți lunar)
|
||||||
|
- Găsești planners pe: The Knot, Zola, WeddingWire — scrapezi emailuri și telefoane, toate publice
|
||||||
|
- 1 contact = potențial 1 nuntă/săptămână
|
||||||
|
- Alte idei similare: photo walls, charcuterie carts, custom pizza, aranjamente funerale
|
||||||
|
|
||||||
|
### Email newsletter local
|
||||||
|
- Facebook/Instagram ad: "Afla ce se întâmplă în [Oraș], un email/săptămână"
|
||||||
|
- Cost achiziție subscriber: ~$0.50-$1
|
||||||
|
- Cu $1.000 → 1.000 subscribers
|
||||||
|
- Monetizare: vânzare publicitate la $500/trimitere (= $500/lună din 1.000 sub-uri)
|
||||||
|
- ROI în 2 luni; scale prin copy-paste în alte orașe
|
||||||
|
- **Scrie personal, NU cu ChatGPT** — trebuie să sune ca un local autentic
|
||||||
|
- 10% din subscribers sunt business owners = potențiali sponsori chiar în lista ta
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idei cu $5.000
|
||||||
|
|
||||||
|
### RV Parks (micro, 3-10 locuri)
|
||||||
|
- De 3-10x mai profitabile decât case de închiriat, la același preț de cumpărare
|
||||||
|
- Risc distribuit pe mai mulți chiriași vs. un singur chiriaș
|
||||||
|
- **Cum găsești:** Google Maps, suni 100 parcuri, 2-3 sunt deal-uri bune
|
||||||
|
- **Cum cumperi:** seller financing — vânzătorul "ține nota", tu plătești din profit lunar
|
||||||
|
- Pitch: "Dacă nu funcționează, îți iei parcul înapoi + tot ce am plătit până acum"
|
||||||
|
- $2.000 pentru due diligence (inspecții + title policy)
|
||||||
|
- $3.000 capital operațional (curent, curățenie, lansare)
|
||||||
|
- Valorizare: cap rate = profit/preț. Cumperi la 10% cap rate → crești ocupancy → valoarea urcă la 8% cap rate → parc de $200k ajunge $360k
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Principii de business
|
||||||
|
|
||||||
|
### Unfair advantage
|
||||||
|
> "I will only start businesses today where I have an unfair advantage."
|
||||||
|
- Fiecare are un avantaj specific: cunoștințe, rețea, audiență, experiență de nișă
|
||||||
|
- Nu e rezervat celor bogați sau educați — un teenager poate ști Roblox mai bine decât oricine
|
||||||
|
- Prioritizezi ideile unde ai un "right to win"
|
||||||
|
|
||||||
|
### Mirage opportunity
|
||||||
|
> "An industry that never seems to work for anybody but seems so obvious."
|
||||||
|
- Evitare industrii unde toată lumea încearcă dar nimeni nu reușește
|
||||||
|
- Exemple: grup apps (WhatsApp replacement), password managers, campus events apps, tools pentru podcasters (piață care renunță 95% în 6 luni)
|
||||||
|
- Dacă nu înțelegi DE CE nu funcționează → stai departe
|
||||||
|
|
||||||
|
### Fishing analogy — testezi mult
|
||||||
|
- Antreprenoriatul = un ocean imens; cei mai mulți aruncă de câteva ori și se întorc acasă
|
||||||
|
- Secretul: testezi mai mult, nu mai adânc pe o singură idee
|
||||||
|
- Fiecare test mic (Facebook ads) îți dă semnale. Urmărești semnalele.
|
||||||
|
|
||||||
|
### Unsexy = mai puțin competitiv
|
||||||
|
> "Everyone wants sexy means sexy is the most competitive."
|
||||||
|
- RV parks, wedding arches, email newsletters = nimeni nu se uită la ele
|
||||||
|
- Oportunitate tocmai pentru că nu e atrăgătoare
|
||||||
|
|
||||||
|
### Operatori buni > equity
|
||||||
|
- Succesul vine din a găsi oameni buni care să conducă business-ul
|
||||||
|
- **Equity e supraestimată** — 90% din equity merge la zero
|
||||||
|
- Plătești operatorul din cash flow (trimestrial) → se simte antreprenor, e motivat real
|
||||||
|
- A greșit în 20s: promitea equity, era sincer, dar e de puțin folos dacă business-ul nu face exit
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cifre Chris Koerner
|
||||||
|
- Net profit RV parks + mobile home parks: $400k-$600k total în 7 ani
|
||||||
|
- Revenue: $3-4M/an
|
||||||
|
- 35+ proprietăți implicate
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Citate
|
||||||
|
|
||||||
|
> "Equity is overrated. I put a lot more emphasis on cash flow now in my 30s."
|
||||||
|
|
||||||
|
> "I love the framework: 10,000 baby boomers are retiring every single day — buy their businesses or implement AI into them."
|
||||||
|
|
||||||
|
> "The unsexy things are the most undercompeted."
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
# Fine-Tune the biggest open-source models (even with a bad PC)
|
||||||
|
|
||||||
|
**URL:** https://youtu.be/kxstlfc8Lw4
|
||||||
|
**Durata:** 29:08
|
||||||
|
**Autor:** David Andre
|
||||||
|
**Data salvat:** 2026-07-08
|
||||||
|
**Tags:** @work @growth @ai @llm @fine-tuning
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Tutorial complet despre cum se fine-tunează modele AI masive (ex: Kimi K2.7 — 1 trilion parametri) pe date proprii, fără hardware de sute de mii de dolari, folosind platforma **Fireworks AI** și tehnica **LoRA**. Cost real pentru un fine-tune: ~$131.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Puncte cheie
|
||||||
|
|
||||||
|
- **Kimi K2.7** este comparat cu Opus 4 și GPT-5, dar de 6-8x mai ieftin — unul dintre cele mai bune modele open-source acum
|
||||||
|
- **3 ingrediente** pentru fine-tuning: un model open-source, GPU-uri (prin platformă), un dataset de calitate
|
||||||
|
- **LoRA (Low Rank Adaptation)** = tehnica principă: nu antrenezi toți parametrii (imposibil), ci un "adapter" mic peste modelul înghețat — mult mai ieftin și rapid
|
||||||
|
- **HuggingFace** = sursa principală pentru datasets; recomandă dataset-uri generate de modele mai mari (ex: Fable) dacă fine-tunezi un model mare
|
||||||
|
- **Fireworks AI** = platforma folosită pentru training și deployment — interfață simplă, suportă LoRA pe Kimi K2.7, cu GPU-uri Nvidia B300 Blackwell (288 GB VRAM)
|
||||||
|
- **Costul real**: fine-tune pe dataset Fable 5 (~4600 rânduri, 1 epocă) = **$131**; un dataset mai mare a costat $800
|
||||||
|
- **Format dataset**: JSONL în formatul specific Fireworks; autorul oferă un "skill" gratuit pentru conversia oricărui dataset HuggingFace la formatul corect
|
||||||
|
- **Agenți AI în workflow**: David folosește Pi Agent, Codex, Claude Code pentru a automatiza pașii: download dataset, conversie format, verificare, wiring backend
|
||||||
|
- **Comparație fine-tuned vs default**: versiunea fine-tunată pe Fable afișează chain-of-thought (gândire vizibilă), răspunsuri mai bine formatate — deoarece Fable include thinking traces în dataset
|
||||||
|
- **Deployment simplu pe Fireworks**: alegi modelul custom, region global, GPU-uri B300, autoscaling opțional — gata să servești inferențe
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Pași practici (flux)
|
||||||
|
|
||||||
|
1. Alege model open-source (ex: Kimi K2.7 code)
|
||||||
|
2. Alege dataset de pe HuggingFace (de preferință de la model mai mare decât cel pe care îl fine-tunezi)
|
||||||
|
3. Descarcă dataset cu HuggingFace CLI (`huggingface-cli download ...`) — necesită token HF
|
||||||
|
4. Convertește dataset în format JSONL compatibil Fireworks (min 1000 rânduri recomandat)
|
||||||
|
5. Pe Fireworks AI: Fine-tuning → Supervised → selectezi Kimi K2.7 code LoRA → uploadeazi dataset → start
|
||||||
|
6. Când e gata (~câteva ore): Deployments → Create → selectezi modelul custom → deploy pe B300
|
||||||
|
7. Testează comparând răspunsurile față de modelul default
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quote-uri relevante
|
||||||
|
|
||||||
|
> "If you want to fine-tune powerful models such as the ones with one trillion parameters, you'll need a lot of cutting-edge GPUs... each of these GPUs is like $40,000 and you can even buy eight at minimum." — de aceea folosești o platformă cloud
|
||||||
|
|
||||||
|
> "High-quality data is one of the most important factors. If you have a shitty dataset, you're going to have a shitty model."
|
||||||
|
|
||||||
|
> "A lot of you are wasting money on running everything on Opus or GPT-5, while you could get much better usage if you had the most powerful model for the planning and then the smaller open-source models that are faster."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idei acționabile pentru Marius
|
||||||
|
|
||||||
|
- [ ] Kimi K2.7 merită testat ca alternativă la Claude pentru task-uri repetitive (cost 7x mai mic) @work
|
||||||
|
- [ ] Fireworks AI = opțiune concretă dacă vrei să fine-tunezi un model pe date ROA/ERP (ex: răspunsuri standardizate pentru chatbot Maria) @work
|
||||||
|
- [ ] Dataset-ul pentru fine-tune chatbot Maria s-ar putea construi din întrebările frecvente ale clienților — deja ai sursa @work
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Surse menționate
|
||||||
|
|
||||||
|
- Fireworks AI: https://fireworks.ai
|
||||||
|
- HuggingFace datasets: https://huggingface.co/datasets
|
||||||
|
- Kimi K2.7 API: (primul link din video)
|
||||||
|
- Skill conversie dataset: (al doilea link din video — davidonj.com/skills)
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Index — youtube/
|
# Index — youtube/
|
||||||
|
|
||||||
> 151 note. Citește acest index întâi; deschide doar fișierele relevante.
|
> 158 note. Citește acest index întâi; deschide doar fișierele relevante.
|
||||||
|
|
||||||
- **[Talk to Claude on 3CX Phone System Tutorial (Full Setup)](2025-02-13_talk-to-claude-3cx-phone.md)** `@work`
|
- **[Talk to Claude on 3CX Phone System Tutorial (Full Setup)](2025-02-13_talk-to-claude-3cx-phone.md)** `@work`
|
||||||
Tutorial complet pentru a vorbi cu Claude Code prin telefon, folosind 3CX (sistem telefonic cloud gratuit) + un proiect GitHub custom. Setup
|
Tutorial complet pentru a vorbi cu Claude Code prin telefon, folosind 3CX (sistem telefonic cloud gratuit) + un proiect GitHub custom. Setup
|
||||||
@@ -298,9 +298,23 @@
|
|||||||
Tony Robbins (neidentificat explicit, dar stilul și conținutul sunt clare) explică de ce oamenii eșuează să aibă un breakthrough: atacă prob
|
Tony Robbins (neidentificat explicit, dar stilul și conținutul sunt clare) explică de ce oamenii eșuează să aibă un breakthrough: atacă prob
|
||||||
- **[Google Just Dropped a Masterclass on Agentic Engineering](2026-06-25_google-agentic-engineering-masterclass.md)** `@work @growth`
|
- **[Google Just Dropped a Masterclass on Agentic Engineering](2026-06-25_google-agentic-engineering-masterclass.md)** `@work @growth`
|
||||||
Google a publicat un ghid de 51 de pagini despre AI-driven SDLC (Software Development Life Cycle). Concluzia centrală: **harness-ul (regulil
|
Google a publicat un ghid de 51 de pagini despre AI-driven SDLC (Software Development Life Cycle). Concluzia centrală: **harness-ul (regulil
|
||||||
|
- **[Why I'm Buying UNWANTED Land (And You Should Too) | Cody Sanchez](2026-06-27_cody-sanchez-unwanted-land.md)**
|
||||||
|
Cody Sanchez cumpara 10 acri in West Texas pentru sub $10,000 in mai putin de o saptamana — ca experiment sa vada daca visul american e inca
|
||||||
|
- **[Discipline Changes Everything | Novak Djokovic](2026-06-27_djokovic-discipline-changes-everything.md)** `@growth @health`
|
||||||
|
Djokovic vorbeste despre transformarea sa prin disciplina, nutritie si mentalitate. Punctul central: limitele sunt constructe mentale, nu re
|
||||||
- **[Google's New Release Just Fixed AI Systems (Open Knowledge Format)](2026-06-27_google-open-knowledge-format.md)** `@work @growth`
|
- **[Google's New Release Just Fixed AI Systems (Open Knowledge Format)](2026-06-27_google-open-knowledge-format.md)** `@work @growth`
|
||||||
Un video prezintă **Open Knowledge Format (OKF)** — un format *propus* pentru organizarea knowledge base-urilor astfel încât agenții AI să n
|
Un video prezintă **Open Knowledge Format (OKF)** — un format *propus* pentru organizarea knowledge base-urilor astfel încât agenții AI să n
|
||||||
- **[Billionaire's WARNING: I'm SELLING. The Crash Is Already Here! — Jeremy Grantham](2026-06-27_jeremy-grantham-ai-bubble-warning.md)** `@growth @work #youtube #to-summarize #investitii #bubble #AI #sanatate #economie`
|
- **[Billionaire's WARNING: I'm SELLING. The Crash Is Already Here! — Jeremy Grantham](2026-06-27_jeremy-grantham-ai-bubble-warning.md)** `@growth @work #youtube #to-summarize #investitii #bubble #AI #sanatate #economie`
|
||||||
*Notă: Sumarizarea va fi adăugată de Echo.*
|
Jeremy Grantham — 87 ani, 60 ani experiență, 165 miliarde $ gestionați — avertizează că suntem în cea mai mare bulă investițională din istor
|
||||||
|
- **[Watch me launch a million dollar startup with AI (live)](2026-06-29_launch-million-dollar-startup-ai.md)** `@work @growth #antreprenoriat #ai-marketing #validare #startup`
|
||||||
|
Un playbook de 9 prompts copy-paste care duce de la idee la landing page live cu reclame Meta, în sub 30 de minute. Cheia: "vibe marketing"
|
||||||
|
- **[Anti-Aging Expert: This Reverses Gray Hairs, Restores Your Youth & Boosts Your Energy!](2026-07-04_anti-aging-mitochondria-martin-picard.md)** `@health @growth`
|
||||||
|
Dr. Martin Picard explică de ce mitochondriile — nu genele — determina cat de repede imbatranesti. Secretul anti-aging nu e o suplimentare s
|
||||||
|
- **[Hiking Food: 250g Protein Secret for Endurance](2026-07-04_hiking-food-250g-protein-endurance.md)** `@health @growth`
|
||||||
|
Un hiker cu 20.000 de mile pe trasee explică sistemul lui de nutriție optimizat pentru endurance: proteina ridicată (1.3-1.5g/kg corp), grăs
|
||||||
|
- **[Multi-Millionaire: Cele mai bune side hustles pentru 10x Income](2026-07-04_multi-millionaire-10x-income-side-hustles.md)** `@growth`
|
||||||
|
Chris Koerner explică cum pornești o afacere cu $1k-$5k și ce principii l-au dus la succes cu 35+ proprietăți RV și multiple business-uri. E
|
||||||
|
- **[Fine-Tune the biggest open-source models (even with a bad PC)](2026-07-08_fine-tune-modele-mari-kimi-k27.md)** `@work @growth`
|
||||||
|
Tutorial complet despre cum se fine-tunează modele AI masive (ex: Kimi K2.7 — 1 trilion parametri) pe date proprii, fără hardware de sute de
|
||||||
- **[thinking-on-paper](thinking-on-paper.md)** `@growth`
|
- **[thinking-on-paper](thinking-on-paper.md)** `@growth`
|
||||||
Metoda "Thinking on Paper" — 3 principii: **Make it Wrong** (scrie repede, fără perfecționism), **Make it Shorter** (doar keywords), **Make
|
Metoda "Thinking on Paper" — 3 principii: **Make it Wrong** (scrie repede, fără perfecționism), **Make it Shorter** (doar keywords), **Make
|
||||||
|
|||||||
21
src/main.py
21
src/main.py
@@ -83,27 +83,6 @@ def main():
|
|||||||
scheduler = Scheduler(send_callback=_send_to_channel, config=config)
|
scheduler = Scheduler(send_callback=_send_to_channel, config=config)
|
||||||
client.scheduler = scheduler # type: ignore[attr-defined]
|
client.scheduler = scheduler # type: ignore[attr-defined]
|
||||||
|
|
||||||
# Newsletter Cercetași checker (optional)
|
|
||||||
newsletter_config = config.get("newsletter_cercetasi", {})
|
|
||||||
if newsletter_config.get("enabled"):
|
|
||||||
from src.newsletter_cercetasi import check_and_send as check_newsletter
|
|
||||||
from apscheduler.triggers.cron import CronTrigger as _CronTrigger
|
|
||||||
|
|
||||||
async def _newsletter_tick() -> None:
|
|
||||||
try:
|
|
||||||
await check_newsletter(config, _send_to_channel)
|
|
||||||
except Exception as exc:
|
|
||||||
logger.error("Newsletter checker failed: %s", exc)
|
|
||||||
|
|
||||||
nl_cron = newsletter_config.get("cron", "0 9 * * *")
|
|
||||||
scheduler._scheduler.add_job(
|
|
||||||
_newsletter_tick,
|
|
||||||
trigger=_CronTrigger.from_crontab(nl_cron),
|
|
||||||
id="__newsletter_cercetasi__",
|
|
||||||
max_instances=1,
|
|
||||||
)
|
|
||||||
logger.info("Newsletter Cercetasi checker registered (cron: %s)", nl_cron)
|
|
||||||
|
|
||||||
# Telegram bot (optional — only if telegram_token exists)
|
# Telegram bot (optional — only if telegram_token exists)
|
||||||
telegram_token = get_secret("telegram_token")
|
telegram_token = get_secret("telegram_token")
|
||||||
telegram_app = None
|
telegram_app = None
|
||||||
|
|||||||
@@ -1,155 +0,0 @@
|
|||||||
"""Newsletter Cercetași checker — detects new editions and sends WhatsApp summaries."""
|
|
||||||
|
|
||||||
import asyncio
|
|
||||||
import json
|
|
||||||
import logging
|
|
||||||
import subprocess
|
|
||||||
from datetime import datetime, timezone
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Awaitable, Callable
|
|
||||||
|
|
||||||
import httpx
|
|
||||||
|
|
||||||
from src.claude_session import CLAUDE_BIN, PROJECT_ROOT, _safe_env, build_system_prompt
|
|
||||||
|
|
||||||
log = logging.getLogger("echo-core.newsletter-cercetasi")
|
|
||||||
|
|
||||||
NEWSLETTER_BASE_URL = "https://cercetaiis-newsletter.beehiiv.com/p/newsletter-{n}-din-{year}"
|
|
||||||
STATE_FILE = PROJECT_ROOT / "cron" / "newsletter-cercetasi-state.json"
|
|
||||||
KB_PROMPT_FILE = (
|
|
||||||
PROJECT_ROOT / "memory" / "kb" / "projects" / "grup-sprijin" / "prompt-newsletter-cercetasi.md"
|
|
||||||
)
|
|
||||||
CLAUDE_TIMEOUT = 300
|
|
||||||
|
|
||||||
|
|
||||||
def _read_state() -> dict:
|
|
||||||
try:
|
|
||||||
return json.loads(STATE_FILE.read_text())
|
|
||||||
except (FileNotFoundError, json.JSONDecodeError):
|
|
||||||
return {"last_sent": 0, "year": datetime.now(timezone.utc).year}
|
|
||||||
|
|
||||||
|
|
||||||
def _write_state(state: dict) -> None:
|
|
||||||
STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
|
|
||||||
STATE_FILE.write_text(json.dumps(state, indent=2, ensure_ascii=False) + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
async def _newsletter_exists(n: int, year: int) -> bool:
|
|
||||||
"""Return True if newsletter #{n}/{year} exists (HTTP 200, no redirect to 404 page).
|
|
||||||
|
|
||||||
Beehiiv redirects non-existent newsletters: /p/newsletter-N-din-YEAR → /?404=... (302)
|
|
||||||
A real newsletter returns 200 directly without redirect.
|
|
||||||
"""
|
|
||||||
url = NEWSLETTER_BASE_URL.format(n=n, year=year)
|
|
||||||
try:
|
|
||||||
async with httpx.AsyncClient(follow_redirects=False) as client:
|
|
||||||
resp = await client.get(url, timeout=10)
|
|
||||||
return resp.status_code == 200
|
|
||||||
except Exception as e:
|
|
||||||
log.debug("Newsletter #%d/%d check failed: %s", n, year, e)
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def _generate_summary(n: int, year: int) -> str | None:
|
|
||||||
"""Run Claude CLI to generate summary for newsletter #{n}/{year}. Returns text or None."""
|
|
||||||
url = NEWSLETTER_BASE_URL.format(n=n, year=year)
|
|
||||||
|
|
||||||
try:
|
|
||||||
kb_prompt = KB_PROMPT_FILE.read_text()
|
|
||||||
except FileNotFoundError:
|
|
||||||
log.error("KB prompt file not found: %s", KB_PROMPT_FILE)
|
|
||||||
return None
|
|
||||||
|
|
||||||
prompt = (
|
|
||||||
f"Newsletter-ul Cercetașilor #{n}/{year} este disponibil la: {url}\n\n"
|
|
||||||
f"Urmează instrucțiunile de mai jos pentru a genera rezumatul:\n\n"
|
|
||||||
f"{kb_prompt}"
|
|
||||||
)
|
|
||||||
|
|
||||||
cmd = [
|
|
||||||
CLAUDE_BIN, "-p", prompt,
|
|
||||||
"--model", "sonnet",
|
|
||||||
"--output-format", "json",
|
|
||||||
"--allowedTools", "WebFetch",
|
|
||||||
]
|
|
||||||
|
|
||||||
try:
|
|
||||||
system_prompt = build_system_prompt()
|
|
||||||
cmd += ["--system-prompt", system_prompt]
|
|
||||||
except FileNotFoundError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
|
||||||
proc = subprocess.run(
|
|
||||||
cmd,
|
|
||||||
capture_output=True,
|
|
||||||
text=True,
|
|
||||||
timeout=CLAUDE_TIMEOUT,
|
|
||||||
env=_safe_env(),
|
|
||||||
cwd=PROJECT_ROOT,
|
|
||||||
)
|
|
||||||
if proc.returncode != 0:
|
|
||||||
log.error("Claude CLI error (exit %d): %s", proc.returncode, proc.stderr[:300])
|
|
||||||
return None
|
|
||||||
data = json.loads(proc.stdout)
|
|
||||||
return data.get("result", "").strip() or None
|
|
||||||
except subprocess.TimeoutExpired:
|
|
||||||
log.error("Claude CLI timed out for newsletter #%d", n)
|
|
||||||
return None
|
|
||||||
except (json.JSONDecodeError, Exception) as e:
|
|
||||||
log.error("Failed to generate newsletter summary: %s", e)
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def check_and_send(config, send_callback) -> None:
|
|
||||||
"""Check for new newsletter; if found, generate summary and send via callback."""
|
|
||||||
state = _read_state()
|
|
||||||
current_year = datetime.now(timezone.utc).year
|
|
||||||
|
|
||||||
# New year → reset counter
|
|
||||||
if state.get("year", current_year) != current_year:
|
|
||||||
log.info("New year detected (%d → %d), resetting newsletter counter", state["year"], current_year)
|
|
||||||
state = {"last_sent": 0, "year": current_year}
|
|
||||||
|
|
||||||
next_n = state["last_sent"] + 1
|
|
||||||
log.info("Checking for Cercetasi newsletter #%d/%d...", next_n, current_year)
|
|
||||||
|
|
||||||
if not await _newsletter_exists(next_n, current_year):
|
|
||||||
log.info("Newsletter #%d/%d not yet available", next_n, current_year)
|
|
||||||
return
|
|
||||||
|
|
||||||
log.info("Newsletter #%d/%d found! Generating summary...", next_n, current_year)
|
|
||||||
|
|
||||||
summary = await asyncio.to_thread(_generate_summary, next_n, current_year)
|
|
||||||
if not summary:
|
|
||||||
log.error("Failed to generate summary for newsletter #%d/%d", next_n, current_year)
|
|
||||||
return
|
|
||||||
|
|
||||||
channel = config.get("newsletter_cercetasi.channel", "echo-core")
|
|
||||||
sent = False
|
|
||||||
try:
|
|
||||||
await send_callback(channel, summary)
|
|
||||||
sent = True
|
|
||||||
log.info("Newsletter #%d/%d summary sent to channel '%s'", next_n, current_year, channel)
|
|
||||||
except Exception as e:
|
|
||||||
log.error("Send failed for newsletter #%d/%d — will retry next check: %s", next_n, current_year, e)
|
|
||||||
|
|
||||||
# Trimite și pe WhatsApp dacă e configurat
|
|
||||||
owner = config.get("whatsapp.owner", "")
|
|
||||||
if owner and sent:
|
|
||||||
owner_jid = f"{owner}@s.whatsapp.net"
|
|
||||||
bridge_url = config.get("whatsapp.bridge_url", "http://127.0.0.1:8098")
|
|
||||||
try:
|
|
||||||
async with httpx.AsyncClient() as client:
|
|
||||||
for chunk in [summary[i:i+4096] for i in range(0, len(summary), 4096)]:
|
|
||||||
await client.post(f"{bridge_url}/send", json={"to": owner_jid, "text": chunk}, timeout=15)
|
|
||||||
log.info("Newsletter #%d/%d summary sent to WhatsApp", next_n, current_year)
|
|
||||||
except Exception as e:
|
|
||||||
log.error("WhatsApp send failed for newsletter #%d/%d: %s", next_n, current_year, e)
|
|
||||||
|
|
||||||
if sent:
|
|
||||||
state["last_sent"] = next_n
|
|
||||||
state["year"] = current_year
|
|
||||||
state["last_sent_at"] = datetime.now(timezone.utc).isoformat()
|
|
||||||
_write_state(state)
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"D100": "ce27f72bc3fd5e3241480fcda3a3e14572cfbed1b26e43896037bb265d82e4f5",
|
"D100": "db8fc40765fd2e3b5fc1f0f900e160e6c45f625f093cf1f3bc17ea3a40d88380",
|
||||||
"D101": "f72fc1c29657ea11e0238806a28f6abccf5b00e45904e1e0c9385cc64491fcaf",
|
"D101": "f72fc1c29657ea11e0238806a28f6abccf5b00e45904e1e0c9385cc64491fcaf",
|
||||||
"D300": "cb7b55b568ab893024884971eac0367fb6fe487c297e355d64258dae437f6ddd",
|
"D300": "cb7b55b568ab893024884971eac0367fb6fe487c297e355d64258dae437f6ddd",
|
||||||
"D394": "c4c4e62bda30032f12c17edf9a5087b6173a350ccb1fd750158978b3bd0acb7d",
|
"D394": "c4c4e62bda30032f12c17edf9a5087b6173a350ccb1fd750158978b3bd0acb7d",
|
||||||
"D406": "ca6103448d663ab16fcaef0f29f8933ef526cbf5aad12c7ff5dbd61b22ca9fc6",
|
"D406": "ca6103448d663ab16fcaef0f29f8933ef526cbf5aad12c7ff5dbd61b22ca9fc6",
|
||||||
"SIT_FIN_SEM_2025": "8164843431e6b703a38fbdedc7898ec6ae83559fe10f88663ba0b55f3091d5fe",
|
"SIT_FIN_SEM_2025": "8164843431e6b703a38fbdedc7898ec6ae83559fe10f88663ba0b55f3091d5fe",
|
||||||
"SIT_FIN_AN_2025": "accceef5b6585a3e901d83d23fc2e60f6562eac4a2ce00f943856232bed929d6",
|
"SIT_FIN_AN_2025": "accceef5b6585a3e901d83d23fc2e60f6562eac4a2ce00f943856232bed929d6",
|
||||||
"DESCARCARE_DECLARATII": "b2a9534d4f64b828abdb97459b92be27ba26a0d9ba1a0f947ef4a37c968ef293",
|
"DESCARCARE_DECLARATII": "0fb1535fe97aeadc7f415431238fae2cf7bc52d9e0c17ce3c4b4a12db92cd733",
|
||||||
"D205": "d3c20a7ae70f4c18bbb7add42af035e3746d323b2e6df37a4e31ed625ddb86d9",
|
"D205": "d3c20a7ae70f4c18bbb7add42af035e3746d323b2e6df37a4e31ed625ddb86d9",
|
||||||
"D390": "4726938ed5858ec735caefd947a7d182b6dc64009478332c4feabdb36412a84e",
|
"D390": "31d0bf3f98eda3556039cc7e186bfcaf71bdb962459a2cf54f4d03d1d57053fc",
|
||||||
"BILANT_2024": "fbb8d66c2e530d8798362992c6983e07e1250188228c758cb6da4cde4f955950",
|
"BILANT_2024": "fbb8d66c2e530d8798362992c6983e07e1250188228c758cb6da4cde4f955950",
|
||||||
"BILANT_2025": "115531c0d6f20d84c38ebb6f621d57ecc151128ce115fe5b303160a9e2f4655a"
|
"BILANT_2025": "115531c0d6f20d84c38ebb6f621d57ecc151128ce115fe5b303160a9e2f4655a"
|
||||||
}
|
}
|
||||||
@@ -62,7 +62,7 @@ valabil începand cu
|
|||||||
01/2024 - publicat în data de 09.02.2024
|
01/2024 - publicat în data de 09.02.2024
|
||||||
soft A
|
soft A
|
||||||
actualizat în data de
|
actualizat în data de
|
||||||
17.06.2026
|
29.06.2026
|
||||||
soft J*
|
soft J*
|
||||||
actualizat în data de
|
actualizat în data de
|
||||||
25.05.2026
|
25.05.2026
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ publicat în data de
|
|||||||
soft A
|
soft A
|
||||||
actualizat în data de
|
actualizat în data de
|
||||||
07.05.2024
|
07.05.2024
|
||||||
|
Formular web
|
||||||
soft J*
|
soft J*
|
||||||
actualizat în data de
|
actualizat în data de
|
||||||
25.06.2025
|
25.06.2025
|
||||||
|
|||||||
@@ -397,6 +397,11 @@ Raportări contabile semestriale 2025
|
|||||||
18.07.2025
|
18.07.2025
|
||||||
Se transmit prin portalul
|
Se transmit prin portalul
|
||||||
e-guvernare.ro
|
e-guvernare.ro
|
||||||
|
Raportări contabile semestriale 2026
|
||||||
|
- publicat în data de
|
||||||
|
08.07.2026
|
||||||
|
Se transmit prin portalul
|
||||||
|
e-guvernare.ro
|
||||||
Situaţii financiare anuale/Raportări anuale an 2022
|
Situaţii financiare anuale/Raportări anuale an 2022
|
||||||
- publicat în data de
|
- publicat în data de
|
||||||
20.01.2023
|
20.01.2023
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"D100": {
|
"D100": {
|
||||||
"soft_a_url": "http://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/D100_710_XML_0126_170626.pdf",
|
"soft_a_url": "http://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/D100_710_XML_0126_290626.pdf",
|
||||||
"soft_a_date": "17.06.2026",
|
"soft_a_date": "29.06.2026",
|
||||||
"soft_j_url": "http://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/D100_22052026.zip",
|
"soft_j_url": "http://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/D100_22052026.zip",
|
||||||
"soft_j_date": "22.05.2026"
|
"soft_j_date": "22.05.2026"
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user