Portofoliu

Demo-uri live și proiecte de programare, grupate pe categorii — de la algoritmi și simulări construite de la zero, până la sisteme multiplayer în timp real și aplicații web de zi cu zi. Acest site face și el parte din listă: un site bilingv construit de la zero cu PHP, CSS și JavaScript pur, cu un AI alături ca partener de programare. Alege o categorie și explorează.

Analiză grindă

Un calculator structural interactiv — diagrame de forță tăietoare și moment încovoietor, plus săgeata grinzii, rezolvate analitic cu metoda Macaulay. Definești reazemele, forțele concentrate și o încărcare distribuită, iar diagramele se actualizează live.

  • Inginerie structurală
  • Metoda Macaulay
  • SVG
Deschide demo →

Analiză grindă cu zăbrele

Un solver 2D de grinzi cu zăbrele prin metoda rigidității directe — aceeași analiză matriceală de structuri folosită în software-ul FEM real. Definești deschiderea, înălțimea, numărul de panouri și încărcările; întinderea/compresiunea barelor și forma deformată se actualizează live.

  • FEM
  • Metoda rigidității
  • Inginerie structurală
Deschide demo →

Analiză modală

Frecvențe proprii și forme modale animate ale unei grinzi, dintr-un solver de valori proprii cu masă consistentă scris de la zero (reducere Cholesky + rotații Jacobi). Fiecare frecvență e comparată live cu soluția analitică exactă — inclusiv, când adaugi o masă la capăt, cu rădăcina ecuației caracteristice transcendente.

  • FEM
  • Valori proprii
  • Vibrații
Deschide demo →

Laminat compozit

Teoria Clasică a Laminatelor, de la zero: stivuiești straturi la orice unghi și obții matricea de rigiditate ABD, constantele efective, roza de rigiditate direcțională, tensiunile pe fiecare strat și factorul de cedare Tsai-Wu. O stivuire cvasi-izotropă iese izotropă deși niciunul dintre straturile ei nu e — exact aceasta e verificarea că funcționează.

  • Compozite
  • CLT
  • Tsai-Wu
Deschide demo →

Ciclul motorului

O simulare de motor rezolvată pe unghi de manivelă: cinematică reală bielă-manivelă, degajare finită de căldură Wiebe și transfer termic la pereți (Woschni), integrate cu RK4. Scurtează durata arderii și randamentul simulat converge exact pe ciclul Otto ideal — ciclul din manual apare ca simplu caz limită. Baleiază avansul la aprindere ca să găsească punctul MBT.

  • Termodinamică
  • EDO / RK4
  • Ardere
Deschide demo →

micro-GPT

Un transformer la nivel de caracter — atenție, LayerNorm, GELU, Adam și motorul de derivare automată reverse-mode care îl antrenează — scris de la zero într-un singur fișier, fără nicio bibliotecă, și antrenat live în browserul tău pe textul acestui site. Ce scrie e aiurea, iar demo-ul o spune; afirmația pe care o face de fapt e măsurabilă. Costul trebuie să treacă sub entropia bigramă a corpusului — cel mai bun scor pe care îl poate atinge orice model care citește doar caracterul precedent, obținut prin numărare — iar momentul trecerii e momentul în care atenția începe să-și merite locul. Fiecare gradient al motorului e verificat față de diferențe finite, iar masca de cauzalitate e demonstrată exactă: perturbi un token din viitor și logiții anteriori rămân identici bit cu bit.

  • Transformer
  • Derivare automată
  • Atenție
Deschide demo →

RL vs LQR

Un pendul inversat pe cărucior, condus simultan de două regulatoare: LQR, al cărui câștig iese dintr-o ecuație Riccati și e demonstrabil optim pentru problema liniarizată, și o politică neuronală cu 113 parametri, antrenată live în browserul tău prin căutare evolutivă, care nu știe nicio fizică. Fiecare eșuează categoric în regimul celuilalt, iar demo-ul măsoară asta, nu o afirmă: lângă verticală politica nu are voie să coboare sub optim — o teoremă, și o verificare — iar din poziția atârnată LQR ridică tija din 2 porniri din 30, față de 25 ale hibridului. Așa că regulatorul livrat e cel al lui Åström: rețeaua ridică, iar câștigul Riccati prinde.

  • Învățare prin întărire
  • LQR / Riccati
  • Teoria reglării
