[{"data":1,"prerenderedAt":736},["ShallowReactive",2],{"meta-profile":3,"command-palette-about":18,"meta-contacts":403,"project-wp-bootstrap":421},{"id":4,"extension":5,"logo_name":6,"meta":7,"name":8,"roles":9,"stem":16,"__hash__":17},"profile/meta/profile.yml","yml","giovanni-manara",{},"Giovanni Manara",[10,11,12,13,14,15],"Full Stack Developer","WordPress Developer","Frontend Developer","GSAP Enthusiast","Tennis Lover","Gamer Appassionato","meta/profile","3BmX-xwCGwakpBF7rjsHDYIpXj8I89zWKoP32P9_MxE",[19,44,63,81,100,122,144,187,220,247,300,326,378],{"id":20,"title":21,"body":22,"description":28,"extension":36,"meta":37,"navigation":38,"order":39,"path":40,"seo":41,"stem":42,"__hash__":43},"about/competencies/ai-nel-workflow.md","ai-nel-workflow",{"type":23,"value":24,"toc":32},"minimark",[25,29],[26,27,28],"p",{},"Uso quotidianamente strumenti come Claude Code e Cursor, ma con regole precise: la spec e il piano vengono prima del codice, ogni modifica passa da una review, e ogni repository ha le sue convenzioni scritte che anche gli agenti devono rispettare. L'AI accelera l'esecuzione; le decisioni — architettura, priorità, cosa entra in produzione — restano mie.",[26,30,31],{},"Quando ho voluto imparare React sul serio, ho ribaltato i ruoli: sul mio progetto personale l'AI poteva solo fare da reviewer, mai scrivere. Ogni riga l'ho scritta io. Saper usare bene questi strumenti significa anche sapere quando spegnerli.",{"title":33,"searchDepth":34,"depth":34,"links":35},"",2,[],"md",{},true,4,"/competencies/ai-nel-workflow",{"title":21,"description":28},"competencies/ai-nel-workflow","TX_bURb05LSO0o517DTADGBpxuILgJN3MNd2uxE6qZw",{"id":45,"title":46,"body":47,"description":51,"extension":36,"meta":57,"navigation":38,"order":58,"path":59,"seo":60,"stem":61,"__hash__":62},"about/competencies/code-quality.md","code-quality",{"type":23,"value":48,"toc":55},[49,52],[26,50,51],{},"Mi piace scrivere codice pulito e mantenere codebase leggibili e facili da manutenere — sia su personalizzazioni WordPress (temi/plugin) sia su progetti custom.",[26,53,54],{},"La qualità, per me, non è un dettaglio estetico: è logica, ordine e attenzione ai dettagli, così che un progetto prenda forma passo dopo passo e regga in produzione.",{"title":33,"searchDepth":34,"depth":34,"links":56},[],{},3,"/competencies/code-quality",{"title":46,"description":51},"competencies/code-quality","WVyPz6M7BXq1MiXLLc4nXEwS_MEpymEmdCSifEoF1Ms",{"id":64,"title":65,"body":66,"description":70,"extension":36,"meta":76,"navigation":38,"order":34,"path":77,"seo":78,"stem":79,"__hash__":80},"about/competencies/collaboration.md","collaboration",{"type":23,"value":67,"toc":74},[68,71],[26,69,70],{},"Ho fatto sport a diversi livelli fin da giovane, e questo mi ha lasciato una cosa utilissima nel lavoro: saper stare in squadra, comunicare in modo chiaro e contribuire senza \"rumore\".",[26,72,73],{},"Su progetti reali e codebase già in produzione, collaborare significa allinearsi sul problema, condividere contesto e consegnare in modo affidabile — non solo scrivere codice in isolamento.",{"title":33,"searchDepth":34,"depth":34,"links":75},[],{},"/competencies/collaboration",{"title":65,"description":70},"competencies/collaboration","CiCBh3JZXfzxe54qjCmGI8FdUVPskd571f84dOpak3U",{"id":82,"title":83,"body":84,"description":88,"extension":36,"meta":94,"navigation":38,"order":95,"path":96,"seo":97,"stem":98,"__hash__":99},"about/competencies/problem-solving.md","problem-solving",{"type":23,"value":85,"toc":92},[86,89],[26,87,88],{},"Quando qualcosa non torna, vado a fondo: studio, provo, documento e arrivo alla soluzione con costanza.",[26,90,91],{},"Nel lavoro quotidiano applico lo stesso approccio: capire il problema, scomporlo in parti gestibili, e farlo funzionare davvero — senza scorciatoie che poi costano in produzione.",{"title":33,"searchDepth":34,"depth":34,"links":93},[],{},1,"/competencies/problem-solving",{"title":83,"description":88},"competencies/problem-solving","_y34cpLrt3OqbL7_xHC_feokuoDThzESXsqrDOfmULo",{"id":101,"title":102,"body":103,"description":107,"extension":36,"meta":117,"navigation":38,"order":95,"path":118,"seo":119,"stem":120,"__hash__":121},"about/experiences/megiston.md","megiston",{"type":23,"value":104,"toc":115},[105,108],[26,106,107],{},"Dal 2022 lavoro come sviluppatore web, con un focus pratico su progetti reali e codebase già in produzione.",[26,109,110,114],{},[111,112,113],"strong",{},"2025 - oggi | Megiston S.r.l."," — Full stack web developer in un team piccolo, dove si tocca un po' di tutto. Mi sono occupato del frontend di una piattaforma di biglietteria online (Nuxt su API REST, interfacce costruite da Figma con Tailwind, carrello e pagamenti online), di personalizzazioni WordPress profonde — plugin custom per preventivi multi-step, dati strutturati JSON-LD, integrazioni con booking engine, ecc. — e attualmente del backend del nuovo sito aziendale con Payload CMS.",{"title":33,"searchDepth":34,"depth":34,"links":116},[],{},"/experiences/megiston",{"title":102,"description":107},"experiences/megiston","30UBT7QbA9xQo9Vrb9OritBBGpQLwd_4g3epIiFz3LQ",{"id":123,"title":124,"body":125,"description":138,"extension":36,"meta":139,"navigation":38,"order":34,"path":140,"seo":141,"stem":142,"__hash__":143},"about/experiences/websonica.md","websonica",{"type":23,"value":126,"toc":136},[127,133],[26,128,129,132],{},[111,130,131],{},"2022 - 2025 | Websonica S.r.l."," — Prima come stage web developer (2022-2023), poi come junior web developer (2023-2025). Ho lavorato su gestione e personalizzazione di siti WordPress e Magento2, su software custom in Laravel e Next.js, e su CRM come vTiger.",[26,134,135],{},"Mi piace tenere un approccio ordinato: capire il problema, scomporlo, e farlo funzionare davvero (senza magia nera… o almeno provandoci).",{"title":33,"searchDepth":34,"depth":34,"links":137},[],"2022 - 2025 | Websonica S.r.l. — Prima come stage web developer (2022-2023), poi come junior web developer (2023-2025). Ho lavorato su gestione e personalizzazione di siti WordPress e Magento2, su software custom in Laravel e Next.js, e su CRM come vTiger.",{},"/experiences/websonica",{"title":124,"description":138},"experiences/websonica","dVGZo1BJjKJRXpZU7gBpp2M0iuKv_52-qjEPKsA1GnA",{"id":145,"title":146,"body":147,"description":181,"extension":36,"meta":182,"navigation":38,"order":95,"path":183,"seo":184,"stem":185,"__hash__":186},"about/hobbies/favorite-games.md","favorite-games",{"type":23,"value":148,"toc":179},[149,156],[26,150,151,152,155],{},"Nei videogiochi mi sento a casa nei ",[111,153,154],{},"GDR",", soprattutto quelli story-driven: mi piace immergermi nelle storie, nei personaggi e nelle scelte (quelle che poi ti fanno pensare \"ok, questa me la porto dietro\").",[26,157,158,159,162,163,166,167,170,171,174,175,178],{},"Il mio primo \"innesco\" è stato ",[111,160,161],{},"Final Fantasy X",", e da lì ho continuato a cercare esperienze simili. Tra i miei preferiti ci sono la trilogia di ",[111,164,165],{},"Mass Effect"," (su Andromeda sorvoliamo), ",[111,168,169],{},"Baldur's Gate 3",", la saga di ",[111,172,173],{},"Persona"," (3, 4 e 5) e ",[111,176,177],{},"Clair Obscur 33",", probabilmente il mio preferito degli ultimi anni.",{"title":33,"searchDepth":34,"depth":34,"links":180},[],"Nei videogiochi mi sento a casa nei GDR, soprattutto quelli story-driven: mi piace immergermi nelle storie, nei personaggi e nelle scelte (quelle che poi ti fanno pensare \"ok, questa me la porto dietro\").",{},"/hobbies/favorite-games",{"title":146,"description":181},"hobbies/favorite-games","RjYRAf75mnYJgFIdt-pf1Wf3zXT7Y7Sum_s4AIaBdck",{"id":188,"title":189,"body":190,"description":194,"extension":36,"meta":215,"navigation":38,"order":34,"path":216,"seo":217,"stem":218,"__hash__":219},"about/hobbies/sports.md","sports",{"type":23,"value":191,"toc":213},[192,195,206],[26,193,194],{},"Ho praticato diversi sport (con una breve parentesi tra calcio e basket), ma i due che mi hanno formato di più sono stati scherma e tennis.",[26,196,197,198,201,202,205],{},"Per ",[111,199,200],{},"sei anni"," ho fatto agonismo nella ",[111,203,204],{},"scherma",", ottenendo buoni risultati a livello regionale e nazionale. Più che i piazzamenti, mi porto dietro ciò che conta davvero: fiducia costruita nel tempo, disciplina, ambizione e la capacità di lavorare in squadra anche quando la pressione sale.",[26,207,208,209,212],{},"Oggi il mio sport è il ",[111,210,211],{},"tennis",": è l'unico che pratico con continuità e che seguo davvero, anche in TV e streaming. Federer è stato il mio riferimento, e adesso mi godo con entusiasmo Alcaraz e (inevitabilmente) Sinner.",{"title":33,"searchDepth":34,"depth":34,"links":214},[],{},"/hobbies/sports",{"title":189,"description":194},"hobbies/sports","OjIveNcZF2yHP6pEJ4krecf72toMAa6nhMecOCA20Io",{"id":221,"title":222,"body":223,"description":33,"extension":36,"meta":242,"navigation":38,"order":95,"path":243,"seo":244,"stem":245,"__hash__":246},"about/personal-life/bio.md","bio",{"type":23,"value":224,"toc":239},[225,230,233,236],[226,227,229],"h2",{"id":228},"about-me","About me",[26,231,232],{},"Mi chiamo Giovanni Manara e lavoro come sviluppatore web dal 2022: prima uno stage, poi un percorso da junior, oggi full stack con propensione al frontend in una piccola web agency vicino Padova.",[26,234,235],{},"Mi muovo soprattutto su due binari: applicazioni web in Vue/Nuxt, dove mi sono occupato a lungo del frontend di una piattaforma di vendita online in produzione, e WordPress fatto sul serio — temi custom e plugin scritti da zero quando i builder non bastano. Ultimamente sto costruendo il backend del nuovo sito aziendale con Payload CMS.",[26,237,238],{},"Il filo conduttore: partire dal design, tenere la logica separata dalla UI, e quando un flusso mi serve più di una volta trasformarlo in uno strumento riusabile.",{"title":33,"searchDepth":34,"depth":34,"links":240},[241],{"id":228,"depth":34,"text":229},{},"/personal-life/bio",{"title":222,"description":33},"personal-life/bio","PXadkOSxGExPpohcY-s6KWcyBI_LvG_4DFW3s-eBhdg",{"id":248,"title":249,"body":250,"description":33,"extension":36,"meta":295,"navigation":38,"order":58,"path":296,"seo":297,"stem":298,"__hash__":299},"about/personal-life/education.md","education",{"type":23,"value":251,"toc":292},[252,256,259],[226,253,255],{"id":254},"educazione","Educazione",[26,257,258],{},"Un percorso non lineare: dalle biotecnologie allo sviluppo web, passando per la bioinformatica.",[260,261,262,269,275,286],"ul",{},[263,264,265,268],"li",{},[111,266,267],{},"2010-2015"," — Diploma al Liceo Scientifico Enrico Fermi (Padova).",[263,270,271,274],{},[111,272,273],{},"2015-2019"," — Laurea Triennale in Biotecnologie, Università del Piemonte Orientale (Novara).",[263,276,277,280,281,285],{},[111,278,279],{},"2019-2021"," — Laurea Magistrale in Bioinformatica, Università Tor Vergata (Roma). Qui mi sono avvicinato allo sviluppo web grazie a un corso di ",[282,283,284],"em",{},"Applicazioni web per la Bioinformatica",": con il contesto del COVID e una passione crescente, ho scelto di mettere in pausa l'università per concentrarmi sulla programmazione.",[263,287,288,291],{},[111,289,290],{},"2022"," — Corso professionalizzante in Full Stack Web Development (600 ore, riconosciuto MIUR), Accademia delle Professioni (Noventa Padovana), concluso con ottimi risultati.",{"title":33,"searchDepth":34,"depth":34,"links":293},[294],{"id":254,"depth":34,"text":255},{},"/personal-life/education",{"title":249,"description":33},"personal-life/education","zKz_U6qhxDUbh3tCI3bf5XcUlJLHsE-Ea0mDOJhN4ro",{"id":301,"title":302,"body":303,"description":33,"extension":36,"meta":321,"navigation":38,"order":34,"path":322,"seo":323,"stem":324,"__hash__":325},"about/personal-life/interests.md","interests",{"type":23,"value":304,"toc":318},[305,309,312,315],[226,306,308],{"id":307},"interessi","Interessi",[26,310,311],{},"Mi piace la tecnologia in senso ampio: dal web alle soluzioni \"ben costruite\", fino a tutto ciò che migliora processi e prodotti.",[26,313,314],{},"Amo il tennis (lo seguo e lo pratico da anni) e quando posso mi piace vivere i tornei dal vivo.",[26,316,317],{},"Mi piace anche viaggiare e cucinare: scoprire posti nuovi e provare sapori diversi è un ottimo modo per tenere la curiosità allenata.",{"title":33,"searchDepth":34,"depth":34,"links":319},[320],{"id":307,"depth":34,"text":308},{},"/personal-life/interests",{"title":302,"description":33},"personal-life/interests","E7rdK_OqdaU42uR_g8l-MRvUfHXlF0Mkjw6fiZzEkkw",{"id":327,"title":328,"body":329,"description":333,"extension":36,"meta":373,"navigation":38,"order":95,"path":374,"seo":375,"stem":376,"__hash__":377},"about/skills/hard-skills.md","hard-skills",{"type":23,"value":330,"toc":371},[331,334],[26,332,333],{},"Mi muovo tra front-end e back-end, con il frontend come casa.",[26,335,336,339,340,343,346,347,349,352,353,355,358,359,361,364,365,367,370],{},[111,337,338],{},"Fondamentali:"," HTML, CSS, JavaScript, TypeScript.",[341,342],"br",{},[111,344,345],{},"Frontend:"," Vue 3 / Nuxt, React / Next.js, Pinia.",[341,348],{},[111,350,351],{},"Stili:"," Tailwind, Sass, DaisyUI, design token da Figma.",[341,354],{},[111,356,357],{},"WordPress:"," temi child e plugin custom OO, ACF, WooCommerce, WPML.",[341,360],{},[111,362,363],{},"Backend:"," PHP, Payload CMS, MySQL, PostgreSQL.",[341,366],{},[111,368,369],{},"Strumenti:"," Git, GSAP, Stripe, i18n, sviluppo AI-assisted (Claude Code, Cursor) con workflow spec-first.",{"title":33,"searchDepth":34,"depth":34,"links":372},[],{},"/skills/hard-skills",{"title":328,"description":333},"skills/hard-skills","eFu6VaeKB7pA6op62PTPLV3PIMfwNP9blrWwzkBQMq8",{"id":379,"title":380,"body":381,"description":397,"extension":36,"meta":398,"navigation":38,"order":34,"path":399,"seo":400,"stem":401,"__hash__":402},"about/skills/soft-skills.md","soft-skills",{"type":23,"value":382,"toc":395},[383,389],[26,384,385,388],{},[111,386,387],{},"Teamwork:"," ho fatto sport a diversi livelli fin da giovane, e questo mi ha lasciato una cosa utilissima nel lavoro: saper stare in squadra, comunicare in modo chiaro e contribuire senza \"rumore\".",[26,390,391,394],{},[111,392,393],{},"Tenacia e affidabilità:"," le sfide mi stimolano. Quando qualcosa non torna, vado a fondo: studio, provo, documento e arrivo alla soluzione con costanza. Mi piace prendermi responsabilità su quello che consegno, perché il codice in produzione non perdona (ma insegna parecchio).",{"title":33,"searchDepth":34,"depth":34,"links":396},[],"Teamwork: ho fatto sport a diversi livelli fin da giovane, e questo mi ha lasciato una cosa utilissima nel lavoro: saper stare in squadra, comunicare in modo chiaro e contribuire senza \"rumore\".",{},"/skills/soft-skills",{"title":380,"description":397},"skills/soft-skills","QyBwnFi9-ZYJc-xGJ0-L1syIeASIp61uVcI2WBJ_HZo",{"id":404,"direct":405,"extension":5,"meta":410,"social":411,"stem":419,"__hash__":420},"contacts/meta/contacts.yml",{"title":406,"sources":407},"contacts",{"email":408,"phone":409},"giovanni@megiston.com","+39 375 890 5337",{},{"github":412,"linkedin":416},{"title":413,"url":414,"user":415},"Github profile","https://github.com/GioManara96","GioManara96",{"title":417,"url":418,"user":8},"Linkedin account","https://www.linkedin.com/in/giovanni-manara-80b3b324a/","meta/contacts","i0Q8Qe7rb0Tu8tqyz-9qGrPI7w8qOijxquLhi5vFgUU",{"id":422,"title":423,"body":424,"description":712,"extension":36,"img":713,"liveUrl":714,"meta":715,"navigation":38,"path":716,"projectId":619,"seo":717,"slug":423,"stack":718,"stem":732,"tech":733,"url":697,"__hash__":735},"projects/projects/wp-bootstrap.md","wp-bootstrap",{"type":23,"value":425,"toc":705},[426,430,438,449,453,460,490,505,515,519,538,675,678,682,685,689,701],[226,427,429],{"id":428},"cosè","Cos'è",[26,431,432,433,437],{},"Ogni nuovo progetto WordPress in agenzia iniziava con la stessa ora di setup manuale: clonare il repo, scaricare il core, creare database e utente, generare ",[434,435,436],"code",{},"wp-config.php",", installare tema e plugin, configurare il virtual host, lanciare il primo pull del database. Ogni volta uguale, ogni volta un'occasione per sbagliare qualcosa.",[26,439,440,441,444,445,448],{},"wp-bootstrap comprime tutto in un comando: ",[434,442,443],{},"./wp-bootstrap.sh --name progetto"," e qualche minuto dopo il sito di staging locale è su, con smoke test passato e primo ",[434,446,447],{},"db:pull"," fatto. È l'esempio letterale del principio che guida come lavoro: quando un flusso mi serve più di una volta, lo trasformo in uno strumento.",[226,450,452],{"id":451},"come-funziona","Come funziona",[26,454,455,456,459],{},"La pipeline è divisa in ",[111,457,458],{},"16 step numerati e idempotenti"," (clone → core → DB → config → temi → plugin → vhost → smoke test → sync), ognuno un file sorgente a sé. Uno state tracker su file registra cosa è già stato completato, e da lì nascono le feature che rendono lo strumento affidabile:",[260,461,462,468,474,484],{},[263,463,464,467],{},[434,465,466],{},"--resume"," riparte dallo step fallito, senza rifare quelli già a posto",[263,469,470,473],{},[434,471,472],{},"--force-step 07"," rigioca un singolo step",[263,475,476,479,480,483],{},[434,477,478],{},"--dry-run"," stampa ogni comando che ",[282,481,482],{},"verrebbe"," eseguito, senza toccare nulla",[263,485,486,489],{},[434,487,488],{},"--force --yes"," ricostruisce da zero in modo non interattivo",[26,491,492,493,496,497,500,501,504],{},"Ogni run scrive una ",[111,494,495],{},"ricetta YAML"," (",[434,498,499],{},".bootstrap.yml",") con le risposte date: il prossimo bootstrap dello stesso progetto si fa con ",[434,502,503],{},"--from-file",", zero domande. Le password si inseriscono solo da prompt — mai come flag, per non finire nella history della shell — e nel riepilogo compaiono mascherate.",[26,506,507,508,511,512,514],{},"Dettagli a cui tengo: il blocco del vhost Apache è delimitato da marker, così i re-run lo ",[282,509,510],{},"sostituiscono"," invece di accumularne copie; un plugin con slug morto produce un warning e non un abort; ",[434,513,436],{}," nasce da un template con i salt scaricati live dall'API di WordPress.org.",[226,516,518],{"id":517},"i-test-sì-in-bash","I test (sì, in Bash)",[26,520,521,522,525,526,529,530,533,534,537],{},"La parte meno ovvia del repo: una suite di test in ",[111,523,524],{},"puro Bash",", senza framework, con il suo harness ",[434,527,528],{},"run-all.sh",". Coprono il parsing dei flag, la precedenza tra ",[434,531,532],{},".env"," e argomenti, il round-trip delle ricette YAML — inclusa una password con spazi, apici e ",[434,535,536],{},"#"," dentro — la persistenza dello stato e la sostituzione dei template.",[539,540,544],"pre",{"className":541,"code":542,"language":543,"meta":33,"style":33},"language-bash shiki shiki-themes one-dark-pro","# Il round-trip YAML deve sopravvivere anche alla password peggiore.\nsave_bootstrap_yml \"$TMP_YML_DIR\"\nload_bootstrap_yml \"$TMP_YML_DIR/.bootstrap.yml\"\n[[ \"$NAME\" == \"sample-project\" ]]             || fail \"yml NAME=$NAME\"\n[[ \"$DB_PASSWORD\" == 'pa ss\"with:special#' ]] || fail \"yml DB_PASSWORD=$DB_PASSWORD\"\n[[ \"$SKIP_PULL\" == \"true\" ]]                  || fail \"yml SKIP_PULL=$SKIP_PULL\"\n","bash",[434,545,546,554,571,583,617,646],{"__ignoreMap":33},[547,548,550],"span",{"class":549,"line":95},"line",[547,551,553],{"class":552},"sV9Aq","# Il round-trip YAML deve sopravvivere anche alla password peggiore.\n",[547,555,556,560,564,568],{"class":549,"line":34},[547,557,559],{"class":558},"sVbv2","save_bootstrap_yml",[547,561,563],{"class":562},"subq3"," \"",[547,565,567],{"class":566},"sVyAn","$TMP_YML_DIR",[547,569,570],{"class":562},"\"\n",[547,572,573,576,578,580],{"class":549,"line":58},[547,574,575],{"class":558},"load_bootstrap_yml",[547,577,563],{"class":562},[547,579,567],{"class":566},[547,581,582],{"class":562},"/.bootstrap.yml\"\n",[547,584,585,589,592,595,597,601,604,607,610,613,615],{"class":549,"line":39},[547,586,588],{"class":587},"sn6KH","[[ ",[547,590,591],{"class":562},"\"",[547,593,594],{"class":566},"$NAME",[547,596,591],{"class":562},[547,598,600],{"class":599},"sjrmR"," ==",[547,602,603],{"class":562}," \"sample-project\"",[547,605,606],{"class":587}," ]]             || ",[547,608,609],{"class":558},"fail",[547,611,612],{"class":562}," \"yml NAME=",[547,614,594],{"class":566},[547,616,570],{"class":562},[547,618,620,622,624,627,629,631,634,637,639,642,644],{"class":549,"line":619},5,[547,621,588],{"class":587},[547,623,591],{"class":562},[547,625,626],{"class":566},"$DB_PASSWORD",[547,628,591],{"class":562},[547,630,600],{"class":599},[547,632,633],{"class":562}," 'pa ss\"with:special#'",[547,635,636],{"class":587}," ]] || ",[547,638,609],{"class":558},[547,640,641],{"class":562}," \"yml DB_PASSWORD=",[547,643,626],{"class":566},[547,645,570],{"class":562},[547,647,649,651,653,656,658,660,663,666,668,671,673],{"class":549,"line":648},6,[547,650,588],{"class":587},[547,652,591],{"class":562},[547,654,655],{"class":566},"$SKIP_PULL",[547,657,591],{"class":562},[547,659,600],{"class":599},[547,661,662],{"class":562}," \"true\"",[547,664,665],{"class":587}," ]]                  || ",[547,667,609],{"class":558},[547,669,670],{"class":562}," \"yml SKIP_PULL=",[547,672,655],{"class":566},[547,674,570],{"class":562},[26,676,677],{},"Testare uno script di provisioning è scomodo, ed è esattamente il motivo per cui i punti più fragili (parsing, escaping, stato) sono coperti: sono quelli che rompono il bootstrap alle 9 di mattina di un lunedì di consegna.",[226,679,681],{"id":680},"limiti-consapevoli","Limiti consapevoli",[26,683,684],{},"È uno strumento nato per uno stack preciso — macOS, Homebrew, Apache, WP-CLI — e non pretende di essere universale: la lista plugin è opinionata e il flusso è cucito sul workflow di agenzia. È il suo pregio: fa una cosa sola, quella che serviva, e la fa sempre allo stesso modo.",[226,686,688],{"id":687},"link","Link",[260,690,691],{},[263,692,693,694],{},"Codice: ",[695,696,700],"a",{"href":697,"rel":698},"https://github.com/GioManara96/wp-bootstrap",[699],"nofollow","github.com/GioManara96/wp-bootstrap",[702,703,704],"style",{},"html pre.shiki code .sV9Aq, html code.shiki .sV9Aq{--shiki-default:#7F848E;--shiki-default-font-style:italic}html pre.shiki code .sVbv2, html code.shiki .sVbv2{--shiki-default:#61AFEF}html pre.shiki code .subq3, html code.shiki .subq3{--shiki-default:#98C379}html pre.shiki code .sVyAn, html code.shiki .sVyAn{--shiki-default:#E06C75}html pre.shiki code .sn6KH, html code.shiki .sn6KH{--shiki-default:#ABB2BF}html pre.shiki code .sjrmR, html code.shiki .sjrmR{--shiki-default:#56B6C2}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":33,"searchDepth":34,"depth":34,"links":706},[707,708,709,710,711],{"id":428,"depth":34,"text":429},{"id":451,"depth":34,"text":452},{"id":517,"depth":34,"text":518},{"id":680,"depth":34,"text":681},{"id":687,"depth":34,"text":688},"CLI in Bash che provisiona un sito WordPress locale completo in un comando - clone, core, database, tema child, plugin, vhost Apache e primo sync - con step idempotenti, resume e test in puro Bash.","/icons/projects/wp-bootstrap-wide.webp",null,{},"/projects/wp-bootstrap",{"title":423,"description":712},[719,721,723,726,729],{"label":720},"Bash",{"label":722},"WP-CLI",{"icon":724,"label":725},"cib:mysql","MySQL",{"icon":727,"label":728},"cib:apache","Apache",{"icon":730,"label":731},"cib:gulp","Gulp","projects/wp-bootstrap",[734],"tools","5gE28zg15mgeyEc25CwreBx1SP8qOtAXCat3wry5Kko",1786039355125]