Skip to main content

Blog

Despre dezvoltare web, performanță, instrumente — și, din când în când, ceva mai mare.

VercelGit HooksCI/CDDeploymentpnpm

Deploy pe Vercel dintr-un hook git pre-push: repo de organizație, plan Hobby, fără secrete CI

Integrarea Git a Vercel refuză un repo privat deținut de o organizație GitHub pe planul Hobby, iar varianta CI cere secrete de repo pe care poate nu ai voie să le adaugi. Iată varianta mai ușoară: un hook pre-push local care face deploy exact la commit-ul împins, cu CLI-ul Vercel, în timp ce toți continuă să dea push sub propriul nume.

6 octombrie 20267 min de citit
Citește articolul →
VercelGitHub ActionsCI/CDDeploymentMonorepo

Deploy pe Vercel din CI când cel care face commit nu e membru al echipei

Muți un repo într-o organizație GitHub și Vercel începe discret să-ți blocheze deploy-urile: commit-ul „nu a putut fi asociat unui membru al echipei”. Iată cum fac deploy din GitHub Actions cu CLI-ul Vercel: commit-urile mele continuă să conteze în propriul graf GitHub, dashboardul arată în continuare cine a dat push, iar eu nu plătesc un loc pentru fiecare contribuitor.

Actualizat 6 octombrie 20268 min de citit
Citește articolul →
iOSSafariWebKitLexicalcontenteditableDebugging

Patru bug-uri omorau selecția de text pe iOS — și fiecare îl ascundea pe următorul

Un editor Lexical într-un drawer vaul funcționa peste tot, mai puțin pe un iPhone real: mânerele de selecție nu se trăgeau, derularea se bloca la margini, bara de instrumente se scufunda sub tastatură. Ghicitul nu repara nimic, pentru că nu exista un singur vinovat — erau patru, independenți, și fiecare îl masca pe următorul. Ce a funcționat: un stand de bisecție — același schelet cu un comutator pentru fiecare suspect, testat pe un dispozitiv fizic. Iată vânătoarea completă — href-ul care otrăvește selecția, handlerele de drag ale vaul, propriul nostru tap-focus, un container care se mișcă sub deget — plus autopsia blocajului de scroll și cele trei scrieri unice de scrollTop care au făcut rubber-band-ul să pară nativ, inclusiv prinderea unui swipe în plin recul.

5 septembrie 202615 min de citit
Citește articolul →
Claude CodeAICLIBashAutomationResilience

O cascadă de agenți: terminalul îl alege pe cel care funcționează

Când Claude a căzut parțial și unele modele au încetat să răspundă, am încercat să trec pe Gemini — și am descoperit că rezerva mea era stricată de luni de zile. Iată cum construiești una care chiar rezistă.

29 august 20269 min de citit
Citește articolul →
Claude CodeAIAutomationMonitoringlaunchdResilience

system-droid: un paznic care îmi verifică și repară singur sistemele

Serviciile mele locale mureau mereu în tăcere: raportul de dimineață nu sosea, tokenurile expirau, backupul îngheța. Așa că am construit un droid pe launchd care verifică totul la două ore, repară printr-un agent Claude ce e sigur de reparat și îmi scrie doar când e nevoie cu adevărat de un om.

17 august 202610 min de citit
Citește articolul →
Next.jsA/B TestingProxyPerformanceSSG

O pagină statică care e, în secret, un test A/B

Un test A/B e de obicei construit așa încât pagina cade de pe CDN într-un render la fiecare cerere. Nu trebuie să fie așa. Ține fiecare variantă complet statică și lasă un proxy (middleware-ul redenumit din Next.js) să rezolve alocarea printr-o platformă de experimente, pe baza unui device id stabil — și rescrie doar când vizitatorul nu e în control. URL-ul nu se schimbă niciodată, CDN-ul tot pune în cache, iar calea obișnuită nu costă nimic.

14 august 20268 min de citit
Citește articolul →
Next.jsMemory LeakDockerAWS LambdaNode.js

Next.js Memory Leak: Fetch + Mod Standalone — 2 ani fără rezolvare

Next.js aplică un patch peste fetch-ul global și adaugă un strat de cache care pierde memorie la fiecare cerere. În Docker/K8s asta provoacă crash-uri OOM la fiecare câteva ore. Bug-ul există din Next.js 14 și rămâne nerezolvat în 16.2.x.

Actualizat 10 august 202610 min de citit
Citește articolul →
claude-codeproductivityclidevtools

Mai multe conturi Claude Code pe un singur dispozitiv