Deschide demo →

PINN vs FEM

O rețea neuronală rezolvă o grindă Euler-Bernoulli pornind doar de la fizică — fără date, deloc: funcția de cost este ecuația diferențială. Se antrenează live împotriva a doi rivali, soluția analitică și propriul meu solver cu elemente finite, pe un motor de derivare automată scris de la zero (jet-uri Taylor peste o bandă reverse-mode, ca rețeaua să poată fi derivată de patru ori în raport cu propria ei intrare). Și tot FEM câștigă — demo-ul o spune răspicat și arată în schimb exact unde își merită rețeaua locul.

  • PINN
  • Derivare automată
  • FEM
  • Deep Ritz
Deschide demo →

Neuroevoluție

O populație de 150 de rețele neuronale învață singură să joace Flappy Bird printr-un algoritm genetic — fără antrenor, fără date, doar selecție naturală de-a lungul generațiilor.

  • Algoritm genetic
  • Rețele neuronale
  • AI
Deschide demo →

Patru în linie · AI

Joci contra unui AI scris de la zero: minimax cu retezare alpha-beta, adâncime de căutare reglabilă și vizualizarea pozițiilor evaluate la fiecare tură.

  • Minimax
  • Alpha-beta
  • AI
Deschide demo →

Autograd Engine

Un motor de derivare automată reverse-mode scris de la zero — nucleul scalar are circa 200 de linii de Python, fără PyTorch și fără autodiff din NumPy, doar o clasă Value, un graf computațional și regula lanțului — plus un al doilea motor n-dimensional, în care fiecare pas înapoi, inclusiv adjuncta difuzării (broadcasting), e derivat de mână. Rescrierea valorează ~5.000x pe aceeași problemă cu 337 de parametri, iar motivul e numărat, nu afirmat: cele 129.938 de noduri de graf per trecere înainte se reduc la 23. Corectitudinea e fixată de adevăruri din afara motorului — matrici hessiene derivate de mână, gradientul în formă închisă (p − y) al entropiei încrucișate cu softmax și soluția exactă a ecuațiilor normale pe care bucla de antrenare e obligată să aterizeze — apoi verificată încă o dată față de PyTorch, cu care coincide pe alocuri la zero. 210 verificări. Iar benchmark-ul s-a prins singur că măgulea motorul: o rulare timpurie pretindea că bate PyTorch, ceea ce s-a dovedit a fi doar PyTorch măsurat la rece. O pagină statică de prezentare, nu un demo live în browser.

  • Derivare automată
  • Python
  • NumPy
Deschide demo →

GPU Neural Trainer

Un motor de tensori și derivare automată scris de la zero, cu două motoare de execuție — JS simplu și shadere de calcul WebGPU scrise de mână în WGSL, atât înainte cât și înapoi — fără TensorFlow.js, fără ONNX Runtime — care antrenează live, în browser, un MLP cu 2 straturi pe cifre scrise de mână de 8×8 (load_digits din sklearn, inclus direct în cod la momentul build-ului, fără nicio cerere de rețea). Motorul de referință pe CPU e verificat cu diferențe finite centrale pe toți cei 167 de parametri ai unei rețele reale, cu eroare relativă sub 1e-6, și antrenat integral până la 97,8% acuratețe pe setul de test, nevăzut la antrenare (351 din 359 de cifre, pe o rețea care separat atinge 100% pe propriul set de antrenare — deci diferența e onest golul de generalizare, nu o scurgere de date). Pentru că shaderele GPU rulează în float32 iar motorul de referință în float64, nu pot fi identice bit cu bit — așa că, în loc să afirme o cifră, pagina include un panou de auto-verificare live, care rulează o trecere identică înainte și înapoi prin ambele motoare, pe imagini reale de cifre, chiar în browserul tău, și raportează abaterea maximă măsurată (cu cinci zecimale, nu o pretenție) față de o toleranță declarată de 5e-3. Scrierea de mână a kernel-ului de matmul pentru modul 2 din trecerea înapoi a scos la iveală un bug real de indexare — bufferul uniform împacheta numărul greșit de rânduri al operandului în pasul de ieșire — prins prin re-derivarea aritmeticii de indexare a fiecărui kernel WGSL față de propriul comentariu, nu doar presupunând că e corect fiindcă s-a compilat. Un panou de benchmark cronometrează live pașii de antrenare pe CPU față de GPU, la mai multe combinații de batch/lățime, și raportează rezultatul așa cum iese — costul de lansare a kernel-elor și de transfer al buffer-elor înseamnă că un MLP mic poate pierde ușor în fața unei bucle CPU strânse, iar pagina spune asta direct, nu alege cifrele favorabile. Fără WebGPU înseamnă o alternativă CPU complet funcțională, automată — nu o pagină goală.

  • WebGPU
  • WGSL
  • Shadere de calcul
