[{"data":1,"prerenderedAt":7957},["ShallowReactive",2],{"services":3,"projects":1764,"sideprojects":3116},[4,223,333,462,612,677,804,850,868,991,1057,1176,1296,1313,1329,1448,1569,1585,1647],{"id":5,"title":6,"body":7,"description":209,"extension":210,"features":211,"icon":211,"locale":212,"meta":213,"navigation":216,"order":217,"path":218,"price":211,"seo":219,"status":220,"stem":221,"__hash__":222},"services\u002Fca\u002Fservices\u002Fconsultoria.md","Consultoria",{"type":8,"value":9,"toc":189},"minimark",[10,14,19,24,27,31,34,38,41,57,61,64,68,71,75,78,82,86,100,104,115,119,133,137,151,155],[11,12,13],"p",{},"Amb anys d'experiència a la indústria, ofereixo serveis de consultoria per ajudar-te a prendre decisions informades sobre la teva estratègia de desenvolupament web. Tant si necessites ajuda amb la selecció de tecnologies, planificació de projectes, o revisió de codi, puc proporcionar l'expertesa que necessites per assegurar l'èxit del teu projecte.",[15,16,18],"h2",{"id":17},"serveis-de-consultoria","Serveis de Consultoria",[20,21,23],"h3",{"id":22},"auditoria-tècnica","Auditoria Tècnica",[11,25,26],{},"Realitzo anàlisis exhaustives dels teus sistemes actuals per identificar àrees de millora, vulnerabilitats de seguretat i oportunitats d'optimització. Proporciono informes detallats amb recomanacions prioritzades.",[20,28,30],{"id":29},"arquitectura-de-sistemes","Arquitectura de Sistemes",[11,32,33],{},"Dissenyo l'arquitectura tècnica òptima per al teu projecte, tenint en compte factors com escalabilitat, rendiment, seguretat i cost. Creo diagrames detallats i documentació tècnica.",[20,35,37],{"id":36},"selecció-de-tecnologies","Selecció de Tecnologies",[11,39,40],{},"T'ajudo a escollir les tecnologies més adequades per al teu projecte basant-me en factors com:",[42,43,44,48,51,54],"ul",{},[45,46,47],"li",{},"Requisits funcionals i no funcionals",[45,49,50],{},"Experiència de l'equip de desenvolupament",[45,52,53],{},"Pressupost i temps de desenvolupament",[45,55,56],{},"Escalabilitat i manteniment a llarg termini",[20,58,60],{"id":59},"revisió-de-codi","Revisió de Codi",[11,62,63],{},"Ofeixo serveis de code review per millorar la qualitat del codi, identificar problemes de rendiment i assegurar el compliment de les millors pràctiques de desenvolupament.",[20,65,67],{"id":66},"planificació-de-projectes","Planificació de Projectes",[11,69,70],{},"Creo roadmaps detallats i estimacions realistes per als teus projectes de desenvolupament. Inclou definició de fases, milestones i gestió de riscos.",[20,72,74],{"id":73},"optimització-de-rendiment","Optimització de Rendiment",[11,76,77],{},"Analitzo i optimitza el rendiment de les teves aplicacions web, identificant colls d'ampolla i implementant solucions per millorar la velocitat i l'experiència d'usuari.",[15,79,81],{"id":80},"àrees-despecialització","Àrees d'Especialització",[20,83,85],{"id":84},"aplicacions-web-modernes","Aplicacions Web Modernes",[42,87,88,91,94,97],{},[45,89,90],{},"Arquitectures SPA (Single Page Applications)",[45,92,93],{},"Progressive Web Apps (PWA)",[45,95,96],{},"Aplicacions server-side rendering (SSR)",[45,98,99],{},"Arquitectures de microserveis",[20,101,103],{"id":102},"intelligència-artificial","Intel·ligència Artificial",[42,105,106,109,112],{},[45,107,108],{},"Integració d'APIs d'IA en aplicacions existents",[45,110,111],{},"Estrategies d'automatització empresarial",[45,113,114],{},"Ètica i bones pràctiques en IA",[20,116,118],{"id":117},"seguretat-i-compliment","Seguretat i Compliment",[42,120,121,124,127,130],{},[45,122,123],{},"Auditories de seguretat",[45,125,126],{},"Implementació de protocols HTTPS",[45,128,129],{},"Compliment GDPR i protecció de dades",[45,131,132],{},"Autenticació i autorització",[20,134,136],{"id":135},"devops-i-desplegament","DevOps i Desplegament",[42,138,139,142,145,148],{},[45,140,141],{},"Configuració de pipelines CI\u002FCD",[45,143,144],{},"Containerització amb Docker",[45,146,147],{},"Desplegament a cloud (AWS, Azure, GCP)",[45,149,150],{},"Monitoratge i logging",[15,152,154],{"id":153},"procés-de-consultoria","Procés de Consultoria",[156,157,158,165,171,177,183],"ol",{},[45,159,160,164],{},[161,162,163],"strong",{},"Avaluació inicial",": Reunió per comprendre els teus objectius i reptes actuals",[45,166,167,170],{},[161,168,169],{},"Anàlisi detallada",": Estudi exhaustiu dels sistemes i processos existents",[45,172,173,176],{},[161,174,175],{},"Proposta de solució",": Presentació de recomanacions prioritzades amb justificació",[45,178,179,182],{},[161,180,181],{},"Pla d'implementació",": Roadmap detallat per a la implementació de les millores",[45,184,185,188],{},[161,186,187],{},"Suport continu",": Acompanyament durant la fase d'implementació",{"title":190,"searchDepth":191,"depth":191,"links":192},"",2,[193,202,208],{"id":17,"depth":191,"text":18,"children":194},[195,197,198,199,200,201],{"id":22,"depth":196,"text":23},3,{"id":29,"depth":196,"text":30},{"id":36,"depth":196,"text":37},{"id":59,"depth":196,"text":60},{"id":66,"depth":196,"text":67},{"id":73,"depth":196,"text":74},{"id":80,"depth":191,"text":81,"children":203},[204,205,206,207],{"id":84,"depth":196,"text":85},{"id":102,"depth":196,"text":103},{"id":117,"depth":196,"text":118},{"id":135,"depth":196,"text":136},{"id":153,"depth":191,"text":154},"Obté assessorament expert i orientació per als teus projectes de desenvolupament web.","md",null,"ca",{"image":214,"slug":215},"\u002Fimages\u002Fservices\u002Fconsultoria.png","consultoria",true,4,"\u002Fca\u002Fservices\u002Fconsultoria",{"title":6,"description":209},"draft","ca\u002Fservices\u002Fconsultoria","ZyhACKpzzzby5vptTxI7GyIOLV_90Zhdkx32_Y71DZc",{"id":224,"title":225,"body":226,"description":317,"extension":210,"features":211,"icon":211,"locale":212,"meta":318,"navigation":216,"order":327,"path":328,"price":211,"seo":329,"status":330,"stem":331,"__hash__":332},"services\u002Fca\u002Fservices\u002Fdesenvolupament-fullstack.md","Desenvolupament Fullstack",{"type":8,"value":227,"toc":311},[228,233,236,240,257,262,266,269,273,276,290,295,302,305],[229,230,232],"h1",{"id":231},"deixa-de-perdre-clients-per-tecnologia-lenta-i-obsoleta","Deixa de Perdre Clients per Tecnologia Lenta i Obsoleta",[11,234,235],{},"Desenvolupo aplicacions web que realment fan créixer el teu negoci. Res de plantilles genèriques, res de mesos de retards, res de deute tècnic que t'atormentarà més tard.",[15,237,239],{"id":238},"el-teu-negoci-està-estancat-perquè","El Teu Negoci Està Estancat Perquè...",[42,241,242,245,248,251,254],{},[45,243,244],{},"🐌 El teu lloc web actual no pot gestionar pics de tràfic?",[45,246,247],{},"💸 Estàs perdent clients davant competidors amb experiències més ràpides i fluides?",[45,249,250],{},"⏰ El teu equip perd hores en processos manual que haurien d'estar automatitzats?",[45,252,253],{},"🚀 Necessites un MVP llançat en 6 setmanes, no en 6 mesos?",[45,255,256],{},"📈 El teu sistema actual es trenca cada vegada que intentes escalar?",[11,258,259],{},[161,260,261],{},"Si has asentit a qualsevol d'aquestes, continua llegint.",[15,263,265],{"id":264},"el-que-em-fa-diferent","El Que Em Fa Diferent",[11,267,268],{},"No només programo - soluciono problemes empresarials amb tecnologia.",[20,270,272],{"id":271},"obté-la-teva-consulta-gratuïta-del-projecte","Obté la Teva Consulta Gratuïta del Projecte",[11,274,275],{},"Reserva una trucada de 30 minuts on:",[42,277,278,281,284,287],{},[45,279,280],{},"✅ Analitzarem els teus reptes tècnics actuals",[45,282,283],{},"✅ Discutirem el millor enfocament per als teus objectius",[45,285,286],{},"✅ Proporcionarem un pressupost detallat del projecte",[45,288,289],{},"✅ Respondrem a totes les teves preguntes sobre el procés",[11,291,292],{},[161,293,294],{},"Sense pressió de vendes. Sense obligacions. Només consells tècnics honestos.",[11,296,297],{},[298,299,301],"a",{"href":300},"\u002F#contact","Programa la Teva Sessió d'Estratègia →",[303,304],"hr",{},[11,306,307],{},[308,309,310],"em",{},"Basat a Barcelona, disponible per projectes a través d'Europa i col·laboració remota arreu del món.",{"title":190,"searchDepth":191,"depth":191,"links":312},[313,314],{"id":238,"depth":191,"text":239},{"id":264,"depth":191,"text":265,"children":315},[316],{"id":271,"depth":196,"text":272},"Desenvolupo aplicacions web que generen ingressos per empreses en creixement que necessiten llançar-se ràpidament i escalar de forma fiable des d'MVP fins a empresa.",{"image":319,"slug":320,"pricing_from":321,"pricing_currency":322,"availability":323,"projects_completed":324,"client_retention":325,"homepage_cta":326},"\u002Fimages\u002Fservices\u002Ffullstack.png","desenvolupament-fullstack",8000,"EUR","Pròxima data d'inici: 15 de setembre de 2025",47,98,"Veure el Procés Complet",1,"\u002Fca\u002Fservices\u002Fdesenvolupament-fullstack",{"title":225,"description":317},"published","ca\u002Fservices\u002Fdesenvolupament-fullstack","Aorwy_9Nr5R8JJOKXUbX3WonKHqBjD0l-kik4rUd8pY",{"id":334,"title":335,"body":336,"description":455,"extension":210,"features":211,"icon":211,"locale":212,"meta":456,"navigation":216,"order":327,"path":458,"price":211,"seo":459,"status":220,"stem":460,"__hash__":461},"services\u002Fca\u002Fservices\u002Fdesenvolupament-fullstack-personalitzat.md","Desenvolupament Fullstack Personalitzat",{"type":8,"value":337,"toc":445},[338,341,345,349,352,356,359,363,366,370,373,377,409,413],[11,339,340],{},"M'especialitzo en construir aplicacions web personalitzades adaptades a les teves necessitats específiques. La meva experiència cobreix tota la pila de desenvolupament, des de crear interfícies d'usuari belles i intuïtives fins a dissenyar sistemes backend robustos i escalables. Treballo amb tecnologies modernes per assegurar que el teu projecte no només sigui funcional sinó també preparat per al futur.",[15,342,344],{"id":343},"què-ofereixo","Què ofereixo",[20,346,348],{"id":347},"desenvolupament-frontend","Desenvolupament Frontend",[11,350,351],{},"Construeixo interfícies d'usuari modernes i responsives utilitzant frameworks com Vue.js i Nuxt.js. Em centro en crear experiències d'usuari intuïtives que funcionen perfectament a tots els dispositius, des d'ordinadors de taula fins a mòbils.",[20,353,355],{"id":354},"desenvolupament-backend","Desenvolupament Backend",[11,357,358],{},"Dissenyo i implemento APIs RESTful robustes amb tecnologies com Laravel o Symfony. M'asseguro que el teu backend sigui escalable, segur i eficient, capaç de gestionar el creixement del teu projecte.",[20,360,362],{"id":361},"bases-de-dades","Bases de Dades",[11,364,365],{},"Treballo amb diversos sistemes de bases de dades com MySQL, PostgreSQL. Disseny esquemes optimitzats que garanteixen un rendiment excel·lent i la integritat de les dades.",[20,367,369],{"id":368},"integració-i-apis","Integració i APIs",[11,371,372],{},"Conecto diferents sistemes i serveis a través d'integracions d'APIs personalitzades. Puc integrar serveis de pagament, sistemes de CRM, plataformes de màrqueting i qualsevol altra eina que necessiti el teu negoci.",[15,374,376],{"id":375},"procés-de-treball","Procés de treball",[156,378,379,385,391,397,403],{},[45,380,381,384],{},[161,382,383],{},"Anàlisi i planificació",": Començo comprenent les teves necessitats i objectius per crear una estratègia de desenvolupament sòlida.",[45,386,387,390],{},[161,388,389],{},"Disseny i prototipat",": Creo wireframes i prototips per visualitzar la solució abans del desenvolupament.",[45,392,393,396],{},[161,394,395],{},"Desenvolupament iteratiu",": Construeixo l'aplicació en fases, proporcionant actualitzacions regulars i incorporant el teu feedback.",[45,398,399,402],{},[161,400,401],{},"Testing i optimització",": Realitzo proves exhaustives per garantir la qualitat i el rendiment òptim.",[45,404,405,408],{},[161,406,407],{},"Desplegament i manteniment",": Gestiono el desplegament i ofereixo suport continu per assegurar el funcionament correcte.",[15,410,412],{"id":411},"tecnologies-que-utilitzo","Tecnologies que utilitzo",[156,414,415,421,427,433,439],{},[45,416,417,420],{},[161,418,419],{},"Frontend:"," HTML, Javascript, Vue.js, Nuxt.js, CSS, Tailwind, Flowbite",[45,422,423,426],{},[161,424,425],{},"Backend:"," PHP 8.3, Laravel, Symfony, DDD, CQRS, API REST, OpenAPI, Postman, PHPunit, Pest, RabbitMQ",[45,428,429,432],{},[161,430,431],{},"Bases de dades:"," MySQL, PostgreSQL, SQLite, Redis",[45,434,435,438],{},[161,436,437],{},"DevOps:"," Ansible, Docker, Github Actions, CI\u002FCD, AWS , Digital Ocean, Netlify, Vercel, Clouding.io, Hetzner, Scaleway",[45,440,441,444],{},[161,442,443],{},"Eines:"," Git, NPM, Webpack, Vite",{"title":190,"searchDepth":191,"depth":191,"links":446},[447,453,454],{"id":343,"depth":191,"text":344,"children":448},[449,450,451,452],{"id":347,"depth":196,"text":348},{"id":354,"depth":196,"text":355},{"id":361,"depth":196,"text":362},{"id":368,"depth":196,"text":369},{"id":375,"depth":191,"text":376},{"id":411,"depth":191,"text":412},"Des del concepte fins al desplegament, ofereixo serveis complets de desenvolupament web per fer realitat les teves idees.",{"image":319,"slug":457},"desenvolupament-fullstack-personalitzat","\u002Fca\u002Fservices\u002Fdesenvolupament-fullstack-personalitzat",{"title":335,"description":455},"ca\u002Fservices\u002Fdesenvolupament-fullstack-personalitzat","vfxsLfjlPEAdKpRY_vYjFO5NtmTWAD6ZsgSQok1cIyg",{"id":463,"title":464,"body":465,"description":604,"extension":210,"features":211,"icon":211,"locale":212,"meta":605,"navigation":216,"order":196,"path":608,"price":211,"seo":609,"status":220,"stem":610,"__hash__":611},"services\u002Fca\u002Fservices\u002Fformacio.md","Formació i xerrades",{"type":8,"value":466,"toc":588},[467,470,474,478,481,485,488,492,495,512,516,519,523,526,530,534,537,541,544,548,551,555,558,562],[11,468,469],{},"Amb anys d'experiència en docència oficial de FP Dual de Cicles Formatius i formació empresarial, ofereixo serveis educatius especialitzats en desenvolupament web i tecnologies emergents.",[15,471,473],{"id":472},"serveis-de-formació","Serveis de Formació",[20,475,477],{"id":476},"formació-en-desenvolupament-web","Formació en Desenvolupament Web",[11,479,480],{},"Imparteixo cursos complets sobre desenvolupament web modern, cobrint des dels fonaments d'HTML, CSS i JavaScript fins a frameworks avançats com Vue.js, Nuxt i Laravel. Els meus cursos són pràctics i orientats a projectes reals.",[20,482,484],{"id":483},"workshops-dia-i-automatització","Workshops d'IA i Automatització",[11,486,487],{},"Organitzo tallers especialitzats en intel·ligència artificial aplicada, on els participants aprenen a integrar eines d'IA en els seus projectes i automatitzar processos empresarials.",[20,489,491],{"id":490},"xerrades-i-conferències","Xerrades i Conferències",[11,493,494],{},"Imparteixo xerrades inspiradores sobre:",[42,496,497,500,503,506,509],{},[45,498,499],{},"Tendències tecnològiques actuals",[45,501,502],{},"Transformació digital empresarial",[45,504,505],{},"Ètica en la intel·ligència artificial",[45,507,508],{},"Futur del desenvolupament web",[45,510,511],{},"Metodologies àgils i DevOps",[20,513,515],{"id":514},"mentoria-personal","Mentoria Personal",[11,517,518],{},"Ofereixo sessions de mentoria individual per a desenvolupadors que volen avançar en la seva carrera, millorar les seves habilitats tècniques o lançar els seus propis projectes.",[20,520,522],{"id":521},"formació-corporativa","Formació Corporativa",[11,524,525],{},"Dissenyo programes de formació personalitzats per a empreses que volen actualitzar les competències digitals dels seus equips. Inclou formació en metodologies àgils, bones pràctiques de codi i noves tecnologies.",[15,527,529],{"id":528},"metodologia-densenyament","Metodologia d'Ensenyament",[20,531,533],{"id":532},"aprenentatge-pràctic","Aprenentatge Pràctic",[11,535,536],{},"Els meus cursos es basen en projectes reals i casos d'ús pràctics. Els alumnes construeixen aplicacions funcionals des del primer dia.",[20,538,540],{"id":539},"personalització","Personalització",[11,542,543],{},"Adapto el contingut i el ritme segons les necessitats i el nivell de cada grup o individu.",[20,545,547],{"id":546},"tecnologies-actualitzades","Tecnologies Actualitzades",[11,549,550],{},"Mantinc els continguts sempre actualitzats amb les últimes tendències i millors pràctiques de la indústria.",[20,552,554],{"id":553},"suport-continu","Suport Continu",[11,556,557],{},"Proporcionno suport i seguiment després de la formació per assegurar l'aplicació pràctica dels coneixements adquirits.",[15,559,561],{"id":560},"experiència-educativa","Experiència Educativa",[42,563,564,570,576,582],{},[45,565,566,569],{},[161,567,568],{},"FP Dual",": Docència oficial en Cicles Formatius de Desenvolupament d'Aplicacions Web",[45,571,572,575],{},[161,573,574],{},"Formació Empresarial",": Més de 500 professionals formats en tecnologies web i IA",[45,577,578,581],{},[161,579,580],{},"Conferències",": Ponent en esdeveniments tecnològics nacionals i internacionals",[45,583,584,587],{},[161,585,586],{},"Mentoria",": Acompanyament de més de 100 desenvolupadors en el seu creixement professional",{"title":190,"searchDepth":191,"depth":191,"links":589},[590,597,603],{"id":472,"depth":191,"text":473,"children":591},[592,593,594,595,596],{"id":476,"depth":196,"text":477},{"id":483,"depth":196,"text":484},{"id":490,"depth":196,"text":491},{"id":514,"depth":196,"text":515},{"id":521,"depth":196,"text":522},{"id":528,"depth":191,"text":529,"children":598},[599,600,601,602],{"id":532,"depth":196,"text":533},{"id":539,"depth":196,"text":540},{"id":546,"depth":196,"text":547},{"id":553,"depth":196,"text":554},{"id":560,"depth":191,"text":561},"Experiència en docència oficial de FP Dual de Cicles Formatius.",{"image":606,"slug":607},"\u002Fimages\u002Fservices\u002Fformacio.png","formacio","\u002Fca\u002Fservices\u002Fformacio",{"title":464,"description":604},"ca\u002Fservices\u002Fformacio","VkYppi5FNKzozviTqfVP5rwN39EaCxr8Thks2GuH_CM",{"id":613,"title":614,"body":615,"description":661,"extension":210,"features":211,"icon":211,"locale":212,"meta":662,"navigation":216,"order":191,"path":673,"price":211,"seo":674,"status":330,"stem":675,"__hash__":676},"services\u002Fca\u002Fservices\u002Fformacio-tecnica.md","Formació Tècnica",{"type":8,"value":616,"toc":655},[617,621,624,628,645,650,652],[15,618,620],{"id":619},"deixa-de-perdre-diners-en-formació-tècnica-que-ningú-aplica","Deixa de Perdre Diners en Formació Tècnica Que Ningú Aplica",[11,622,623],{},"Els teus desenvolupadors aprenen habilitats d'avantguarda que realment faran servir el dilluns al matí. Sense PowerPoints mortals, sense teoria inútil, només competències pràctiques que augmenten la productivitat immediatament.",[20,625,627],{"id":626},"el-teu-equip-de-desenvolupament-està-encallat-perquè","El Teu Equip de Desenvolupament Està Encallat Perquè...",[42,629,630,633,636,639,642],{},[45,631,632],{},"🐌 Els juniors triguen 6 mesos a ser productius mentre els seniors fan de cangur?",[45,634,635],{},"💸 Perds 50.000€ anuals en productivitat perduda per manca d'habilitats?",[45,637,638],{},"🔄 El teu equip segueix usant metodologies del 2018 mentre la competència us menja el terreny?",[45,640,641],{},"⚡ Cada nou framework paralitza el vostre equip durant setmanes?",[45,643,644],{},"🎯 Els cursos online cars que pagues acumulen pols digital?",[11,646,647],{},[161,648,649],{},"Si assenteixes a qualsevol d'aquestes, el teu equip necessita formació dirigida i pràctica.",[20,651,265],{"id":264},[11,653,654],{},"No ensenyo teoria - ensenyo el que funciona en entorns de producció reals.",{"title":190,"searchDepth":191,"depth":191,"links":656},[657],{"id":619,"depth":191,"text":620,"children":658},[659,660],{"id":626,"depth":196,"text":627},{"id":264,"depth":196,"text":265},"Converteixo desenvolupadors junior en col·laboradors productius. Sense teoria avorridora, només habilitats pràctiques que usaran des del dilluns.",{"image":606,"slug":663,"pricing_from":664,"pricing_currency":322,"availability":665,"estudiants_formats":666,"satisfaccio":667,"idiomes":668,"homepage_cta":672},"formacio-tecnica",2500,"Propera formació disponible: 15 octubre 2025",200,95,[669,670,671],"Castellà","Català","Anglès","Veure el Programa Detallat","\u002Fca\u002Fservices\u002Fformacio-tecnica",{"title":614,"description":661},"ca\u002Fservices\u002Fformacio-tecnica","pEh7CFc8X3Y2NaMp3lAG-ryeOuitYXjn2vd3I76IQwg",{"id":678,"title":679,"body":680,"description":795,"extension":210,"features":211,"icon":211,"locale":212,"meta":796,"navigation":216,"order":196,"path":800,"price":211,"seo":801,"status":220,"stem":802,"__hash__":803},"services\u002Fca\u002Fservices\u002Fintegracio-ia-i-automatitzacions.md","Integració d'IA i Automatització",{"type":8,"value":681,"toc":784},[682,685,689,693,696,700,703,707,710,714,717,721,724,728,760,762],[11,683,684],{},"Puc ajudar-te a integrar solucions potenciades per IA als teus sistemes existents per automatitzar tasques repetitives, analitzar dades i proporcionar informació intel·ligent. Des de chatbots fins a analítica predictiva, puc construir solucions d'IA personalitzades que optimitzin les teves operacions i impulsin el creixement del negoci.",[15,686,688],{"id":687},"serveis-dia-i-automatització","Serveis d'IA i Automatització",[20,690,692],{"id":691},"chatbots-intelligents","Chatbots Intel·ligents",[11,694,695],{},"Desenvolupa chatbots conversacionals utilitzant GPT-4, Claude i altres models de llenguatge avançats. Aquests assistents virtuals poden gestionar consultes de clients, proporcionar suport tècnic i automatitzar processos de vendes 24\u002F7.",[20,697,699],{"id":698},"automatització-de-processos","Automatització de Processos",[11,701,702],{},"Creo fluxos de treball automatitzats que eliminen tasques repetitives i redueixen errors humans. Des de la gestió de correus electrònics fins al processament de dades, l'automatització pot estalviar hores de treball manual.",[20,704,706],{"id":705},"anàlisi-predictiva","Anàlisi Predictiva",[11,708,709],{},"Implemento models d'aprenentatge automàtic per analitzar patrons en les teves dades i fer prediccions precises sobre tendències futures, comportament de clients i oportunitats de negoci.",[20,711,713],{"id":712},"processament-de-llenguatge-natural-nlp","Processament de Llenguatge Natural (NLP)",[11,715,716],{},"Desenvolupa sistemes que poden comprendre i processar text en català, castellà i anglès. Inclou anàlisi de sentiment, extracció d'entitats i classificació automàtica de documents.",[20,718,720],{"id":719},"visió-per-computador","Visió per Computador",[11,722,723],{},"Creo solucions que poden analitzar imatges i vídeos per a aplicacions com reconeixement de productes, control de qualitat i seguretat.",[15,725,727],{"id":726},"casos-dús-comuns","Casos d'ús comuns",[42,729,730,736,742,748,754],{},[45,731,732,735],{},[161,733,734],{},"E-commerce",": Recomanacions de productes personalitzades i optimització de preus dinàmica",[45,737,738,741],{},[161,739,740],{},"Atenció al client",": Assistents virtuals que resolen consultes automàticament",[45,743,744,747],{},[161,745,746],{},"Recursos Humans",": Selecció automàtica de candidats i anàlisi de sentiment en enquestes",[45,749,750,753],{},[161,751,752],{},"Màrqueting",": Segmentació automàtica de clients i personalització de contingut",[45,755,756,759],{},[161,757,758],{},"Finances",": Detecció de frau i anàlisi de risc creditici",[15,761,412],{"id":411},[11,763,764,767,768,771,772,775,776,779,780,783],{},[161,765,766],{},"Models d'IA:"," OpenAI GPT-4, Claude, LLaMA, Mistral\n",[161,769,770],{},"Frameworks ML:"," TensorFlow, PyTorch, scikit-learn\n",[161,773,774],{},"APIs d'IA:"," OpenAI API, Anthropic API, Hugging Face\n",[161,777,778],{},"Automatització:"," Zapier, Make.com, n8n, Python scripts\n",[161,781,782],{},"Cloud:"," AWS SageMaker, Google Cloud AI, Azure AI",{"title":190,"searchDepth":191,"depth":191,"links":785},[786,793,794],{"id":687,"depth":191,"text":688,"children":787},[788,789,790,791,792],{"id":691,"depth":196,"text":692},{"id":698,"depth":196,"text":699},{"id":705,"depth":196,"text":706},{"id":712,"depth":196,"text":713},{"id":719,"depth":196,"text":720},{"id":726,"depth":191,"text":727},{"id":411,"depth":191,"text":412},"Aprofita el poder de la Intel·ligència Artificial per automatitzar processos i obtenir un avantatge competitiu.",{"image":797,"slug":798,"homepage_cta":799},"\u002Fimages\u002Fservices\u002Fia-integration-automations.png","integracio-ia-i-automatitzacions","Més detalls","\u002Fca\u002Fservices\u002Fintegracio-ia-i-automatitzacions",{"title":679,"description":795},"ca\u002Fservices\u002Fintegracio-ia-i-automatitzacions","ZdNrx2_Pz2ZvwBHRoUm4wJQg1XC2Pc-MSzKD1YnAwgc",{"id":805,"title":806,"body":807,"description":209,"extension":210,"features":211,"icon":211,"locale":212,"meta":843,"navigation":216,"order":217,"path":846,"price":211,"seo":847,"status":220,"stem":848,"__hash__":849},"services\u002Fca\u002Fservices\u002Fmanteniment.md","Manteniment",{"type":8,"value":808,"toc":836},[809,811,815,819,822,826,829,833],[11,810,13],{},[15,812,814],{"id":813},"serveis-de-manteniment","Serveis de Manteniment",[20,816,818],{"id":817},"wordpress","Wordpress",[11,820,821],{},"Tens un wordpress i necessites actualitzar-lo? necessites un plugin? necessites un tema? el vols migrar a un altre servidor?",[20,823,825],{"id":824},"servidor-linux","Servidor Linux",[11,827,828],{},"Tens un servidor linux al que passar-li les actualitzacions? necessites un panell d'administració tipus EasyPanel, Dokploy? necessites muntar un sistema de backups?",[20,830,832],{"id":831},"projecte-propi","Projecte Propi",[11,834,835],{},"Tens un projecte Fullstack que necessites actualitzar?",{"title":190,"searchDepth":191,"depth":191,"links":837},[838],{"id":813,"depth":191,"text":814,"children":839},[840,841,842],{"id":817,"depth":196,"text":818},{"id":824,"depth":196,"text":825},{"id":831,"depth":196,"text":832},{"image":844,"slug":845},"\u002Fimages\u002Fservices\u002Fmanteniment.png","manteniment","\u002Fca\u002Fservices\u002Fmanteniment",{"title":806,"description":209},"ca\u002Fservices\u002Fmanteniment","yQ9zW6Tx3YNiZhhaQDv1Oi3fka89ZbILmaQB0U-6yl8",{"id":851,"title":852,"body":853,"description":860,"extension":210,"features":211,"icon":211,"locale":861,"meta":862,"navigation":216,"order":217,"path":864,"price":211,"seo":865,"status":220,"stem":866,"__hash__":867},"services\u002Fen\u002Fservices\u002Fconsulting.md","Consulting",{"type":8,"value":854,"toc":858},[855],[11,856,857],{},"With years of industry experience, I offer consulting services to help you make\ninformed decisions about your web development strategy. Whether you need help\nwith technology selection, project planning, or code review, I can provide\nthe expertise you need to ensure the success of your project.",{"title":190,"searchDepth":191,"depth":191,"links":859},[],"Get expert advice and guidance for your web development projects..","en",{"image":214,"slug":863},"consulting","\u002Fen\u002Fservices\u002Fconsulting",{"title":852,"description":860},"en\u002Fservices\u002Fconsulting","Dv0u4q2GfHKedrbPNId3PsDiml6vszGilXefO5GqpmI",{"id":869,"title":870,"body":871,"description":984,"extension":210,"features":211,"icon":211,"locale":861,"meta":985,"navigation":216,"order":327,"path":987,"price":211,"seo":988,"status":220,"stem":989,"__hash__":990},"services\u002Fen\u002Fservices\u002Fcustom-fullstack-development.md","Custom Fullstack Development",{"type":8,"value":872,"toc":974},[873,876,880,884,887,891,894,898,901,905,908,912,944,948],[11,874,875],{},"I specialize in building custom web applications tailored to your specific needs. My experience covers the entire development stack, from creating beautiful and intuitive user interfaces to designing robust and scalable backend systems. I work with modern technologies to ensure that your project is not only functional but also future-proof.",[15,877,879],{"id":878},"what-i-offer","What I offer",[20,881,883],{"id":882},"frontend-development","Frontend Development",[11,885,886],{},"I build modern and responsive user interfaces using frameworks like Vue.js and Nuxt.js. I focus on creating intuitive user experiences that work perfectly across all devices, from desktop computers to mobile phones.",[20,888,890],{"id":889},"backend-development","Backend Development",[11,892,893],{},"I design and implement robust RESTful APIs with technologies like Laravel, Node.js and Express. I ensure that your backend is scalable, secure and efficient, capable of handling your project's growth.",[20,895,897],{"id":896},"databases","Databases",[11,899,900],{},"I work with various database systems like MySQL, PostgreSQL. I design optimized schemas that guarantee excellent performance and data integrity.",[20,902,904],{"id":903},"integration-and-apis","Integration and APIs",[11,906,907],{},"I connect different systems and services through custom API integrations. I can integrate payment services, CRM systems, marketing platforms and any other tools your business needs.",[15,909,911],{"id":910},"work-process","Work Process",[156,913,914,920,926,932,938],{},[45,915,916,919],{},[161,917,918],{},"Analysis and planning",": I start by understanding your needs and objectives to create a solid development strategy.",[45,921,922,925],{},[161,923,924],{},"Design and prototyping",": I create wireframes and prototypes to visualize the solution before development.",[45,927,928,931],{},[161,929,930],{},"Iterative development",": I build the application in phases, providing regular updates and incorporating your feedback.",[45,933,934,937],{},[161,935,936],{},"Testing and optimization",": I perform comprehensive testing to ensure quality and optimal performance.",[45,939,940,943],{},[161,941,942],{},"Deployment and maintenance",": I manage deployment and offer ongoing support to ensure proper functioning.",[15,945,947],{"id":946},"technologies-i-use","Technologies I use",[156,949,950,954,959,964,969],{},[45,951,952,420],{},[161,953,419],{},[45,955,956,958],{},[161,957,425],{}," PHP 8.3, Laravel, Symfony, DDD, CQRS, REST API, OpenAPI, Postman, PHPunit, Pest, RabbitMQ",[45,960,961,432],{},[161,962,963],{},"Databases:",[45,965,966,968],{},[161,967,437],{}," Ansible, Docker, Github Actions, CI\u002FCD, AWS, Digital Ocean, Netlify, Vercel, Clouding.io, Hetzner, Scaleway",[45,970,971,444],{},[161,972,973],{},"Tools:",{"title":190,"searchDepth":191,"depth":191,"links":975},[976,982,983],{"id":878,"depth":191,"text":879,"children":977},[978,979,980,981],{"id":882,"depth":196,"text":883},{"id":889,"depth":196,"text":890},{"id":896,"depth":196,"text":897},{"id":903,"depth":196,"text":904},{"id":910,"depth":191,"text":911},{"id":946,"depth":191,"text":947},"From concept to deployment, I offer complete web development services to make your ideas a reality.",{"image":319,"slug":986},"custom-fullstack-development","\u002Fen\u002Fservices\u002Fcustom-fullstack-development",{"title":870,"description":984},"en\u002Fservices\u002Fcustom-fullstack-development","LjvdCiZAH6pKxAELpD9JC--lJmvtu-2xiDtOfVAmbFw",{"id":992,"title":993,"body":994,"description":1042,"extension":210,"features":211,"icon":211,"locale":861,"meta":1043,"navigation":216,"order":191,"path":1053,"price":211,"seo":1054,"status":330,"stem":1055,"__hash__":1056},"services\u002Fen\u002Fservices\u002Fcustom-training.md","Custom Training",{"type":8,"value":995,"toc":1036},[996,1000,1003,1007,1024,1029,1033],[15,997,999],{"id":998},"stop-wasting-money-on-technical-training-that-nobody-uses","Stop Wasting Money on Technical Training That Nobody Uses",[11,1001,1002],{},"Your developers learn cutting-edge skills they'll actually apply on Monday morning. No death-by-PowerPoint, no useless theory, just practical competencies that boost productivity immediately.",[20,1004,1006],{"id":1005},"is-your-development-team-stuck-because","Is Your Development Team Stuck Because...",[42,1008,1009,1012,1015,1018,1021],{},[45,1010,1011],{},"🐌 Junior developers take 6 months to be productive while seniors babysit them?",[45,1013,1014],{},"💸 You're losing €50,000 annually in lost productivity due to skill gaps?",[45,1016,1017],{},"🔄 Your team is stuck using 2018 methodologies while competitors eat your lunch?",[45,1019,1020],{},"⚡ Every new framework paralyzes your team for weeks?",[45,1022,1023],{},"🎯 Those expensive online courses are gathering digital dust?",[11,1025,1026],{},[161,1027,1028],{},"If you nodded to any of these, your team needs targeted, practical training.",[20,1030,1032],{"id":1031},"what-makes-me-different","What Makes Me Different",[11,1034,1035],{},"I don't teach theory - I teach what works in real production environments.",{"title":190,"searchDepth":191,"depth":191,"links":1037},[1038],{"id":998,"depth":191,"text":999,"children":1039},[1040,1041],{"id":1005,"depth":196,"text":1006},{"id":1031,"depth":196,"text":1032},"Transform your team's technical skills with hands-on training programs that deliver immediate results - from junior developers to senior architects.",{"image":606,"slug":1044,"pricing_from":1045,"pricing_currency":322,"availability":1046,"students_trained":1047,"satisfaction_rate":667,"workshop_languages":1048,"homepage_cta":1052},"custom-training",1500,"Next available workshop: October 2025","200+",[1049,1050,1051],"Spanish","Catalan","English","See the Detailed Program","\u002Fen\u002Fservices\u002Fcustom-training",{"title":993,"description":1042},"en\u002Fservices\u002Fcustom-training","eTsGGU22VoR4meTaDve7RR7IgsoUZhwVzeprzs_67FY",{"id":1058,"title":1059,"body":1060,"description":1167,"extension":210,"features":211,"icon":211,"locale":861,"meta":1168,"navigation":216,"order":327,"path":1172,"price":211,"seo":1173,"status":330,"stem":1174,"__hash__":1175},"services\u002Fen\u002Fservices\u002Ffullstack-development.md","Fullstack Development",{"type":8,"value":1061,"toc":1160},[1062,1066,1069,1073,1090,1095,1097,1100,1104,1115,1121,1125,1128,1142,1147,1153,1155],[229,1063,1065],{"id":1064},"stop-losing-customers-to-slow-outdated-technology","Stop Losing Customers to Slow, Outdated Technology",[11,1067,1068],{},"I build web applications that actually grow your business. No generic templates, no months of delays, no technical debt that haunts you later.",[15,1070,1072],{"id":1071},"is-your-business-stuck-because","Is Your Business Stuck Because...",[42,1074,1075,1078,1081,1084,1087],{},[45,1076,1077],{},"🐌 Your current website can't handle traffic spikes?",[45,1079,1080],{},"💸 You're losing customers to competitors with faster, smoother experiences?",[45,1082,1083],{},"⏰ Your team wastes hours on manual processes that should be automated?",[45,1085,1086],{},"🚀 You need an MVP launched in 6 weeks, not 6 months?",[45,1088,1089],{},"📈 Your current system breaks every time you try to scale?",[11,1091,1092],{},[161,1093,1094],{},"If you nodded to any of these, keep reading.",[15,1096,1032],{"id":1031},[11,1098,1099],{},"I don't just code - I solve business problems with technology.",[15,1101,1103],{"id":1102},"ready-to-stop-struggling-with-technology","Ready to Stop Struggling with Technology?",[11,1105,1106,1107,1110,1111,1114],{},"I'm currently accepting ",[161,1108,1109],{},"2 new projects"," for Q4 2025. Next available start date is ",[161,1112,1113],{},"September 15th",".",[11,1116,1117,1120],{},[161,1118,1119],{},"30-Day Money-Back Guarantee:"," If you're not satisfied with the first milestone delivery, get a full refund.",[20,1122,1124],{"id":1123},"get-your-free-consultation","Get Your Free Consultation",[11,1126,1127],{},"Book a 30-minute call where we'll:",[42,1129,1130,1133,1136,1139],{},[45,1131,1132],{},"✅ Analyze your current technical challenges",[45,1134,1135],{},"✅ Discuss the best approach for your goals",[45,1137,1138],{},"✅ Provide a detailed project estimate",[45,1140,1141],{},"✅ Answer all your questions about the process",[11,1143,1144],{},[161,1145,1146],{},"No sales pressure. No obligation. Just honest technical advice.",[11,1148,1149],{},[298,1150,1152],{"href":1151},"#contact","Schedule Your Strategy Session →",[303,1154],{},[11,1156,1157],{},[308,1158,1159],{},"Based in Barcelona, available for projects across Europe and remote collaboration worldwide.",{"title":190,"searchDepth":191,"depth":191,"links":1161},[1162,1163,1164],{"id":1071,"depth":191,"text":1072},{"id":1031,"depth":191,"text":1032},{"id":1102,"depth":191,"text":1103,"children":1165},[1166],{"id":1123,"depth":196,"text":1124},"I build revenue-generating web applications for growing businesses that need to launch fast and scale reliably from MVP to enterprise.",{"image":319,"slug":1169,"pricing_from":321,"pricing_currency":322,"availability":1170,"projects_completed":324,"client_retention":325,"homepage_cta":1171},"fullstack-development","Next start date: September 15th, 2025","See the Complete Process","\u002Fen\u002Fservices\u002Ffullstack-development",{"title":1059,"description":1167},"en\u002Fservices\u002Ffullstack-development","dIhSTfpGQ0Mch0HUYoewVum9aJcOr6n4BUkNaGgskiI",{"id":1177,"title":1178,"body":1179,"description":1288,"extension":210,"features":211,"icon":211,"locale":861,"meta":1289,"navigation":216,"order":196,"path":1292,"price":211,"seo":1293,"status":220,"stem":1294,"__hash__":1295},"services\u002Fen\u002Fservices\u002Fia-integration-and-automation.md","Integration of AI and Automation",{"type":8,"value":1180,"toc":1277},[1181,1184,1188,1192,1195,1199,1202,1206,1209,1213,1216,1220,1223,1227,1258,1261],[11,1182,1183],{},"I can help you integrate AI-powered solutions into your existing systems to automate repetitive tasks, analyze data and provide intelligent insights. From chatbots to predictive analytics, I can build personalized AI solutions that optimize your operations and drive business growth.",[15,1185,1187],{"id":1186},"ai-and-automation-services","AI and Automation Services",[20,1189,1191],{"id":1190},"intelligent-chatbots","Intelligent Chatbots",[11,1193,1194],{},"I develop conversational chatbots using GPT-4, Claude and other advanced language models. These virtual assistants can handle customer inquiries, provide technical support and automate sales processes 24\u002F7.",[20,1196,1198],{"id":1197},"process-automation","Process Automation",[11,1200,1201],{},"I create automated workflows that eliminate repetitive tasks and reduce human errors. From email management to data processing, automation can save hours of manual work.",[20,1203,1205],{"id":1204},"predictive-analytics","Predictive Analytics",[11,1207,1208],{},"I implement machine learning models to analyze patterns in your data and make accurate predictions about future trends, customer behavior and business opportunities.",[20,1210,1212],{"id":1211},"natural-language-processing-nlp","Natural Language Processing (NLP)",[11,1214,1215],{},"I develop systems that can understand and process text in Catalan, Spanish and English. This includes sentiment analysis, entity extraction and automatic document classification.",[20,1217,1219],{"id":1218},"computer-vision","Computer Vision",[11,1221,1222],{},"I create solutions that can analyze images and videos for applications such as product recognition, quality control and security.",[15,1224,1226],{"id":1225},"common-use-cases","Common Use Cases",[42,1228,1229,1234,1240,1246,1252],{},[45,1230,1231,1233],{},[161,1232,734],{},": Personalized product recommendations and dynamic pricing optimization",[45,1235,1236,1239],{},[161,1237,1238],{},"Customer Service",": Virtual assistants that automatically resolve queries",[45,1241,1242,1245],{},[161,1243,1244],{},"Human Resources",": Automatic candidate selection and sentiment analysis in surveys",[45,1247,1248,1251],{},[161,1249,1250],{},"Marketing",": Automatic customer segmentation and content personalization",[45,1253,1254,1257],{},[161,1255,1256],{},"Finance",": Fraud detection and credit risk analysis",[15,1259,1260],{"id":946},"Technologies I Use",[11,1262,1263,767,1266,771,1269,775,1272,779,1275,783],{},[161,1264,1265],{},"AI Models:",[161,1267,1268],{},"ML Frameworks:",[161,1270,1271],{},"AI APIs:",[161,1273,1274],{},"Automation:",[161,1276,782],{},{"title":190,"searchDepth":191,"depth":191,"links":1278},[1279,1286,1287],{"id":1186,"depth":191,"text":1187,"children":1280},[1281,1282,1283,1284,1285],{"id":1190,"depth":196,"text":1191},{"id":1197,"depth":196,"text":1198},{"id":1204,"depth":196,"text":1205},{"id":1211,"depth":196,"text":1212},{"id":1218,"depth":196,"text":1219},{"id":1225,"depth":191,"text":1226},{"id":946,"depth":191,"text":1260},"Harness the power of Artificial Intelligence to automate processes and obtain a competitive advantage.",{"image":797,"slug":1290,"homepage_cta":1291},"ia-integration-and-automation","More details","\u002Fen\u002Fservices\u002Fia-integration-and-automation",{"title":1178,"description":1288},"en\u002Fservices\u002Fia-integration-and-automation","Az_7QgDZMbxSf3JkwMegQpc7ZZgUIPAw-DHGSqavEDE",{"id":1297,"title":1298,"body":1299,"description":1306,"extension":210,"features":211,"icon":211,"locale":861,"meta":1307,"navigation":216,"order":196,"path":1309,"price":211,"seo":1310,"status":220,"stem":1311,"__hash__":1312},"services\u002Fen\u002Fservices\u002Ftraining.md","Training and talks",{"type":8,"value":1300,"toc":1304},[1301],[11,1302,1303],{},"I have experience in official Dual Vocational Training teaching at Training Cycles, providing comprehensive technical education and mentoring.",{"title":190,"searchDepth":191,"depth":191,"links":1305},[],"Experience in official teaching of Dual Vocational Training in Training Cycles.",{"image":606,"slug":1308},"training","\u002Fen\u002Fservices\u002Ftraining",{"title":1298,"description":1306},"en\u002Fservices\u002Ftraining","q3M1CB4E_6oMgxQJVu-oMlLYmNgASWXMMTgWdPnmsbs",{"id":1314,"title":6,"body":1315,"description":1322,"extension":210,"features":211,"icon":211,"locale":1323,"meta":1324,"navigation":216,"order":217,"path":1325,"price":211,"seo":1326,"status":220,"stem":1327,"__hash__":1328},"services\u002Fes\u002Fservices\u002Fconsultoria.md",{"type":8,"value":1316,"toc":1320},[1317],[11,1318,1319],{},"Con años de experiencia en la industria, ofrezco servicios de consultoría para ayudarte\na tomar decisiones informadas sobre tu estrategia de desarrollo web. Tanto si necesitas ayuda\ncon la selección de tecnologías, planificación de proyectos, o revisión de código, puedo proporcionar\nla experiencia que necesitas para asegurar el éxito de tu proyecto.",{"title":190,"searchDepth":191,"depth":191,"links":1321},[],"Obtiene asesoramiento experto y orientación para tus proyectos de desarrollo web.","es",{"image":214,"slug":215},"\u002Fes\u002Fservices\u002Fconsultoria",{"title":6,"description":1322},"es\u002Fservices\u002Fconsultoria","THVque3YR-eWr99ixgpRdp2EzZpv7pCGVwStoaZsASM",{"id":1330,"title":1331,"body":1332,"description":1439,"extension":210,"features":211,"icon":211,"locale":1323,"meta":1440,"navigation":216,"order":327,"path":1444,"price":211,"seo":1445,"status":330,"stem":1446,"__hash__":1447},"services\u002Fes\u002Fservices\u002Fdesarrollo-fullstack.md","Desarrollo Fullstack",{"type":8,"value":1333,"toc":1432},[1334,1338,1341,1345,1362,1367,1371,1374,1378,1388,1394,1398,1401,1415,1420,1425,1427],[229,1335,1337],{"id":1336},"deja-de-perder-clientes-por-tecnología-lenta-y-obsoleta","Deja de Perder Clientes por Tecnología Lenta y Obsoleta",[11,1339,1340],{},"Desarrollo aplicaciones web que realmente hacen crecer tu negocio. Sin plantillas genéricas, sin meses de retrasos, sin deuda técnica que te persiga después.",[15,1342,1344],{"id":1343},"tu-negocio-está-estancado-porque","¿Tu Negocio Está Estancado Porque...",[42,1346,1347,1350,1353,1356,1359],{},[45,1348,1349],{},"🐌 ¿Tu sitio web actual no puede manejar picos de tráfico?",[45,1351,1352],{},"💸 ¿Estás perdiendo clientes ante competidores con experiencias más rápidas y fluidas?",[45,1354,1355],{},"⏰ ¿Tu equipo pierde horas en procesos manuales que deberían estar automatizados?",[45,1357,1358],{},"🚀 ¿Necesitas un MVP lanzado en 6 semanas, no en 6 meses?",[45,1360,1361],{},"📈 ¿Tu sistema actual se rompe cada vez que intentas escalar?",[11,1363,1364],{},[161,1365,1366],{},"Si asentiste a cualquiera de estas, sigue leyendo.",[15,1368,1370],{"id":1369},"lo-que-me-hace-diferente","Lo Que Me Hace Diferente",[11,1372,1373],{},"No solo programo - resuelvo problemas empresariales con tecnología.",[15,1375,1377],{"id":1376},"listo-para-dejar-de-luchar-con-la-tecnología","¿Listo para Dejar de Luchar con la Tecnología?",[11,1379,1380,1381,1384,1385,1114],{},"Actualmente estoy aceptando ",[161,1382,1383],{},"2 nuevos proyectos"," para Q4 2025. La próxima fecha de inicio disponible es el ",[161,1386,1387],{},"15 de septiembre",[11,1389,1390,1393],{},[161,1391,1392],{},"Garantía de Devolución de 30 Días:"," Si no estás satisfecho con la entrega del primer hito, obtén un reembolso completo.",[20,1395,1397],{"id":1396},"obtén-tu-consulta-gratuita-del-proyecto","Obtén Tu Consulta Gratuita del Proyecto",[11,1399,1400],{},"Reserva una llamada de 30 minutos donde:",[42,1402,1403,1406,1409,1412],{},[45,1404,1405],{},"✅ Analizaremos tus desafíos técnicos actuales",[45,1407,1408],{},"✅ Discutiremos el mejor enfoque para tus objetivos",[45,1410,1411],{},"✅ Proporcionaremos una estimación detallada del proyecto",[45,1413,1414],{},"✅ Responderemos todas tus preguntas sobre el proceso",[11,1416,1417],{},[161,1418,1419],{},"Sin presión de ventas. Sin obligaciones. Solo consejos técnicos honestos.",[11,1421,1422],{},[298,1423,1424],{"href":1151},"Programa Tu Sesión de Estrategia →",[303,1426],{},[11,1428,1429],{},[308,1430,1431],{},"Basado en Barcelona, disponible para proyectos en toda Europa y colaboración remota mundial.",{"title":190,"searchDepth":191,"depth":191,"links":1433},[1434,1435,1436],{"id":1343,"depth":191,"text":1344},{"id":1369,"depth":191,"text":1370},{"id":1376,"depth":191,"text":1377,"children":1437},[1438],{"id":1396,"depth":196,"text":1397},"Desarrollo aplicaciones web que generan ingresos para empresas en crecimiento que necesitan lanzarse rápido y escalar de forma confiable desde MVP hasta empresas.",{"image":319,"slug":1441,"pricing_from":321,"pricing_currency":322,"availability":1442,"projects_completed":324,"client_retention":325,"homepage_cta":1443},"desarrollo-fullstack","Próxima fecha de inicio: 15 de septiembre de 2025","Ver el Proceso Completo","\u002Fes\u002Fservices\u002Fdesarrollo-fullstack",{"title":1331,"description":1439},"es\u002Fservices\u002Fdesarrollo-fullstack","RuAe_pWc2HkTpV5aC5FwA15J13wKPPJL2EBZHltGpco",{"id":1449,"title":1450,"body":1451,"description":1562,"extension":210,"features":211,"icon":211,"locale":1323,"meta":1563,"navigation":216,"order":327,"path":1565,"price":211,"seo":1566,"status":220,"stem":1567,"__hash__":1568},"services\u002Fes\u002Fservices\u002Fdesarrollo-fullstack-personalizado.md","Desarrollo Fullstack Personalizado",{"type":8,"value":1452,"toc":1552},[1453,1456,1460,1464,1467,1471,1474,1478,1481,1485,1488,1492,1524,1528],[11,1454,1455],{},"Me especializo en construir aplicaciones web personalizadas adaptadas a tus necesidades específicas. Mi experiencia cubre toda la pila de desarrollo, desde crear interfaces de usuario hermosas e intuitivas hasta diseñar sistemas backend robustos y escalables. Trabajo con tecnologías modernas para asegurar que tu proyecto no solo sea funcional sino también preparado para el futuro.",[15,1457,1459],{"id":1458},"qué-ofrezco","Qué ofrezco",[20,1461,1463],{"id":1462},"desarrollo-frontend","Desarrollo Frontend",[11,1465,1466],{},"Construyo interfaces de usuario modernas y responsivas utilizando frameworks como Vue.js y Nuxt.js. Me enfoco en crear experiencias de usuario intuitivas que funcionen perfectamente en todos los dispositivos, desde ordenadores de escritorio hasta móviles.",[20,1468,1470],{"id":1469},"desarrollo-backend","Desarrollo Backend",[11,1472,1473],{},"Diseño e implemento APIs RESTful robustas con tecnologías como Laravel, Node.js y Express. Me aseguro de que tu backend sea escalable, seguro y eficiente, capaz de gestionar el crecimiento de tu proyecto.",[20,1475,1477],{"id":1476},"bases-de-datos","Bases de Datos",[11,1479,1480],{},"Trabajo con diversos sistemas de bases de datos como MySQL, PostgreSQL. Diseño esquemas optimizados que garantizan un rendimiento excelente y la integridad de los datos.",[20,1482,1484],{"id":1483},"integración-y-apis","Integración y APIs",[11,1486,1487],{},"Conecto diferentes sistemas y servicios a través de integraciones de APIs personalizadas. Puedo integrar servicios de pago, sistemas de CRM, plataformas de marketing y cualquier otra herramienta que necesite tu negocio.",[15,1489,1491],{"id":1490},"proceso-de-trabajo","Proceso de trabajo",[156,1493,1494,1500,1506,1512,1518],{},[45,1495,1496,1499],{},[161,1497,1498],{},"Análisis y planificación",": Comienzo comprendiendo tus necesidades y objetivos para crear una estrategia de desarrollo sólida.",[45,1501,1502,1505],{},[161,1503,1504],{},"Diseño y prototipado",": Creo wireframes y prototipos para visualizar la solución antes del desarrollo.",[45,1507,1508,1511],{},[161,1509,1510],{},"Desarrollo iterativo",": Construyo la aplicación en fases, proporcionando actualizaciones regulares e incorporando tu feedback.",[45,1513,1514,1517],{},[161,1515,1516],{},"Testing y optimización",": Realizo pruebas exhaustivas para garantizar la calidad y el rendimiento óptimo.",[45,1519,1520,1523],{},[161,1521,1522],{},"Despliegue y mantenimiento",": Gestiono el despliegue y ofrezco soporte continuo para asegurar el funcionamiento correcto.",[15,1525,1527],{"id":1526},"tecnologías-que-utilizo","Tecnologías que utilizo",[156,1529,1530,1534,1538,1543,1547],{},[45,1531,1532,420],{},[161,1533,419],{},[45,1535,1536,426],{},[161,1537,425],{},[45,1539,1540,432],{},[161,1541,1542],{},"Bases de datos:",[45,1544,1545,438],{},[161,1546,437],{},[45,1548,1549,444],{},[161,1550,1551],{},"Herramientas:",{"title":190,"searchDepth":191,"depth":191,"links":1553},[1554,1560,1561],{"id":1458,"depth":191,"text":1459,"children":1555},[1556,1557,1558,1559],{"id":1462,"depth":196,"text":1463},{"id":1469,"depth":196,"text":1470},{"id":1476,"depth":196,"text":1477},{"id":1483,"depth":196,"text":1484},{"id":1490,"depth":191,"text":1491},{"id":1526,"depth":191,"text":1527},"Desde el concepto hasta el despliegue, ofrezco servicios completos de desarrollo web para hacer realidad tus ideas.",{"image":319,"slug":1564},"desarrollo-fullstack-personalizado","\u002Fes\u002Fservices\u002Fdesarrollo-fullstack-personalizado",{"title":1450,"description":1562},"es\u002Fservices\u002Fdesarrollo-fullstack-personalizado","E1C5E7mLuzmqPSowSsIHVBHWTa8j7NNgm0QCzyfCE6U",{"id":1570,"title":1571,"body":1572,"description":1576,"extension":210,"features":211,"icon":211,"locale":1323,"meta":1579,"navigation":216,"order":196,"path":1581,"price":211,"seo":1582,"status":220,"stem":1583,"__hash__":1584},"services\u002Fes\u002Fservices\u002Fformacion.md","Formación y charlas",{"type":8,"value":1573,"toc":1577},[1574],[11,1575,1576],{},"Experiencia en docencia oficial de FP Dual de Ciclos Formativos.",{"title":190,"searchDepth":191,"depth":191,"links":1578},[],{"image":606,"slug":1580},"formacion","\u002Fes\u002Fservices\u002Fformacion",{"title":1571,"description":1576},"es\u002Fservices\u002Fformacion","iKfmxXzCeTDEMwjVCHdeqlGhzeguotM0O56GE8pIGZU",{"id":1586,"title":1587,"body":1588,"description":1634,"extension":210,"features":211,"icon":211,"locale":1323,"meta":1635,"navigation":216,"order":191,"path":1643,"price":211,"seo":1644,"status":330,"stem":1645,"__hash__":1646},"services\u002Fes\u002Fservices\u002Fformacion-tecnica.md","Formación Técnica",{"type":8,"value":1589,"toc":1628},[1590,1594,1597,1601,1618,1623,1625],[15,1591,1593],{"id":1592},"deja-de-perder-dinero-en-formación-técnica-que-nadie-aplica","Deja de Perder Dinero en Formación Técnica Que Nadie Aplica",[11,1595,1596],{},"Tus desarrolladores aprenden habilidades de vanguardia que realmente usarán el lunes por la mañana. Sin PowerPoints mortales, sin teoría inútil, solo competencias prácticas que aumentan la productividad inmediatamente.",[20,1598,1600],{"id":1599},"tu-equipo-de-desarrollo-está-atascado-porque","¿Tu Equipo de Desarrollo Está Atascado Porque...",[42,1602,1603,1606,1609,1612,1615],{},[45,1604,1605],{},"🐌 Los juniors tardan 6 meses en ser productivos mientras los seniors hacen de niñera?",[45,1607,1608],{},"💸 Pierdes €50.000 anuales en productividad perdida por falta de habilidades?",[45,1610,1611],{},"🔄 Tu equipo sigue usando metodologías de 2018 mientras la competencia les come terreno?",[45,1613,1614],{},"⚡ Cada nuevo framework paraliza a tu equipo durante semanas?",[45,1616,1617],{},"🎯 Los cursos online que pagas acumulan polvo digital?",[11,1619,1620],{},[161,1621,1622],{},"Si asientes a cualquiera, tu equipo necesita formación dirigida y práctica.",[20,1624,1370],{"id":1369},[11,1626,1627],{},"No enseño teoría - enseño lo que funciona en entornos de producción reales.",{"title":190,"searchDepth":191,"depth":191,"links":1629},[1630],{"id":1592,"depth":191,"text":1593,"children":1631},[1632,1633],{"id":1599,"depth":196,"text":1600},{"id":1369,"depth":196,"text":1370},"Convierto desarrolladores junior en contribuidores productivos. Sin teoría aburrida, solo habilidades prácticas que usan desde el lunes.",{"image":606,"slug":1636,"pricing_from":664,"pricing_currency":322,"availability":1637,"estudiantes_formados":666,"satisfaccion":667,"idiomas":1638,"homepage_cta":1642},"formacion-tecnica","Próxima formación disponible: 15 octubre 2025",[1639,1640,1641],"Español","Catalán","Inglés","Ver el Programa Detallado","\u002Fes\u002Fservices\u002Fformacion-tecnica",{"title":1587,"description":1634},"es\u002Fservices\u002Fformacion-tecnica","0fsNM7HQGMKhjiEzgfxqYWyqmVS0Lv6S8073MlQjDbc",{"id":1648,"title":1649,"body":1650,"description":1756,"extension":210,"features":211,"icon":211,"locale":1323,"meta":1757,"navigation":216,"order":196,"path":1760,"price":211,"seo":1761,"status":220,"stem":1762,"__hash__":1763},"services\u002Fes\u002Fservices\u002Fintegracion-ia-y-automatizaciones.md","Integración de IA y Automatización",{"type":8,"value":1651,"toc":1745},[1652,1655,1659,1663,1666,1670,1673,1677,1680,1684,1687,1691,1694,1698,1728,1730],[11,1653,1654],{},"Puedo ayudarte a integrar soluciones potenciadas por IA en tus sistemas existentes para automatizar tareas repetitivas, analizar datos y proporcionar información inteligente. Desde chatbots hasta analítica predictiva, puedo construir soluciones de IA personalizadas que optimicen tus operaciones e impulsen el crecimiento del negocio.",[15,1656,1658],{"id":1657},"servicios-de-ia-y-automatización","Servicios de IA y Automatización",[20,1660,1662],{"id":1661},"chatbots-inteligentes","Chatbots Inteligentes",[11,1664,1665],{},"Desarrollo chatbots conversacionales utilizando GPT-4, Claude y otros modelos de lenguaje avanzados. Estos asistentes virtuales pueden gestionar consultas de clientes, proporcionar soporte técnico y automatizar procesos de ventas 24\u002F7.",[20,1667,1669],{"id":1668},"automatización-de-procesos","Automatización de Procesos",[11,1671,1672],{},"Creo flujos de trabajo automatizados que eliminan tareas repetitivas y reducen errores humanos. Desde la gestión de correos electrónicos hasta el procesamiento de datos, la automatización puede ahorrar horas de trabajo manual.",[20,1674,1676],{"id":1675},"análisis-predictivo","Análisis Predictivo",[11,1678,1679],{},"Implemento modelos de aprendizaje automático para analizar patrones en tus datos y hacer predicciones precisas sobre tendencias futuras, comportamiento de clientes y oportunidades de negocio.",[20,1681,1683],{"id":1682},"procesamiento-de-lenguaje-natural-nlp","Procesamiento de Lenguaje Natural (NLP)",[11,1685,1686],{},"Desarrollo sistemas que pueden comprender y procesar texto en catalán, castellano e inglés. Incluye análisis de sentimiento, extracción de entidades y clasificación automática de documentos.",[20,1688,1690],{"id":1689},"visión-por-computador","Visión por Computador",[11,1692,1693],{},"Creo soluciones que pueden analizar imágenes y vídeos para aplicaciones como reconocimiento de productos, control de calidad y seguridad.",[15,1695,1697],{"id":1696},"casos-de-uso-comunes","Casos de uso comunes",[42,1699,1700,1705,1711,1717,1722],{},[45,1701,1702,1704],{},[161,1703,734],{},": Recomendaciones de productos personalizadas y optimización de precios dinámica",[45,1706,1707,1710],{},[161,1708,1709],{},"Atención al cliente",": Asistentes virtuales que resuelven consultas automáticamente",[45,1712,1713,1716],{},[161,1714,1715],{},"Recursos Humanos",": Selección automática de candidatos y análisis de sentimiento en encuestas",[45,1718,1719,1721],{},[161,1720,1250],{},": Segmentación automática de clientes y personalización de contenido",[45,1723,1724,1727],{},[161,1725,1726],{},"Finanzas",": Detección de fraude y análisis de riesgo crediticio",[15,1729,1527],{"id":1526},[11,1731,1732,767,1735,771,1737,775,1740,779,1743,783],{},[161,1733,1734],{},"Modelos de IA:",[161,1736,770],{},[161,1738,1739],{},"APIs de IA:",[161,1741,1742],{},"Automatización:",[161,1744,782],{},{"title":190,"searchDepth":191,"depth":191,"links":1746},[1747,1754,1755],{"id":1657,"depth":191,"text":1658,"children":1748},[1749,1750,1751,1752,1753],{"id":1661,"depth":196,"text":1662},{"id":1668,"depth":196,"text":1669},{"id":1675,"depth":196,"text":1676},{"id":1682,"depth":196,"text":1683},{"id":1689,"depth":196,"text":1690},{"id":1696,"depth":191,"text":1697},{"id":1526,"depth":191,"text":1527},"Aprovecha el poder de la Inteligencia Artificial para automatizar procesos y obtener una ventaja competitiva.",{"image":797,"slug":1758,"homepage_cta":1759},"integracion-ia-y-automatizaciones","Más detalles","\u002Fes\u002Fservices\u002Fintegracion-ia-y-automatizaciones",{"title":1649,"description":1756},"es\u002Fservices\u002Fintegracion-ia-y-automatizaciones","yddTQTu3B_4QE7zFizHtSDtGdG-azem_8jki-bdHVuA",[1765,1939,2201,2268,2420,2655,2713,2864,3063],{"id":1766,"title":1767,"body":1768,"client":1899,"client_url":1900,"date":211,"description":1901,"extension":210,"featured":1902,"image":1903,"locale":212,"meta":1904,"navigation":216,"order":196,"path":1928,"repo":211,"seo":1929,"status":330,"stem":1930,"technologies":1931,"url":211,"__hash__":1938},"projects\u002Fca\u002Fprojects\u002Fapp-compartim.md","Compartim.cat - Plataforma de Xarxa Social",{"type":8,"value":1769,"toc":1890},[1770,1773,1776,1780,1783,1787,1819,1823,1827,1853,1857,1883,1887],[229,1771,1767],{"id":1772},"compartimcat-plataforma-de-xarxa-social",[11,1774,1775],{},"Una plataforma de xarxa social especialitzada dissenyada específicament per a estudiants\namb discapacitats intel·lectuals lleus, proporcionant un entorn segur i accessible\nper a l'aprenentatge i la interacció social.",[15,1777,1779],{"id":1778},"resum-del-projecte","Resum del Projecte",[11,1781,1782],{},"Compartim.cat aborda les necessitats úniques dels estudiants amb discapacitats\nintel·lectuals proporcionant una plataforma intuïtiva i accessible on poden\nconnectar, compartir experiències i accedir a contingut educatiu adaptat\na les seves necessitats d'aprenentatge.",[15,1784,1786],{"id":1785},"característiques-clau","Característiques Clau",[42,1788,1789,1795,1801,1807,1813],{},[45,1790,1791,1794],{},[161,1792,1793],{},"Control d'Accés Basat en Rols",": Sistema complet que suporta rols d'administrador,\nprofessor i estudiant",[45,1796,1797,1800],{},[161,1798,1799],{},"Disseny Accessible",": Interfície compatible amb WCAG 2.1 optimitzada per a\nusuaris amb discapacitats",[45,1802,1803,1806],{},[161,1804,1805],{},"Eines Educatives",": Funcions integrades de gestió d'aprenentatge",[45,1808,1809,1812],{},[161,1810,1811],{},"Comunicació Segura",": Missatgeria moderada i compartició de contingut",[45,1814,1815,1818],{},[161,1816,1817],{},"Seguiment del Progrés",": Eines per als educadors per monitoritzar el compromís dels estudiants",[15,1820,1822],{"id":1821},"implementació-tècnica","Implementació Tècnica",[20,1824,1826],{"id":1825},"arquitectura-del-backend","Arquitectura del Backend",[42,1828,1829,1835,1841,1847],{},[45,1830,1831,1834],{},[161,1832,1833],{},"API Laravel",": Backend robust amb disseny d'API RESTful",[45,1836,1837,1840],{},[161,1838,1839],{},"Autenticació",": Sistema d'autenticació multi-rol basat en JWT",[45,1842,1843,1846],{},[161,1844,1845],{},"Base de Dades",": Esquema MySQL optimitzat per al rendiment i escalabilitat",[45,1848,1849,1852],{},[161,1850,1851],{},"Moderació de Contingut",": Sistemes de revisió de contingut automatitzats i manuals",[20,1854,1856],{"id":1855},"desenvolupament-del-frontend","Desenvolupament del Frontend",[42,1858,1859,1865,1871,1877],{},[45,1860,1861,1864],{},[161,1862,1863],{},"Nuxt.js",": Aplicació Vue.js renderitzada al servidor per a un rendiment òptim",[45,1866,1867,1870],{},[161,1868,1869],{},"Tailwind CSS",": Estils basats en utilitats per a un disseny responsiu",[45,1872,1873,1876],{},[161,1874,1875],{},"Flowbite",": Integració de biblioteca de components accessibles",[45,1878,1879,1882],{},[161,1880,1881],{},"Funcions PWA",": Capacitats offline i experiència similar a aplicació mòbil",[15,1884,1886],{"id":1885},"impacte-i-resultats","Impacte i Resultats",[11,1888,1889],{},"La plataforma ha creat amb èxit un espai digital inclusiu que\nempodera els estudiants alhora que proporciona als educadors eines potents per\nal compromís i seguiment del progrés. La puntuació d'accessibilitat alta i les\nmètriques de compromís d'usuari demostren l'èxit del projecte en complir els seus\nobjectius principals.",{"title":190,"searchDepth":191,"depth":191,"links":1891},[1892,1893,1894,1898],{"id":1778,"depth":191,"text":1779},{"id":1785,"depth":191,"text":1786},{"id":1821,"depth":191,"text":1822,"children":1895},[1896,1897],{"id":1825,"depth":196,"text":1826},{"id":1855,"depth":196,"text":1856},{"id":1885,"depth":191,"text":1886},"Tecla Social","https:\u002F\u002Fteclasocial.com","Una xarxa social especialitzada per a estudiants amb discapacitats intel·lectuals lleus. Amb multiples escoles i rols: administrador, professor, alumne. Gamificació de continguts, Forums i xats intern",false,"\u002Fimages\u002Fprojects\u002Fcompartim.png",{"slug":1905,"achievements":1906,"metrics":1911,"liveUrl":1927,"githubUrl":190},"app-compartim",[1907,1908,1909,1910],"Sistema d'accés basat en rols complet construït","Disseny UI\u002FUX accessible implementat","Sistema de gestió de contingut educatiu creat","Funcions de comunicació en temps real desenvolupades",[1912,1915,1918,1921,1924],{"label":1913,"value":1914},"Centres educatius","12",{"label":1916,"value":1917},"Usuaris Actius","500+",{"label":1919,"value":1920},"Publicacions de Contingut","2,000+",{"label":1922,"value":1923},"Compromís d'Usuari","85%",{"label":1925,"value":1926},"Puntuació d'Accessibilitat","95\u002F100","https:\u002F\u002Fapp.compartim.cat","\u002Fca\u002Fprojects\u002Fapp-compartim",{"title":1767,"description":1901},"ca\u002Fprojects\u002Fapp-compartim",[1932,1933,1934,1935,1936,1863,1937,1869,1875],"LEMP","Laravel","API","MySQL","VueJS","Progressive Web App","_MjQQZxuF9E8F1FP1lsQl-ZzyO6v85K0WtfiItBn2sM",{"id":1940,"title":1941,"body":1942,"client":2169,"client_url":2170,"date":211,"description":2171,"extension":210,"featured":1902,"image":1983,"locale":212,"meta":2172,"navigation":216,"order":191,"path":2190,"repo":211,"seo":2191,"status":330,"stem":2192,"technologies":2193,"url":211,"__hash__":2200},"projects\u002Fca\u002Fprojects\u002Fdocencia-classes-fp-dual-ciclo-de-vida-desarrollo-del-software.md","Docència classes FP Dual Ciclo de vida desarrollo del Software",{"type":8,"value":1943,"toc":2165},[1944,1948,1952,1966,1970,1973,1978,1984,1988,1993,1997,2002,2006,2011,2015,2020,2024,2029,2033,2038,2042,2047,2051,2056,2060,2065,2069,2074,2078,2083,2087,2092,2096,2101,2105,2110,2113,2117,2120,2124,2127,2131,2134,2138,2142,2147,2151,2156,2160],[229,1945,1947],{"id":1946},"docència-classes-fp-dual-ciclo-de-vida-del-desarrollo-de-software","Docència classes FP Dual Ciclo de vida del Desarrollo de Software",[15,1949,1951],{"id":1950},"fites-clau","Fites Clau",[42,1953,1954,1957,1960,1963],{},[45,1955,1956],{},"**Creació del material docent per a la classe >500 diapositives amb Google Slides",[45,1958,1959],{},"**Impartició de 80 hores lectives de l'Assignatura UF2406 Ciclo de vida del Desarrollo de Software",[45,1961,1962],{},"**Gestió de Classes amb Moodle",[45,1964,1965],{},"**Creació de les avaluacions contínues i exàmens finals",[15,1967,1969],{"id":1968},"algunes-diapositives-del-primer-capítol","Algunes diapositives del primer capítol",[11,1971,1972],{},"Aquí podeu veure algunes de les diapositives del primer capitol de la classe \"Ciclo de vida del desarrollo del sofware\"",[1974,1975,1977],"h4",{"id":1976},"portada-presentacio-uf2406-ciclo-de-vida-desarrollo-del-software","Portada presentacio uf2406 ciclo de vida desarrollo del software",[11,1979,1980],{},[1981,1982],"img",{"alt":1977,"src":1983},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fportada_presentacio_uf2406_ciclo_de_vida_desarrollo_del_software.png",[1974,1985,1987],{"id":1986},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-1-historia","Presentacion uf2406 ciclo de vida desarrollo del software pagina 1 historia",[11,1989,1990],{},[1981,1991],{"alt":1987,"src":1992},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_1_historia.png",[1974,1994,1996],{"id":1995},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-10-git-branching","Presentacion uf2406 ciclo de vida desarrollo del software pagina 10 git branching",[11,1998,1999],{},[1981,2000],{"alt":1996,"src":2001},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_10_git_branching.png",[1974,2003,2005],{"id":2004},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-11-code-reviews","Presentacion uf2406 ciclo de vida desarrollo del software pagina 11 code reviews",[11,2007,2008],{},[1981,2009],{"alt":2005,"src":2010},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_11_code_reviews.png",[1974,2012,2014],{"id":2013},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-12-testing-pyramid","Presentacion uf2406 ciclo de vida desarrollo del software pagina 12 testing pyramid",[11,2016,2017],{},[1981,2018],{"alt":2014,"src":2019},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_12_testing_pyramid.png",[1974,2021,2023],{"id":2022},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-13-tdd","Presentacion uf2406 ciclo de vida desarrollo del software pagina 13 tdd",[11,2025,2026],{},[1981,2027],{"alt":2023,"src":2028},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_13_tdd.png",[1974,2030,2032],{"id":2031},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-2-bug","Presentacion uf2406 ciclo de vida desarrollo del software pagina 2 bug",[11,2034,2035],{},[1981,2036],{"alt":2032,"src":2037},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_2_bug.png",[1974,2039,2041],{"id":2040},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-3-lenguajes","Presentacion uf2406 ciclo de vida desarrollo del software pagina 3 lenguajes",[11,2043,2044],{},[1981,2045],{"alt":2041,"src":2046},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_3_lenguajes.png",[1974,2048,2050],{"id":2049},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-4-sesentas","Presentacion uf2406 ciclo de vida desarrollo del software pagina 4 sesentas",[11,2052,2053],{},[1981,2054],{"alt":2050,"src":2055},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_4_sesentas.png",[1974,2057,2059],{"id":2058},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-5-mythical-man-month","Presentacion uf2406 ciclo de vida desarrollo del software pagina 5 mythical man month",[11,2061,2062],{},[1981,2063],{"alt":2059,"src":2064},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_5_mythical_man_month.png",[1974,2066,2068],{"id":2067},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-6-modelling","Presentacion uf2406 ciclo de vida desarrollo del software pagina 6 modelling",[11,2070,2071],{},[1981,2072],{"alt":2068,"src":2073},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_6_modelling.png",[1974,2075,2077],{"id":2076},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-7-programingpng","Presentacion uf2406 ciclo de vida desarrollo del software pagina 7 programing.png",[11,2079,2080],{},[1981,2081],{"alt":2077,"src":2082},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_7_programing.png.png",[1974,2084,2086],{"id":2085},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-8-kisspng","Presentacion uf2406 ciclo de vida desarrollo del software pagina 8 kiss.png",[11,2088,2089],{},[1981,2090],{"alt":2086,"src":2091},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_8_kiss.png.png",[1974,2093,2095],{"id":2094},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-8-solid","Presentacion uf2406 ciclo de vida desarrollo del software pagina 8 solid",[11,2097,2098],{},[1981,2099],{"alt":2095,"src":2100},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_8_solid.png",[1974,2102,2104],{"id":2103},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-9-drypng","Presentacion uf2406 ciclo de vida desarrollo del software pagina 9 dry.png",[11,2106,2107],{},[1981,2108],{"alt":2104,"src":2109},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_9_dry.png.png",[1974,2111,1996],{"id":2112},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-10-git-branching-1",[11,2114,2115],{},[1981,2116],{"alt":1996,"src":2001},[1974,2118,2005],{"id":2119},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-11-code-reviews-1",[11,2121,2122],{},[1981,2123],{"alt":2005,"src":2010},[1974,2125,2014],{"id":2126},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-12-testing-pyramid-1",[11,2128,2129],{},[1981,2130],{"alt":2014,"src":2019},[1974,2132,2023],{"id":2133},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-13-tdd-1",[11,2135,2136],{},[1981,2137],{"alt":2023,"src":2028},[1974,2139,2141],{"id":2140},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-14-deploy","Presentacion uf2406 ciclo de vida desarrollo del software pagina 14 deploy",[11,2143,2144],{},[1981,2145],{"alt":2141,"src":2146},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_14_deploy.png",[1974,2148,2150],{"id":2149},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-15-waterfall","Presentacion uf2406 ciclo de vida desarrollo del software pagina 15 waterfall",[11,2152,2153],{},[1981,2154],{"alt":2150,"src":2155},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_15_waterfall.png",[1974,2157,2159],{"id":2158},"presentacion-uf2406-ciclo-de-vida-desarrollo-del-software-pagina-16-packages","Presentacion uf2406 ciclo de vida desarrollo del software pagina 16 packages",[11,2161,2162],{},[1981,2163],{"alt":2159,"src":2164},"\u002Fimages\u002Fprojects\u002Fuf2406\u002Fpresentacion_uf2406_ciclo_de_vida_desarrollo_del_software_pagina_16_packages.png",{"title":190,"searchDepth":191,"depth":191,"links":2166},[2167,2168],{"id":1950,"depth":191,"text":1951},{"id":1968,"depth":191,"text":1969},"Foment de Terrassa","https:\u002F\u002Fterrassaocupacio.cat\u002F","Impartició de 80 hores lectives de l'Assignatura UF2406 Ciclo de vida del Desarrollo de Software a Foment de Terrassa",{"slug":2173,"achievements":2174,"metrics":2179,"liveUrl":2189,"githubUrl":190},"docencia-classes-fp-dual-ciclo-de-vida-desarrollo-del-software",[2175,2176,2177,2178],"Creació del material docent per a la classe, més de 400 diapositives amb Google Slides","Impartició de 80 hores lectives de l'Assignatura UF2406 Ciclo de vida del Desarrollo de Software al Centre Formació Adults Salvador Espriu (Foment de Terrassa)","Gestió de Classes i pràctiques amb el Moodle del Campus Virtual de Foment Terrassa","Creació de les avaluacions continues i exàmens finals",[2180,2183,2186],{"label":2181,"value":2182},"Hores lectives","80",{"label":2184,"value":2185},"Diapositives creades","420",{"label":2187,"value":2188},"Valoració dels alumnes","8.5\u002F10","https:\u002F\u002Fdocs.google.com\u002Fpresentation\u002Fd\u002F1mStgkHiJaDJlHqK8Gm1GVlaBhl4ueNIO31Z5D_k-ZvM\u002Fedit?usp=sharing","\u002Fca\u002Fprojects\u002Fdocencia-classes-fp-dual-ciclo-de-vida-desarrollo-del-software",{"title":1941,"description":2171},"ca\u002Fprojects\u002Fdocencia-classes-fp-dual-ciclo-de-vida-desarrollo-del-software",[2194,2195,2196,2197,2198,2199],"Moodle","Google Slides","Lucidchart","Draw.io","PlantUML","MermaidJS","4u5GJYcvDBZVOafXd25ttwvPkt44n6wznZcL1FyYcrc",{"id":2202,"title":2203,"body":2204,"client":2249,"client_url":2250,"date":211,"description":2251,"extension":210,"featured":1902,"image":2252,"locale":212,"meta":2253,"navigation":216,"order":327,"path":2259,"repo":211,"seo":2260,"status":330,"stem":2261,"technologies":2262,"url":211,"__hash__":2267},"projects\u002Fca\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital.md","Exportador DDEX",{"type":8,"value":2205,"toc":2245},[2206,2210,2213,2215,2240,2242],[229,2207,2209],{"id":2208},"exportador-ddex-la-cupula-music","Exportador DDEX - La Cupula Music",[11,2211,2212],{},"Generació de fitxers Distribution Data Exchange (DDEX v3.8.2)",[15,2214,1786],{"id":1785},[42,2216,2217,2223,2228,2234],{},[45,2218,2219,2222],{},[161,2220,2221],{},"Generació de fitxers XML en format DDEX versió 3.8.2",":",[45,2224,2225,2222],{},[161,2226,2227],{},"Mecanisme de plantilles XML per customitzar diferents estandards i destinataris",[45,2229,2230,2233],{},[161,2231,2232],{},"Tests en phpunit",": cobertura de tests mitjana del 85%",[45,2235,2236,2239],{},[161,2237,2238],{},"Integració amb les eines del gestió del client",": Github, Jira",[15,2241,1886],{"id":1885},[11,2243,2244],{},"La possibilitat de poder publicar Releases de assets digitals mitjançant l'estandard DDEX a plataformes de distribució digital.",{"title":190,"searchDepth":191,"depth":191,"links":2246},[2247,2248],{"id":1785,"depth":191,"text":1786},{"id":1885,"depth":191,"text":1886},"La Cupula Music","https:\u002F\u002Fwww.lacupulamusic.com\u002F","Desenvolupar exportador de Distribution Data Exchange (DDEX) per a SaaS d'empresa discogràfica","\u002Fimages\u002Fprojects\u002Fddex\u002Fddex_logo.png",{"slug":2254,"achievements":2255,"metrics":211,"liveUrl":190,"githubUrl":190},"exportador-ddex-sistema-de-discografia-digital",[2212,2256,2257,2258],"Mecanisme de plantilles per a diferents estandards","Arquitectura de classes permet específicar per diferents clients","Cobertura de tests mitjana del 85%","\u002Fca\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital",{"title":2203,"description":2251},"ca\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital",[2263,1933,2264,2265,2266],"DDEX","XML","PHPUnit","Github Actions","D3HhJFnDoywRpDEj50jbUnxsBD_--wbswtUnSlKbquE",{"id":2269,"title":2270,"body":2271,"client":1899,"client_url":1900,"date":211,"description":2397,"extension":210,"featured":1902,"image":1903,"locale":861,"meta":2398,"navigation":216,"order":196,"path":2415,"repo":211,"seo":2416,"status":330,"stem":2417,"technologies":2418,"url":211,"__hash__":2419},"projects\u002Fen\u002Fprojects\u002Fapp-compartim.md","Compartim.cat - Social Network Platform",{"type":8,"value":2272,"toc":2388},[2273,2276,2279,2283,2286,2290,2322,2326,2330,2356,2358,2381,2385],[229,2274,2270],{"id":2275},"compartimcat-social-network-platform",[11,2277,2278],{},"A specialized social network platform designed specifically for students\nwith mild intellectual disabilities, providing a safe and accessible\nenvironment for learning and social interaction.",[15,2280,2282],{"id":2281},"project-overview","Project Overview",[11,2284,2285],{},"Compartim.cat addresses the unique needs of students with intellectual\ndisabilities by providing an intuitive and accessible platform where they can\nconnect, share experiences, and access educational content adapted\nto their learning needs.",[15,2287,2289],{"id":2288},"key-features","Key Features",[42,2291,2292,2298,2304,2310,2316],{},[45,2293,2294,2297],{},[161,2295,2296],{},"Role-Based Access Control",": Complete system supporting administrator,\nteacher, and student roles",[45,2299,2300,2303],{},[161,2301,2302],{},"Accessible Design",": WCAG 2.1 compliant interface optimized for\nusers with disabilities",[45,2305,2306,2309],{},[161,2307,2308],{},"Educational Tools",": Integrated learning management functions",[45,2311,2312,2315],{},[161,2313,2314],{},"Secure Communication",": Moderated messaging and content sharing",[45,2317,2318,2321],{},[161,2319,2320],{},"Progress Tracking",": Tools for educators to monitor student engagement",[15,2323,2325],{"id":2324},"technical-implementation","Technical Implementation",[20,2327,2329],{"id":2328},"backend-architecture","Backend Architecture",[42,2331,2332,2338,2344,2350],{},[45,2333,2334,2337],{},[161,2335,2336],{},"Laravel API",": Robust backend with RESTful API design",[45,2339,2340,2343],{},[161,2341,2342],{},"Authentication",": JWT-based multi-role authentication system",[45,2345,2346,2349],{},[161,2347,2348],{},"Database",": MySQL schema optimized for performance and scalability",[45,2351,2352,2355],{},[161,2353,2354],{},"Content Moderation",": Automated and manual content review systems",[20,2357,883],{"id":882},[42,2359,2360,2365,2370,2375],{},[45,2361,2362,2364],{},[161,2363,1863],{},": Server-rendered Vue.js application for optimal performance",[45,2366,2367,2369],{},[161,2368,1869],{},": Utility-based styles for responsive design",[45,2371,2372,2374],{},[161,2373,1875],{},": Accessible component library integration",[45,2376,2377,2380],{},[161,2378,2379],{},"PWA Features",": Offline capabilities and mobile app-like experience",[15,2382,2384],{"id":2383},"impact-and-results","Impact and Results",[11,2386,2387],{},"The platform has successfully created an inclusive digital space that\nempowers students while providing educators with powerful tools for\nengagement and progress tracking. The high accessibility score and\nuser engagement metrics demonstrate the project's success in meeting its\ncore objectives.",{"title":190,"searchDepth":191,"depth":191,"links":2389},[2390,2391,2392,2396],{"id":2281,"depth":191,"text":2282},{"id":2288,"depth":191,"text":2289},{"id":2324,"depth":191,"text":2325,"children":2393},[2394,2395],{"id":2328,"depth":196,"text":2329},{"id":882,"depth":196,"text":883},{"id":2383,"depth":191,"text":2384},"A specialized social network for students with mild intellectual disabilities. With multiple schools and roles: administrator, teacher, student. Gamification of content, Forums and internal chats",{"slug":1905,"achievements":2399,"metrics":2404,"liveUrl":1927,"githubUrl":190},[2400,2401,2402,2403],"Complete role-based access system built","Accessible UI\u002FUX design implemented","Educational content management system created","Real-time communication features developed",[2405,2407,2409,2411,2413],{"label":2406,"value":1914},"Educational centers",{"label":2408,"value":1917},"Active Users",{"label":2410,"value":1920},"Content Posts",{"label":2412,"value":1923},"User Engagement",{"label":2414,"value":1926},"Accessibility Score","\u002Fen\u002Fprojects\u002Fapp-compartim",{"title":2270,"description":2397},"en\u002Fprojects\u002Fapp-compartim",[1932,1933,1934,1935,1936,1863,1937,1869,1875],"M7ZwDuc-XAj-Po2f2y-s8vTSG4s8O1LxiAGmWCTHwsY",{"id":2421,"title":2422,"body":2423,"client":2169,"client_url":2170,"date":211,"description":2637,"extension":210,"featured":1902,"image":1983,"locale":861,"meta":2638,"navigation":216,"order":191,"path":2650,"repo":211,"seo":2651,"status":330,"stem":2652,"technologies":2653,"url":211,"__hash__":2654},"projects\u002Fen\u002Fprojects\u002Fdocencia-classes-fp-dual-ciclo-de-vida-desarrollo-del-software.md","Teaching Dual FP Classes Software Development Lifecycle",{"type":8,"value":2424,"toc":2633},[2425,2428,2432,2454,2458,2461,2465,2469,2473,2477,2481,2485,2489,2493,2497,2501,2505,2509,2513,2517,2521,2525,2529,2533,2537,2541,2545,2549,2553,2557,2561,2565,2569,2573,2577,2581,2584,2588,2591,2595,2598,2602,2605,2609,2613,2617,2621,2625,2629],[229,2426,2422],{"id":2427},"teaching-dual-fp-classes-software-development-lifecycle",[15,2429,2431],{"id":2430},"key-milestones","Key Milestones",[42,2433,2434,2439,2444,2449],{},[45,2435,2436],{},[161,2437,2438],{},"Creation of teaching material for the class, over 500 slides with Google Slides",[45,2440,2441],{},[161,2442,2443],{},"Taught 80 class hours of the UF2406 Software Development Lifecycle course",[45,2445,2446],{},[161,2447,2448],{},"Class Management with Moodle",[45,2450,2451],{},[161,2452,2453],{},"Creation of continuous assessments and final exams",[15,2455,2457],{"id":2456},"some-slides-from-the-first-chapter","Some slides from the first chapter",[11,2459,2460],{},"Here you can see some of the slides from the first chapter of the \"Software Development Lifecycle\" class.",[1974,2462,2464],{"id":2463},"cover-of-the-presentation-uf2406-software-development-lifecycle","Cover of the presentation uf2406 software development lifecycle",[11,2466,2467],{},[1981,2468],{"alt":2464,"src":1983},[1974,2470,2472],{"id":2471},"presentation-uf2406-software-development-lifecycle-page-1-history","Presentation uf2406 software development lifecycle page 1 history",[11,2474,2475],{},[1981,2476],{"alt":2472,"src":1992},[1974,2478,2480],{"id":2479},"presentation-uf2406-software-development-lifecycle-page-10-git-branching","Presentation uf2406 software development lifecycle page 10 git branching",[11,2482,2483],{},[1981,2484],{"alt":2480,"src":2001},[1974,2486,2488],{"id":2487},"presentation-uf2406-software-development-lifecycle-page-11-code-reviews","Presentation uf2406 software development lifecycle page 11 code reviews",[11,2490,2491],{},[1981,2492],{"alt":2488,"src":2010},[1974,2494,2496],{"id":2495},"presentation-uf2406-software-development-lifecycle-page-12-testing-pyramid","Presentation uf2406 software development lifecycle page 12 testing pyramid",[11,2498,2499],{},[1981,2500],{"alt":2496,"src":2019},[1974,2502,2504],{"id":2503},"presentation-uf2406-software-development-lifecycle-page-13-tdd","Presentation uf2406 software development lifecycle page 13 tdd",[11,2506,2507],{},[1981,2508],{"alt":2504,"src":2028},[1974,2510,2512],{"id":2511},"presentation-uf2406-software-development-lifecycle-page-2-bug","Presentation uf2406 software development lifecycle page 2 bug",[11,2514,2515],{},[1981,2516],{"alt":2512,"src":2037},[1974,2518,2520],{"id":2519},"presentation-uf2406-software-development-lifecycle-page-3-languages","Presentation uf2406 software development lifecycle page 3 languages",[11,2522,2523],{},[1981,2524],{"alt":2520,"src":2046},[1974,2526,2528],{"id":2527},"presentation-uf2406-software-development-lifecycle-page-4-sixties","Presentation uf2406 software development lifecycle page 4 sixties",[11,2530,2531],{},[1981,2532],{"alt":2528,"src":2055},[1974,2534,2536],{"id":2535},"presentation-uf2406-software-development-lifecycle-page-5-mythical-man-month","Presentation uf2406 software development lifecycle page 5 mythical man month",[11,2538,2539],{},[1981,2540],{"alt":2536,"src":2064},[1974,2542,2544],{"id":2543},"presentation-uf2406-software-development-lifecycle-page-6-modelling","Presentation uf2406 software development lifecycle page 6 modelling",[11,2546,2547],{},[1981,2548],{"alt":2544,"src":2073},[1974,2550,2552],{"id":2551},"presentation-uf2406-software-development-lifecycle-page-7-programingpng","Presentation uf2406 software development lifecycle page 7 programing.png",[11,2554,2555],{},[1981,2556],{"alt":2552,"src":2082},[1974,2558,2560],{"id":2559},"presentation-uf2406-software-development-lifecycle-page-8-kisspng","Presentation uf2406 software development lifecycle page 8 kiss.png",[11,2562,2563],{},[1981,2564],{"alt":2560,"src":2091},[1974,2566,2568],{"id":2567},"presentation-uf2406-software-development-lifecycle-page-8-solid","Presentation uf2406 software development lifecycle page 8 solid",[11,2570,2571],{},[1981,2572],{"alt":2568,"src":2100},[1974,2574,2576],{"id":2575},"presentation-uf2406-software-development-lifecycle-page-9-drypng","Presentation uf2406 software development lifecycle page 9 dry.png",[11,2578,2579],{},[1981,2580],{"alt":2576,"src":2109},[1974,2582,2480],{"id":2583},"presentation-uf2406-software-development-lifecycle-page-10-git-branching-1",[11,2585,2586],{},[1981,2587],{"alt":2480,"src":2001},[1974,2589,2488],{"id":2590},"presentation-uf2406-software-development-lifecycle-page-11-code-reviews-1",[11,2592,2593],{},[1981,2594],{"alt":2488,"src":2010},[1974,2596,2496],{"id":2597},"presentation-uf2406-software-development-lifecycle-page-12-testing-pyramid-1",[11,2599,2600],{},[1981,2601],{"alt":2496,"src":2019},[1974,2603,2504],{"id":2604},"presentation-uf2406-software-development-lifecycle-page-13-tdd-1",[11,2606,2607],{},[1981,2608],{"alt":2504,"src":2028},[1974,2610,2612],{"id":2611},"presentation-uf2406-software-development-lifecycle-page-14-deploy","Presentation uf2406 software development lifecycle page 14 deploy",[11,2614,2615],{},[1981,2616],{"alt":2612,"src":2146},[1974,2618,2620],{"id":2619},"presentation-uf2406-software-development-lifecycle-page-15-waterfall","Presentation uf2406 software development lifecycle page 15 waterfall",[11,2622,2623],{},[1981,2624],{"alt":2620,"src":2155},[1974,2626,2628],{"id":2627},"presentation-uf2406-software-development-lifecycle-page-16-packages","Presentation uf2406 software development lifecycle page 16 packages",[11,2630,2631],{},[1981,2632],{"alt":2628,"src":2164},{"title":190,"searchDepth":191,"depth":191,"links":2634},[2635,2636],{"id":2430,"depth":191,"text":2431},{"id":2456,"depth":191,"text":2457},"Taught 80 class hours of the UF2406 Software Development Lifecycle course at Foment de Terrassa",{"slug":2427,"achievements":2639,"metrics":2643,"liveUrl":2189,"githubUrl":190},[2640,2641,2642,2453],"Creation of teaching material for the class, more than 400 slides with Google Slides","Taught 80 class hours of the UF2406 Software Development Lifecycle course at the Salvador Espriu Adult Training Center (Foment de Terrassa)","Management of classes and practices with the Moodle of the Foment Terrassa Virtual Campus",[2644,2646,2648],{"label":2645,"value":2182},"Class hours",{"label":2647,"value":2185},"Slides created",{"label":2649,"value":2188},"Student rating","\u002Fen\u002Fprojects\u002Fdocencia-classes-fp-dual-ciclo-de-vida-desarrollo-del-software",{"title":2422,"description":2637},"en\u002Fprojects\u002Fdocencia-classes-fp-dual-ciclo-de-vida-desarrollo-del-software",[2194,2195,2196,2197,2198,2199],"2bH5WVwOkA1Z26kjEkDywfQJqW_vSKu9nSTLpwgSp64",{"id":2656,"title":2657,"body":2658,"client":2249,"client_url":2250,"date":211,"description":2701,"extension":210,"featured":1902,"image":2252,"locale":861,"meta":2702,"navigation":216,"order":327,"path":2708,"repo":211,"seo":2709,"status":330,"stem":2710,"technologies":2711,"url":211,"__hash__":2712},"projects\u002Fen\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital.md","DDEX Exporter",{"type":8,"value":2659,"toc":2697},[2660,2664,2667,2669,2692,2694],[229,2661,2663],{"id":2662},"ddex-exporter-la-cupula-music","DDEX Exporter - La Cupula Music",[11,2665,2666],{},"Generation of Distribution Data Exchange (DDEX v3.8.2) files",[15,2668,2289],{"id":2288},[42,2670,2671,2676,2681,2687],{},[45,2672,2673,2222],{},[161,2674,2675],{},"Generation of XML files in DDEX version 3.8.2 format",[45,2677,2678,2222],{},[161,2679,2680],{},"XML template mechanism to customize for different standards and recipients",[45,2682,2683,2686],{},[161,2684,2685],{},"PHPUnit tests",": average test coverage of 85%",[45,2688,2689,2239],{},[161,2690,2691],{},"Integration with client's management tools",[15,2693,2384],{"id":2383},[11,2695,2696],{},"The ability to publish digital asset releases using the DDEX standard to digital distribution platforms.",{"title":190,"searchDepth":191,"depth":191,"links":2698},[2699,2700],{"id":2288,"depth":191,"text":2289},{"id":2383,"depth":191,"text":2384},"Develop a Distribution Data Exchange (DDEX) exporter for a record company's SaaS",{"slug":2703,"achievements":2704,"metrics":211,"liveUrl":190,"githubUrl":190},"ddex-exporter-digital-record-system",[2666,2705,2706,2707],"Template mechanism for different standards","Class architecture allows specification for different clients","Average test coverage of 85%","\u002Fen\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital",{"title":2657,"description":2701},"en\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital",[2263,1933,2264,2265,2266],"W2m9RbxDcdrKw-Wty9TXNRs5ny3EvWqcKOl7_vQIqxE",{"id":2714,"title":2715,"body":2716,"client":1899,"client_url":1900,"date":211,"description":2841,"extension":210,"featured":1902,"image":1903,"locale":1323,"meta":2842,"navigation":216,"order":196,"path":2859,"repo":211,"seo":2860,"status":330,"stem":2861,"technologies":2862,"url":211,"__hash__":2863},"projects\u002Fes\u002Fprojects\u002Fapp-compartim.md","Compartim.cat - Plataforma de Red Social",{"type":8,"value":2717,"toc":2832},[2718,2721,2724,2728,2731,2735,2767,2771,2773,2798,2802,2825,2829],[229,2719,2715],{"id":2720},"compartimcat-plataforma-de-red-social",[11,2722,2723],{},"Una plataforma de red social especializada diseñada específicamente para estudiantes\ncon discapacidades intelectuales leves, proporcionando un entorno seguro y accesible\npara el aprendizaje y la interacción social.",[15,2725,2727],{"id":2726},"resumen-del-proyecto","Resumen del Proyecto",[11,2729,2730],{},"Compartim.cat aborda las necesidades únicas de los estudiantes con discapacidades\nintelectuales proporcionando una plataforma intuitiva y accesible donde pueden\nconectar, compartir experiencias y acceder a contenido educativo adaptado\na sus necesidades de aprendizaje.",[15,2732,2734],{"id":2733},"características-clave","Características Clave",[42,2736,2737,2743,2749,2755,2761],{},[45,2738,2739,2742],{},[161,2740,2741],{},"Control de Acceso Basado en Roles",": Sistema completo que soporta roles de administrador,\nprofesor y estudiante",[45,2744,2745,2748],{},[161,2746,2747],{},"Diseño Accesible",": Interfaz compatible con WCAG 2.1 optimizada para\nusuarios con discapacidades",[45,2750,2751,2754],{},[161,2752,2753],{},"Herramientas Educativas",": Funciones integradas de gestión de aprendizaje",[45,2756,2757,2760],{},[161,2758,2759],{},"Comunicación Segura",": Mensajería moderada y compartición de contenido",[45,2762,2763,2766],{},[161,2764,2765],{},"Seguimiento del Progreso",": Herramientas para los educadores para monitorizar el compromiso de los estudiantes",[15,2768,2770],{"id":2769},"implementación-técnica","Implementación Técnica",[20,2772,1826],{"id":1825},[42,2774,2775,2780,2786,2792],{},[45,2776,2777,2779],{},[161,2778,1833],{},": Backend robusto con diseño de API RESTful",[45,2781,2782,2785],{},[161,2783,2784],{},"Autenticación",": Sistema de autenticación multi-rol basado en JWT",[45,2787,2788,2791],{},[161,2789,2790],{},"Base de Datos",": Esquema MySQL optimizado para el rendimiento y escalabilidad",[45,2793,2794,2797],{},[161,2795,2796],{},"Moderación de Contenido",": Sistemas de revisión de contenido automatizados y manuales",[20,2799,2801],{"id":2800},"desarrollo-del-frontend","Desarrollo del Frontend",[42,2803,2804,2809,2814,2819],{},[45,2805,2806,2808],{},[161,2807,1863],{},": Aplicación Vue.js renderizada en el servidor para un rendimiento óptimo",[45,2810,2811,2813],{},[161,2812,1869],{},": Estilos basados en utilidades para un diseño responsivo",[45,2815,2816,2818],{},[161,2817,1875],{},": Integración de biblioteca de componentes accesibles",[45,2820,2821,2824],{},[161,2822,2823],{},"Funciones PWA",": Capacidades offline y experiencia similar a aplicación móvil",[15,2826,2828],{"id":2827},"impacto-y-resultados","Impacto y Resultados",[11,2830,2831],{},"La plataforma ha creado con éxito un espacio digital inclusivo que\nempodera a los estudiantes mientras proporciona a los educadores herramientas potentes para\nel compromiso y seguimiento del progreso. La puntuación de accesibilidad alta y las\nmétricas de compromiso de usuario demuestran el éxito del proyecto en cumplir sus\nobjetivos principales.",{"title":190,"searchDepth":191,"depth":191,"links":2833},[2834,2835,2836,2840],{"id":2726,"depth":191,"text":2727},{"id":2733,"depth":191,"text":2734},{"id":2769,"depth":191,"text":2770,"children":2837},[2838,2839],{"id":1825,"depth":196,"text":1826},{"id":2800,"depth":196,"text":2801},{"id":2827,"depth":191,"text":2828},"Una red social especializada para estudiantes con discapacidades intelectuales leves. Con múltiples escuelas y roles: administrador, profesor, alumno. Gamificación de contenidos, Foros y chats interno",{"slug":1905,"achievements":2843,"metrics":2848,"liveUrl":1927,"githubUrl":190},[2844,2845,2846,2847],"Sistema de acceso basado en roles completo construido","Diseño UI\u002FUX accesible implementado","Sistema de gestión de contenido educativo creado","Funciones de comunicación en tiempo real desarrolladas",[2849,2851,2853,2855,2857],{"label":2850,"value":1914},"Centros educativos",{"label":2852,"value":1917},"Usuarios Activos",{"label":2854,"value":1920},"Publicaciones de Contenido",{"label":2856,"value":1923},"Compromiso de Usuario",{"label":2858,"value":1926},"Puntuación de Accesibilidad","\u002Fes\u002Fprojects\u002Fapp-compartim",{"title":2715,"description":2841},"es\u002Fprojects\u002Fapp-compartim",[1932,1933,1934,1935,1936,1863,1937,1869,1875],"fQsXIgc782rAgbAxqjd7B5O6UGPSvpmRhX9Y2u6ihs8",{"id":2865,"title":2866,"body":2867,"client":2169,"client_url":2170,"date":211,"description":3044,"extension":210,"featured":1902,"image":1983,"locale":1323,"meta":3045,"navigation":216,"order":191,"path":3058,"repo":211,"seo":3059,"status":330,"stem":3060,"technologies":3061,"url":211,"__hash__":3062},"projects\u002Fes\u002Fprojects\u002Fdocencia-clases-fp-dual-ciclo-de-vida-desarrollo-del-software.md","Docencia clases FP Dual Ciclo de vida desarrollo del Software",{"type":8,"value":2868,"toc":3040},[2869,2873,2877,2899,2903,2906,2910,2914,2916,2920,2922,2926,2928,2932,2934,2938,2940,2944,2946,2950,2952,2956,2958,2962,2964,2968,2970,2974,2976,2980,2982,2986,2988,2992,2994,2998,3000,3004,3006,3010,3012,3016,3018,3022,3024,3028,3030,3034,3036],[229,2870,2872],{"id":2871},"docencia-clases-fp-dual-ciclo-de-vida-del-desarrollo-de-software","Docencia clases FP Dual Ciclo de vida del Desarrollo de Software",[15,2874,2876],{"id":2875},"hitos-clave","Hitos Clave",[42,2878,2879,2884,2889,2894],{},[45,2880,2881],{},[161,2882,2883],{},"Creación del material docente para la clase >500 diapositivas con Google Slides",[45,2885,2886],{},[161,2887,2888],{},"Impartición de 80 horas lectivas de la Asignatura UF2406 Ciclo de vida del Desarrollo de Software",[45,2890,2891],{},[161,2892,2893],{},"Gestión de Clases con Moodle",[45,2895,2896],{},[161,2897,2898],{},"Creación de las evaluaciones continuas y exámenes finales",[15,2900,2902],{"id":2901},"algunas-diapositivas-del-primer-capítulo","Algunas diapositivas del primer capítulo",[11,2904,2905],{},"Aquí puedes ver algunas de las diapositivas del primer capítulo de la clase \"Ciclo de vida del desarrollo del software\"",[1974,2907,2909],{"id":2908},"portada-presentacion-uf2406-ciclo-de-vida-desarrollo-del-software","Portada presentacion uf2406 ciclo de vida desarrollo del software",[11,2911,2912],{},[1981,2913],{"alt":2909,"src":1983},[1974,2915,1987],{"id":1986},[11,2917,2918],{},[1981,2919],{"alt":1987,"src":1992},[1974,2921,1996],{"id":1995},[11,2923,2924],{},[1981,2925],{"alt":1996,"src":2001},[1974,2927,2005],{"id":2004},[11,2929,2930],{},[1981,2931],{"alt":2005,"src":2010},[1974,2933,2014],{"id":2013},[11,2935,2936],{},[1981,2937],{"alt":2014,"src":2019},[1974,2939,2023],{"id":2022},[11,2941,2942],{},[1981,2943],{"alt":2023,"src":2028},[1974,2945,2032],{"id":2031},[11,2947,2948],{},[1981,2949],{"alt":2032,"src":2037},[1974,2951,2041],{"id":2040},[11,2953,2954],{},[1981,2955],{"alt":2041,"src":2046},[1974,2957,2050],{"id":2049},[11,2959,2960],{},[1981,2961],{"alt":2050,"src":2055},[1974,2963,2059],{"id":2058},[11,2965,2966],{},[1981,2967],{"alt":2059,"src":2064},[1974,2969,2068],{"id":2067},[11,2971,2972],{},[1981,2973],{"alt":2068,"src":2073},[1974,2975,2077],{"id":2076},[11,2977,2978],{},[1981,2979],{"alt":2077,"src":2082},[1974,2981,2086],{"id":2085},[11,2983,2984],{},[1981,2985],{"alt":2086,"src":2091},[1974,2987,2095],{"id":2094},[11,2989,2990],{},[1981,2991],{"alt":2095,"src":2100},[1974,2993,2104],{"id":2103},[11,2995,2996],{},[1981,2997],{"alt":2104,"src":2109},[1974,2999,1996],{"id":2112},[11,3001,3002],{},[1981,3003],{"alt":1996,"src":2001},[1974,3005,2005],{"id":2119},[11,3007,3008],{},[1981,3009],{"alt":2005,"src":2010},[1974,3011,2014],{"id":2126},[11,3013,3014],{},[1981,3015],{"alt":2014,"src":2019},[1974,3017,2023],{"id":2133},[11,3019,3020],{},[1981,3021],{"alt":2023,"src":2028},[1974,3023,2141],{"id":2140},[11,3025,3026],{},[1981,3027],{"alt":2141,"src":2146},[1974,3029,2150],{"id":2149},[11,3031,3032],{},[1981,3033],{"alt":2150,"src":2155},[1974,3035,2159],{"id":2158},[11,3037,3038],{},[1981,3039],{"alt":2159,"src":2164},{"title":190,"searchDepth":191,"depth":191,"links":3041},[3042,3043],{"id":2875,"depth":191,"text":2876},{"id":2901,"depth":191,"text":2902},"Impartición de 80 horas lectivas de la Asignatura UF2406 Ciclo de vida del Desarrollo de Software en Foment de Terrassa",{"slug":3046,"achievements":3047,"metrics":3051,"liveUrl":2189,"githubUrl":190},"docencia-clases-fp-dual-ciclo-de-vida-desarrollo-del-software",[3048,3049,3050,2898],"Creación del material docente para la clase, más de 400 diapositivas con Google Slides","Impartición de 80 horas lectivas de la Asignatura UF2406 Ciclo de vida del Desarrollo de Software en el Centre Formació Adults Salvador Espriu (Foment de Terrassa)","Gestión de Clases y prácticas con el Moodle del Campus Virtual de Foment Terrassa",[3052,3054,3056],{"label":3053,"value":2182},"Horas lectivas",{"label":3055,"value":2185},"Diapositivas creadas",{"label":3057,"value":2188},"Valoración de los alumnos","\u002Fes\u002Fprojects\u002Fdocencia-clases-fp-dual-ciclo-de-vida-desarrollo-del-software",{"title":2866,"description":3044},"es\u002Fprojects\u002Fdocencia-clases-fp-dual-ciclo-de-vida-desarrollo-del-software",[2194,2195,2196,2197,2198,2199],"CNTNo0zSFfGBMy9GVGN9vTOqdEu9o1Tp7986gwxNQVQ",{"id":3064,"title":2203,"body":3065,"client":2249,"client_url":2250,"date":211,"description":3105,"extension":210,"featured":1902,"image":2252,"locale":1323,"meta":3106,"navigation":216,"order":327,"path":3111,"repo":211,"seo":3112,"status":330,"stem":3113,"technologies":3114,"url":211,"__hash__":3115},"projects\u002Fes\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital.md",{"type":8,"value":3066,"toc":3101},[3067,3069,3072,3074,3096,3098],[229,3068,2209],{"id":2208},[11,3070,3071],{},"Generación de ficheros Distribution Data Exchange (DDEX v3.8.2)",[15,3073,2734],{"id":2733},[42,3075,3076,3081,3086,3091],{},[45,3077,3078,2222],{},[161,3079,3080],{},"Generación de ficheros XML en formato DDEX versión 3.8.2",[45,3082,3083,2222],{},[161,3084,3085],{},"Mecanismo de plantillas XML para customizar diferentes estándares y destinatarios",[45,3087,3088,3090],{},[161,3089,2232],{},": cobertura de tests media del 85%",[45,3092,3093,2239],{},[161,3094,3095],{},"Integración con las herramientas de gestión del cliente",[15,3097,2828],{"id":2827},[11,3099,3100],{},"La posibilidad de poder publicar Releases de assets digitales mediante el estándar DDEX en plataformas de distribución digital.",{"title":190,"searchDepth":191,"depth":191,"links":3102},[3103,3104],{"id":2733,"depth":191,"text":2734},{"id":2827,"depth":191,"text":2828},"Desarrollar exportador de Distribution Data Exchange (DDEX) para SaaS de empresa discográfica",{"slug":2254,"achievements":3107,"metrics":211,"liveUrl":190,"githubUrl":190},[3071,3108,3109,3110],"Mecanismo de plantillas para diferentes estándares","Arquitectura de clases permite especificar para diferentes clientes","Cobertura de tests media del 85%","\u002Fes\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital",{"title":2203,"description":3105},"es\u002Fprojects\u002Fexportador-ddex-sistema-de-discografia-digital",[2263,1933,2264,2265,2266],"B-vT9S4jyTuYg3Q8Aw0O4pUyFfyGLLYafDyrjgMEbAs",[3117,3920,4676,5422,5628,5816,6004,6041,6073,6105,6294,6328,6362,6402,6438,6473,6692,6724,6755,7031,7071,7110,7437,7466,7494,7883,7920],{"id":3118,"title":3119,"body":3120,"date":3889,"description":3890,"extension":210,"featured":1902,"image":3891,"locale":212,"meta":3892,"navigation":216,"order":191,"path":3910,"repo":211,"seo":3911,"status":330,"stem":3912,"technologies":3913,"url":211,"__hash__":3919},"sideprojects\u002Fca\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars.md","menuescolar.es - Gestor de Menús Escolars (2025)",{"type":8,"value":3121,"toc":3851},[3122,3125,3128,3132,3143,3150,3157,3161,3165,3208,3212,3238,3242,3246,3249,3263,3267,3272,3286,3291,3305,3310,3324,3328,3331,3348,3352,3356,3359,3363,3366,3377,3381,3384,3395,3399,3402,3413,3417,3420,3440,3443,3447,3451,3471,3475,3498,3502,3516,3520,3524,3550,3554,3577,3581,3610,3614,3618,3669,3673,3711,3715,3718,3756,3760,3769,3773,3805,3809,3820,3822,3833,3839,3841,3846],[229,3123,3119],{"id":3124},"menuescolares-gestor-de-menús-escolars-2025",[11,3126,3127],{},"Una plataforma SaaS per transformar PDFs de menús escolars en calendaris digitals accessibles",[15,3129,3131],{"id":3130},"el-projecte","El Projecte",[11,3133,3134,3137,3138,3141],{},[161,3135,3136],{},"menuescolar.es"," és una aplicació web que resol un problema real: moltes escoles publiquen els menús mensuals en format PDF, cosa que dificulta la consulta ràpida per part de les famílies.",[3139,3140],"br",{},[3139,3142],{},[11,3144,3145,3146,3148],{},"La solució: una plataforma on cada escola pot tenir la seva pròpia pàgina pública amb el menú del dia sempre visible i actualitzat.",[3139,3147],{},[3139,3149],{},[11,3151,3152,3153,3155],{},"El procés és senzill: l'escola puja un PDF del menú mensual, la Intel·ligència Artificial (Google Gemini) extreu automàticament els àpats de cada dia, i en segons queda publicat en format web accessible des de qualsevol dispositiu.",[3139,3154],{},[3139,3156],{},[15,3158,3160],{"id":3159},"com-funciona","Com Funciona",[20,3162,3164],{"id":3163},"per-a-les-escoles-gestors","Per a les Escoles (Gestors)",[156,3166,3167,3178,3184,3190,3196,3202],{},[45,3168,3169,3172,3173,3177],{},[161,3170,3171],{},"Registre"," → Creació de compte i organització amb URL única (exemple: ",[3174,3175,3176],"code",{},"menuescolar.es\u002Fescola-abellerol",")",[45,3179,3180,3183],{},[161,3181,3182],{},"Configuració"," → Personalització amb logo, descripció i preferències d'idioma",[45,3185,3186,3189],{},[161,3187,3188],{},"Pujada de PDF"," → Upload del calendari mensual en format PDF",[45,3191,3192,3195],{},[161,3193,3194],{},"Processament IA"," → Google Gemini analitza el document i extreu els àpats estructurats",[45,3197,3198,3201],{},[161,3199,3200],{},"Publicació"," → Els menús queden disponibles automàticament a la URL pública",[45,3203,3204,3207],{},[161,3205,3206],{},"Compartir"," → Enviament de l'enllaç a famílies i personal del centre",[20,3209,3211],{"id":3210},"per-a-les-famílies-visitants","Per a les Famílies (Visitants)",[156,3213,3214,3220,3226,3232],{},[45,3215,3216,3219],{},[161,3217,3218],{},"Accés directe"," → Visita la URL de l'escola (sense necessitat de registre)",[45,3221,3222,3225],{},[161,3223,3224],{},"Visualització"," → Consulta el menú d'avui o navega pel calendari mensual",[45,3227,3228,3231],{},[161,3229,3230],{},"Multi-dispositiu"," → Funciona perfectament en mòbil, tablet i ordinador",[45,3233,3234,3237],{},[161,3235,3236],{},"Multi-idioma"," → Disponible en català, castellà, anglès, basc i gallec",[15,3239,3241],{"id":3240},"arquitectura-tècnica","Arquitectura Tècnica",[20,3243,3245],{"id":3244},"sistema-multi-tenant","Sistema Multi-Tenant",[11,3247,3248],{},"Cada escola té les seves dades completament aïllades:",[42,3250,3251,3254,3257,3260],{},[45,3252,3253],{},"Una base de dades amb relacions estrictes organització → àpats",[45,3255,3256],{},"Un sol usuari-propietari per organització (model 1:1)",[45,3258,3259],{},"URLs úniques generades automàticament (slugs)",[45,3261,3262],{},"Logos i configuracions personalitzades per cada centre",[20,3264,3266],{"id":3265},"seguretat-i-rendiment","Seguretat i Rendiment",[11,3268,3269],{},[161,3270,3271],{},"Autenticació i Autorització:",[42,3273,3274,3277,3280,3283],{},[45,3275,3276],{},"JWT tokens gestionats per PocketBase",[45,3278,3279],{},"Validació de propietat en cada operació de modificació",[45,3281,3282],{},"API keys d'IA mantingudes en servidor (mai exposades al client)",[45,3284,3285],{},"Headers de seguretat amb Helmet (CSP, X-Frame-Options, etc.)",[11,3287,3288],{},[161,3289,3290],{},"Protecció d'Abús:",[42,3292,3293,3296,3299,3302],{},[45,3294,3295],{},"Rate limiting: 10 peticions generals cada 15 minuts",[45,3297,3298],{},"Rate limiting PDFs: màxim 5 pujades per hora",[45,3300,3301],{},"CORS configurat amb origins permesos",[45,3303,3304],{},"Validació de formats i tamany de fitxers",[11,3306,3307],{},[161,3308,3309],{},"Optimitzacions:",[42,3311,3312,3315,3318,3321],{},[45,3313,3314],{},"Build multi-stage amb Docker (imatge lleugera)",[45,3316,3317],{},"Cache d'estàtics amb hash de Vite (1 any)",[45,3319,3320],{},"Compilació TypeScript per detecció d'errors en temps de desenvolupament",[45,3322,3323],{},"Lazy loading de components React",[20,3325,3327],{"id":3326},"processament-dia","Processament d'IA",[11,3329,3330],{},"El cervell del sistema és Google Gemini:",[156,3332,3333,3336,3339,3342,3345],{},[45,3334,3335],{},"El PDF es converteix a Base64 per transport segur",[45,3337,3338],{},"S'envia a Gemini amb un prompt específic per extreure menús",[45,3340,3341],{},"La IA retorna dades estructurades (data + àpat)",[45,3343,3344],{},"Es validen i guarden a la base de dades",[45,3346,3347],{},"Queden disponibles immediatament a la web pública",[15,3349,3351],{"id":3350},"reptes-superats","Reptes Superats",[20,3353,3355],{"id":3354},"precisió-de-lextracció","🤖 Precisió de l'Extracció",[11,3357,3358],{},"Els PDFs de menús escolars venen en formats molt variats (taules, text lliure, imatges). Gemini ha demostrat ser prou flexible per adaptar-se a diferents layouts i extreure correctament les dades.",[20,3360,3362],{"id":3361},"aïllament-multi-tenant","🏢 Aïllament Multi-Tenant",[11,3364,3365],{},"Assegurar que cada escola només vegi i modifiqui les seves pròpies dades va requerir:",[42,3367,3368,3371,3374],{},[45,3369,3370],{},"Relacions foranes estrictes a PocketBase",[45,3372,3373],{},"Middleware de validació de propietat en cada endpoint",[45,3375,3376],{},"Tests exhaustius d'accés no autoritzat",[20,3378,3380],{"id":3379},"sistema-de-correus","📧 Sistema de Correus",[11,3382,3383],{},"Integració amb Resend per enviar:",[42,3385,3386,3389,3392],{},[45,3387,3388],{},"Emails de benvinguda",[45,3390,3391],{},"Verificació de comptes",[45,3393,3394],{},"Notificacions de nous menús (futur)",[20,3396,3398],{"id":3397},"internacionalització","🌍 Internacionalització",[11,3400,3401],{},"Suport per 5 idiomes amb fitxer de traduccions de 94KB que cobreix:",[42,3403,3404,3407,3410],{},[45,3405,3406],{},"Interfície completa (botons, missatges, errors)",[45,3408,3409],{},"Formats de data adaptats a cada llengua",[45,3411,3412],{},"Configuració per usuari i per organització",[20,3414,3416],{"id":3415},"desplegament-docker","🐳 Desplegament Docker",[11,3418,3419],{},"Dockerfile multi-stage que:",[156,3421,3422,3428,3434],{},[45,3423,3424,3427],{},[161,3425,3426],{},"Stage 1",": Compila el frontend React amb Vite",[45,3429,3430,3433],{},[161,3431,3432],{},"Stage 2",": Copia el build i prepara el backend Node.js",[45,3435,3436,3439],{},[161,3437,3438],{},"Resultat",": Una sola imatge que serveix frontend estàtic + API",[11,3441,3442],{},"Compatible amb Dokploy per desplegaments automàtics des de GitHub.",[15,3444,3446],{"id":3445},"stack-tecnològic","Stack Tecnològic",[20,3448,3450],{"id":3449},"frontend","Frontend",[42,3452,3453,3456,3459,3462,3465,3468],{},[45,3454,3455],{},"React 18 amb TypeScript",[45,3457,3458],{},"Vite (build tool ultraràpid)",[45,3460,3461],{},"React Router 7 (enrutament client-side)",[45,3463,3464],{},"Tailwind CSS (styling utility-first)",[45,3466,3467],{},"PocketBase SDK (client d'autenticació)",[45,3469,3470],{},"pdfjs-dist (previsualització de PDFs)",[20,3472,3474],{"id":3473},"backend","Backend",[42,3476,3477,3480,3483,3486,3489,3492,3495],{},[45,3478,3479],{},"Node.js 22 & Express",[45,3481,3482],{},"PocketBase (base de dades SQLite + auth)",[45,3484,3485],{},"Google Gemini API (extracció IA)",[45,3487,3488],{},"Resend (servei d'emails transaccionals)",[45,3490,3491],{},"Multer (gestió de pujades de fitxers)",[45,3493,3494],{},"Helmet (capçaleres de seguretat)",[45,3496,3497],{},"Rate Limit (protecció anti-abús)",[20,3499,3501],{"id":3500},"infraestructura","Infraestructura",[42,3503,3504,3507,3510,3513],{},[45,3505,3506],{},"Docker (contenidorització)",[45,3508,3509],{},"Dokploy (desplegament automàtic)",[45,3511,3512],{},"GitHub (control de versions)",[45,3514,3515],{},"PocketBase (hosting separat per a auth i dades)",[15,3517,3519],{"id":3518},"característiques-principals","Característiques Principals",[20,3521,3523],{"id":3522},"per-a-gestors-descola","Per a Gestors d'Escola",[42,3525,3526,3529,3532,3535,3538,3541,3544,3547],{},[45,3527,3528],{},"✅ Registre i creació d'organització amb URL única",[45,3530,3531],{},"✅ Pujada de PDFs de menús mensuals",[45,3533,3534],{},"✅ Extracció automàtica de menús amb IA",[45,3536,3537],{},"✅ Personalització amb logo i descripció",[45,3539,3540],{},"✅ Configuració d'idioma per defecte",[45,3542,3543],{},"✅ Validació d'email obligatòria",[45,3545,3546],{},"✅ Gestió completa de menús (edició, eliminació)",[45,3548,3549],{},"✅ Dashboard privat amb estadístiques",[20,3551,3553],{"id":3552},"per-a-famílies","Per a Famílies",[42,3555,3556,3559,3562,3565,3568,3571,3574],{},[45,3557,3558],{},"✅ Accés públic sense registre",[45,3560,3561],{},"✅ Vista del menú d'avui destacat",[45,3563,3564],{},"✅ Calendari mensual navegable",[45,3566,3567],{},"✅ Disseny responsive (mòbil, tablet, desktop)",[45,3569,3570],{},"✅ Canvi d'idioma (5 llengües disponibles)",[45,3572,3573],{},"✅ Càrrega ràpida i optimitzada",[45,3575,3576],{},"✅ URLs amigables per compartir",[20,3578,3580],{"id":3579},"funcionalitats-del-sistema","Funcionalitats del Sistema",[42,3582,3583,3586,3589,3592,3595,3598,3601,3604,3607],{},[45,3584,3585],{},"✅ Multi-tenant amb aïllament de dades",[45,3587,3588],{},"✅ Una organització per usuari",[45,3590,3591],{},"✅ Slugs únics autogenerats",[45,3593,3594],{},"✅ Sistema de templates (modern\u002Fclassic\u002Fcolorful)",[45,3596,3597],{},"✅ Detecció de menús duplicats (data + organització)",[45,3599,3600],{},"✅ Validació de formats PDF",[45,3602,3603],{},"✅ Gestió d'errors amb missatges clars",[45,3605,3606],{},"✅ Logs de servidor per debugging",[45,3608,3609],{},"✅ Health check endpoint per monitoring",[15,3611,3613],{"id":3612},"roadmap-i-millores-futures","Roadmap i Millores Futures",[20,3615,3617],{"id":3616},"funcionalitats-planificades","Funcionalitats Planificades",[42,3619,3620,3627,3633,3639,3645,3651,3657,3663],{},[45,3621,3622,3623,3626],{},"🔄 ",[161,3624,3625],{},"Múltiples menús per organització",": Menú basal, celíac, vegetarià, etc.",[45,3628,3622,3629,3632],{},[161,3630,3631],{},"Col·laboradors",": Permetre múltiples usuaris per escola",[45,3634,3622,3635,3638],{},[161,3636,3637],{},"Notificacions email",": Alertes automàtiques de nous menús",[45,3640,3622,3641,3644],{},[161,3642,3643],{},"Dominis personalitzats",": menudescola.escolapius.cat",[45,3646,3622,3647,3650],{},[161,3648,3649],{},"API pública",": Integració amb altres sistemes escolars",[45,3652,3622,3653,3656],{},[161,3654,3655],{},"App mòbil",": Versions natives per iOS i Android",[45,3658,3622,3659,3662],{},[161,3660,3661],{},"Exportació",": Descarregar menús en diferents formats",[45,3664,3622,3665,3668],{},[161,3666,3667],{},"Analytics",": Estadístiques d'ús i visualitzacions",[20,3670,3672],{"id":3671},"millores-tècniques","Millores Tècniques",[42,3674,3675,3681,3687,3693,3699,3705],{},[45,3676,3622,3677,3680],{},[161,3678,3679],{},"Tests automatitzats",": Cobertura amb Jest i React Testing Library",[45,3682,3622,3683,3686],{},[161,3684,3685],{},"CI\u002FCD pipeline",": GitHub Actions per tests i desplegament",[45,3688,3622,3689,3692],{},[161,3690,3691],{},"Monitoring",": Integració amb Sentry per tracking d'errors",[45,3694,3622,3695,3698],{},[161,3696,3697],{},"Performance",": Lighthouse score 90+ en totes les categories",[45,3700,3622,3701,3704],{},[161,3702,3703],{},"SEO",": Meta tags dinàmics per cada organització",[45,3706,3622,3707,3710],{},[161,3708,3709],{},"PWA",": Capacitats offline amb Service Workers",[15,3712,3714],{"id":3713},"documentació-tècnica","Documentació Tècnica",[11,3716,3717],{},"El projecte inclou documentació exhaustiva:",[42,3719,3720,3726,3732,3738,3744,3750],{},[45,3721,3722,3725],{},[161,3723,3724],{},"README.md"," - Guia d'inici ràpid i configuració local",[45,3727,3728,3731],{},[161,3729,3730],{},"DEPLOYMENT.md"," - Desplegament a producció amb Dokploy",[45,3733,3734,3737],{},[161,3735,3736],{},"MULTI_TENANT_SETUP.md"," - Configuració de l'esquema multi-tenant",[45,3739,3740,3743],{},[161,3741,3742],{},"POCKETBASE_SETUP.md"," - Instal·lació i inicialització de PocketBase",[45,3745,3746,3749],{},[161,3747,3748],{},"PDF_UPLOAD_IMPLEMENTATION.md"," - Detalls del processament de PDFs",[45,3751,3752,3755],{},[161,3753,3754],{},"TESTING_CHECKLIST.md"," - Escenaris de testing i casos límit",[15,3757,3759],{"id":3758},"estat-del-projecte","Estat del Projecte",[11,3761,3762,3765,3766],{},[161,3763,3764],{},"Estat actual",": ✅ ",[161,3767,3768],{},"95% complet i llest per testing",[20,3770,3772],{"id":3771},"implementat","Implementat",[42,3774,3775,3778,3781,3784,3787,3790,3793,3796,3799,3802],{},[45,3776,3777],{},"✅ Arquitectura multi-tenant funcional",[45,3779,3780],{},"✅ Sistema d'autenticació i autorització",[45,3782,3783],{},"✅ CRUD complet d'organitzacions",[45,3785,3786],{},"✅ Pujada i processament de PDFs amb IA",[45,3788,3789],{},"✅ Interfície pública per organitzacions",[45,3791,3792],{},"✅ Internacionalització 5 idiomes",[45,3794,3795],{},"✅ Desplegament Docker automatitzat",[45,3797,3798],{},"✅ Sistema d'emails transaccionals",[45,3800,3801],{},"✅ Rate limiting i seguretat",[45,3803,3804],{},"✅ Documentació completa",[20,3806,3808],{"id":3807},"en-poliment","En Poliment",[42,3810,3811,3814,3817],{},[45,3812,3813],{},"🔧 Branding de capçaleres",[45,3815,3816],{},"🔧 Refinament de rutes entre components",[45,3818,3819],{},"🔧 Optimització de rendiment",[303,3821],{},[11,3823,3824,3827,3828],{},[161,3825,3826],{},"Prova la plataforma",": ",[298,3829,3830],{"href":3830,"rel":3831},"https:\u002F\u002Fmenuescolar.es",[3832],"nofollow",[11,3834,3835,3838],{},[161,3836,3837],{},"GitHub",": Codi privat (disponible sota petició)",[303,3840],{},[11,3842,3843],{},[308,3844,3845],{},"Data de llançament: Novembre 2025",[11,3847,3848],{},[308,3849,3850],{},"Desenvolupat per Albert Sarlé",{"title":190,"searchDepth":191,"depth":191,"links":3852},[3853,3854,3858,3863,3870,3875,3880,3884,3885],{"id":3130,"depth":191,"text":3131},{"id":3159,"depth":191,"text":3160,"children":3855},[3856,3857],{"id":3163,"depth":196,"text":3164},{"id":3210,"depth":196,"text":3211},{"id":3240,"depth":191,"text":3241,"children":3859},[3860,3861,3862],{"id":3244,"depth":196,"text":3245},{"id":3265,"depth":196,"text":3266},{"id":3326,"depth":196,"text":3327},{"id":3350,"depth":191,"text":3351,"children":3864},[3865,3866,3867,3868,3869],{"id":3354,"depth":196,"text":3355},{"id":3361,"depth":196,"text":3362},{"id":3379,"depth":196,"text":3380},{"id":3397,"depth":196,"text":3398},{"id":3415,"depth":196,"text":3416},{"id":3445,"depth":191,"text":3446,"children":3871},[3872,3873,3874],{"id":3449,"depth":196,"text":3450},{"id":3473,"depth":196,"text":3474},{"id":3500,"depth":196,"text":3501},{"id":3518,"depth":191,"text":3519,"children":3876},[3877,3878,3879],{"id":3522,"depth":196,"text":3523},{"id":3552,"depth":196,"text":3553},{"id":3579,"depth":196,"text":3580},{"id":3612,"depth":191,"text":3613,"children":3881},[3882,3883],{"id":3616,"depth":196,"text":3617},{"id":3671,"depth":196,"text":3672},{"id":3713,"depth":191,"text":3714},{"id":3758,"depth":191,"text":3759,"children":3886},[3887,3888],{"id":3771,"depth":196,"text":3772},{"id":3807,"depth":196,"text":3808},"2025-11-20T12:00:00Z","Plataforma SaaS multi-tenant per gestionar calendaris de menús escolars amb IA i mostrar-los en una webapp personalitzada per cada escola.","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,f_auto,q_auto,w_900\u002Fv1763640341\u002Fmenus_escolars_fearrf.png",{"slug":3893,"type":3894,"categories":3895,"tags":3896,"achievements":3904,"liveUrl":3830},"menuescolar-gestor-menus-escolars","sideproject",[3894],[3897,3898,3899,3900,3901,3902,1869,3903],"React & TypeScript","Node.js & Express","PocketBase","Google Gemini AI","Multi-tenant SaaS","Docker","Vite",[3905,3906,3907,3908,3909],"Extracció de menús amb IA des de PDFs","Arquitectura multi-tenant amb aïllament de dades","Suport 5 idiomes (CA, ES, EN, EU, GL)","Sistema d'autenticació JWT segur","Desplegament automatitzat amb Docker","\u002Fca\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars",{"title":3119,"description":3890},"ca\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars",[3914,3898,3915,3900,1869,3903,3902,3916,3917,3918],"React 18 & TypeScript","PocketBase (Auth & Database)","Resend (Email)","Multi-tenant Architecture","Internationalization (i18n)","SoSCCGpDO1Olr6MaOiRqaybfvczKqHMTS6xLbAJq_fQ",{"id":3921,"title":3922,"body":3923,"date":3889,"description":4661,"extension":210,"featured":1902,"image":3891,"locale":861,"meta":4662,"navigation":216,"order":191,"path":4671,"repo":211,"seo":4672,"status":330,"stem":4673,"technologies":4674,"url":211,"__hash__":4675},"sideprojects\u002Fen\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars.md","menuescolar.es - School Menus Manager (2025)",{"type":8,"value":3924,"toc":4623},[3925,3928,3931,3935,3944,3951,3958,3962,3966,4006,4010,4036,4040,4044,4047,4061,4065,4070,4084,4089,4103,4108,4122,4125,4128,4145,4149,4153,4156,4160,4163,4174,4178,4181,4192,4196,4199,4210,4214,4217,4235,4238,4242,4244,4264,4266,4288,4292,4306,4310,4314,4340,4344,4367,4371,4400,4404,4408,4457,4461,4494,4498,4501,4533,4537,4545,4549,4581,4585,4596,4598,4606,4611,4613,4618],[229,3926,3922],{"id":3927},"menuescolares-school-menus-manager-2025",[11,3929,3930],{},"A SaaS platform to transform school menu PDFs into accessible digital calendars",[15,3932,3934],{"id":3933},"the-project","The Project",[11,3936,3937,3939,3940,3942],{},[161,3938,3136],{}," is a web application that solves a real problem: many schools publish monthly menus in PDF format, which makes quick consultation difficult for families.",[3139,3941],{},[3139,3943],{},[11,3945,3946,3947,3949],{},"The solution: a platform where each school can have its own public page with today's menu always visible and updated.",[3139,3948],{},[3139,3950],{},[11,3952,3953,3954,3956],{},"The process is simple: the school uploads a PDF of the monthly menu, Artificial Intelligence (Google Gemini) automatically extracts the meals for each day, and in seconds it's published in web format accessible from any device.",[3139,3955],{},[3139,3957],{},[15,3959,3961],{"id":3960},"how-it-works","How It Works",[20,3963,3965],{"id":3964},"for-schools-managers","For Schools (Managers)",[156,3967,3968,3976,3982,3988,3994,4000],{},[45,3969,3970,3973,3974,3177],{},[161,3971,3972],{},"Registration"," → Account and organization creation with unique URL (example: ",[3174,3975,3176],{},[45,3977,3978,3981],{},[161,3979,3980],{},"Configuration"," → Customization with logo, description, and language preferences",[45,3983,3984,3987],{},[161,3985,3986],{},"PDF Upload"," → Upload monthly calendar in PDF format",[45,3989,3990,3993],{},[161,3991,3992],{},"AI Processing"," → Google Gemini analyzes the document and extracts structured meals",[45,3995,3996,3999],{},[161,3997,3998],{},"Publication"," → Menus become automatically available at the public URL",[45,4001,4002,4005],{},[161,4003,4004],{},"Share"," → Send the link to families and school staff",[20,4007,4009],{"id":4008},"for-families-visitors","For Families (Visitors)",[156,4011,4012,4018,4024,4030],{},[45,4013,4014,4017],{},[161,4015,4016],{},"Direct access"," → Visit the school's URL (no registration needed)",[45,4019,4020,4023],{},[161,4021,4022],{},"Visualization"," → Check today's menu or browse the monthly calendar",[45,4025,4026,4029],{},[161,4027,4028],{},"Multi-device"," → Works perfectly on mobile, tablet, and desktop",[45,4031,4032,4035],{},[161,4033,4034],{},"Multi-language"," → Available in Catalan, Spanish, English, Basque, and Galician",[15,4037,4039],{"id":4038},"technical-architecture","Technical Architecture",[20,4041,4043],{"id":4042},"multi-tenant-system","Multi-Tenant System",[11,4045,4046],{},"Each school has its data completely isolated:",[42,4048,4049,4052,4055,4058],{},[45,4050,4051],{},"A database with strict organization → meals relationships",[45,4053,4054],{},"A single owner-user per organization (1:1 model)",[45,4056,4057],{},"Automatically generated unique URLs (slugs)",[45,4059,4060],{},"Logos and customized settings for each center",[20,4062,4064],{"id":4063},"security-and-performance","Security and Performance",[11,4066,4067],{},[161,4068,4069],{},"Authentication and Authorization:",[42,4071,4072,4075,4078,4081],{},[45,4073,4074],{},"JWT tokens managed by PocketBase",[45,4076,4077],{},"Ownership validation in every modification operation",[45,4079,4080],{},"AI API keys kept on server (never exposed to client)",[45,4082,4083],{},"Security headers with Helmet (CSP, X-Frame-Options, etc.)",[11,4085,4086],{},[161,4087,4088],{},"Abuse Protection:",[42,4090,4091,4094,4097,4100],{},[45,4092,4093],{},"Rate limiting: 10 general requests every 15 minutes",[45,4095,4096],{},"PDF rate limiting: maximum 5 uploads per hour",[45,4098,4099],{},"CORS configured with allowed origins",[45,4101,4102],{},"Format and file size validation",[11,4104,4105],{},[161,4106,4107],{},"Optimizations:",[42,4109,4110,4113,4116,4119],{},[45,4111,4112],{},"Multi-stage build with Docker (lightweight image)",[45,4114,4115],{},"Static cache with Vite hash (1 year)",[45,4117,4118],{},"TypeScript compilation for error detection at development time",[45,4120,4121],{},"Lazy loading of React components",[20,4123,3992],{"id":4124},"ai-processing",[11,4126,4127],{},"The brain of the system is Google Gemini:",[156,4129,4130,4133,4136,4139,4142],{},[45,4131,4132],{},"The PDF is converted to Base64 for secure transport",[45,4134,4135],{},"It's sent to Gemini with a specific prompt to extract menus",[45,4137,4138],{},"The AI returns structured data (date + meal)",[45,4140,4141],{},"Data is validated and saved to the database",[45,4143,4144],{},"Immediately available on the public web",[15,4146,4148],{"id":4147},"challenges-overcome","Challenges Overcome",[20,4150,4152],{"id":4151},"extraction-accuracy","🤖 Extraction Accuracy",[11,4154,4155],{},"School menu PDFs come in very varied formats (tables, free text, images). Gemini has proven flexible enough to adapt to different layouts and correctly extract the data.",[20,4157,4159],{"id":4158},"multi-tenant-isolation","🏢 Multi-Tenant Isolation",[11,4161,4162],{},"Ensuring that each school only sees and modifies its own data required:",[42,4164,4165,4168,4171],{},[45,4166,4167],{},"Strict foreign key relations in PocketBase",[45,4169,4170],{},"Ownership validation middleware in each endpoint",[45,4172,4173],{},"Exhaustive unauthorized access tests",[20,4175,4177],{"id":4176},"email-system","📧 Email System",[11,4179,4180],{},"Integration with Resend to send:",[42,4182,4183,4186,4189],{},[45,4184,4185],{},"Welcome emails",[45,4187,4188],{},"Account verification",[45,4190,4191],{},"New menu notifications (future)",[20,4193,4195],{"id":4194},"internationalization","🌍 Internationalization",[11,4197,4198],{},"Support for 5 languages with a 94KB translation file covering:",[42,4200,4201,4204,4207],{},[45,4202,4203],{},"Complete interface (buttons, messages, errors)",[45,4205,4206],{},"Date formats adapted to each language",[45,4208,4209],{},"Configuration per user and per organization",[20,4211,4213],{"id":4212},"docker-deployment","🐳 Docker Deployment",[11,4215,4216],{},"Multi-stage Dockerfile that:",[156,4218,4219,4224,4229],{},[45,4220,4221,4223],{},[161,4222,3426],{},": Compiles React frontend with Vite",[45,4225,4226,4228],{},[161,4227,3432],{},": Copies build and prepares Node.js backend",[45,4230,4231,4234],{},[161,4232,4233],{},"Result",": A single image serving static frontend + API",[11,4236,4237],{},"Compatible with Dokploy for automated deployments from GitHub.",[15,4239,4241],{"id":4240},"tech-stack","Tech Stack",[20,4243,3450],{"id":3449},[42,4245,4246,4249,4252,4255,4258,4261],{},[45,4247,4248],{},"React 18 with TypeScript",[45,4250,4251],{},"Vite (ultra-fast build tool)",[45,4253,4254],{},"React Router 7 (client-side routing)",[45,4256,4257],{},"Tailwind CSS (utility-first styling)",[45,4259,4260],{},"PocketBase SDK (authentication client)",[45,4262,4263],{},"pdfjs-dist (PDF preview)",[20,4265,3474],{"id":3473},[42,4267,4268,4270,4273,4276,4279,4282,4285],{},[45,4269,3479],{},[45,4271,4272],{},"PocketBase (SQLite database + auth)",[45,4274,4275],{},"Google Gemini API (AI extraction)",[45,4277,4278],{},"Resend (transactional email service)",[45,4280,4281],{},"Multer (file upload management)",[45,4283,4284],{},"Helmet (security headers)",[45,4286,4287],{},"Rate Limit (anti-abuse protection)",[20,4289,4291],{"id":4290},"infrastructure","Infrastructure",[42,4293,4294,4297,4300,4303],{},[45,4295,4296],{},"Docker (containerization)",[45,4298,4299],{},"Dokploy (automated deployment)",[45,4301,4302],{},"GitHub (version control)",[45,4304,4305],{},"PocketBase (separate hosting for auth and data)",[15,4307,4309],{"id":4308},"main-features","Main Features",[20,4311,4313],{"id":4312},"for-school-managers","For School Managers",[42,4315,4316,4319,4322,4325,4328,4331,4334,4337],{},[45,4317,4318],{},"✅ Registration and organization creation with unique URL",[45,4320,4321],{},"✅ Upload monthly menu PDFs",[45,4323,4324],{},"✅ Automatic menu extraction with AI",[45,4326,4327],{},"✅ Customization with logo and description",[45,4329,4330],{},"✅ Default language configuration",[45,4332,4333],{},"✅ Mandatory email validation",[45,4335,4336],{},"✅ Complete menu management (editing, deletion)",[45,4338,4339],{},"✅ Private dashboard with statistics",[20,4341,4343],{"id":4342},"for-families","For Families",[42,4345,4346,4349,4352,4355,4358,4361,4364],{},[45,4347,4348],{},"✅ Public access without registration",[45,4350,4351],{},"✅ Today's menu highlighted view",[45,4353,4354],{},"✅ Browseable monthly calendar",[45,4356,4357],{},"✅ Responsive design (mobile, tablet, desktop)",[45,4359,4360],{},"✅ Language switch (5 languages available)",[45,4362,4363],{},"✅ Fast and optimized loading",[45,4365,4366],{},"✅ Shareable friendly URLs",[20,4368,4370],{"id":4369},"system-features","System Features",[42,4372,4373,4376,4379,4382,4385,4388,4391,4394,4397],{},[45,4374,4375],{},"✅ Multi-tenant with data isolation",[45,4377,4378],{},"✅ One organization per user",[45,4380,4381],{},"✅ Auto-generated unique slugs",[45,4383,4384],{},"✅ Template system (modern\u002Fclassic\u002Fcolorful)",[45,4386,4387],{},"✅ Duplicate menu detection (date + organization)",[45,4389,4390],{},"✅ PDF format validation",[45,4392,4393],{},"✅ Error handling with clear messages",[45,4395,4396],{},"✅ Server logs for debugging",[45,4398,4399],{},"✅ Health check endpoint for monitoring",[15,4401,4403],{"id":4402},"roadmap-and-future-improvements","Roadmap and Future Improvements",[20,4405,4407],{"id":4406},"planned-features","Planned Features",[42,4409,4410,4416,4422,4428,4434,4440,4446,4452],{},[45,4411,3622,4412,4415],{},[161,4413,4414],{},"Multiple menus per organization",": Standard menu, celiac, vegetarian, etc.",[45,4417,3622,4418,4421],{},[161,4419,4420],{},"Collaborators",": Allow multiple users per school",[45,4423,3622,4424,4427],{},[161,4425,4426],{},"Email notifications",": Automatic alerts for new menus",[45,4429,3622,4430,4433],{},[161,4431,4432],{},"Custom domains",": schoolmenu.escolapios.cat",[45,4435,3622,4436,4439],{},[161,4437,4438],{},"Public API",": Integration with other school systems",[45,4441,3622,4442,4445],{},[161,4443,4444],{},"Mobile app",": Native versions for iOS and Android",[45,4447,3622,4448,4451],{},[161,4449,4450],{},"Export",": Download menus in different formats",[45,4453,3622,4454,4456],{},[161,4455,3667],{},": Usage statistics and views",[20,4458,4460],{"id":4459},"technical-improvements","Technical Improvements",[42,4462,4463,4469,4474,4479,4484,4489],{},[45,4464,3622,4465,4468],{},[161,4466,4467],{},"Automated tests",": Coverage with Jest and React Testing Library",[45,4470,3622,4471,4473],{},[161,4472,3685],{},": GitHub Actions for tests and deployment",[45,4475,3622,4476,4478],{},[161,4477,3691],{},": Integration with Sentry for error tracking",[45,4480,3622,4481,4483],{},[161,4482,3697],{},": Lighthouse score 90+ in all categories",[45,4485,3622,4486,4488],{},[161,4487,3703],{},": Dynamic meta tags for each organization",[45,4490,3622,4491,4493],{},[161,4492,3709],{},": Offline capabilities with Service Workers",[15,4495,4497],{"id":4496},"technical-documentation","Technical Documentation",[11,4499,4500],{},"The project includes comprehensive documentation:",[42,4502,4503,4508,4513,4518,4523,4528],{},[45,4504,4505,4507],{},[161,4506,3724],{}," - Quick start guide and local setup",[45,4509,4510,4512],{},[161,4511,3730],{}," - Production deployment with Dokploy",[45,4514,4515,4517],{},[161,4516,3736],{}," - Multi-tenant schema configuration",[45,4519,4520,4522],{},[161,4521,3742],{}," - PocketBase installation and initialization",[45,4524,4525,4527],{},[161,4526,3748],{}," - PDF processing details",[45,4529,4530,4532],{},[161,4531,3754],{}," - Testing scenarios and edge cases",[15,4534,4536],{"id":4535},"project-status","Project Status",[11,4538,4539,3765,4542],{},[161,4540,4541],{},"Current status",[161,4543,4544],{},"95% complete and ready for testing",[20,4546,4548],{"id":4547},"implemented","Implemented",[42,4550,4551,4554,4557,4560,4563,4566,4569,4572,4575,4578],{},[45,4552,4553],{},"✅ Functional multi-tenant architecture",[45,4555,4556],{},"✅ Authentication and authorization system",[45,4558,4559],{},"✅ Complete organization CRUD",[45,4561,4562],{},"✅ PDF upload and AI processing",[45,4564,4565],{},"✅ Public interface for organizations",[45,4567,4568],{},"✅ 5-language internationalization",[45,4570,4571],{},"✅ Automated Docker deployment",[45,4573,4574],{},"✅ Transactional email system",[45,4576,4577],{},"✅ Rate limiting and security",[45,4579,4580],{},"✅ Complete documentation",[20,4582,4584],{"id":4583},"in-polish","In Polish",[42,4586,4587,4590,4593],{},[45,4588,4589],{},"🔧 Header branding",[45,4591,4592],{},"🔧 Component route refinement",[45,4594,4595],{},"🔧 Performance optimization",[303,4597],{},[11,4599,4600,3827,4603],{},[161,4601,4602],{},"Try the platform",[298,4604,3830],{"href":3830,"rel":4605},[3832],[11,4607,4608,4610],{},[161,4609,3837],{},": Private code (available upon request)",[303,4612],{},[11,4614,4615],{},[308,4616,4617],{},"Launch date: November 2025",[11,4619,4620],{},[308,4621,4622],{},"Developed by Albert Sarlé",{"title":190,"searchDepth":191,"depth":191,"links":4624},[4625,4626,4630,4635,4642,4647,4652,4656,4657],{"id":3933,"depth":191,"text":3934},{"id":3960,"depth":191,"text":3961,"children":4627},[4628,4629],{"id":3964,"depth":196,"text":3965},{"id":4008,"depth":196,"text":4009},{"id":4038,"depth":191,"text":4039,"children":4631},[4632,4633,4634],{"id":4042,"depth":196,"text":4043},{"id":4063,"depth":196,"text":4064},{"id":4124,"depth":196,"text":3992},{"id":4147,"depth":191,"text":4148,"children":4636},[4637,4638,4639,4640,4641],{"id":4151,"depth":196,"text":4152},{"id":4158,"depth":196,"text":4159},{"id":4176,"depth":196,"text":4177},{"id":4194,"depth":196,"text":4195},{"id":4212,"depth":196,"text":4213},{"id":4240,"depth":191,"text":4241,"children":4643},[4644,4645,4646],{"id":3449,"depth":196,"text":3450},{"id":3473,"depth":196,"text":3474},{"id":4290,"depth":196,"text":4291},{"id":4308,"depth":191,"text":4309,"children":4648},[4649,4650,4651],{"id":4312,"depth":196,"text":4313},{"id":4342,"depth":196,"text":4343},{"id":4369,"depth":196,"text":4370},{"id":4402,"depth":191,"text":4403,"children":4653},[4654,4655],{"id":4406,"depth":196,"text":4407},{"id":4459,"depth":196,"text":4460},{"id":4496,"depth":191,"text":4497},{"id":4535,"depth":191,"text":4536,"children":4658},[4659,4660],{"id":4547,"depth":196,"text":4548},{"id":4583,"depth":196,"text":4584},"Multi-tenant SaaS platform to manage school meal calendars with AI and display them on a personalized webapp for each school.",{"slug":3893,"type":3894,"categories":4663,"tags":4664,"achievements":4665,"liveUrl":3830},[3894],[3897,3898,3899,3900,3901,3902,1869,3903],[4666,4667,4668,4669,4670],"AI-powered menu extraction from PDFs","Multi-tenant architecture with data isolation","5 languages support (CA, ES, EN, EU, GL)","Secure JWT authentication system","Automated deployment with Docker","\u002Fen\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars",{"title":3922,"description":4661},"en\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars",[3914,3898,3915,3900,1869,3903,3902,3916,3917,3918],"RFgd47kDWBjXBpfiovvUfP2Z6UVUtYfhPyd8twQx3y4",{"id":4677,"title":4678,"body":4679,"date":3889,"description":5407,"extension":210,"featured":1902,"image":3891,"locale":1323,"meta":5408,"navigation":216,"order":191,"path":5417,"repo":211,"seo":5418,"status":330,"stem":5419,"technologies":5420,"url":211,"__hash__":5421},"sideprojects\u002Fes\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars.md","menuescolar.es - Gestor de Menús Escolares (2025)",{"type":8,"value":4680,"toc":5369},[4681,4684,4687,4691,4700,4707,4714,4718,4722,4761,4765,4790,4794,4796,4799,4813,4817,4822,4836,4841,4855,4860,4874,4878,4881,4898,4902,4906,4909,4913,4916,4927,4931,4934,4945,4949,4952,4963,4967,4969,4987,4990,4994,4996,5015,5017,5039,5041,5055,5059,5063,5089,5093,5116,5120,5148,5152,5156,5204,5208,5241,5245,5248,5280,5284,5292,5296,5327,5331,5342,5344,5352,5357,5359,5364],[229,4682,4678],{"id":4683},"menuescolares-gestor-de-menús-escolares-2025",[11,4685,4686],{},"Una plataforma SaaS para transformar PDFs de menús escolares en calendarios digitales accesibles",[15,4688,4690],{"id":4689},"el-proyecto","El Proyecto",[11,4692,4693,4695,4696,4698],{},[161,4694,3136],{}," es una aplicación web que resuelve un problema real: muchas escuelas publican los menús mensuales en formato PDF, lo que dificulta la consulta rápida por parte de las familias.",[3139,4697],{},[3139,4699],{},[11,4701,4702,4703,4705],{},"La solución: una plataforma donde cada escuela puede tener su propia página pública con el menú del día siempre visible y actualizado.",[3139,4704],{},[3139,4706],{},[11,4708,4709,4710,4712],{},"El proceso es sencillo: la escuela sube un PDF del menú mensual, la Inteligencia Artificial (Google Gemini) extrae automáticamente las comidas de cada día, y en segundos queda publicado en formato web accesible desde cualquier dispositivo.",[3139,4711],{},[3139,4713],{},[15,4715,4717],{"id":4716},"cómo-funciona","Cómo Funciona",[20,4719,4721],{"id":4720},"para-las-escuelas-gestores","Para las Escuelas (Gestores)",[156,4723,4724,4732,4738,4744,4750,4756],{},[45,4725,4726,4729,4730,3177],{},[161,4727,4728],{},"Registro"," → Creación de cuenta y organización con URL única (ejemplo: ",[3174,4731,3176],{},[45,4733,4734,4737],{},[161,4735,4736],{},"Configuración"," → Personalización con logo, descripción y preferencias de idioma",[45,4739,4740,4743],{},[161,4741,4742],{},"Subida de PDF"," → Upload del calendario mensual en formato PDF",[45,4745,4746,4749],{},[161,4747,4748],{},"Procesamiento IA"," → Google Gemini analiza el documento y extrae las comidas estructuradas",[45,4751,4752,4755],{},[161,4753,4754],{},"Publicación"," → Los menús quedan disponibles automáticamente en la URL pública",[45,4757,4758,4760],{},[161,4759,3206],{}," → Envío del enlace a familias y personal del centro",[20,4762,4764],{"id":4763},"para-las-familias-visitantes","Para las Familias (Visitantes)",[156,4766,4767,4773,4779,4785],{},[45,4768,4769,4772],{},[161,4770,4771],{},"Acceso directo"," → Visita la URL de la escuela (sin necesidad de registro)",[45,4774,4775,4778],{},[161,4776,4777],{},"Visualización"," → Consulta el menú de hoy o navega por el calendario mensual",[45,4780,4781,4784],{},[161,4782,4783],{},"Multi-dispositivo"," → Funciona perfectamente en móvil, tablet y ordenador",[45,4786,4787,4789],{},[161,4788,3236],{}," → Disponible en catalán, castellano, inglés, vasco y gallego",[15,4791,4793],{"id":4792},"arquitectura-técnica","Arquitectura Técnica",[20,4795,3245],{"id":3244},[11,4797,4798],{},"Cada escuela tiene sus datos completamente aislados:",[42,4800,4801,4804,4807,4810],{},[45,4802,4803],{},"Una base de datos con relaciones estrictas organización → comidas",[45,4805,4806],{},"Un solo usuario-propietario por organización (modelo 1:1)",[45,4808,4809],{},"URLs únicas generadas automáticamente (slugs)",[45,4811,4812],{},"Logos y configuraciones personalizadas para cada centro",[20,4814,4816],{"id":4815},"seguridad-y-rendimiento","Seguridad y Rendimiento",[11,4818,4819],{},[161,4820,4821],{},"Autenticación y Autorización:",[42,4823,4824,4827,4830,4833],{},[45,4825,4826],{},"JWT tokens gestionados por PocketBase",[45,4828,4829],{},"Validación de propiedad en cada operación de modificación",[45,4831,4832],{},"API keys de IA mantenidas en servidor (nunca expuestas al cliente)",[45,4834,4835],{},"Headers de seguridad con Helmet (CSP, X-Frame-Options, etc.)",[11,4837,4838],{},[161,4839,4840],{},"Protección de Abuso:",[42,4842,4843,4846,4849,4852],{},[45,4844,4845],{},"Rate limiting: 10 peticiones generales cada 15 minutos",[45,4847,4848],{},"Rate limiting PDFs: máximo 5 subidas por hora",[45,4850,4851],{},"CORS configurado con origins permitidos",[45,4853,4854],{},"Validación de formatos y tamaño de ficheros",[11,4856,4857],{},[161,4858,4859],{},"Optimizaciones:",[42,4861,4862,4865,4868,4871],{},[45,4863,4864],{},"Build multi-stage con Docker (imagen ligera)",[45,4866,4867],{},"Cache de estáticos con hash de Vite (1 año)",[45,4869,4870],{},"Compilación TypeScript para detección de errores en tiempo de desarrollo",[45,4872,4873],{},"Lazy loading de componentes React",[20,4875,4877],{"id":4876},"procesamiento-de-ia","Procesamiento de IA",[11,4879,4880],{},"El cerebro del sistema es Google Gemini:",[156,4882,4883,4886,4889,4892,4895],{},[45,4884,4885],{},"El PDF se convierte a Base64 para transporte seguro",[45,4887,4888],{},"Se envía a Gemini con un prompt específico para extraer menús",[45,4890,4891],{},"La IA retorna datos estructurados (fecha + comida)",[45,4893,4894],{},"Se validan y guardan en la base de datos",[45,4896,4897],{},"Quedan disponibles inmediatamente en la web pública",[15,4899,4901],{"id":4900},"retos-superados","Retos Superados",[20,4903,4905],{"id":4904},"precisión-de-la-extracción","🤖 Precisión de la Extracción",[11,4907,4908],{},"Los PDFs de menús escolares vienen en formatos muy variados (tablas, texto libre, imágenes). Gemini ha demostrado ser lo suficientemente flexible para adaptarse a diferentes layouts y extraer correctamente los datos.",[20,4910,4912],{"id":4911},"aislamiento-multi-tenant","🏢 Aislamiento Multi-Tenant",[11,4914,4915],{},"Asegurar que cada escuela solo vea y modifique sus propios datos requirió:",[42,4917,4918,4921,4924],{},[45,4919,4920],{},"Relaciones foráneas estrictas en PocketBase",[45,4922,4923],{},"Middleware de validación de propiedad en cada endpoint",[45,4925,4926],{},"Tests exhaustivos de acceso no autorizado",[20,4928,4930],{"id":4929},"sistema-de-correos","📧 Sistema de Correos",[11,4932,4933],{},"Integración con Resend para enviar:",[42,4935,4936,4939,4942],{},[45,4937,4938],{},"Emails de bienvenida",[45,4940,4941],{},"Verificación de cuentas",[45,4943,4944],{},"Notificaciones de nuevos menús (futuro)",[20,4946,4948],{"id":4947},"internacionalización","🌍 Internacionalización",[11,4950,4951],{},"Soporte para 5 idiomas con archivo de traducciones de 94KB que cubre:",[42,4953,4954,4957,4960],{},[45,4955,4956],{},"Interfaz completa (botones, mensajes, errores)",[45,4958,4959],{},"Formatos de fecha adaptados a cada lengua",[45,4961,4962],{},"Configuración por usuario y por organización",[20,4964,4966],{"id":4965},"despliegue-docker","🐳 Despliegue Docker",[11,4968,3419],{},[156,4970,4971,4976,4981],{},[45,4972,4973,4975],{},[161,4974,3426],{},": Compila el frontend React con Vite",[45,4977,4978,4980],{},[161,4979,3432],{},": Copia el build y prepara el backend Node.js",[45,4982,4983,4986],{},[161,4984,4985],{},"Resultado",": Una sola imagen que sirve frontend estático + API",[11,4988,4989],{},"Compatible con Dokploy para despliegues automáticos desde GitHub.",[15,4991,4993],{"id":4992},"stack-tecnológico","Stack Tecnológico",[20,4995,3450],{"id":3449},[42,4997,4998,5001,5004,5007,5009,5012],{},[45,4999,5000],{},"React 18 con TypeScript",[45,5002,5003],{},"Vite (build tool ultrarrápido)",[45,5005,5006],{},"React Router 7 (enrutamiento client-side)",[45,5008,3464],{},[45,5010,5011],{},"PocketBase SDK (cliente de autenticación)",[45,5013,5014],{},"pdfjs-dist (previsualización de PDFs)",[20,5016,3474],{"id":3473},[42,5018,5019,5021,5024,5027,5030,5033,5036],{},[45,5020,3479],{},[45,5022,5023],{},"PocketBase (base de datos SQLite + auth)",[45,5025,5026],{},"Google Gemini API (extracción IA)",[45,5028,5029],{},"Resend (servicio de emails transaccionales)",[45,5031,5032],{},"Multer (gestión de subidas de ficheros)",[45,5034,5035],{},"Helmet (cabeceras de seguridad)",[45,5037,5038],{},"Rate Limit (protección anti-abuso)",[20,5040,3501],{"id":3500},[42,5042,5043,5046,5049,5052],{},[45,5044,5045],{},"Docker (contenedorización)",[45,5047,5048],{},"Dokploy (despliegue automático)",[45,5050,5051],{},"GitHub (control de versiones)",[45,5053,5054],{},"PocketBase (hosting separado para auth y datos)",[15,5056,5058],{"id":5057},"características-principales","Características Principales",[20,5060,5062],{"id":5061},"para-gestores-de-escuela","Para Gestores de Escuela",[42,5064,5065,5068,5071,5074,5077,5080,5083,5086],{},[45,5066,5067],{},"✅ Registro y creación de organización con URL única",[45,5069,5070],{},"✅ Subida de PDFs de menús mensuales",[45,5072,5073],{},"✅ Extracción automática de menús con IA",[45,5075,5076],{},"✅ Personalización con logo y descripción",[45,5078,5079],{},"✅ Configuración de idioma por defecto",[45,5081,5082],{},"✅ Validación de email obligatoria",[45,5084,5085],{},"✅ Gestión completa de menús (edición, eliminación)",[45,5087,5088],{},"✅ Dashboard privado con estadísticas",[20,5090,5092],{"id":5091},"para-familias","Para Familias",[42,5094,5095,5098,5101,5104,5107,5110,5113],{},[45,5096,5097],{},"✅ Acceso público sin registro",[45,5099,5100],{},"✅ Vista del menú de hoy destacado",[45,5102,5103],{},"✅ Calendario mensual navegable",[45,5105,5106],{},"✅ Diseño responsive (móvil, tablet, desktop)",[45,5108,5109],{},"✅ Cambio de idioma (5 lenguas disponibles)",[45,5111,5112],{},"✅ Carga rápida y optimizada",[45,5114,5115],{},"✅ URLs amigables para compartir",[20,5117,5119],{"id":5118},"funcionalidades-del-sistema","Funcionalidades del Sistema",[42,5121,5122,5125,5128,5131,5133,5136,5139,5142,5145],{},[45,5123,5124],{},"✅ Multi-tenant con aislamiento de datos",[45,5126,5127],{},"✅ Una organización por usuario",[45,5129,5130],{},"✅ Slugs únicos autogenerados",[45,5132,3594],{},[45,5134,5135],{},"✅ Detección de menús duplicados (fecha + organización)",[45,5137,5138],{},"✅ Validación de formatos PDF",[45,5140,5141],{},"✅ Gestión de errores con mensajes claros",[45,5143,5144],{},"✅ Logs de servidor para debugging",[45,5146,5147],{},"✅ Health check endpoint para monitoring",[15,5149,5151],{"id":5150},"roadmap-y-mejoras-futuras","Roadmap y Mejoras Futuras",[20,5153,5155],{"id":5154},"funcionalidades-planificadas","Funcionalidades Planificadas",[42,5157,5158,5164,5170,5176,5182,5187,5193,5199],{},[45,5159,3622,5160,5163],{},[161,5161,5162],{},"Múltiples menús por organización",": Menú basal, celíaco, vegetariano, etc.",[45,5165,3622,5166,5169],{},[161,5167,5168],{},"Colaboradores",": Permitir múltiples usuarios por escuela",[45,5171,3622,5172,5175],{},[161,5173,5174],{},"Notificaciones email",": Alertas automáticas de nuevos menús",[45,5177,3622,5178,5181],{},[161,5179,5180],{},"Dominios personalizados",": menudescuela.escolapios.cat",[45,5183,3622,5184,5186],{},[161,5185,3649],{},": Integración con otros sistemas escolares",[45,5188,3622,5189,5192],{},[161,5190,5191],{},"App móvil",": Versiones nativas para iOS y Android",[45,5194,3622,5195,5198],{},[161,5196,5197],{},"Exportación",": Descargar menús en diferentes formatos",[45,5200,3622,5201,5203],{},[161,5202,3667],{},": Estadísticas de uso y visualizaciones",[20,5205,5207],{"id":5206},"mejoras-técnicas","Mejoras Técnicas",[42,5209,5210,5216,5221,5226,5231,5236],{},[45,5211,3622,5212,5215],{},[161,5213,5214],{},"Tests automatizados",": Cobertura con Jest y React Testing Library",[45,5217,3622,5218,5220],{},[161,5219,3685],{},": GitHub Actions para tests y despliegue",[45,5222,3622,5223,5225],{},[161,5224,3691],{},": Integración con Sentry para tracking de errores",[45,5227,3622,5228,5230],{},[161,5229,3697],{},": Lighthouse score 90+ en todas las categorías",[45,5232,3622,5233,5235],{},[161,5234,3703],{},": Meta tags dinámicos para cada organización",[45,5237,3622,5238,5240],{},[161,5239,3709],{},": Capacidades offline con Service Workers",[15,5242,5244],{"id":5243},"documentación-técnica","Documentación Técnica",[11,5246,5247],{},"El proyecto incluye documentación exhaustiva:",[42,5249,5250,5255,5260,5265,5270,5275],{},[45,5251,5252,5254],{},[161,5253,3724],{}," - Guía de inicio rápido y configuración local",[45,5256,5257,5259],{},[161,5258,3730],{}," - Despliegue a producción con Dokploy",[45,5261,5262,5264],{},[161,5263,3736],{}," - Configuración del esquema multi-tenant",[45,5266,5267,5269],{},[161,5268,3742],{}," - Instalación e inicialización de PocketBase",[45,5271,5272,5274],{},[161,5273,3748],{}," - Detalles del procesamiento de PDFs",[45,5276,5277,5279],{},[161,5278,3754],{}," - Escenarios de testing y casos límite",[15,5281,5283],{"id":5282},"estado-del-proyecto","Estado del Proyecto",[11,5285,5286,3765,5289],{},[161,5287,5288],{},"Estado actual",[161,5290,5291],{},"95% completo y listo para testing",[20,5293,5295],{"id":5294},"implementado","Implementado",[42,5297,5298,5300,5303,5306,5309,5312,5315,5318,5321,5324],{},[45,5299,3777],{},[45,5301,5302],{},"✅ Sistema de autenticación y autorización",[45,5304,5305],{},"✅ CRUD completo de organizaciones",[45,5307,5308],{},"✅ Subida y procesamiento de PDFs con IA",[45,5310,5311],{},"✅ Interfaz pública para organizaciones",[45,5313,5314],{},"✅ Internacionalización 5 idiomas",[45,5316,5317],{},"✅ Despliegue Docker automatizado",[45,5319,5320],{},"✅ Sistema de emails transaccionales",[45,5322,5323],{},"✅ Rate limiting y seguridad",[45,5325,5326],{},"✅ Documentación completa",[20,5328,5330],{"id":5329},"en-pulido","En Pulido",[42,5332,5333,5336,5339],{},[45,5334,5335],{},"🔧 Branding de cabeceras",[45,5337,5338],{},"🔧 Refinamiento de rutas entre componentes",[45,5340,5341],{},"🔧 Optimización de rendimiento",[303,5343],{},[11,5345,5346,3827,5349],{},[161,5347,5348],{},"Prueba la plataforma",[298,5350,3830],{"href":3830,"rel":5351},[3832],[11,5353,5354,5356],{},[161,5355,3837],{},": Código privado (disponible bajo petición)",[303,5358],{},[11,5360,5361],{},[308,5362,5363],{},"Fecha de lanzamiento: Noviembre 2025",[11,5365,5366],{},[308,5367,5368],{},"Desarrollado por Albert Sarlé",{"title":190,"searchDepth":191,"depth":191,"links":5370},[5371,5372,5376,5381,5388,5393,5398,5402,5403],{"id":4689,"depth":191,"text":4690},{"id":4716,"depth":191,"text":4717,"children":5373},[5374,5375],{"id":4720,"depth":196,"text":4721},{"id":4763,"depth":196,"text":4764},{"id":4792,"depth":191,"text":4793,"children":5377},[5378,5379,5380],{"id":3244,"depth":196,"text":3245},{"id":4815,"depth":196,"text":4816},{"id":4876,"depth":196,"text":4877},{"id":4900,"depth":191,"text":4901,"children":5382},[5383,5384,5385,5386,5387],{"id":4904,"depth":196,"text":4905},{"id":4911,"depth":196,"text":4912},{"id":4929,"depth":196,"text":4930},{"id":4947,"depth":196,"text":4948},{"id":4965,"depth":196,"text":4966},{"id":4992,"depth":191,"text":4993,"children":5389},[5390,5391,5392],{"id":3449,"depth":196,"text":3450},{"id":3473,"depth":196,"text":3474},{"id":3500,"depth":196,"text":3501},{"id":5057,"depth":191,"text":5058,"children":5394},[5395,5396,5397],{"id":5061,"depth":196,"text":5062},{"id":5091,"depth":196,"text":5092},{"id":5118,"depth":196,"text":5119},{"id":5150,"depth":191,"text":5151,"children":5399},[5400,5401],{"id":5154,"depth":196,"text":5155},{"id":5206,"depth":196,"text":5207},{"id":5243,"depth":191,"text":5244},{"id":5282,"depth":191,"text":5283,"children":5404},[5405,5406],{"id":5294,"depth":196,"text":5295},{"id":5329,"depth":196,"text":5330},"Plataforma SaaS multi-tenant para gestionar calendarios de menús escolares con IA y mostrarlos en una webapp personalizada para cada escuela.",{"slug":3893,"type":3894,"categories":5409,"tags":5410,"achievements":5411,"liveUrl":3830},[3894],[3897,3898,3899,3900,3901,3902,1869,3903],[5412,5413,5414,5415,5416],"Extracción de menús con IA desde PDFs","Arquitectura multi-tenant con aislamiento de datos","Soporte 5 idiomas (CA, ES, EN, EU, GL)","Sistema de autenticación JWT seguro","Despliegue automatizado con Docker","\u002Fes\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars",{"title":4678,"description":5407},"es\u002Fsideprojects\u002Fmenuescolar-gestor-menus-escolars",[3914,3898,3915,3900,1869,3903,3902,3916,3917,3918],"wZRZo6xo_6CbdzGxUpiiw2Hz_F9BjbEjDx0w-3yPkJI",{"id":5423,"title":5424,"body":5425,"date":5608,"description":5609,"extension":210,"featured":1902,"image":5610,"locale":212,"meta":5611,"navigation":216,"order":327,"path":5621,"repo":211,"seo":5622,"status":330,"stem":5623,"technologies":5624,"url":211,"__hash__":5627},"sideprojects\u002Fca\u002Fsideprojects\u002Fjoc-cartes-trentau.md","Joc de cartes del trentau (2025)",{"type":8,"value":5426,"toc":5593},[5427,5430,5433,5448,5452,5456,5459,5463,5466,5470,5473,5477,5480,5484,5487,5491,5494,5498,5501,5505,5508,5512,5515,5519,5522,5526,5529,5539,5541,5553,5555,5571,5575],[229,5428,5424],{"id":5429},"joc-de-cartes-del-trentau-2025",[11,5431,5432],{},"He creat un joc de cartes multijugador sense escriure ni una línia de codi",[11,5434,5435,5436,5438,5439,5441,5443,5444,5446],{},"En 10 dies he fet un experiment: desenvolupar una aplicació completa utilitzant només IA (Claude Code, Gemini i ChatGPT), seguint el que s'anomena \"vibe coding\".",[3139,5437],{},"\nEl repte: programar zero línies jo mateix.",[3139,5440],{},[3139,5442],{},"\nEl resultat? Una versió online funcional del Trenta-ú, un joc de cartes que jugava a la universitat.",[3139,5445],{},[3139,5447],{},[15,5449,5451],{"id":5450},"el-que-he-après","El que he après",[20,5453,5455],{"id":5454},"és-possible-programar-sense-saber-ne","✅ És possible programar sense saber-ne",[11,5457,5458],{},"La barrera d'entrada s'ha reduït dramàticament. Encara que conèixer programació i tenir un entorn preparat ajuda molt.",[20,5460,5462],{"id":5461},"️-les-allucinacions-són-reals","⚠️ Les al·lucinacions són reals",[11,5464,5465],{},"Si no especifiques molt concretament què vols, la IA s'inventa coses. En el meu cas: mecàniques de poker que no existien al joc, sistemes de plantilles visuals que no havia demanat...",[20,5467,5469],{"id":5468},"els-canvis-petits-funcionen-millor","🎯 Els canvis petits funcionen millor",[11,5471,5472],{},"Iteracions petites = menys errors.",[20,5474,5476],{"id":5475},"els-tokens-sesgoten-ràpid","💰 Els tokens s'esgoten ràpid",[11,5478,5479],{},"He hagut d'alternar entre Claude Code, Gemini-cli i ChatGPT. Si saps programar i ajustes petites coses, estalvies molts tokens.",[20,5481,5483],{"id":5482},"git-és-imprescindible","🔄 Git és imprescindible",[11,5485,5486],{},"Quan la IA fa coses estranyes, pots tornar enrere. Amics que han provat el joc m'han enviat captures de pantalla força curioses.",[20,5488,5490],{"id":5489},"tests-automàtics-són-clau","🧪 Tests automàtics són clau",[11,5492,5493],{},"Demanar a la IA que generi tests i els passi a cada canvi evita molts problemes (encara que cal revisar que els tests siguin correctes).",[20,5495,5497],{"id":5496},"el-responsive-és-complicat","📱 El responsive és complicat",[11,5499,5500],{},"Fer que funcionés bé tant en mòbil com en ordinador va consumir molts tokens. Les animacions de cartes, en canvi, van sortir perfectes a la primera.",[20,5502,5504],{"id":5503},"errors-en-producció","🐛 Errors en producció",[11,5506,5507],{},"Vaig integrar Sentry.io per capturar errors que apareixien en dispositius d'usuaris reals i que jo no veia al meu ordinador.",[20,5509,5511],{"id":5510},"deployment-automàtic-ajuda","🚀 Deployment automàtic ajuda",[11,5513,5514],{},"Tinc un servidor amb Dokploy enllaçat a GitHub que desplega automàticament, a l'estil Vercel\u002FNetlify.",[15,5516,5518],{"id":5517},"la-conclusió-més-important","La conclusió més important",[11,5520,5521],{},"Ara que el joc és públic i funcional, trobo arriscat seguir desenvolupant només amb IA. Quan puges canvis, al cap de poc algú t'envia una captura de pantalla amb algo estrany i no saps com ha passat. Per afegir noves funcionalitats, crec que ja ho hauria de fer jo per mantenir el control.",[15,5523,5525],{"id":5524},"el-joc","El joc",[11,5527,5528],{},"El Trenta-ú és senzill però addictiu: cada jugador té 3 cartes i suma les del mateix pal per arribar a 31. Pots canviar una carta, totes, o passar. Quan algú creu que té bona puntuació, pot tancar i donar una última ronda als altres.",[11,5530,5531,5534,5535],{},[161,5532,5533],{},"Prova-ho tu mateix:"," ",[298,5536,5537],{"href":5537,"rel":5538},"https:\u002F\u002Ftrentau.albertsarle.com",[3832],[303,5540],{},[11,5542,5543,5546,5547],{},[308,5544,5545],{},"Data de publicació: Setembre 2025","\nMés detalls sobre el procés i els aprentatges a\n",[298,5548,5552],{"href":5549,"rel":5550,"title":5551},"https:\u002F\u002Fwww.linkedin.com\u002Fposts\u002Falbertsarle_trenta-u-joc-de-cartes-tradicional-activity-7378337323106684928-iaK1?utm_source=share&utm_medium=member_desktop&rcm=ACoAAAB9lcYBciVgZN6qZ9kz7lNq8aDDgVsJMEQ",[3832],"Linkedin","LinkedIn",[229,5554,3446],{"id":3445},[42,5556,5557,5560,5563,5566,5569],{},[45,5558,5559],{},"HTML5 & CSS3",[45,5561,5562],{},"Vanilla JavaScript",[45,5564,5565],{},"Responsive Design",[45,5567,5568],{},"Touch Controls",[45,5570,3918],{},[229,5572,5574],{"id":5573},"característiques","Característiques",[42,5576,5577,5580,5583,5586],{},[45,5578,5579],{},"Suport multi-idioma (EN, ES, CA)",[45,5581,5582],{},"Interfície optimitzada per mòbil",[45,5584,5585],{},"Regles tradicionals del Trenta-u",[45,5587,5588,5589],{},"Oponents IA amb jugabilitat intel·ligent\n",[298,5590,5592],{"href":5537,"rel":5591,"title":5592},[3832],"trentau.albertsarle.com",{"title":190,"searchDepth":191,"depth":191,"links":5594},[5595,5606,5607],{"id":5450,"depth":191,"text":5451,"children":5596},[5597,5598,5599,5600,5601,5602,5603,5604,5605],{"id":5454,"depth":196,"text":5455},{"id":5461,"depth":196,"text":5462},{"id":5468,"depth":196,"text":5469},{"id":5475,"depth":196,"text":5476},{"id":5482,"depth":196,"text":5483},{"id":5489,"depth":196,"text":5490},{"id":5496,"depth":196,"text":5497},{"id":5503,"depth":196,"text":5504},{"id":5510,"depth":196,"text":5511},{"id":5517,"depth":191,"text":5518},{"id":5524,"depth":191,"text":5525},"2025-09-28T12:00:00Z","Joc de cartes tradicional català construït NOMÉS amb Vibe Coding","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,f_auto,q_auto,w_900\u002Fv1759147745\u002Ftrentau_mobile_bdpxfp.png",{"slug":5612,"type":3894,"categories":5613,"tags":5614,"achievements":5619,"liveUrl":5537},"joc-cartes-trentau",[3894],[5615,5616,5559,5617,5618,3918],"Vibe Coding","Claude Code","Vanilla Javascript","Responsive design",[5620],"Feta completament amb IA (CLaude Code)","\u002Fca\u002Fsideprojects\u002Fjoc-cartes-trentau",{"title":5424,"description":5609},"ca\u002Fsideprojects\u002Fjoc-cartes-trentau",[5625,5559,5617,5618,3918,5626],"Vibe Coding (Claude Code)","Dokploy","I6YznO65uK65DuiMoFOESwnTlgoEbmQCEmHBjgi3dk0",{"id":5629,"title":5630,"body":5631,"date":5608,"description":5804,"extension":210,"featured":1902,"image":5610,"locale":861,"meta":5805,"navigation":216,"order":327,"path":5811,"repo":211,"seo":5812,"status":330,"stem":5813,"technologies":5814,"url":211,"__hash__":5815},"sideprojects\u002Fen\u002Fsideprojects\u002Fcards-game-thirtyone.md","Thirty-One Card Game (2025)",{"type":8,"value":5632,"toc":5789},[5633,5636,5639,5654,5658,5662,5665,5669,5672,5676,5679,5683,5686,5690,5693,5697,5700,5704,5707,5711,5714,5718,5721,5725,5728,5732,5735,5743,5745,5754,5756,5768,5772],[229,5634,5630],{"id":5635},"thirty-one-card-game-2025",[11,5637,5638],{},"I have created a multiplayer card game without writing a single line of code.",[11,5640,5641,5642,5644,5645,5647,5649,5650,5652],{},"In 10 days I ran an experiment: to develop a complete application using only AI (Claude Code, Gemini, and ChatGPT), following what is called \"vibe coding\".",[3139,5643],{},"\nThe challenge: to program zero lines myself.",[3139,5646],{},[3139,5648],{},"\nThe result? A functional online version of Thirty-One, a card game I used to play in college.",[3139,5651],{},[3139,5653],{},[15,5655,5657],{"id":5656},"what-ive-learned","What I've learned",[20,5659,5661],{"id":5660},"its-possible-to-program-without-knowing-how","✅ It's possible to program without knowing how",[11,5663,5664],{},"The barrier to entry has been dramatically reduced. Although knowing how to program and having a prepared environment helps a lot.",[20,5666,5668],{"id":5667},"️-hallucinations-are-real","⚠️ Hallucinations are real",[11,5670,5671],{},"If you don't specify very clearly what you want, the AI makes things up. In my case: poker mechanics that didn't exist in the game, visual template systems I hadn't asked for...",[20,5673,5675],{"id":5674},"small-changes-work-better","🎯 Small changes work better",[11,5677,5678],{},"Small iterations = fewer errors.",[20,5680,5682],{"id":5681},"tokens-run-out-fast","💰 Tokens run out fast",[11,5684,5685],{},"I had to switch between Claude Code, Gemini-cli, and ChatGPT. If you know how to program and make small adjustments, you save a lot of tokens.",[20,5687,5689],{"id":5688},"git-is-essential","🔄 Git is essential",[11,5691,5692],{},"When the AI does strange things, you can go back. Friends who have tried the game have sent me some pretty curious screenshots.",[20,5694,5696],{"id":5695},"automatic-tests-are-key","🧪 Automatic tests are key",[11,5698,5699],{},"Asking the AI to generate tests and run them with every change avoids many problems (although you have to check that the tests are correct).",[20,5701,5703],{"id":5702},"responsive-is-complicated","📱 Responsive is complicated",[11,5705,5706],{},"Making it work well on both mobile and desktop consumed a lot of tokens. The card animations, on the other hand, came out perfect the first time.",[20,5708,5710],{"id":5709},"errors-in-production","🐛 Errors in production",[11,5712,5713],{},"I integrated Sentry.io to capture errors that appeared on real users' devices and that I didn't see on my computer.",[20,5715,5717],{"id":5716},"automatic-deployment-helps","🚀 Automatic deployment helps",[11,5719,5720],{},"I have a server with Dokploy linked to GitHub that deploys automatically, Vercel\u002FNetlify style.",[15,5722,5724],{"id":5723},"the-most-important-conclusion","The most important conclusion",[11,5726,5727],{},"Now that the game is public and functional, I find it risky to continue developing only with AI. When you upload changes, shortly after someone sends you a screenshot with something strange and you don't know how it happened. To add new features, I think I should do it myself to maintain control.",[15,5729,5731],{"id":5730},"the-game","The game",[11,5733,5734],{},"Thirty-One is simple but addictive: each player has 3 cards and adds up the ones of the same suit to reach 31. You can change one card, all of them, or pass. When someone thinks they have a good score, they can \"close\" and give the others one last round.",[11,5736,5737,5534,5740],{},[161,5738,5739],{},"Try it yourself:",[298,5741,5537],{"href":5537,"rel":5742},[3832],[303,5744],{},[11,5746,5747,5750,5751],{},[308,5748,5749],{},"Publication date: September 2025","\nMore details about the process and learnings at\n",[298,5752,5552],{"href":5549,"rel":5753,"title":5551},[3832],[229,5755,4241],{"id":4240},[42,5757,5758,5760,5762,5764,5766],{},[45,5759,5559],{},[45,5761,5562],{},[45,5763,5565],{},[45,5765,5568],{},[45,5767,3918],{},[229,5769,5771],{"id":5770},"features","Features",[42,5773,5774,5777,5780,5783],{},[45,5775,5776],{},"Multi-language support (EN, ES, CA)",[45,5778,5779],{},"Mobile-optimized interface",[45,5781,5782],{},"Traditional Thirty-One rules",[45,5784,5785,5786],{},"AI opponents with smart gameplay\n",[298,5787,5592],{"href":5537,"rel":5788,"title":5592},[3832],{"title":190,"searchDepth":191,"depth":191,"links":5790},[5791,5802,5803],{"id":5656,"depth":191,"text":5657,"children":5792},[5793,5794,5795,5796,5797,5798,5799,5800,5801],{"id":5660,"depth":196,"text":5661},{"id":5667,"depth":196,"text":5668},{"id":5674,"depth":196,"text":5675},{"id":5681,"depth":196,"text":5682},{"id":5688,"depth":196,"text":5689},{"id":5695,"depth":196,"text":5696},{"id":5702,"depth":196,"text":5703},{"id":5709,"depth":196,"text":5710},{"id":5716,"depth":196,"text":5717},{"id":5723,"depth":191,"text":5724},{"id":5730,"depth":191,"text":5731},"Traditional Catalan card game built ONLY with Vibe Coding",{"slug":5806,"type":3894,"categories":5807,"tags":5808,"achievements":5809,"liveUrl":5537},"cards-game-thirtyone",[3894],[5615,5616,5559,5617,5618,3918],[5810],"Made entirely with AI (Claude Code)","\u002Fen\u002Fsideprojects\u002Fcards-game-thirtyone",{"title":5630,"description":5804},"en\u002Fsideprojects\u002Fcards-game-thirtyone",[5625,5559,5617,5618,3918,5626],"7Cc2M5Kn9r3auYt46Pjki8JTENB6Q91fsqQ4sZ_Evak",{"id":5817,"title":5818,"body":5819,"date":5608,"description":5992,"extension":210,"featured":1902,"image":5610,"locale":1323,"meta":5993,"navigation":216,"order":327,"path":5999,"repo":211,"seo":6000,"status":330,"stem":6001,"technologies":6002,"url":211,"__hash__":6003},"sideprojects\u002Fes\u002Fsideprojects\u002Fjuego-cartas-treintayuno.md","Juego de cartas del treinta y uno (2025)",{"type":8,"value":5820,"toc":5977},[5821,5824,5827,5842,5846,5850,5853,5857,5860,5864,5867,5871,5874,5878,5881,5885,5888,5892,5895,5899,5902,5906,5909,5913,5916,5920,5923,5931,5933,5942,5944,5956,5960],[229,5822,5818],{"id":5823},"juego-de-cartas-del-treinta-y-uno-2025",[11,5825,5826],{},"He creado un juego de cartas multijugador sin escribir ni una línea de código.",[11,5828,5829,5830,5832,5833,5835,5837,5838,5840],{},"En 10 días he realizado un experimento: desarrollar una aplicación completa utilizando solo IA (Claude Code, Gemini y ChatGPT), siguiendo lo que se conoce como \"vibe coding\".",[3139,5831],{},"\nEl reto: programar cero líneas yo mismo.",[3139,5834],{},[3139,5836],{},"\n¿El resultado? Una versión online funcional del Treinta y uno, un juego de cartas que jugaba en la universidad.",[3139,5839],{},[3139,5841],{},[15,5843,5845],{"id":5844},"lo-que-he-aprendido","Lo que he aprendido",[20,5847,5849],{"id":5848},"es-posible-programar-sin-saber","✅ Es posible programar sin saber",[11,5851,5852],{},"La barrera de entrada se ha reducido dramáticamente. Aunque conocer programación y tener un entorno preparado ayuda mucho.",[20,5854,5856],{"id":5855},"️-las-alucinaciones-son-reales","⚠️ Las alucinaciones son reales",[11,5858,5859],{},"Si no especificas muy concretamente qué quieres, la IA se inventa cosas. En mi caso: mecánicas de póker que no existían en el juego, sistemas de plantillas visuales que no había pedido...",[20,5861,5863],{"id":5862},"los-cambios-pequeños-funcionan-mejor","🎯 Los cambios pequeños funcionan mejor",[11,5865,5866],{},"Iteraciones pequeñas = menos errores.",[20,5868,5870],{"id":5869},"los-tokens-se-agotan-rápido","💰 Los tokens se agotan rápido",[11,5872,5873],{},"He tenido que alternar entre Claude Code, Gemini-cli y ChatGPT. Si sabes programar y ajustas pequeñas cosas, ahorras muchos tokens.",[20,5875,5877],{"id":5876},"git-es-imprescindible","🔄 Git es imprescindible",[11,5879,5880],{},"Cuando la IA hace cosas raras, puedes volver atrás. Amigos que han probado el juego me han enviado capturas de pantalla bastante curiosas.",[20,5882,5884],{"id":5883},"los-tests-automáticos-son-clave","🧪 Los tests automáticos son clave",[11,5886,5887],{},"Pedir a la IA que genere tests y los pase en cada cambio evita muchos problemas (aunque hay que revisar que los tests sean correctos).",[20,5889,5891],{"id":5890},"el-responsive-es-complicado","📱 El responsive es complicado",[11,5893,5894],{},"Hacer que funcionara bien tanto en móvil como en ordenador consumió muchos tokens. Las animaciones de las cartas, en cambio, salieron perfectas a la primera.",[20,5896,5898],{"id":5897},"errores-en-producción","🐛 Errores en producción",[11,5900,5901],{},"Integré Sentry.io para capturar errores que aparecían en dispositivos de usuarios reales y que yo no veía en mi ordenador.",[20,5903,5905],{"id":5904},"el-despliegue-automático-ayuda","🚀 El despliegue automático ayuda",[11,5907,5908],{},"Tengo un servidor con Dokploy enlazado a GitHub que despliega automáticamente, al estilo Vercel\u002FNetlify.",[15,5910,5912],{"id":5911},"la-conclusión-más-importante","La conclusión más importante",[11,5914,5915],{},"Ahora que el juego es público y funcional, me parece arriesgado seguir desarrollando solo con IA. Cuando subes cambios, al poco tiempo alguien te envía una captura de pantalla con algo extraño y no sabes cómo ha pasado. Para añadir nuevas funcionalidades, creo que ya debería hacerlo yo para mantener el control.",[15,5917,5919],{"id":5918},"el-juego","El juego",[11,5921,5922],{},"El Treinta y uno es sencillo pero adictivo: cada jugador tiene 3 cartas y suma las del mismo palo para llegar a 31. Puedes cambiar una carta, todas, o pasar. Cuando alguien cree que tiene buena puntuación, puede cerrar y dar una última ronda a los demás.",[11,5924,5925,5534,5928],{},[161,5926,5927],{},"Pruébalo tú mismo:",[298,5929,5537],{"href":5537,"rel":5930},[3832],[303,5932],{},[11,5934,5935,5938,5939],{},[308,5936,5937],{},"Fecha de publicación: Septiembre 2025","\nMás detalles sobre el proceso y los aprendizajes en\n",[298,5940,5552],{"href":5549,"rel":5941,"title":5551},[3832],[229,5943,4993],{"id":4992},[42,5945,5946,5948,5950,5952,5954],{},[45,5947,5559],{},[45,5949,5562],{},[45,5951,5565],{},[45,5953,5568],{},[45,5955,3918],{},[229,5957,5959],{"id":5958},"características","Características",[42,5961,5962,5965,5968,5971],{},[45,5963,5964],{},"Soporte multi-idioma (EN, ES, CA)",[45,5966,5967],{},"Interfaz optimizada para móvil",[45,5969,5970],{},"Reglas tradicionales del Treinta y uno",[45,5972,5973,5974],{},"Oponentes IA con jugabilidad inteligente\n",[298,5975,5592],{"href":5537,"rel":5976,"title":5592},[3832],{"title":190,"searchDepth":191,"depth":191,"links":5978},[5979,5990,5991],{"id":5844,"depth":191,"text":5845,"children":5980},[5981,5982,5983,5984,5985,5986,5987,5988,5989],{"id":5848,"depth":196,"text":5849},{"id":5855,"depth":196,"text":5856},{"id":5862,"depth":196,"text":5863},{"id":5869,"depth":196,"text":5870},{"id":5876,"depth":196,"text":5877},{"id":5883,"depth":196,"text":5884},{"id":5890,"depth":196,"text":5891},{"id":5897,"depth":196,"text":5898},{"id":5904,"depth":196,"text":5905},{"id":5911,"depth":191,"text":5912},{"id":5918,"depth":191,"text":5919},"Juego de cartas tradicional español construido SOLO con Vibe Coding",{"slug":5994,"type":3894,"categories":5995,"tags":5996,"achievements":5997,"liveUrl":5537},"juego-cartas-treintayuno",[3894],[5615,5616,5559,5617,5618,3918],[5998],"Hecho completamente con IA (Claude Code)","\u002Fes\u002Fsideprojects\u002Fjuego-cartas-treintayuno",{"title":5818,"description":5992},"es\u002Fsideprojects\u002Fjuego-cartas-treintayuno",[5625,5559,5617,5618,3918,5626],"muldnb5NT6EQaaauJbaUFgCHklrPJrMVce8NXB4Sqoc",{"id":6005,"title":6006,"body":6007,"date":6032,"description":6033,"extension":210,"featured":1902,"image":6034,"locale":212,"meta":6035,"navigation":216,"order":327,"path":6037,"repo":211,"seo":6038,"status":330,"stem":6039,"technologies":211,"url":211,"__hash__":6040},"sideprojects\u002Fca\u002Fsideprojects\u002Faniversari-50.md","Aniversari 50 (2024)",{"type":8,"value":6008,"toc":6030},[6009,6016,6023],[11,6010,6011,6012,6014],{},"Una celebració conjunta de 5 persones fent 50 anys mereixia poder projectar fotos de tothom, així que vaig fer un petit clon de flickr on tothom pogués crear galeries i pujar les fotografies de diferents èpoques. Durant la festa es van projectar diferents slideshows automàtics que va ser una font inesgotable d'anècdotes.\n",[3139,6013],{},[3139,6015],{},[11,6017,6018,6019,6021],{},"El vaig fer amb Laravel + Inertia JS, Vue 3, Tailwind CSS + Flowbite Caroussel permetent uploads múltiples de fins a 20 imatges.\n",[3139,6020],{},[3139,6022],{},[11,6024,6025],{},[298,6026,6029],{"href":6027,"rel":6028,"title":6029},"https:\u002F\u002Faniversari.albertsarle.com",[3832],"aniversari.albertsarle.com",{"title":190,"searchDepth":191,"depth":191,"links":6031},[],"2024-05-01T12:00:00Z","Petit clon de flickr per recopilar i projectar fotos en una festa d'aniversari. Els convidats podien crear les seves galeries i pujar les imatges.","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,f_auto,q_auto,w_900\u002Fv1743106513\u002Faniversari_50_galeria_necutz.png",{"slug":6036},"aniversari-50","\u002Fca\u002Fsideprojects\u002Faniversari-50",{"title":6006,"description":6033},"ca\u002Fsideprojects\u002Faniversari-50","CxXAGOxPWHaVnSwYiRgcHZoz1QEBVa8y-oI8E9DfctY",{"id":6042,"title":6043,"body":6044,"date":6032,"description":6067,"extension":210,"featured":1902,"image":6034,"locale":861,"meta":6068,"navigation":216,"order":327,"path":6069,"repo":211,"seo":6070,"status":330,"stem":6071,"technologies":211,"url":211,"__hash__":6072},"sideprojects\u002Fen\u002Fsideprojects\u002Faniversari-50.md","50th Anniversary (2024)",{"type":8,"value":6045,"toc":6065},[6046,6053,6060],[11,6047,6048,6049,6051],{},"A joint celebration of 5 people turning 50 deserved to be able to project everyone's photos, so I made a small Flickr clone where everyone could create galleries and upload photographs from different eras. During the party, different automatic slideshows were projected, which became an inexhaustible source of anecdotes.\n",[3139,6050],{},[3139,6052],{},[11,6054,6055,6056,6058],{},"I built it with Laravel + Inertia JS, Vue 3, Tailwind CSS + Flowbite Carousel allowing multiple uploads of up to 20 images.\n",[3139,6057],{},[3139,6059],{},[11,6061,6062],{},[298,6063,6029],{"href":6027,"rel":6064,"title":6029},[3832],{"title":190,"searchDepth":191,"depth":191,"links":6066},[],"Small Flickr clone where everyone could create galleries with their photographs.",{"slug":6036},"\u002Fen\u002Fsideprojects\u002Faniversari-50",{"title":6043,"description":6067},"en\u002Fsideprojects\u002Faniversari-50","YSflpQ3pviVWPFfswS_erJbPu-LsA331MiSuHXFg4fg",{"id":6074,"title":6075,"body":6076,"date":6032,"description":6099,"extension":210,"featured":1902,"image":6034,"locale":1323,"meta":6100,"navigation":216,"order":327,"path":6101,"repo":211,"seo":6102,"status":330,"stem":6103,"technologies":211,"url":211,"__hash__":6104},"sideprojects\u002Fes\u002Fsideprojects\u002Faniversari-50.md","Aniversario 50 (2024)",{"type":8,"value":6077,"toc":6097},[6078,6085,6092],[11,6079,6080,6081,6083],{},"Una celebración conjunta de 5 personas cumpliendo 50 años merecía poder proyectar fotos de todo el mundo, así que hice un pequeño clon de flickr donde todo el mundo pudiera crear galerías y subir las fotografías de diferentes épocas. Durante la fiesta se proyectaron diferentes slideshows automáticos que fue una fuente inagotable de anécdotas.\n",[3139,6082],{},[3139,6084],{},[11,6086,6087,6088,6090],{},"Lo hice con Laravel + Inertia JS, Vue 3, Tailwind CSS + Flowbite Carousel permitiendo uploads múltiples de hasta 20 imágenes.\n",[3139,6089],{},[3139,6091],{},[11,6093,6094],{},[298,6095,6029],{"href":6027,"rel":6096,"title":6029},[3832],{"title":190,"searchDepth":191,"depth":191,"links":6098},[],"Pequeño clon de flickr donde todo el mundo pudiera crear galerías con sus fotografías.",{"slug":6036},"\u002Fes\u002Fsideprojects\u002Faniversari-50",{"title":6075,"description":6099},"es\u002Fsideprojects\u002Faniversari-50","6tO7pbXwRh-Y4pemK8eIFv_X-1047BypLZtzBtuIIls",{"id":6106,"title":6107,"body":6108,"date":6262,"description":6263,"extension":210,"featured":1902,"image":6264,"locale":212,"meta":6265,"navigation":216,"order":191,"path":6286,"repo":211,"seo":6287,"status":330,"stem":6288,"technologies":6289,"url":211,"__hash__":6293},"sideprojects\u002Fca\u002Fsideprojects\u002Fsocis-frampa-2022.md","Socis Frampa (2022) - Gestor de Socis AFA",{"type":8,"value":6109,"toc":6249},[6110,6113,6116,6119,6122,6124,6127,6129,6133,6152,6156,6176,6180,6194,6196,6200,6220,6224,6244,6246],[229,6111,6107],{"id":6112},"socis-frampa-2022-gestor-de-socis-afa",[11,6114,6115],{},"A la nova versió del gestor de socis de l'AFA de l'Escola França, volíem deixar d'utilitzar Google Forms així que vam refer l'alta de socis i d'extraescolars amb VueJs + Vuetify + Vuelidate.",[11,6117,6118],{},"Afegint noves funcionalitats com quotes reduïdes per monoparentals i necessitats especials, pagament fraccionat, validacions pròpies, numero variable d'alumnes o càrregar les dades del curs anterior amb un codi personalitzat.",[11,6120,6121],{},"Es va refer el backend amb Laravel + Filament Admin.",[15,6123,1779],{"id":1778},[11,6125,6126],{},"Aquest projecte va sorgir de la necessitat de modernitzar el sistema de gestió de socis de l'AFA, substituint els formularis de Google per una solució personalitzada que oferís més flexibilitat i funcionalitats específiques per a les necessitats de l'associació.",[15,6128,1786],{"id":1785},[20,6130,6132],{"id":6131},"frontend-modernitzat","Frontend Modernitzat",[42,6134,6135,6141,6147],{},[45,6136,6137,6140],{},[161,6138,6139],{},"Interface d'usuari intuïtiva",": Desenvolupada amb VueJS i Vuetify per una experiència d'usuari moderna",[45,6142,6143,6146],{},[161,6144,6145],{},"Validacions dinàmiques",": Implementació de Vuelidate per validacions en temps real",[45,6148,6149,6151],{},[161,6150,5618],{},": Adaptat per funcionar perfectament en tots els dispositius",[20,6153,6155],{"id":6154},"funcionalitats-socials","Funcionalitats Socials",[42,6157,6158,6164,6170],{},[45,6159,6160,6163],{},[161,6161,6162],{},"Quotes reduïdes",": Sistema automatitzat per aplicar descomptes a famílies monoparentals i necessitats especials",[45,6165,6166,6169],{},[161,6167,6168],{},"Pagament fraccionat",": Opció de dividir el pagament de quotes en terminis",[45,6171,6172,6175],{},[161,6173,6174],{},"Gestió variable d'alumnes",": Capacitat d'afegir un número variable d'alumnes per família",[20,6177,6179],{"id":6178},"sistema-de-migració","Sistema de Migració",[42,6181,6182,6188],{},[45,6183,6184,6187],{},[161,6185,6186],{},"Códigos personalitzats",": Sistema per importar dades del curs anterior mitjançant codis únics",[45,6189,6190,6193],{},[161,6191,6192],{},"Preservació de dades",": Manteniment de l'historial de socis i extraescolars",[15,6195,1822],{"id":1821},[20,6197,6199],{"id":6198},"backend-robust","Backend Robust",[42,6201,6202,6208,6214],{},[45,6203,6204,6207],{},[161,6205,6206],{},"Laravel Framework",": Backend potent amb arquitectura MVC",[45,6209,6210,6213],{},[161,6211,6212],{},"Filament Admin",": Panel d'administració modern per gestionar socis i configuracions",[45,6215,6216,6219],{},[161,6217,6218],{},"Base de dades optimitzada",": Esquema MySQL dissenyat per a màxim rendiment",[20,6221,6223],{"id":6222},"funcionalitats-avançades","Funcionalitats Avançades",[42,6225,6226,6232,6238],{},[45,6227,6228,6231],{},[161,6229,6230],{},"Validacions personalitzades",": Sistema de validació adaptat a les regles específiques de l'AFA",[45,6233,6234,6237],{},[161,6235,6236],{},"Generació de reports",": Eines per extreure informes detallats de socis i pagaments",[45,6239,6240,6243],{},[161,6241,6242],{},"Gestió d'extraescolars",": Sistema complet per administrar activitats i inscripcions",[15,6245,1886],{"id":1885},[11,6247,6248],{},"El nou sistema ha permès a l'AFA reduir significativament el temps dedicat a tasques administratives, automatitzant processos que abans requerien gestió manual. La flexibilitat del sistema permet adaptar-se fàcilment a canvis en les necessitats de l'associació.",{"title":190,"searchDepth":191,"depth":191,"links":6250},[6251,6252,6257,6261],{"id":1778,"depth":191,"text":1779},{"id":1785,"depth":191,"text":1786,"children":6253},[6254,6255,6256],{"id":6131,"depth":196,"text":6132},{"id":6154,"depth":196,"text":6155},{"id":6178,"depth":196,"text":6179},{"id":1821,"depth":191,"text":1822,"children":6258},[6259,6260],{"id":6198,"depth":196,"text":6199},{"id":6222,"depth":196,"text":6223},{"id":1885,"depth":191,"text":1886},"2022-01-01T12:00:00Z","Sistema de gestió de socis complet per a l'AFA de l'Escola França amb funcionalitats avançades","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,f_auto,q_auto,w_1000\u002F\u002Fv1673279868\u002Fframpa_2022_filament_admin_socis_yiownm.webp",{"slug":6266,"achievements":6267,"metrics":6273},"socis-frampa-2022",[6268,6269,6270,6271,6272],"Substitució completa de Google Forms per sistema personalitzat","Sistema de quotes reduïdes per monoparentals implementat","Funcionalitat de pagament fraccionat desenvolupada","Validacions personalitzades i dinàmiques creades","Sistema de migració de dades amb codis personalitzats",[6274,6277,6280,6283],{"label":6275,"value":6276},"Socis Gestionats","300+",{"label":6278,"value":6279},"Extraescolars","15+",{"label":6281,"value":6282},"Reducció Temps Gestió","75%",{"label":6284,"value":6285},"Automatització Processos","90%","\u002Fca\u002Fsideprojects\u002Fsocis-frampa-2022",{"title":6107,"description":6263},"ca\u002Fsideprojects\u002Fsocis-frampa-2022",[1936,6290,6291,1933,6212,1935,6292],"Vuetify","Vuelidate","PHP","AQ_OCZQVRpEGDgznFyL3Vk7noDOEhdlvyJmzu1Lui6k",{"id":6295,"title":6296,"body":6297,"date":6262,"description":6322,"extension":210,"featured":1902,"image":6264,"locale":861,"meta":6323,"navigation":216,"order":196,"path":6324,"repo":211,"seo":6325,"status":330,"stem":6326,"technologies":211,"url":211,"__hash__":6327},"sideprojects\u002Fen\u002Fsideprojects\u002Fsocis-frampa-2022.md","Frampa Members(2022)",{"type":8,"value":6298,"toc":6320},[6299,6306,6313],[11,6300,6301,6302,6304],{},"In the new version of the PTA member manager for França School, we wanted to stop using Google Forms so we rebuilt the member registration and extracurricular activities with VueJs + Vuetify + Vuelidate.\n",[3139,6303],{},[3139,6305],{},[11,6307,6308,6309,6311],{},"Adding new features like reduced fees for single parents and special needs, installment payments, custom validations, variable number of students, or loading data from the previous school year with a custom code.\n",[3139,6310],{},[3139,6312],{},[11,6314,6315,6316,6318],{},"The backend was rebuilt with Laravel + Filament Admin.\n",[3139,6317],{},[3139,6319],{},{"title":190,"searchDepth":191,"depth":191,"links":6321},[],"A PTA member management app",{"slug":6266},"\u002Fen\u002Fsideprojects\u002Fsocis-frampa-2022",{"title":6296,"description":6322},"en\u002Fsideprojects\u002Fsocis-frampa-2022","ulnp0c5whurCBehCm6tv1H1El5T66igjj48i20o3U2M",{"id":6329,"title":6330,"body":6331,"date":6262,"description":6356,"extension":210,"featured":1902,"image":6264,"locale":1323,"meta":6357,"navigation":216,"order":196,"path":6358,"repo":211,"seo":6359,"status":330,"stem":6360,"technologies":211,"url":211,"__hash__":6361},"sideprojects\u002Fes\u002Fsideprojects\u002Fsocis-frampa-2022.md","Socios Frampa(2022)",{"type":8,"value":6332,"toc":6354},[6333,6340,6347],[11,6334,6335,6336,6338],{},"En la nueva versión del gestor de socios del AFA de la Escuela Francia, queríamos dejar de utilizar Google Forms así que rehice el alta de socios y de extraescolares con VueJs + Vuetify + Vuelidate.\n",[3139,6337],{},[3139,6339],{},[11,6341,6342,6343,6345],{},"Añadiendo nuevas funcionalidades como cuotas reducidas para monoparentales y necesidades especiales, pago fraccionado, validaciones propias, número variable de alumnos o cargar los datos del curso anterior con un código personalizado.\n",[3139,6344],{},[3139,6346],{},[11,6348,6349,6350,6352],{},"Se rehizo el backend con Laravel + Filament Admin.\n",[3139,6351],{},[3139,6353],{},{"title":190,"searchDepth":191,"depth":191,"links":6355},[],"Una app de gestión de socios del AFA",{"slug":6266},"\u002Fes\u002Fsideprojects\u002Fsocis-frampa-2022",{"title":6330,"description":6356},"es\u002Fsideprojects\u002Fsocis-frampa-2022","pjeAE5DoNpLaLcQ_ifubq7wNN5tVfz7mG2PVt7oAU7Q",{"id":6363,"title":6364,"body":6365,"date":6393,"description":6394,"extension":210,"featured":1902,"image":6395,"locale":212,"meta":6396,"navigation":216,"order":196,"path":6398,"repo":211,"seo":6399,"status":330,"stem":6400,"technologies":211,"url":211,"__hash__":6401},"sideprojects\u002Fca\u002Fsideprojects\u002Ftactiva.md","T'Activa (Octubre 2020)",{"type":8,"value":6366,"toc":6391},[6367,6374,6381],[11,6368,6369,6370,6372],{},"T'activa va ser una lliga tecnològica 2.0 contra la soledat no volguda que va organitzar el Consorci Sanitari de Terrassa i l'Ajuntament de Terrassa\n",[3139,6371],{},[3139,6373],{},[11,6375,6376,6377,6379],{},"Guanyador amb l'equip Terrassadebutxaca i el projecte Casal a Casa\n",[3139,6378],{},[3139,6380],{},[11,6382,6383,6387,6389],{},[298,6384,6385],{"href":6385,"rel":6386},"https:\u002F\u002Ftactiva.cat\u002Fpremis\u002F",[3832],[3139,6388],{},[3139,6390],{},{"title":190,"searchDepth":191,"depth":191,"links":6392},[],"2020-10-01T12:00:00Z","T'Activa va ser una lliga tecnològica 2.0 contra la soledat no volguda que va organitzar el Consorci Sanitari de Terrassa i l'Ajuntament de Terrassa. Vam guanyar el primer premi!🎉","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,f_auto,q_50,w_500\u002Fv1616173851\u002Ftactiva1_fwaacd.png",{"slug":6397},"tactiva","\u002Fca\u002Fsideprojects\u002Ftactiva",{"title":6364,"description":6394},"ca\u002Fsideprojects\u002Ftactiva","A9Y6ERgcFGorpqjlUfMZOMGsgdRIOtkck3aZeYplZy0",{"id":6403,"title":6404,"body":6405,"date":6393,"description":6432,"extension":210,"featured":1902,"image":6395,"locale":861,"meta":6433,"navigation":216,"order":217,"path":6434,"repo":211,"seo":6435,"status":330,"stem":6436,"technologies":211,"url":211,"__hash__":6437},"sideprojects\u002Fen\u002Fsideprojects\u002Ftactiva.md","T'Activa (October 2020)",{"type":8,"value":6406,"toc":6430},[6407,6414,6421],[11,6408,6409,6410,6412],{},"T'Activa was a technological league 2.0 against unwanted loneliness organized by the Terrassa Health Consortium and Terrassa City Council\n",[3139,6411],{},[3139,6413],{},[11,6415,6416,6417,6419],{},"Winner with the Terrassadebutxaca team and the \"Casal a Casa\" project\n",[3139,6418],{},[3139,6420],{},[11,6422,6423,6426,6428],{},[298,6424,6385],{"href":6385,"rel":6425},[3832],[3139,6427],{},[3139,6429],{},{"title":190,"searchDepth":191,"depth":191,"links":6431},[],"A project against unwanted loneliness",{"slug":6397},"\u002Fen\u002Fsideprojects\u002Ftactiva",{"title":6404,"description":6432},"en\u002Fsideprojects\u002Ftactiva","TXea1MepBEtABg6zqDPA4mHJmrgtbh9oigErt7dYN3s",{"id":6439,"title":6364,"body":6440,"date":6393,"description":6467,"extension":210,"featured":1902,"image":6395,"locale":1323,"meta":6468,"navigation":216,"order":217,"path":6469,"repo":211,"seo":6470,"status":330,"stem":6471,"technologies":211,"url":211,"__hash__":6472},"sideprojects\u002Fes\u002Fsideprojects\u002Ftactiva.md",{"type":8,"value":6441,"toc":6465},[6442,6449,6456],[11,6443,6444,6445,6447],{},"T'activa fue una liga tecnológica 2.0 contra la soledad no deseada que organizó el Consorcio Sanitario de Terrassa y el Ayuntamiento de Terrassa\n",[3139,6446],{},[3139,6448],{},[11,6450,6451,6452,6454],{},"Ganador con el equipo Terrassadebutxaca y el proyecto Casal a Casa\n",[3139,6453],{},[3139,6455],{},[11,6457,6458,6461,6463],{},[298,6459,6385],{"href":6385,"rel":6460},[3832],[3139,6462],{},[3139,6464],{},{"title":190,"searchDepth":191,"depth":191,"links":6466},[],"Un proyecto contra la soledad no deseada",{"slug":6397},"\u002Fes\u002Fsideprojects\u002Ftactiva",{"title":6364,"description":6467},"es\u002Fsideprojects\u002Ftactiva","pstw2MxaQZ5Yr2ZsAYWY7D6McpdAexL_x58a7cY_GSI",{"id":6474,"title":6475,"body":6476,"date":6661,"description":6662,"extension":210,"featured":1902,"image":6663,"locale":212,"meta":6664,"navigation":216,"order":6684,"path":6685,"repo":211,"seo":6686,"status":330,"stem":6687,"technologies":6688,"url":211,"__hash__":6691},"sideprojects\u002Fca\u002Fsideprojects\u002Ftrivia-capitals.md","TriviaCapitals - Joc de Quiz de Capitals",{"type":8,"value":6477,"toc":6646},[6478,6481,6484,6487,6489,6492,6494,6498,6516,6520,6540,6542,6561,6563,6566,6585,6589,6608,6612,6632,6636,6639,6643],[229,6479,6475],{"id":6480},"triviacapitals-joc-de-quiz-de-capitals",[11,6482,6483],{},"Volia un boilerplate de app mobile, volia aprendre JAMStack i necessitava una excusa per posar-la a prova. Que millor que un joc de quiz per compartir-lo amb els amics?",[11,6485,6486],{},"Fet amb VueJs, Vuetify, Nuxt al frontend i AdonisJS per al backend.",[15,6488,1779],{"id":1778},[11,6490,6491],{},"Aquest projecte va néixer de la necessitat d'aprendre les tecnologies JAMStack mentre creava un boilerplate útil per a futures aplicacions mòbils. La idea d'un joc de quiz sobre capitals de comarca de Catalunya va ser la excusa perfecta per explorar aquestes tecnologies modernes de desenvolupament.",[15,6493,1786],{"id":1785},[20,6495,6497],{"id":6496},"frontend-modern","Frontend Modern",[42,6499,6500,6506,6511],{},[45,6501,6502,6505],{},[161,6503,6504],{},"Interface intuïtiva",": Desenvolupada amb VueJS i Vuetify per una experiència d'usuari fluida",[45,6507,6508,6510],{},[161,6509,5618],{},": Optimitzada per funcionar perfectament en dispositius mòbils",[45,6512,6513,6515],{},[161,6514,1937],{},": Capacitats offline i experiència similar a aplicació nativa",[20,6517,6519],{"id":6518},"contingut-educatiu","Contingut Educatiu",[42,6521,6522,6528,6534],{},[45,6523,6524,6527],{},[161,6525,6526],{},"Capitals de comarca",": Base de dades completa amb totes les capitals de comarca de Catalunya",[45,6529,6530,6533],{},[161,6531,6532],{},"Preguntes dinàmiques",": Sistema de generació aleatòria de preguntes",[45,6535,6536,6539],{},[161,6537,6538],{},"Aprenentatge interactiu",": Combinació d'entreteniment i coneixement geogràfic",[20,6541,6199],{"id":6198},[42,6543,6544,6550,6556],{},[45,6545,6546,6549],{},[161,6547,6548],{},"API escalable",": Backend desenvolupat amb AdonisJS per gestionar preguntes i puntuacions",[45,6551,6552,6555],{},[161,6553,6554],{},"Arquitectura JAMStack",": Separació clara entre frontend i backend per màxima flexibilitat",[45,6557,6558,6560],{},[161,6559,6218],{},": Estructura eficient per emmagatzemar preguntes i resultats",[15,6562,1822],{"id":1821},[20,6564,6554],{"id":6565},"arquitectura-jamstack",[42,6567,6568,6573,6579],{},[45,6569,6570,6572],{},[161,6571,1863],{},": Framework Vue.js per renderització optimitzada i SEO",[45,6574,6575,6578],{},[161,6576,6577],{},"Static Generation",": Generació estàtica per màxim rendiment",[45,6580,6581,6584],{},[161,6582,6583],{},"API First",": Disseny centrat en APIs per facilitar futures integracions",[20,6586,6588],{"id":6587},"experiència-mòbil","Experiència Mòbil",[42,6590,6591,6597,6603],{},[45,6592,6593,6596],{},[161,6594,6595],{},"Mobile First",": Disseny prioritzant l'experiència en dispositius mòbils",[45,6598,6599,6602],{},[161,6600,6601],{},"Touch Optimized",": Interfície optimitzada per interaccions tàctils",[45,6604,6605,6607],{},[161,6606,3697],{},": Càrrega ràpida i navegació fluida",[20,6609,6611],{"id":6610},"funcionalitats-del-joc","Funcionalitats del Joc",[42,6613,6614,6620,6626],{},[45,6615,6616,6619],{},[161,6617,6618],{},"Sistema de puntuació",": Seguiment de resultats i estadístiques",[45,6621,6622,6625],{},[161,6623,6624],{},"Compartir resultats",": Facilitat per compartir puntuacions amb amics",[45,6627,6628,6631],{},[161,6629,6630],{},"Preguntes adaptatives",": Dificultat que s'adapta al nivell del jugador",[15,6633,6635],{"id":6634},"valor-educatiu","Valor Educatiu",[11,6637,6638],{},"A més de ser un exercici tècnic, TriviaCapitals ofereix una manera divertida d'aprendre sobre la geografia catalana, específicament sobre les capitals de comarca, contribuint al coneixement del territori català.",[15,6640,6642],{"id":6641},"impacte-i-aprenentatge","Impacte i Aprenentatge",[11,6644,6645],{},"El desenvolupament d'aquesta aplicació va permetre consolidar coneixements en tecnologies modernes de desenvolupament web, establint les bases per a futurs projectes amb arquitectura JAMStack. L'experiència va demostrar la viabilitat de crear aplicacions mòbils ràpides i escalables utilitzant tecnologies web.",{"title":190,"searchDepth":191,"depth":191,"links":6647},[6648,6649,6654,6659,6660],{"id":1778,"depth":191,"text":1779},{"id":1785,"depth":191,"text":1786,"children":6650},[6651,6652,6653],{"id":6496,"depth":196,"text":6497},{"id":6518,"depth":196,"text":6519},{"id":6198,"depth":196,"text":6199},{"id":1821,"depth":191,"text":1822,"children":6655},[6656,6657,6658],{"id":6565,"depth":196,"text":6554},{"id":6587,"depth":196,"text":6588},{"id":6610,"depth":196,"text":6611},{"id":6634,"depth":191,"text":6635},{"id":6641,"depth":191,"text":6642},"2020-04-01T12:00:00Z","Joc de quiz de capitals de comarca de Catalunya per compartir amb els amics, desenvolupat com a boilerplate JAMStack","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,f_auto,q_auto,w_500\u002Fv1616173868\u002Ftriviacapitals_yzr1xy.webp",{"slug":6665,"achievements":6666,"metrics":6672,"liveUrl":6683,"githubUrl":190},"trivia-capitals",[6667,6668,6669,6670,6671],"Primer boilerplate d'app mòbil amb JAMStack implementat","Sistema de quiz de capitals catalanes desenvolupat","Arquitectura escalable frontend-backend creada","PWA optimitzada per compartir amb amics","Base de dades completa de capitals de comarca",[6673,6676,6678,6680],{"label":6674,"value":6675},"Capitals de Comarca","42",{"label":6677,"value":1047},"Preguntes Disponibles",{"label":6679,"value":1926},"Performance Score",{"label":6681,"value":6682},"Mobile Compatibility","100%","https:\u002F\u002Ftriviacapitals.albertsarle.com",5,"\u002Fca\u002Fsideprojects\u002Ftrivia-capitals",{"title":6475,"description":6662},"ca\u002Fsideprojects\u002Ftrivia-capitals",[1936,6290,1863,6689,6690,1937,6595],"AdonisJS","JAMStack","-67UPB4Pv2AcGU3BA5fw-LOKJ9b4yVfV-HiDBh8vuP0",{"id":6693,"title":6694,"body":6695,"date":6661,"description":6718,"extension":210,"featured":1902,"image":6663,"locale":861,"meta":6719,"navigation":216,"order":217,"path":6720,"repo":211,"seo":6721,"status":330,"stem":6722,"technologies":211,"url":211,"__hash__":6723},"sideprojects\u002Fen\u002Fsideprojects\u002Ftrivia-capitals.md","TriviaCapitals (2020)",{"type":8,"value":6696,"toc":6716},[6697,6704,6711],[11,6698,6699,6700,6702],{},"I wanted a mobile app boilerplate, I wanted to learn JAMStack and needed an excuse to put it to the test. What better than a quiz game to share with friends?\n",[3139,6701],{},[3139,6703],{},[11,6705,6706,6707,6709],{},"Built with VueJs, Vuetify, Nuxt on the frontend and AdonisJS for the backend\n",[3139,6708],{},[3139,6710],{},[11,6712,6713],{},[298,6714,6683],{"href":6683,"rel":6715},[3832],{"title":190,"searchDepth":191,"depth":191,"links":6717},[],"A quiz game about Catalonia regional capitals to share with friends",{"slug":6665},"\u002Fen\u002Fsideprojects\u002Ftrivia-capitals",{"title":6694,"description":6718},"en\u002Fsideprojects\u002Ftrivia-capitals","m89npLWhQFMDCZUrV0T6bdZ5gG4vVjjiKbuGdf6xZcs",{"id":6725,"title":6694,"body":6726,"date":6661,"description":6749,"extension":210,"featured":1902,"image":6663,"locale":1323,"meta":6750,"navigation":216,"order":217,"path":6751,"repo":211,"seo":6752,"status":330,"stem":6753,"technologies":211,"url":211,"__hash__":6754},"sideprojects\u002Fes\u002Fsideprojects\u002Ftrivia-capitals.md",{"type":8,"value":6727,"toc":6747},[6728,6735,6742],[11,6729,6730,6731,6733],{},"Quería un boilerplate de app mobile, quería aprender JAMStack y necesitaba una excusa para ponerla a prueba. ¿Qué mejor que un juego de quiz para compartirlo con los amigos?\n",[3139,6732],{},[3139,6734],{},[11,6736,6737,6738,6740],{},"Hecho con VueJs, Vuetify, Nuxt en el frontend y AdonisJS para el backend\n",[3139,6739],{},[3139,6741],{},[11,6743,6744],{},[298,6745,6683],{"href":6683,"rel":6746},[3832],{"title":190,"searchDepth":191,"depth":191,"links":6748},[],"Un juego de quiz de capitales de comarca Cataluña para compartir con los amigos",{"slug":6665},"\u002Fes\u002Fsideprojects\u002Ftrivia-capitals",{"title":6694,"description":6749},"es\u002Fsideprojects\u002Ftrivia-capitals","ofzGYwa9mIxiuL7Vyze_FeU-g4tXxUN0Uoj1ZAQVFIY",{"id":6756,"title":6757,"body":6758,"date":7002,"description":7003,"extension":210,"featured":1902,"image":7004,"locale":212,"meta":7005,"navigation":216,"order":217,"path":7024,"repo":211,"seo":7025,"status":330,"stem":7026,"technologies":7027,"url":211,"__hash__":7030},"sideprojects\u002Fca\u002Fsideprojects\u002Fmenus-frampa.md","Menus Frampa - Consultor de Menús Escolars",{"type":8,"value":6759,"toc":6983},[6760,6763,6766,6769,6772,6774,6777,6779,6783,6801,6805,6825,6829,6849,6851,6855,6872,6876,6894,6898,6917,6921,6925,6945,6949,6969,6973,6976,6980],[229,6761,6757],{"id":6762},"menus-frampa-consultor-de-menús-escolars",[11,6764,6765],{},"A l'hora de sopar necessitava saber de seguida què havia dinat el meu fill a l'escola.",[11,6767,6768],{},"Per veure-ho al mòbil amb un sol click vaig fer una Progressive Web App amb VueJs i una API Laravel.",[11,6770,6771],{},"La importació automàtica dels 25 menús de dieta diferents a partir de PDFs \"te sorprenderá\".",[15,6773,1779],{"id":1778},[11,6775,6776],{},"Aquest projecte va sorgir d'una necessitat personal molt específica: poder consultar ràpidament i des del mòbil què havia menjat el meu fill a l'escola per planificar el sopar. La solució es va convertir en una eina útil per a totes les famílies de l'escola.",[15,6778,1786],{"id":1785},[20,6780,6782],{"id":6781},"experiència-dusuari-optimitzada","Experiència d'Usuari Optimitzada",[42,6784,6785,6791,6796],{},[45,6786,6787,6790],{},[161,6788,6789],{},"Consulta ràpida",": Accés a la informació del menú amb un sol click",[45,6792,6793,6795],{},[161,6794,1937],{},": Experiència similar a una app nativa des del navegador",[45,6797,6798,6800],{},[161,6799,6595],{},": Dissenyada específicament per a ús en dispositius mòbils",[20,6802,6804],{"id":6803},"gestió-intelligent-de-menús","Gestió Intel·ligent de Menús",[42,6806,6807,6813,6819],{},[45,6808,6809,6812],{},[161,6810,6811],{},"25 dietes diferents",": Suport per a menús especials (vegetarians, al·lèrgies, etc.)",[45,6814,6815,6818],{},[161,6816,6817],{},"Importació automàtica",": Sistema de processament automàtic de PDFs",[45,6820,6821,6824],{},[161,6822,6823],{},"Actualització en temps real",": Menús sempre actualitzats sense intervenció manual",[20,6826,6828],{"id":6827},"funcionalitats-pràctiques","Funcionalitats Pràctiques",[42,6830,6831,6837,6843],{},[45,6832,6833,6836],{},[161,6834,6835],{},"Consulta diària",": Visualització del menú del dia actual",[45,6838,6839,6842],{},[161,6840,6841],{},"Planificació familiar",": Informació per planificar sopars complementaris",[45,6844,6845,6848],{},[161,6846,6847],{},"Historial de menús",": Accés a menús de dies anteriors",[15,6850,1822],{"id":1821},[20,6852,6854],{"id":6853},"frontend-pwa","Frontend PWA",[42,6856,6857,6862,6867],{},[45,6858,6859,6861],{},[161,6860,1936],{},": Framework modern per una interfície reactiva i fluida",[45,6863,6864,6866],{},[161,6865,1937],{},": Capacitats offline i experiència d'app nativa",[45,6868,6869,6871],{},[161,6870,5565],{},": Optimitzat per a tots els dispositius, especialment mòbils",[20,6873,6875],{"id":6874},"backend-i-processament","Backend i Processament",[42,6877,6878,6883,6889],{},[45,6879,6880,6882],{},[161,6881,1833],{},": Backend robust per gestionar dades de menús",[45,6884,6885,6888],{},[161,6886,6887],{},"Processament de PDFs",": Sistema automàtic d'extracció de dades de documents PDF",[45,6890,6891,6893],{},[161,6892,6218],{},": Emmagatzematge eficient de menús i dietes",[20,6895,6897],{"id":6896},"automatització-avançada","Automatització Avançada",[42,6899,6900,6905,6911],{},[45,6901,6902,6904],{},[161,6903,6817],{},": Sistema que processa els PDFs de menús automàticament",[45,6906,6907,6910],{},[161,6908,6909],{},"Reconeixement de patrons",": Detecció intel·ligent de diferents tipus de dietes",[45,6912,6913,6916],{},[161,6914,6915],{},"Sincronització",": Actualització automàtica quan arriben nous menús",[15,6918,6920],{"id":6919},"valor-per-a-les-famílies","Valor per a les Famílies",[20,6922,6924],{"id":6923},"beneficis-pràctics","Beneficis Pràctics",[42,6926,6927,6933,6939],{},[45,6928,6929,6932],{},[161,6930,6931],{},"Estalvi de temps",": Eliminació de la necessitat de buscar papers o PDFs",[45,6934,6935,6938],{},[161,6936,6937],{},"Planificació millor",": Facilita la planificació de sopars equilibrats",[45,6940,6941,6944],{},[161,6942,6943],{},"Accessibilitat",": Informació sempre disponible al mòbil",[20,6946,6948],{"id":6947},"funcionalitats-familiars","Funcionalitats Familiars",[42,6950,6951,6957,6963],{},[45,6952,6953,6956],{},[161,6954,6955],{},"Consulta immediata",": Resposta instantània a \"què ha menjat avui?\"",[45,6958,6959,6962],{},[161,6960,6961],{},"Menús especials",": Accés fàcil a dietes específiques per necessitats dietètiques",[45,6964,6965,6968],{},[161,6966,6967],{},"Històric",": Possibilitat de revisar menús anteriors",[15,6970,6972],{"id":6971},"innovació-tècnica","Innovació Tècnica",[11,6974,6975],{},"El sistema d'importació automàtica de 25 menús diferents a partir de PDFs representa un repte tècnic interessant, que combina processament de documents, reconeixement de patrons i automatització per oferir una experiència d'usuari sense friccions.",[15,6977,6979],{"id":6978},"impacte-i-adopció","Impacte i Adopció",[11,6981,6982],{},"L'aplicació ha simplificat significativament la vida quotidiana de les famílies de l'escola, convertint una tasca que requeria buscar documents físics o digitals en una consulta instantània des del mòbil.",{"title":190,"searchDepth":191,"depth":191,"links":6984},[6985,6986,6991,6996,7000,7001],{"id":1778,"depth":191,"text":1779},{"id":1785,"depth":191,"text":1786,"children":6987},[6988,6989,6990],{"id":6781,"depth":196,"text":6782},{"id":6803,"depth":196,"text":6804},{"id":6827,"depth":196,"text":6828},{"id":1821,"depth":191,"text":1822,"children":6992},[6993,6994,6995],{"id":6853,"depth":196,"text":6854},{"id":6874,"depth":196,"text":6875},{"id":6896,"depth":196,"text":6897},{"id":6919,"depth":191,"text":6920,"children":6997},[6998,6999],{"id":6923,"depth":196,"text":6924},{"id":6947,"depth":196,"text":6948},{"id":6971,"depth":191,"text":6972},{"id":6978,"depth":191,"text":6979},"2017-03-01T12:00:00Z","Progressive Web App per consultar els menús escolars al mòbil amb importació automàtica de PDFs","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,q_39,w_900\u002Fv1616173901\u002Fframpa_vfj9vt.webp",{"slug":7006,"achievements":7007,"metrics":7013,"liveUrl":7023,"githubUrl":190},"menus-frampa",[7008,7009,7010,7011,7012],"PWA optimitzada per consulta ràpida de menús escolars","Sistema d'importació automàtica de PDFs implementat","25 menús de dieta diferents processats automàticament","Interface mòbil intuïtiva per pares desenvolupada","Reducció del temps de consulta a un sol click",[7014,7017,7019,7021],{"label":7015,"value":7016},"Menús de Dieta","25",{"label":7018,"value":6285},"Reducció Temps Consulta",{"label":7020,"value":6682},"Compatibilitat Mòbil",{"label":7022,"value":6682},"Automatització PDFs","https:\u002F\u002Fmenus.frampa.org","\u002Fca\u002Fsideprojects\u002Fmenus-frampa",{"title":6757,"description":7003},"ca\u002Fsideprojects\u002Fmenus-frampa",[1936,1933,1937,7028,7029,6595,5565],"API REST","PDF Processing","NNWgmK9tteZal2W_Fl1RsSYCyYs6h-VHijhT_W2IF04",{"id":7032,"title":7033,"body":7034,"date":7002,"description":7064,"extension":210,"featured":1902,"image":7004,"locale":861,"meta":7065,"navigation":216,"order":7066,"path":7067,"repo":211,"seo":7068,"status":330,"stem":7069,"technologies":211,"url":211,"__hash__":7070},"sideprojects\u002Fen\u002Fsideprojects\u002Fmenus-frampa.md","Frampa Menus",{"type":8,"value":7035,"toc":7062},[7036,7043,7050,7057],[11,7037,7038,7039,7041],{},"At dinner time I needed to know immediately what my son had eaten at school\n",[3139,7040],{},[3139,7042],{},[11,7044,7045,7046,7048],{},"To check it on mobile with just one click, I made a Progressive Web App with VueJs and a Laravel API\n",[3139,7047],{},[3139,7049],{},[11,7051,7052,7053,7055],{},"The automatic import of 25 different diet menus from PDFs \"will surprise you\"\n",[3139,7054],{},[3139,7056],{},[11,7058,7059],{},[298,7060,7023],{"href":7023,"rel":7061,"title":7023},[3832],{"title":190,"searchDepth":191,"depth":191,"links":7063},[],"PWA to check school menus on mobile",{"slug":7006},6,"\u002Fen\u002Fsideprojects\u002Fmenus-frampa",{"title":7033,"description":7064},"en\u002Fsideprojects\u002Fmenus-frampa","TATe0F0OcBd3UyX_vnx-xp5Vvh_Z9340OH_DvH9vlGs",{"id":7072,"title":7073,"body":7074,"date":7002,"description":7104,"extension":210,"featured":1902,"image":7004,"locale":1323,"meta":7105,"navigation":216,"order":7066,"path":7106,"repo":211,"seo":7107,"status":330,"stem":7108,"technologies":211,"url":211,"__hash__":7109},"sideprojects\u002Fes\u002Fsideprojects\u002Fmenus-frampa.md","Menús Frampa",{"type":8,"value":7075,"toc":7102},[7076,7083,7090,7097],[11,7077,7078,7079,7081],{},"A la hora de cenar necesitaba saber de seguida qué había comido mi hijo en la escuela\n",[3139,7080],{},[3139,7082],{},[11,7084,7085,7086,7088],{},"Para verlo en el móvil con un solo click hice una Progressive Web App con VueJs y una API Laravel\n",[3139,7087],{},[3139,7089],{},[11,7091,7092,7093,7095],{},"La importación automática de los 25 menús de dieta diferentes a partir de PDFs \"te sorprenderá\"\n",[3139,7094],{},[3139,7096],{},[11,7098,7099],{},[298,7100,7023],{"href":7023,"rel":7101,"title":7023},[3832],{"title":190,"searchDepth":191,"depth":191,"links":7103},[],"PWA para consultar los menús escolares en el móvil",{"slug":7006},"\u002Fes\u002Fsideprojects\u002Fmenus-frampa",{"title":7073,"description":7104},"es\u002Fsideprojects\u002Fmenus-frampa","_8xjWJOGQC44b08ctr70aHKKa3OCtrfUMkspOk3pI44",{"id":7111,"title":7112,"body":7113,"date":7408,"description":7409,"extension":210,"featured":1902,"image":7410,"locale":212,"meta":7411,"navigation":216,"order":7066,"path":7431,"repo":211,"seo":7432,"status":330,"stem":7433,"technologies":7434,"url":211,"__hash__":7436},"sideprojects\u002Fca\u002Fsideprojects\u002Fsocis-frampa-2017.md","Socis Frampa (2017) - Gestió AMPA i Extraescolars",{"type":8,"value":7114,"toc":7385},[7115,7118,7121,7123,7126,7128,7132,7152,7156,7176,7180,7199,7201,7203,7222,7224,7244,7248,7267,7271,7275,7295,7299,7319,7323,7327,7347,7351,7371,7375,7378,7382],[229,7116,7112],{"id":7117},"socis-frampa-2017-gestió-ampa-i-extraescolars",[11,7119,7120],{},"Gestió de socis de l'AMPA i les activitats extraescolars dels nens, fet amb Laravel i Bootstrap.",[15,7122,1779],{"id":1778},[11,7124,7125],{},"Aquest va ser el primer sistema digital integral per gestionar tant els socis de l'AMPA com les activitats extraescolars de l'escola. El projecte va modernitzar completament els processos administratius, passant d'una gestió manual a un sistema web complet i eficient.",[15,7127,1786],{"id":1785},[20,7129,7131],{"id":7130},"gestió-de-socis-ampa","Gestió de Socis AMPA",[42,7133,7134,7140,7146],{},[45,7135,7136,7139],{},[161,7137,7138],{},"Base de dades centralitzada",": Informació completa de totes les famílies associades",[45,7141,7142,7145],{},[161,7143,7144],{},"Gestió de quotes",": Sistema automatitzat per al control de pagaments i quotes anuals",[45,7147,7148,7151],{},[161,7149,7150],{},"Històrial familiar",": Seguiment de la participació i activitat de cada família",[20,7153,7155],{"id":7154},"administració-dextraescolars","Administració d'Extraescolars",[42,7157,7158,7164,7170],{},[45,7159,7160,7163],{},[161,7161,7162],{},"Catàleg d'activitats",": Gestió completa de totes les activitats extraescolars disponibles",[45,7165,7166,7169],{},[161,7167,7168],{},"Inscripcions online",": Sistema de inscripció digital per a pares i tutors",[45,7171,7172,7175],{},[161,7173,7174],{},"Control de places",": Gestió automàtica de places disponibles i llistes d'espera",[20,7177,7179],{"id":7178},"interface-dusuari","Interface d'Usuari",[42,7181,7182,7188,7194],{},[45,7183,7184,7187],{},[161,7185,7186],{},"Disseny responsive",": Interface adaptada a tots els dispositius gràcies a Bootstrap",[45,7189,7190,7193],{},[161,7191,7192],{},"Navegació intuïtiva",": Disseny centrat en l'experiència d'usuari per facilitar l'ús",[45,7195,7196,7198],{},[161,7197,6943],{},": Interface accessible per a usuaris de totes les edats",[15,7200,1822],{"id":1821},[20,7202,6199],{"id":6198},[42,7204,7205,7210,7216],{},[45,7206,7207,7209],{},[161,7208,6206],{},": Arquitectura MVC sòlida per a màxima escalabilitat",[45,7211,7212,7215],{},[161,7213,7214],{},"Base de dades MySQL",": Esquema optimitzat per gestionar relacions complexes entre socis, famílies i activitats",[45,7217,7218,7221],{},[161,7219,7220],{},"Seguretat",": Sistema d'autenticació i autorització per protegir dades sensibles",[20,7223,6497],{"id":6496},[42,7225,7226,7232,7238],{},[45,7227,7228,7231],{},[161,7229,7230],{},"Bootstrap",": Framework CSS per un disseny professional i responsive",[45,7233,7234,7237],{},[161,7235,7236],{},"JavaScript",": Funcionalitats interactives per millorar l'experiència d'usuari",[45,7239,7240,7243],{},[161,7241,7242],{},"HTML semàntic",": Estructura accessible i optimitzada per SEO",[20,7245,7247],{"id":7246},"funcionalitats-administratives","Funcionalitats Administratives",[42,7249,7250,7256,7261],{},[45,7251,7252,7255],{},[161,7253,7254],{},"Panel d'administració",": Interface completa per gestionar tots els aspectes del sistema",[45,7257,7258,7260],{},[161,7259,6236],{},": Eines per extreure informes de socis i activitats",[45,7262,7263,7266],{},[161,7264,7265],{},"Gestió de comunicacions",": Sistema per enviar notificacions i comunicats",[15,7268,7270],{"id":7269},"beneficis-per-a-lampa","Beneficis per a l'AMPA",[20,7272,7274],{"id":7273},"eficiència-administrative","Eficiència Administrative",[42,7276,7277,7283,7289],{},[45,7278,7279,7282],{},[161,7280,7281],{},"Automatització",": Reducció significativa del temps dedicat a tasques administratives",[45,7284,7285,7288],{},[161,7286,7287],{},"Centralització",": Tota la informació accessible des d'un sol lloc",[45,7290,7291,7294],{},[161,7292,7293],{},"Precisió",": Eliminació d'errors manuals en la gestió de dades",[20,7296,7298],{"id":7297},"millora-de-serveis","Millora de Serveis",[42,7300,7301,7307,7313],{},[45,7302,7303,7306],{},[161,7304,7305],{},"Inscripcions simplificades",": Procés més fàcil i ràpid per a les famílies",[45,7308,7309,7312],{},[161,7310,7311],{},"Comunicació millorada",": Canals directes de comunicació amb les famílies",[45,7314,7315,7318],{},[161,7316,7317],{},"Transparència",": Accés clar a informació sobre activitats i quotes",[15,7320,7322],{"id":7321},"funcionalitats-per-a-famílies","Funcionalitats per a Famílies",[20,7324,7326],{"id":7325},"gestió-personal","Gestió Personal",[42,7328,7329,7335,7341],{},[45,7330,7331,7334],{},[161,7332,7333],{},"Perfil familiar",": Accés a la informació personal i dels fills",[45,7336,7337,7340],{},[161,7338,7339],{},"Historial d'activitats",": Consulta de participació en extraescolars",[45,7342,7343,7346],{},[161,7344,7345],{},"Gestió de pagaments",": Seguiment de quotes i pagaments pendents",[20,7348,7350],{"id":7349},"inscripcions-i-activitats","Inscripcions i Activitats",[42,7352,7353,7359,7365],{},[45,7354,7355,7358],{},[161,7356,7357],{},"Inscripció online",": Procés digitalitzat per apuntar-se a activitats",[45,7360,7361,7364],{},[161,7362,7363],{},"Consulta de places",": Informació en temps real sobre disponibilitat",[45,7366,7367,7370],{},[161,7368,7369],{},"Calendari d'activitats",": Visualització clara dels horaris i dates",[15,7372,7374],{"id":7373},"impacte-i-evolució","Impacte i Evolució",[11,7376,7377],{},"Aquest sistema va establir les bases per a la gestió digital de l'AMPA, demostrant la viabilitat i els beneficis de la digitalització dels processos administratius. L'èxit d'aquesta primera versió va motivar el desenvolupament posterior de versions més avançades amb tecnologies més modernes.",[15,7379,7381],{"id":7380},"llegat-tecnològic","Llegat Tecnològic",[11,7383,7384],{},"El projecte va servir com a punt de partida per a futures iteracions, proporcionant experiència valuosa en el desenvolupament de sistemes de gestió educativa i establint les necessitats i requisits per a versions posteriors més sofisticades.",{"title":190,"searchDepth":191,"depth":191,"links":7386},[7387,7388,7393,7398,7402,7406,7407],{"id":1778,"depth":191,"text":1779},{"id":1785,"depth":191,"text":1786,"children":7389},[7390,7391,7392],{"id":7130,"depth":196,"text":7131},{"id":7154,"depth":196,"text":7155},{"id":7178,"depth":196,"text":7179},{"id":1821,"depth":191,"text":1822,"children":7394},[7395,7396,7397],{"id":6198,"depth":196,"text":6199},{"id":6496,"depth":196,"text":6497},{"id":7246,"depth":196,"text":7247},{"id":7269,"depth":191,"text":7270,"children":7399},[7400,7401],{"id":7273,"depth":196,"text":7274},{"id":7297,"depth":196,"text":7298},{"id":7321,"depth":191,"text":7322,"children":7403},[7404,7405],{"id":7325,"depth":196,"text":7326},{"id":7349,"depth":196,"text":7350},{"id":7373,"depth":191,"text":7374},{"id":7380,"depth":191,"text":7381},"2017-01-01T12:00:00Z","Sistema de gestió de socis de l'AMPA i activitats extraescolars desenvolupat amb Laravel i Bootstrap","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,f_auto,q_60,w_900\u002Fv1616174135\u002Fframpasocis_hlnxdy.webp",{"slug":7412,"achievements":7413,"metrics":7419,"liveUrl":7430,"githubUrl":190},"socis-frampa-2017",[7414,7415,7416,7417,7418],"Sistema complet de gestió de socis AMPA implementat","Gestió d'activitats extraescolars automatitzada","Interface responsive amb Bootstrap desenvolupada","Base de dades optimitzada per families i activitats","Sistema de inscripcions online creat",[7420,7422,7425,7427],{"label":6275,"value":7421},"250+",{"label":7423,"value":7424},"Activitats Extraescolars","20+",{"label":6281,"value":7426},"70%",{"label":7428,"value":7429},"Digitalització Processos","95%","https:\u002F\u002Fsocis.frampa.org","\u002Fca\u002Fsideprojects\u002Fsocis-frampa-2017",{"title":7112,"description":7409},"ca\u002Fsideprojects\u002Fsocis-frampa-2017",[1933,7230,6292,1935,7435,7236,5565],"HTML\u002FCSS","efqSZ6z5V1x8WQRcbO4A93KrfL1_gHjhWiPVpQqmYjc",{"id":7438,"title":7439,"body":7440,"date":7408,"description":6322,"extension":210,"featured":1902,"image":7410,"locale":861,"meta":7461,"navigation":216,"order":6684,"path":7462,"repo":211,"seo":7463,"status":330,"stem":7464,"technologies":211,"url":211,"__hash__":7465},"sideprojects\u002Fen\u002Fsideprojects\u002Fsocis-frampa-2017.md","Frampa Members(2017)",{"type":8,"value":7441,"toc":7459},[7442,7449],[11,7443,7444,7445,7447],{},"Management of PTA members and children's extracurricular activities, built with Laravel and Bootstrap\n",[3139,7446],{},[3139,7448],{},[11,7450,7451,7455,7457],{},[298,7452,7454],{"href":7430,"rel":7453,"title":7454},[3832],"socis.frampa.org",[3139,7456],{},[3139,7458],{},{"title":190,"searchDepth":191,"depth":191,"links":7460},[],{"slug":7412},"\u002Fen\u002Fsideprojects\u002Fsocis-frampa-2017",{"title":7439,"description":6322},"en\u002Fsideprojects\u002Fsocis-frampa-2017","U__dXoGp95MlU627KmhJKhlDuusT0NTmROAqcfYV3dM",{"id":7467,"title":7468,"body":7469,"date":7408,"description":6356,"extension":210,"featured":1902,"image":7410,"locale":1323,"meta":7489,"navigation":216,"order":6684,"path":7490,"repo":211,"seo":7491,"status":330,"stem":7492,"technologies":211,"url":211,"__hash__":7493},"sideprojects\u002Fes\u002Fsideprojects\u002Fsocis-frampa-2017.md","Socios Frampa(2017)",{"type":8,"value":7470,"toc":7487},[7471,7478],[11,7472,7473,7474,7476],{},"Gestión de socios del AMPA y las actividades extraescolares de los niños, hecho con Laravel y Bootstrap\n",[3139,7475],{},[3139,7477],{},[11,7479,7480,7483,7485],{},[298,7481,7454],{"href":7430,"rel":7482,"title":7454},[3832],[3139,7484],{},[3139,7486],{},{"title":190,"searchDepth":191,"depth":191,"links":7488},[],{"slug":7412},"\u002Fes\u002Fsideprojects\u002Fsocis-frampa-2017",{"title":7468,"description":6356},"es\u002Fsideprojects\u002Fsocis-frampa-2017","EA456jfMEmSPnDHGfH43VcHu_Bo7pZtDmcp0cg-qinI",{"id":7495,"title":7496,"body":7497,"date":7849,"description":7850,"extension":210,"featured":1902,"image":7851,"locale":212,"meta":7852,"navigation":216,"order":7873,"path":7874,"repo":211,"seo":7875,"status":220,"stem":7876,"technologies":7877,"url":211,"__hash__":7882},"sideprojects\u002Fca\u002Fsideprojects\u002Fcontrol-calefaccio-arduino.md","Control Remot Calefacció amb Arduino i Guifi.net",{"type":8,"value":7498,"toc":7823},[7499,7502,7505,7507,7510,7514,7518,7538,7540,7544,7564,7568,7588,7592,7612,7614,7618,7644,7648,7668,7670,7689,7691,7695,7715,7719,7739,7743,7747,7767,7771,7791,7795,7798,7818,7820],[229,7500,7496],{"id":7501},"control-remot-calefacció-amb-arduino-i-guifinet",[11,7503,7504],{},"Abans que existissin els endolls wifi vaig fer aquest projecte amb arduino per poder engegar remotament la calefacció i un termo a través de guifi.net.",[15,7506,1779],{"id":1778},[11,7508,7509],{},"Aquest projecte va ser desenvolupat el 2014, anys abans que els dispositius IoT comercials com els endolls wifi estiguessin àmpliament disponibles. Va representar una solució casolana i innovadora per automatitzar el control de la calefacció domèstica utilitzant tecnologies lliures i accessibles.",[15,7511,7513],{"id":7512},"context-històric","Context Històric",[20,7515,7517],{"id":7516},"innovació-pionera","Innovació Pionera",[42,7519,7520,7526,7532],{},[45,7521,7522,7525],{},[161,7523,7524],{},"Abans del boom IoT",": Desenvolupat 5 anys abans que els dispositius intel·ligents fossin mainstream",[45,7527,7528,7531],{},[161,7529,7530],{},"Solució DIY",": Alternativa casolana als dispositius comercials inexistents",[45,7533,7534,7537],{},[161,7535,7536],{},"Tecnologies lliures",": Ús d'Arduino i Guifi.net com a base tecnològica oberta",[15,7539,1786],{"id":1785},[20,7541,7543],{"id":7542},"control-remot","Control Remot",[42,7545,7546,7552,7558],{},[45,7547,7548,7551],{},[161,7549,7550],{},"Activació a distància",": Capacitat d'engegar la calefacció des de qualsevol lloc",[45,7553,7554,7557],{},[161,7555,7556],{},"Control de termo",": Gestió remota del termo d'aigua calenta",[45,7559,7560,7563],{},[161,7561,7562],{},"Interface web",": Panel de control accessible via navegador",[20,7565,7567],{"id":7566},"connectivitat","Connectivitat",[42,7569,7570,7576,7582],{},[45,7571,7572,7575],{},[161,7573,7574],{},"Guifi.net",": Utilització de la xarxa lliure catalana per connectivitat",[45,7577,7578,7581],{},[161,7579,7580],{},"Accés remot",": Control des de qualsevol punt amb accés a internet",[45,7583,7584,7587],{},[161,7585,7586],{},"Comunicació bidireccional",": Enviament de comandes i recepció d'estat",[20,7589,7591],{"id":7590},"hardware-diy","Hardware DIY",[42,7593,7594,7600,7606],{},[45,7595,7596,7599],{},[161,7597,7598],{},"Arduino",": Microcontrolador com a cerebro del sistema",[45,7601,7602,7605],{},[161,7603,7604],{},"Relés",": Control d'encesa\u002Fapagada dels dispositius elèctrics",[45,7607,7608,7611],{},[161,7609,7610],{},"Sensors",": Monitorització d'estat i temperatura",[15,7613,1822],{"id":1821},[20,7615,7617],{"id":7616},"hardware","Hardware",[42,7619,7620,7626,7632,7638],{},[45,7621,7622,7625],{},[161,7623,7624],{},"Arduino UNO",": Plataforma de desenvolupament principal",[45,7627,7628,7631],{},[161,7629,7630],{},"Mòdul Ethernet",": Connectivitat de xarxa per comunicació",[45,7633,7634,7637],{},[161,7635,7636],{},"Relés electromagnètics",": Commutació segura dels dispositius de potència",[45,7639,7640,7643],{},[161,7641,7642],{},"Circuits de protecció",": Seguretat elèctrica per evitar danys",[20,7645,7647],{"id":7646},"software","Software",[42,7649,7650,7656,7662],{},[45,7651,7652,7655],{},[161,7653,7654],{},"Codi Arduino C++",": Programació del microcontrolador",[45,7657,7658,7661],{},[161,7659,7660],{},"Servidor web embegut",": Interface HTTP per control remot",[45,7663,7664,7667],{},[161,7665,7666],{},"Protocol de comunicació",": Sistema de comandes per activar\u002Fdesactivar dispositius",[20,7669,3501],{"id":3500},[42,7671,7672,7677,7683],{},[45,7673,7674,7676],{},[161,7675,7574],{},": Xarxa lliure per connectivitat sense cost",[45,7678,7679,7682],{},[161,7680,7681],{},"Port forwarding",": Configuració de xarxa per accés extern",[45,7684,7685,7688],{},[161,7686,7687],{},"Sistema d'autenticació",": Protecció bàsica per evitar accessos no autoritzats",[15,7690,6924],{"id":6923},[20,7692,7694],{"id":7693},"eficiència-energètica","Eficiència Energètica",[42,7696,7697,7703,7709],{},[45,7698,7699,7702],{},[161,7700,7701],{},"Precalentament intel·ligent",": Activació anticipada per tenir la casa calenta a l'arribada",[45,7704,7705,7708],{},[161,7706,7707],{},"Estalvi energètic",": Evitar deixar la calefacció encesa innecessàriament",[45,7710,7711,7714],{},[161,7712,7713],{},"Control optimitzat",": Gestió més eficient del consum energètic",[20,7716,7718],{"id":7717},"comoditat","Comoditat",[42,7720,7721,7727,7733],{},[45,7722,7723,7726],{},[161,7724,7725],{},"Control remot",": Activació des de la feina abans de tornar a casa",[45,7728,7729,7732],{},[161,7730,7731],{},"Planificació",": Possibilitat de programar enceses i apagades",[45,7734,7735,7738],{},[161,7736,7737],{},"Monitorització",": Conèixer l'estat dels dispositius a distància",[15,7740,7742],{"id":7741},"innovació-i-aprenentatge","Innovació i Aprenentatge",[20,7744,7746],{"id":7745},"aspectes-innovadors","Aspectes Innovadors",[42,7748,7749,7755,7761],{},[45,7750,7751,7754],{},[161,7752,7753],{},"Anticipació tecnològica",": Desenvolupament d'IoT casolà abans del boom comercial",[45,7756,7757,7760],{},[161,7758,7759],{},"Ús de xarxes lliures",": Aprofitament de Guifi.net com a infraestructura",[45,7762,7763,7766],{},[161,7764,7765],{},"Solució de baix cost",": Alternativa econòmica a sistemes comercials",[20,7768,7770],{"id":7769},"coneixements-adquirits","Coneixements Adquirits",[42,7772,7773,7779,7785],{},[45,7774,7775,7778],{},[161,7776,7777],{},"Electronics",": Comprensió de circuits i components electrònics",[45,7780,7781,7784],{},[161,7782,7783],{},"Programació embeguda",": Desenvolupament en C++ per microcontroladors",[45,7786,7787,7790],{},[161,7788,7789],{},"Xarxes",": Configuració i ús de protocols de comunicació",[15,7792,7794],{"id":7793},"documentació-visual","Documentació Visual",[11,7796,7797],{},"Els vídeos de demostració mostren tant el funcionament final del sistema com el procés de desenvolupament del primer prototip, documentant l'evolució del projecte des de la idea inicial fins a la implementació final.",[11,7799,7800,7807,7808,7810,7817],{},[161,7801,7802],{},[298,7803,7806],{"href":7804,"rel":7805},"https:\u002F\u002Fvimeo.com\u002Fmanage\u002Fvideos\u002F89254341",[3832],"Video Demostració"," - Funcionament complet del sistema",[3139,7809],{},[161,7811,7812],{},[298,7813,7816],{"href":7814,"rel":7815},"https:\u002F\u002Fvimeo.com\u002F79027037",[3832],"Video 1er prototip"," - Primeres proves i desenvolupament",[15,7819,7381],{"id":7380},[11,7821,7822],{},"Aquest projecte va demostrar la viabilitat del control remot domèstic utilitzant tecnologies obertes i accessibles, anticipant-se a les tendències IoT que dominarien el mercat anys més tard. Va establir les bases per a futurs projectes de domòtica i automatització casolana.",{"title":190,"searchDepth":191,"depth":191,"links":7824},[7825,7826,7829,7834,7839,7843,7847,7848],{"id":1778,"depth":191,"text":1779},{"id":7512,"depth":191,"text":7513,"children":7827},[7828],{"id":7516,"depth":196,"text":7517},{"id":1785,"depth":191,"text":1786,"children":7830},[7831,7832,7833],{"id":7542,"depth":196,"text":7543},{"id":7566,"depth":196,"text":7567},{"id":7590,"depth":196,"text":7591},{"id":1821,"depth":191,"text":1822,"children":7835},[7836,7837,7838],{"id":7616,"depth":196,"text":7617},{"id":7646,"depth":196,"text":7647},{"id":3500,"depth":196,"text":3501},{"id":6923,"depth":191,"text":6924,"children":7840},[7841,7842],{"id":7693,"depth":196,"text":7694},{"id":7717,"depth":196,"text":7718},{"id":7741,"depth":191,"text":7742,"children":7844},[7845,7846],{"id":7745,"depth":196,"text":7746},{"id":7769,"depth":196,"text":7770},{"id":7793,"depth":191,"text":7794},{"id":7380,"depth":191,"text":7381},"2014-01-01T12:00:00Z","Sistema IoT casolà per controlar calefacció i termo remotament des del mòbil (abans que existissin els endolls wifi comercials)","https:\u002F\u002Fres.cloudinary.com\u002Fdnyvmvkqi\u002Fimage\u002Fupload\u002Fc_scale,f_auto,q_auto,w_900\u002Fv1669228882\u002Fcontrol_remot_calefaccio_amb_arduino_i_guifi_net.png",{"slug":7853,"achievements":7854,"metrics":7860,"liveUrl":190,"githubUrl":190},"control-calefaccio-arduino",[7855,7856,7857,7858,7859],"Sistema IoT casolà desenvolupat abans dels dispositius comercials","Control remot de calefacció i termo implementat","Integració amb xarxa Guifi.net realitzada","Interface web per control remot creada","Prototip funcional amb Arduino construït",[7861,7864,7867,7870],{"label":7862,"value":7863},"Any de Desenvolupament","2014",{"label":7865,"value":7866},"Dispositius Controlats","2",{"label":7868,"value":7869},"Estalvi Energètic","25%",{"label":7871,"value":7872},"Innovació Temporal","5 anys abans",7,"\u002Fca\u002Fsideprojects\u002Fcontrol-calefaccio-arduino",{"title":7496,"description":7850},"ca\u002Fsideprojects\u002Fcontrol-calefaccio-arduino",[7598,7878,7574,7879,7777,7880,7881],"C\u002FC++","IoT","Relays","Web Interface","-s57coDUmJTHoRuWF2_F5trVEHj9ro2lwSWGRioYEdg",{"id":7884,"title":7885,"body":7886,"date":7849,"description":7914,"extension":210,"featured":1902,"image":7851,"locale":861,"meta":7915,"navigation":216,"order":7873,"path":7916,"repo":211,"seo":7917,"status":220,"stem":7918,"technologies":211,"url":211,"__hash__":7919},"sideprojects\u002Fen\u002Fsideprojects\u002Fcontrol-calefaccio-arduino.md","Remote heating control with Arduino and guifi.net (2014)",{"type":8,"value":7887,"toc":7912},[7888,7891,7898],[229,7889,7885],{"id":7890},"remote-heating-control-with-arduino-and-guifinet-2014",[11,7892,7893,7894,7896],{},"Before WiFi smart plugs existed, I made this project with Arduino to be able to remotely turn on the heating and a water heater through guifi.net\n",[3139,7895],{},[3139,7897],{},[11,7899,7900,7904,7906,7910],{},[298,7901,7903],{"href":7804,"rel":7902,"title":7903},[3832],"Demo Video",[3139,7905],{},[298,7907,7909],{"href":7814,"rel":7908,"title":7909},[3832],"First Prototype Video",[3139,7911],{},{"title":190,"searchDepth":191,"depth":191,"links":7913},[],"Remote heating control with Arduino and guifi.net",{"slug":7853},"\u002Fen\u002Fsideprojects\u002Fcontrol-calefaccio-arduino",{"title":7885,"description":7914},"en\u002Fsideprojects\u002Fcontrol-calefaccio-arduino","P_0_X74LVcOJBaHzTcIEU2XSYqloZweiUgBJu2e14Zs",{"id":7921,"title":7922,"body":7923,"date":7849,"description":7951,"extension":210,"featured":1902,"image":7851,"locale":1323,"meta":7952,"navigation":216,"order":7873,"path":7953,"repo":211,"seo":7954,"status":220,"stem":7955,"technologies":211,"url":211,"__hash__":7956},"sideprojects\u002Fes\u002Fsideprojects\u002Fcontrol-calefaccio-arduino.md","Control remoto calefacción con arduino y guifi.net (2014)",{"type":8,"value":7924,"toc":7949},[7925,7928,7935],[229,7926,7922],{"id":7927},"control-remoto-calefacción-con-arduino-y-guifinet-2014",[11,7929,7930,7931,7933],{},"Antes de que existieran los enchufes wifi hice este proyecto con arduino para poder encender remotamente la calefacción y un termo a través de guifi.net\n",[3139,7932],{},[3139,7934],{},[11,7936,7937,7941,7943,7947],{},[298,7938,7940],{"href":7804,"rel":7939,"title":7940},[3832],"Video Demostración",[3139,7942],{},[298,7944,7946],{"href":7814,"rel":7945,"title":7946},[3832],"Video 1er prototipo",[3139,7948],{},{"title":190,"searchDepth":191,"depth":191,"links":7950},[],"Control remoto de la calefacción con arduino y guifi.net",{"slug":7853},"\u002Fes\u002Fsideprojects\u002Fcontrol-calefaccio-arduino",{"title":7922,"description":7951},"es\u002Fsideprojects\u002Fcontrol-calefaccio-arduino","_V7DrJuA30emS0Gec3OHv-7Tlw3nGyvukA6izUZoyoc",1779354921528]