Cum să folosești două (sau mai multe) conturi Claude Code în paralel — personal și corporativ — cu izolare completă folosind o singură variabilă de mediu.

Actualizat 9 august 20264 min de citit
Citește articolul →
SolidJSSolidStartPerformanceSSGCode Splitting

Încărcarea leneșă a conținutului blogului în SolidStart fără a pierde SSG

Blogul tău livrează probabil corpul fiecărui articol într-un singur bundle — al meu crescuse la 2,88 MB și se descărca chiar și pe pagina de index, unde ai nevoie doar de titluri. Iată cum am împărțit proza fiecărui articol într-un chunk leneș care se încarcă la cerere, în timp ce fiecare pagină rămâne complet randată pe server pentru SEO.

5 august 20268 min de citit
Citește articolul →
ailearningcareermethodology

CRAFT: o metodă de a folosi AI fără să-ți pierzi măiestria

A numi o problemă fără a oferi o soluție nu face decât să semene neliniște. După postarea despre pierderea abilităților din cauza AI, iată rețeta: CRAFT — cinci principii (Challenge First, Review Adversarially, Ask Why Not What, Friction on Purpose, Test Your Understanding) sub o singură axiomă: AI face ce ai stăpânit deja, tu faci ce încă înveți. O metodă practică și ușor de reținut pentru a folosi AI zi de zi fără să-ți pierzi pe tăcute priceperea.

Actualizat 5 august 20266 min de citit
Citește articolul →
JavaScriptAnalyticsEvent DelegationServer ComponentsPerformance

Un singur ascultător în loc de câte o componentă client pentru fiecare buton

În clipa în care adaugi analiză de clicuri unei componente, aceasta devine o componentă client care livrează JavaScript. Fă asta la scara unui site întreg și doar urmărirea îți umflă bundle-ul. Iată alternativa care se află în platformă dintotdeauna: un singur ascultător delegat, atribute de date declarative și componente care rămân pur HTML randat pe server.

28 iulie 202610 min de citit
Citește articolul →
CSSHTMLAccordionFrontendPerformance

Un acordeon fluid cu zero JavaScript

Toată lumea recurge la o stare React și la un hook de măsurare a înălțimii ca să construiască un acordeon. Browserul livrează unul nativ de ani buni — iar din 2024 se animează la deschidere și la închidere cu CSS pur. Iată tehnica completă: details[name], ::details-content, interpolate-size și proprietatea care face ca și închiderea să se anime.

28 iulie 20269 min de citit
Citește articolul →
JavaScriptWebThird-Party ScriptsFrontendPatterns

Prinde o valoare de la un script terț chiar în clipa în care ajunge pe window

Un script pe care nu îl controlezi își scrie rezultatul într-un global de pe window la un moment pe care nu îl poți prezice. Cea mai mare parte a codului intră într-o cursă cu el folosind un timeout sau irosește main thread-ul cu polling. Iată trucul cu accessor property care transformă scrierea într-un eveniment — plus getter-ul pe care nu trebuie să-l uiți, și cum să înlocuiești complet valoarea.

27 iulie 20269 min de citit
Citește articolul →
CSSContainer QueriesTypographyFrontendPerformance

Potrivește textul în containerul său cu CSS pur — fără JavaScript

Toată lumea scrie un hook JavaScript care micșorează font-size până când textul încape în container. Iată o alternativă complet funcțională și fără JS, folosind unități de container query, clamp() și despărțire în silabe în funcție de limbă — inclusiv capcana cascadei care îi face pe mulți să renunțe.

24 iulie 202611 min de citit
Citește articolul →
Next.jsPerformanceCode SplittingTurbopackReact Server Components

next/dynamic nu te va salva: de ce paginile Next.js bazate pe CMS livrează fiecare chunk

Paginile noastre Next.js bazate pe CMS livrau toate cele ~100 de componente de secțiune pe fiecare rută — în ciuda unei utilizări exemplare a next/dynamic. Am epuizat orice remediu la nivel de bundler (import() direct, împărțirea fișierelor, configurarea Turbopack, splitChunks în webpack) înainte de a găsi cauza reală: accesibilitatea, nu chunking-ul. Codegen la build time plus rewrites au redus JavaScript-ul de la prima încărcare cu 53%.

18 iulie 202614 min de citit
Citește articolul →
obsidianmiroautomationtoolsopen-source

Îmi scot board-urile din Miro și le aduc în Obsidian