Deschide demo →

Diffuzie

Un model de difuzie de tip DDPM — proces de adăugare progresivă a zgomotului, un MLP cu 109.632 de parametri care prezice zgomotul, eșantionare inversă ancestrală, totul pe un motor de tensori și derivare automată scris de la zero, fără PyTorch, TensorFlow sau JAX în modelul livrat — antrenat offline pe cele 1.797 de cifre scrise de mână de 8×8 din sklearn, cu procesul invers animat live în browser printr-un motor de inferență JS portat manual, verificat față de modelul Python antrenat cu o eroare de ~1e-7. Înainte să fie generată vreo cifră reală, mecanismul a fost fixat de patru adevăruri exacte sau Monte Carlo (48 de verificări): media/varianța empirică a procesului de zgomot față de forma închisă q(xt|x0), pe 11 pași de timp și două căi de cod independente; un predictor de zgomot antrenat pe un amestec-jucărie de 3 gaussiene, care converge la 0,6% de pierderea sa optimă Bayes, demonstrabilă exact; o verificare cu diferențe finite a gradientului pe fiecare parametru (~1e-11), dublată de un oracol PyTorch independent, care coincide la precizia mașinii; și o verificare de consistență a lanțului invers care, alimentată cu denoiser-ul optim exact, trebuia să reproducă statisticile cunoscute ale distribuției-jucărie atât din zgomot pur, cât și dintr-o stare intermediară zgomotoasă — verificare care a scos la iveală o constatare reală pe parcurs: la doar 50 de pași inverși, această verificare a eșuat măsurabil (o componentă a amestecului a absorbit aproape dublul cotei sale reale de eșantioane) chiar și cu scorul exact introdus, motiv pentru care modelul livrat rulează 1.000 de pași, nu 50. Pe cifre reale: eșantioanele generate au în medie o distanță L2 de 2,50 față de cel mai apropiat vecin real (față de 2,05 real-la-real, față de 7,09 pentru zgomot uniform — nici memorare, nici degenerare), iar un clasificator antrenat independent atribuie clasa intenționată la 96,8% dintre eșantioane, cu încredere (p>0,8) pentru 91,3% — cifra "8" fiind punctul slab raportat onest, la 85%/62,5%.

  • Modele de difuzie
  • DDPM
  • Derivare automată
Deschide demo →

Scriitor (nano-LLM)

