IVTEC Soluții web pe măsură

Atelier Ștefan

Site de prezentare, portofoliu și magazin pentru un atelier de tâmplărie, cu panou de administrare și un panou separat pentru oamenii din atelier. PHP fără framework, MariaDB, în jur de 50 de tabele, cu tot ce s-ar putea schimba vreodată mutat din cod în baza de date.

stefan dashboard
Client
Stefan
An
2026

Un atelier de tâmplărie vinde două lucruri deodată. Sunt obiectele gata făcute, cu preț pe etichetă, și sunt lucrările la comandă, unde prețul iese abia după ce știi esența lemnului, dimensiunile și finisajul. Magazinele online obișnuite știu să facă doar prima parte. A doua ajunge, de obicei, un formular de contact pus lângă catalog, iar clientul rămâne cu impresia că sunt două firme diferite.

Atelier Ștefan e construit în jurul acestei diferențe, nu în ciuda ei.

Ce cuprinde

  • Site public: prima pagină cu procesul de lucru, portofoliu de lucrări filtrabil pe categorie și an, catalog cu configurator de produs, contact și cerere de ofertă.
  • Panou de administrare: comenzi, produse și opțiuni de preț, portofoliu, pagini cu blocuri de conținut, bibliotecă media, mesaje, utilizatori cu permisiuni granulare, setări și jurnal de audit.
  • Panou de lucrător: comenzile alocate, specificațiile lor, schimbarea stării și pozele de progres.

Decizii

Un singur catalog, două feluri de produse. Produsele cu preț fix și cele la comandă stau în același tabel, deosebite de o coloană. Coșul le acceptă pe amândouă; dacă intră măcar un produs la comandă, comanda devine automat cerere de ofertă și nu mai afișează un total final, ci unul estimativ. Clientul nu trebuie să știe în care dintre cele două lumi a nimerit.

Comanda își păstrează varianta ei de adevăr. Numele, codul, prețul și opțiunile alese se copiază în comandă la momentul plasării. Dacă produsul e modificat sau șters peste șase luni, comanda veche rămâne exact cum a fost dată. Fără asta, istoricul devine fals — iar în România factura trebuie să corespundă comenzii.

Dacă cineva ar putea vrea să schimbe ceva, nu stă în cod. Datele de contact, textele legale, cotele de TVA, stările comenzilor și culorile lor, șabloanele de email, pragurile de protecție anti-spam — toate în baza de date, cu ecran de administrare. În cod rămân doar credențialele, cheile și logica de securitate, tocmai ca să nu poată fi schimbate din interfață.

Secțiunile se aprind pe rând. Site-ul s-a construit întreg, dar fiecare modul are un comutator în panou: magazinul, portofoliul, blogul se activează când conținutul e gata. Un modul stins nu e doar ascuns din meniu — adresele lui răspund 404.

Panoul de lucrător e gândit pentru un telefon ținut cu mâinile murdare. Ținte mari, puține ecrane, comenzile sortate după termen. Stările se pot schimba doar pe traseele permise, definite în baza de date, ca să nu se sară peste etape. Prețurile nu apar decât dacă permisiunea e dată explicit.

Autorizarea se verifică în două locuri. O dată în controller, pentru permisiune, și încă o dată în stratul de interogări, unde filtrul pe domeniu face ca un lucrător să nu poată extrage comenzile altcuiva nici dacă schimbă un număr din adresă. Butonul ascuns nu e o măsură de securitate.

Încărcarea de fișiere trece prin patru site. Tip real verificat, nu extensia din nume. Re-codificarea completă a imaginii, care distruge orice se ascunde în metadate. Nume generat aleatoriu. Originalele stau în afara zonei publice, iar în folderul servit motorul PHP e oprit.

Partea legală e tratată ca cerință, nu ca formalitate. Identificarea firmei în subsol, linkurile ANPC și SOL, registru de consimțăminte, banner de cookies care chiar oprește scripturile până la accept. Iar la dreptul de retragere în 14 zile: bunurile făcute după specificațiile clientului sunt exceptate prin lege, dar numai dacă scrie limpede și e afișat la comandă — altfel excepția pur și simplu nu se aplică.

Ce am lăsat dinadins pe dinafară

Plata cu cardul nu e integrată. Tabela și interfața de gateway există, goale, ca integrarea să se adauge mai târziu fără să se rescrie nimic. Atelierul confirmă oricum fiecare comandă la telefon înainte să intre în producție, deci plata online ar fi rezolvat o problemă care nu exista încă.

La fel, pontajul pe comandă și consumul de materiale nu sunt în prima versiune, dar structura comenzilor le suportă direct. Se adaugă în ziua în care e nevoie de costuri reale comparate cu devizul.

Fără framework, cu un singur motiv

Hosting partajat, fără terminal, fără Docker, fără proces care rulează în fundal. Un framework ar fi adus mai mult decât putea găzdui serverul. Alegerea are un preț cinstit: fiecare protecție — sesiuni, token pe formulare, limitarea încercărilor, politica de securitate a conținutului — se scrie manual și, mai important, se aplică peste tot la fel. Acolo unde un framework te apără prin valori implicite, aici te apără consecvența.