Butonul Export din Miro îți dă un PNG sau un PDF — o fotografie a datelor, nu datele. Dacă board-urile tale sunt load-bearing maps of thinking adunate de-a lungul anilor, locul lor e în Obsidian: editable, searchable, într-un vault local. Cum am scos board-urile din Miro prin REST API și le-am convertit în Excalidraw / Obsidian Canvas — păstrând poziții, culori, fonturi, curved connectors, mindmap nodes — iar lecția merge mai departe decât Miro: orice SaaS merită un exit plan ÎNAINTE să-l deschizi vreodată.

30 iunie 20266 min de citit
Citește articolul →
claude-codeproductivityclidevtools

Claude Code Multi-Profile, v2: o arhitectură XDG curată

După o lună pe vechea abordare bazată pe alias, mi-am reconstruit setup-ul multi-profile Claude Code într-o structură conformă XDG sub ~/.config/claude-profiles/. Motivul real nu a fost ordinea — a fost descoperirea că ~/.claude.json este un fișier separat în rădăcina home, unde trăiau discret serverele MCP adăugate cu --scope user.

Actualizat 23 iunie 20269 min de citit
Citește articolul →
ailearningcareerengineering

Liniștea pe care a oprit-o AI

Mai merită să înveți programare dacă există AI? Răspunsul zgomotos greșește din ambele părți. Cu baza de dovezi 2025–2026 (Nature, Anthropic, AI & Society) întrebarea nu e "AI sau nu", ci ce competențe îi predai AI-ului și pe care le păstrezi pentru tine — și un lucru chiar s-a schimbat: înainte realitatea te forța să înveți prin fricțiune, AI a oprit în tăcere această presiune.

22 iunie 20268 min de citit
Citește articolul →
claude-codeagentsaiprompt-engineeringautomation

Cum să scrii agenți Claude Code care nu te mint

Două reguli pentru pipeline-uri de agenți Claude Code de încredere: un agent per specializare și comenzi de shell în locul prompturilor oriunde sunt implicate răspunsuri cantitative.

29 mai 20266 min de citit
Citește articolul →
ObsidianClaudeMCPAutomationAI

Cum conectezi Claude Desktop la Obsidian — O călătorie prin 4 servere MCP

O poveste reală despre găsirea unei modalități stabile de a automatiza refactoring-ul vault-ului Obsidian prin Claude. Ce s-a stricat, ce a funcționat și de ce VaultForge s-a dovedit a fi singura opțiune funcțională.

3 mai 20269 min de citit
Citește articolul →
physicsphilosophyconsciousnessblack-holescosmology

Găurile negre ca universuri recursive: de la fizică la sensul existenței

Ce-ar fi dacă fiecare gaură neagră este un Big Bang al unui nou univers? O explorare a cosmologiei recursive, a radiației Hawking și a închiderii cognitive.

17 aprilie 202610 min de citit
Citește articolul →
aicmsweb-developmentopinionworkflow

AI a ucis CMS-ul — cel puțin pentru site-urile simple

De ce sistemele tradiționale de gestionare a conținutului devin inutile pentru portofolii, bloguri și landing page-uri — și cum instrumentele AI înlocuiesc întregul strat CMS cu limbaj natural.

17 aprilie 20268 min de citit
Citește articolul →
ObsidianPerplexityMCPAIProductivity

Cum conectezi Perplexity AI la Obsidian prin MCP — notițe direct din chat

Configurează Perplexity Desktop pentru a citi și scrie în Obsidian vault-ul tău folosind serverul MCP filesystem. Cercetează pe web și salvează în notele tale într-o singură conversație.

12 aprilie 20265 min de citit
Citește articolul →
Claude CodeAIObsidianAutomationProductivity

Digest zilnic de știri AI cu Claude Code CLI și Obsidian — zero dependențe

Cum am construit un agent zilnic de documentare a știrilor cu un script bash de 6 linii, modul headless Claude Code și macOS launchd. Caută 11 subiecte și scrie digesturi direct în Obsidian.

12 aprilie 20267 min de citit
Citește articolul →
next.jsreact-19dark-modezustandperformance

Next.js Dark Mode fără flash sau avertismente React 19

Cum să înlocuiești next-themes cu Zustand + useServerInsertedHTML pentru dark mode fără pâlpâire în Next.js 15+, fără avertismente de script React 19.

11 aprilie 20268 min de citit
Citește articolul →
Next.jsCSSPerformanceTurbopackSCSS

Cum am eliminat 94 de fișiere CSS care blochează randarea în Next.js 16 cu o funcționalitate Turbopack slab documentată

După zile în care am încercat fiecare abordare — de la experimental.inlineCss până la hack-uri cu MutationObserver — am descoperit Turbopack Import Attributes care rezolvă problema CSS-ului ce blochează randarea în Next.js App Router.

8 aprilie 202612 min de citit
Citește articolul →