Un transformer doar-decodor cu 1.069.824 de parametri — 4 straturi, 4 capete de atenție, un context de 128 de tokeni peste un vocabular BPE la nivel de octet cu 1024 de intrări — antrenat offline, pe un singur procesor, în 8,7 minute, pe 1,70 MB de proză în engleză și română din domeniul public (Austen, Carroll, Caragiale, Slavici, Regina Maria; fiecare descărcare fixată prin SHA-256, textul-cadru Gutenberg eliminat), apoi scris a doua oară, de la zero, în JavaScript și livrat aici. Sunt de 44 de ori mai mulți parametri și un corpus de 37 de ori mai mare decât la micro-GPT-ul de mai sus, cu un context care ajunge la ~320 de octeți de text în loc de 32 de caractere. Niciun PyTorch, TensorFlow sau JAX nu apare în modelul care se antrenează și rulează: fiecare gradient trece printr-un motor de derivare automată reverse-mode scris de mână, iar torch apare într-un singur fișier de test, ca oracol opțional — unde coincide cu acel motor pe toți cei 660.992 de parametri ai unui model de lățime completă, la 1,7e-15. Afirmația principală nu e că scrie bine — nu scrie. E că două implementări scrise independent ale aceleiași treceri înainte (versiunea JS a fost scrisă după descrierea arhitecturii, niciodată tradusă din Python) coincid, pe aceleași ponderi int8 dezcuantizate, la 1,6e-14 pe fiecare logit, dau același argmax în toate cele 384 de poziții testate și emit un eșantion identic de 200 de tokeni — egalitate exactă între numere întregi, fără nicio toleranță în spatele căreia să te ascunzi. 232 de verificări în total (189 în Python + 43 în JS), fiecare fixată de ceva din afara lucrului verificat: diferențe finite centrale pe toți cei 1.336 de parametri ai unui transformer complet, dar minuscul; masca de cauzalitate ca identitate bit cu bit; un model cu zero straturi care trebuie să convergă pe o tabelă bigramă numărată (Δp maxim 1,21e-05), a cărei entropie trebuie ea însăși să regăsească entropia adevărată a unui lanț Markov despre care nu i s-a spus nimic; o margine de eroare int8 exactă, verificată element cu element pe 1.064.960 de valori; și o căutare de contaminare care găsește 0 din 2.000 de secvențe de 64 de tokeni din setul de validare în fluxul de antrenare. Pe text nevăzut la antrenare atinge 2,3846 biți/octet și bate cu 0,19 nats/token pragul bigramei numărate, pe care nu l-a văzut niciodată (iar fiecare limbă își bate separat propriul prag: EN +0,24, RO +0,16). Două eșecuri oneste sunt publicate, nu ascunse prin reglaje: pierde în fața unui model trigramă numărat cu 0,39 nats — descoperit doar pentru că am refuzat să-l compar cu o variantă deliberat prea netezită, pe care ar fi "bătut-o" — iar curba de antrenare arată că modelul e sub-antrenat: scade monoton la toate cele 12 evaluări și se oprește înainte de minim, ceea ce explică foarte probabil pierderea. Un clasificator independent, pe trigrame de caractere (validat mai întâi la 100% pe text uman), spune că 98,8% dintre continuări rămân în limba promptului, iar rata de copiere textuală e 0,0% — deci a învățat, nu a memorat. Ce scrie de fapt e fluent local și fără sens global, iar pagina o spune direct.

  • Transformer
  • Tokenizator BPE
  • Antrenare offline
Deschide demo →

Motor de căutare

Un motor de căutare construit de la zero în PHP — index inversat, ranking BM25 și toleranță la greșeli de tastare — peste conținutul real al acestui site.

  • PHP
  • Index inversat
  • BM25
Deschide demo →

Dashboard vânzări

Dashboard interactiv de analiză — date generate în PHP, grafice desenate cu Chart.js.

  • PHP
  • Chart.js
  • JavaScript
Deschide demo →

Daily Brief

Un dashboard personal care combină vremea locală și știri relevante, cu sugestii simple bazate pe context (ploaie → ia umbrela, căldură → hidratează-te). Construit cu Next.js, TypeScript și React Query; toate apelurile către API-uri externe trec prin server, ca cheile să nu ajungă niciodată în browser.

  • Next.js
  • TypeScript
  • React Query
Deschide demo →

Aplicație de rezervări

O aplicație de rezervare a unor sloturi orare (escape room/ședințe de coaching), cu anulare din panoul de admin și resetare de parolă. Prevenirea suprapunerilor e o constrângere de excludere în Postgres, nu un check-then-insert cu risc de race condition în cod — verificată cu un test real de concurență pe două tranzacții. Row-Level Security ține datele clienților complet în afara calendarului public.

  • Next.js
  • Supabase
  • PostgreSQL
Deschide demo →

Magazin de vinil

Un magazin de viniluri în mod test — răsfoiești și filtrezi catalogul, adaugi în coș și finalizezi comanda. Clientul nu trimite niciodată un preț: trimite id-urile produselor, iar serverul recitește fiecare preț din bază înainte să construiască sesiunea Stripe Checkout. O comandă e marcată plătită doar de un webhook Stripe verificat și idempotent — niciodată de redirect-ul de succes — iar stocul se decrementează în același pas. Fiecare copertă e generată procedural dintr-un seed, așa că nu există niciun fișier imagine.

  • Next.js
  • Supabase
  • Stripe
Deschide demo →

Voronoi și Delaunay

Un triangulator Delaunay scris de la zero cu algoritmul Bowyer–Watson, desenat live împreună cu diagrama Voronoi duală. Împrăștii punctele sau le tragi cu mouse-ul, iar rețeaua se re-triangulează instant. Triangulația Delaunay e chiar discretizarea din spatele oricărui solver FEM — așa că fiecare triunghi e verificat live cu proprietatea cercului circumscris gol, iar harness-ul fixează rețeaua de formulele lui Euler, de teorema celui mai apropiat vecin și de acoperirea exactă a înfășurătoarei convexe.

  • Geometrie computațională
  • Bowyer–Watson
  • Discretizare
Deschide demo →

Linii de contur

Linii de contur netede extrase dintr-un câmp scalar live cu marching squares — exact pasul de post-procesare pe care îl rulează un program CAE ca să deseneze o hartă de tensiuni. Tragi sursele gaussiene și contururile se redesenează în timp real. Cu interpolare liniară pe muchii, conturul oricărui câmp liniar sau biliniar e exact la precizie de mașină — panoul de verificare o demonstrează live și arată lungimea conturului unui cerc convergând spre 2πr pe măsură ce rafinezi grila.

  • Marching squares
  • Izosuprafețe
  • Canvas
Deschide demo →

Epicicluri Fourier

Desenezi orice formă închisă și un lanț de cercuri rotitoare o retrasează — fiecare cerc e un termen al transformatei Fourier discrete. Reglezi numărul de armonice și vezi cum se ascute aproximarea. E hipnotic, dar e exact: demo-ul verifică live dus-întorsul DFT→IDFT și identitatea de energie a lui Parseval, iar harness-ul fixează transformata de opt teoreme Fourier discrete (frecvență unică, deplasare, liniaritate, convergență).

  • DFT
  • Prelucrarea semnalului
  • Canvas
Deschide demo →

Simulare de țesătură

O țesătură masă-arc integrată cu Verlet și constrângeri de distanță bazate pe poziție — o apuci, o rupi, sufli vânt prin ea. Verlet integrează exact gravitația constantă, iar solver-ul de constrângeri e fixat de mecanica reală: o legătură rigidă oscilează cu perioada exactă a pendulului 2π√(L/g), iar un lanț prins la ambele capete se așază pe catenaria analitică y = a·cosh(x/a) cu o eroare sub o fracțiune de procent.

  • Integrare Verlet
  • Fizică
  • Constrângeri
Deschide demo →

Vizualizator de algoritmi

Privește bubble, insertion, quick și merge sort întrecându-se, cu statistici live și control de viteză.

  • Algoritmi
  • JavaScript
  • Canvas
Deschide demo →

Ray Tracer (WASM)

Un path tracer bazat pe fizică — materiale difuze, metalice și dielectrice, quad-uri și cutii emisive pentru un preset Cornell box, un BVH peste scenă, terminarea traiectoriilor prin ruletă rusească — scris în C++ și compilat în WebAssembly, randând eșantion cu eșantion direct pe canvas. BVH-ul e demonstrat că nu schimbă nimic în afară de viteză: imagini identice bit cu bit cu și fără el. Verificarea centrală e testul „cuptorului alb" — un obiect convex într-un mediu cu radianță uniformă trebuie să randeze exact albedo × L, deci un reflector perfect dispare pe fundalul lui — plus ruleta rusească demonstrată nepărtinitoare, geometria camerei verificată față de relațiile analitice de proiecție, o sursă de lumină de tip arie verificată față de ecuația factorului de configurație Howell, și convergența refăcută în lumină liniară (nu în pixeli corectați gamma) până la panta corectă de 1/√n. Demo-ul își recunoaște și punctul slab, nu îl ascunde: fără next-event estimation, sursa mică și puternică din Cornell box e de 22x mai zgomotoasă decât scena luminată de cer, la același număr de eșantioane. 105 verificări, toate față de un adevăr matematic extern sau identități exacte bit cu bit, nu față de propriul rezultat al randatorului.

  • C++
  • WebAssembly
  • Trasare de raze
Deschide demo →