[{"data":1,"prerenderedAt":855},["ShallowReactive",2],{"project-integral":3,"project-nav-integral":98},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"slug":9,"order":10,"category":11,"sector":12,"year":13,"role":14,"status":15,"outstanding":6,"url":7,"image":16,"imageWidth":17,"imageHeight":18,"summary":19,"technologies":20,"body":26,"_type":92,"_id":93,"_source":94,"_file":95,"_stem":96,"_extension":97},"\u002Fen\u002Fprojects\u002Fintegral","projects",false,"","Integral","integral",9,"Website","Business services","2021","Full-stack design and development","offline","\u002Fimages\u002Fprojects\u002Fintegral-2x.webp",2560,1440,"Multilingual corporate website for a services company in Banyoles, managed from its own admin panel.",[21,22,23,24,25],"Laravel","PHP","Bootstrap","CSS","Sass",{"type":27,"children":28,"toc":86},"root",[29,38,44,50,75,81],{"type":30,"tag":31,"props":32,"children":34},"element","h2",{"id":33},"the-challenge",[35],{"type":36,"value":37},"text","The challenge",{"type":30,"tag":39,"props":40,"children":41},"p",{},[42],{"type":36,"value":43},"Integral, a services company based in Banyoles, needed a clear corporate website to present its business in several languages and keep it updated in-house.",{"type":30,"tag":31,"props":45,"children":47},{"id":46},"what-i-did",[48],{"type":36,"value":49},"What I did",{"type":30,"tag":51,"props":52,"children":53},"ul",{},[54,60,65,70],{"type":30,"tag":55,"props":56,"children":57},"li",{},[58],{"type":36,"value":59},"I built the site in 2021 with Laravel, Bootstrap and Sass, on top of my own CMS.",{"type":30,"tag":55,"props":61,"children":62},{},[63],{"type":36,"value":64},"Content was available in Catalan, Spanish and English, with configurable sections and templates and a blog with categories.",{"type":30,"tag":55,"props":66,"children":67},{},[68],{"type":36,"value":69},"I added a contact form and integration with analytics tools.",{"type":30,"tag":55,"props":71,"children":72},{},[73],{"type":36,"value":74},"After launch, I also looked after its email, domains and servers.",{"type":30,"tag":31,"props":76,"children":78},{"id":77},"outcome",[79],{"type":36,"value":80},"Outcome",{"type":30,"tag":39,"props":82,"children":83},{},[84],{"type":36,"value":85},"The company got a website it could manage on its own. It is no longer online.",{"title":7,"searchDepth":87,"depth":87,"links":88},2,[89,90,91],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"markdown","content:en:projects:integral.md","content","en\u002Fprojects\u002Fintegral.md","en\u002Fprojects\u002Fintegral","md",[99,162,236,320,400,463,531,609,669,717,782],{"_path":100,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":101,"description":7,"slug":102,"order":103,"category":11,"sector":104,"year":13,"role":14,"status":105,"outstanding":106,"url":107,"image":108,"imageWidth":17,"imageHeight":18,"summary":109,"technologies":110,"body":112,"_type":92,"_id":159,"_source":94,"_file":160,"_stem":161,"_extension":97},"\u002Fen\u002Fprojects\u002Fgelinet","Gelinet","gelinet",1,"Cleaning services","online",true,"https:\u002F\u002Fgelinet.net","\u002Fimages\u002Fprojects\u002Fgelinet-2026.webp","Multilingual website for a cleaning company in Cassà de la Selva, now being migrated to a faster static site.",[21,22,23,111,25],"HTML",{"type":27,"children":113,"toc":154},[114,118,123,127,145,149],{"type":30,"tag":31,"props":115,"children":116},{"id":33},[117],{"type":36,"value":37},{"type":30,"tag":39,"props":119,"children":120},{},[121],{"type":36,"value":122},"Gelinet is a cleaning services company based in Cassà de la Selva (Girona) that works for businesses and households across the area. It needed a website to explain its services and the area it covers, which it could maintain itself in Catalan, Spanish and English.",{"type":30,"tag":31,"props":124,"children":125},{"id":46},[126],{"type":36,"value":49},{"type":30,"tag":51,"props":128,"children":129},{},[130,135,140],{"type":30,"tag":55,"props":131,"children":132},{},[133],{"type":36,"value":134},"I designed and built the website in 2021 with Laravel, on top of a custom CMS I had created for my client projects.",{"type":30,"tag":55,"props":136,"children":137},{},[138],{"type":36,"value":139},"Texts in each language, sections and the blog were managed from an admin panel, without relying on me for every change.",{"type":30,"tag":55,"props":141,"children":142},{},[143],{"type":36,"value":144},"In 2026 I am migrating it to a fully static site built with Nuxt and Tailwind, hosted on Cloudflare Pages: no database or server, with forms delivered through Resend.",{"type":30,"tag":31,"props":146,"children":147},{"id":77},[148],{"type":36,"value":80},{"type":30,"tag":39,"props":150,"children":151},{},[152],{"type":36,"value":153},"The site has been online since 2021 and is the only one on this list that can still be visited. The new static version is faster, more secure and practically free to maintain.",{"title":7,"searchDepth":87,"depth":87,"links":155},[156,157,158],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:gelinet.md","en\u002Fprojects\u002Fgelinet.md","en\u002Fprojects\u002Fgelinet",{"_path":163,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":164,"description":7,"slug":165,"order":87,"category":166,"sector":167,"year":168,"role":169,"status":15,"outstanding":6,"url":7,"image":170,"imageWidth":171,"imageHeight":172,"summary":173,"gallery":174,"technologies":180,"body":181,"_type":92,"_id":233,"_source":94,"_file":234,"_stem":235,"_extension":97},"\u002Fen\u002Fprojects\u002Fclica-t","Clica't","clica-t","Web App","Education","2016","Full-stack development","\u002Fimages\u002Fprojects\u002Fclicat-home.webp",1920,1080,"Educational platform for schools with exams, exercises, progress reports and communication with families.",[175],{"src":176,"width":177,"height":178,"alt":179},"\u002Fimages\u002Fprojects\u002Fclicat-deures.webp",1596,730,"Student area with homework assigned by subject",[22,23,111,24],{"type":27,"children":182,"toc":228},[183,187,192,196,219,223],{"type":30,"tag":31,"props":184,"children":185},{"id":33},[186],{"type":36,"value":37},{"type":30,"tag":39,"props":188,"children":189},{},[190],{"type":36,"value":191},"Clica't is an online platform for schools, designed so teachers can set activities, assess students and track their progress, and so families can keep up with how their children are doing.",{"type":30,"tag":31,"props":193,"children":194},{"id":46},[195],{"type":36,"value":49},{"type":30,"tag":51,"props":197,"children":198},{},[199,204,209,214],{"type":30,"tag":55,"props":200,"children":201},{},[202],{"type":36,"value":203},"I started building it around 2016 and kept adding modules for three profiles: teachers, students and families, each with its own space and permissions.",{"type":30,"tag":55,"props":205,"children":206},{},[207],{"type":36,"value":208},"Teachers can create exams, problem sets and exercise workbooks, and organise students into groups.",{"type":30,"tag":55,"props":210,"children":211},{},[212],{"type":36,"value":213},"There are progress and homework reports, with export to Excel and PDF.",{"type":30,"tag":55,"props":215,"children":216},{},[217],{"type":36,"value":218},"Families have their own access, with reports and a chat with teachers.",{"type":30,"tag":31,"props":220,"children":221},{"id":77},[222],{"type":36,"value":80},{"type":30,"tag":39,"props":224,"children":225},{},[226],{"type":36,"value":227},"The platform was used in schools for several school years. It is no longer online, but it was the project where I learned the most about applications with many users and different roles.",{"title":7,"searchDepth":87,"depth":87,"links":229},[230,231,232],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:clica-t.md","en\u002Fprojects\u002Fclica-t.md","en\u002Fprojects\u002Fclica-t",{"_path":237,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":238,"description":7,"slug":239,"order":240,"category":166,"sector":241,"year":242,"role":169,"status":105,"outstanding":106,"url":243,"image":244,"imageWidth":17,"imageHeight":18,"summary":245,"gallery":246,"technologies":253,"body":260,"_type":92,"_id":317,"_source":94,"_file":318,"_stem":319,"_extension":97},"\u002Fen\u002Fprojects\u002Fedicitnet","EdiCitNet","edicitnet",3,"Research · Environment","2020–2024","https:\u002F\u002Fediblecitiesnetwork.com","\u002Fimages\u002Fprojects\u002Fedicitnet-2x.webp","International platform for the European EdiCitNet project on edible cities, built with ICRA.",[247,250],{"src":248,"width":17,"height":18,"alt":249},"\u002Fimages\u002Fprojects\u002Fedicitnet-cataleg.webp","Catalogue of initiatives and solutions with the interactive map",{"src":251,"width":17,"height":18,"alt":252},"\u002Fimages\u002Fprojects\u002Fedicitnet-esdeveniments.webp","Events listing with filters and map",[254,255,256,257,258,259],"Vue","Node.js","Express","MySQL","Leaflet","Vue I18n",{"type":27,"children":261,"toc":312},[262,266,271,275,303,307],{"type":30,"tag":31,"props":263,"children":264},{"id":33},[265],{"type":36,"value":37},{"type":30,"tag":39,"props":267,"children":268},{},[269],{"type":36,"value":270},"EdiCitNet (Edible Cities Network) is a European Horizon 2020 project on edible cities: urban gardens, productive green roofs and other initiatives that bring food production into the city. The project needed an online platform where cities, organisations and researchers could share these solutions and learn from each other.",{"type":30,"tag":31,"props":272,"children":273},{"id":46},[274],{"type":36,"value":49},{"type":30,"tag":51,"props":276,"children":277},{},[278,283,288,293,298],{"type":30,"tag":55,"props":279,"children":280},{},[281],{"type":36,"value":282},"As a freelancer, I worked with the development team at ICRA (Catalan Institute for Water Research) on two versions of the platform, between 2020 and 2024.",{"type":30,"tag":55,"props":284,"children":285},{},[286],{"type":36,"value":287},"The first version was built with Vue 2 and Chart.js. The second is a full rewrite with Vue 3 and Vite.",{"type":30,"tag":55,"props":289,"children":290},{},[291],{"type":36,"value":292},"I developed both the frontend and the API, using Node.js, Express and MySQL. The API handles authentication, image uploads and email delivery.",{"type":30,"tag":55,"props":294,"children":295},{},[296],{"type":36,"value":297},"The platform includes a catalogue of initiatives and solutions with an interactive map (Leaflet), profiles, news and events, resources, community, Q&A and assessment questionnaires.",{"type":30,"tag":55,"props":299,"children":300},{},[301],{"type":36,"value":302},"The whole interface is multilingual.",{"type":30,"tag":31,"props":304,"children":305},{"id":77},[306],{"type":36,"value":80},{"type":30,"tag":39,"props":308,"children":309},{},[310],{"type":36,"value":311},"The platform is still live and serves the project's international network. It gave me the chance to collaborate with a research centre's distributed development team.",{"title":7,"searchDepth":87,"depth":87,"links":313},[314,315,316],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:edicitnet.md","en\u002Fprojects\u002Fedicitnet.md","en\u002Fprojects\u002Fedicitnet",{"_path":321,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":322,"description":7,"slug":323,"order":324,"category":166,"sector":325,"year":326,"role":169,"status":105,"outstanding":106,"url":327,"image":328,"imageWidth":17,"imageHeight":18,"summary":329,"gallery":330,"technologies":337,"body":340,"_type":92,"_id":397,"_source":94,"_file":398,"_stem":399,"_extension":97},"\u002Fen\u002Fprojects\u002Fnat4wat","Nat4Wat","nat4wat",4,"Research · Water","2023–2025","https:\u002F\u002Fnat4wat.icra.cat","\u002Fimages\u002Fprojects\u002Fnat4wat-2x.webp","ICRA web tool for choosing nature-based solutions to treat, store and reuse water.",[331,334],{"src":332,"width":17,"height":18,"alt":333},"\u002Fimages\u002Fprojects\u002Fnat4wat-solucions.webp","Catalogue of nature-based solutions",{"src":335,"width":17,"height":18,"alt":336},"\u002Fimages\u002Fprojects\u002Fnat4wat-casos.webp","Market cases list with filters",[338,254,339,255],"Nuxt 3","Pinia",{"type":27,"children":341,"toc":392},[342,346,351,355,383,387],{"type":30,"tag":31,"props":343,"children":344},{"id":33},[345],{"type":36,"value":37},{"type":30,"tag":39,"props":347,"children":348},{},[349],{"type":36,"value":350},"Nat4Wat is the tool of the European MULTISOURCE project, funded by the Horizon 2020 programme, that helps municipalities, companies and engineers choose nature-based solutions (such as constructed wetlands) to treat, store and reuse water. The research team's models and data at ICRA had to become a tool that non-specialists could use.",{"type":30,"tag":31,"props":352,"children":353},{"id":46},[354],{"type":36,"value":49},{"type":30,"tag":51,"props":356,"children":357},{},[358,363,368,373,378],{"type":30,"tag":55,"props":359,"children":360},{},[361],{"type":36,"value":362},"As a freelancer, between 2023 and 2025 I built the frontend with Nuxt 3 and Pinia and contributed to the Node.js API, together with the ICRA team.",{"type":30,"tag":55,"props":364,"children":365},{},[366],{"type":36,"value":367},"The core is \"Find your solution\", a step-by-step wizard: users describe their scenario (water, pollutants, available area, priorities) and the tool suggests the most suitable solutions.",{"type":30,"tag":55,"props":369,"children":370},{},[371],{"type":36,"value":372},"Solutions are compared through a multi-criteria analysis with charts, and a report can be generated.",{"type":30,"tag":55,"props":374,"children":375},{},[376],{"type":36,"value":377},"It also includes a catalogue of solutions, scientific publications and market cases, with a workflow to review and publish them.",{"type":30,"tag":55,"props":379,"children":380},{},[381],{"type":36,"value":382},"User profiles, saved scenarios, a helpdesk, guidelines and an FAQ complete the tool, all mobile-friendly.",{"type":30,"tag":31,"props":384,"children":385},{"id":77},[386],{"type":36,"value":80},{"type":30,"tag":39,"props":388,"children":389},{},[390],{"type":36,"value":391},"The tool is public and still live at nat4wat.icra.cat.",{"title":7,"searchDepth":87,"depth":87,"links":393},[394,395,396],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:nat4wat.md","en\u002Fprojects\u002Fnat4wat.md","en\u002Fprojects\u002Fnat4wat",{"_path":401,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":402,"description":7,"slug":403,"order":404,"category":166,"sector":405,"year":406,"role":14,"status":407,"outstanding":6,"url":7,"image":408,"imageWidth":17,"imageHeight":18,"summary":409,"technologies":410,"body":413,"_type":92,"_id":460,"_source":94,"_file":461,"_stem":462,"_extension":97},"\u002Fen\u002Fprojects\u002Fenfaixapp","EnfaixApp","enfaixapp",5,"Folk culture · Human towers","2022","private","\u002Fimages\u002Fprojects\u002Fenfaixapp-2x.webp","App for running a castellers team (human towers): members, rehearsals, attendance and position-by-position tower design.",[21,22,254,411,412],"Vuex","Tailwind CSS",{"type":27,"children":414,"toc":456},[415,419,424,428],{"type":30,"tag":31,"props":416,"children":417},{"id":33},[418],{"type":36,"value":37},{"type":30,"tag":39,"props":420,"children":421},{},[422],{"type":36,"value":423},"Running a castellers team (the Catalan tradition of building human towers) means knowing who will turn up to each rehearsal and performance, and deciding who takes every position in the base and the trunk of each tower. It needed a tool that brought all of this information together in one place.",{"type":30,"tag":31,"props":425,"children":426},{"id":46},[427],{"type":36,"value":49},{"type":30,"tag":51,"props":429,"children":430},{},[431,436,441,446,451],{"type":30,"tag":55,"props":432,"children":433},{},[434],{"type":36,"value":435},"In 2022 I designed and built EnfaixApp, a web app made with Laravel, Vue and Tailwind CSS.",{"type":30,"tag":55,"props":437,"children":438},{},[439],{"type":36,"value":440},"Every member has a profile with the positions they can take in a tower.",{"type":30,"tag":55,"props":442,"children":443},{},[444],{"type":36,"value":445},"A calendar of rehearsals and performances lets everyone confirm whether they will attend, and the organisers see attendance in real time.",{"type":30,"tag":55,"props":447,"children":448},{},[449],{"type":36,"value":450},"The core is a tower designer with templates: each member is assigned to their position, and you can view the whole tower or each person's place in it.",{"type":30,"tag":55,"props":452,"children":453},{},[454],{"type":36,"value":455},"It also includes forms with answers, notifications, a recent activity log and roles with different permissions.",{"title":7,"searchDepth":87,"depth":87,"links":457},[458,459],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},"content:en:projects:enfaixapp.md","en\u002Fprojects\u002Fenfaixapp.md","en\u002Fprojects\u002Fenfaixapp",{"_path":464,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":465,"description":7,"slug":466,"order":467,"category":166,"sector":241,"year":468,"role":14,"status":407,"outstanding":6,"url":7,"image":469,"imageWidth":17,"imageHeight":18,"summary":470,"gallery":471,"technologies":475,"body":476,"_type":92,"_id":528,"_source":94,"_file":529,"_stem":530,"_extension":97},"\u002Fen\u002Fprojects\u002Ficra-workshop","Participatory workshop tool","icra-workshop",6,"2023","\u002Fimages\u002Fprojects\u002Ficra-workshop-2x.webp","Interactive ICRA tool to collect votes in workshops and prioritise benefits, drawbacks and indicators.",[472],{"src":473,"width":17,"height":18,"alt":474},"\u002Fimages\u002Fprojects\u002Ficra-workshop-top10.webp","Ranking of the 10 most-voted aspects in a workshop (sample data)",[338,254,339,412],{"type":27,"children":477,"toc":523},[478,482,487,491,514,518],{"type":30,"tag":31,"props":479,"children":480},{"id":33},[481],{"type":36,"value":37},{"type":30,"tag":39,"props":483,"children":484},{},[485],{"type":36,"value":486},"In ICRA's participatory workshops, attendees rate the benefits and drawbacks of different solutions for the city. The team needed a tool to enter votes live and quickly see which aspects were the priority and which indicators could measure them.",{"type":30,"tag":31,"props":488,"children":489},{"id":46},[490],{"type":36,"value":49},{"type":30,"tag":51,"props":492,"children":493},{},[494,499,504,509],{"type":30,"tag":55,"props":495,"children":496},{},[497],{"type":36,"value":498},"It was a one-off commission: I built a web app with Nuxt 3, Pinia and Tailwind CSS.",{"type":30,"tag":55,"props":500,"children":501},{},[502],{"type":36,"value":503},"Benefits are grouped into environmental and socio-economic, with drawbacks listed separately. Votes are entered for each one, and custom fields can be added during the workshop.",{"type":30,"tag":55,"props":505,"children":506},{},[507],{"type":36,"value":508},"With one click, the tool ranks the 10 most-voted aspects and shows their related indicators in charts.",{"type":30,"tag":55,"props":510,"children":511},{},[512],{"type":36,"value":513},"Indicators and their relationships are loaded from CSV files prepared by the research team, so they can be updated without touching the code.",{"type":30,"tag":31,"props":515,"children":516},{"id":77},[517],{"type":36,"value":80},{"type":30,"tag":39,"props":519,"children":520},{},[521],{"type":36,"value":522},"It was a private tool built for the ICRA team, refined over time with feedback from the workshops.",{"title":7,"searchDepth":87,"depth":87,"links":524},[525,526,527],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:icra-workshop.md","en\u002Fprojects\u002Ficra-workshop.md","en\u002Fprojects\u002Ficra-workshop",{"_path":532,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":533,"description":7,"slug":534,"order":535,"category":11,"sector":536,"year":537,"role":14,"status":105,"outstanding":6,"url":538,"image":539,"imageWidth":540,"imageHeight":541,"summary":542,"gallery":543,"technologies":553,"body":554,"_type":92,"_id":606,"_source":94,"_file":607,"_stem":608,"_extension":97},"\u002Fen\u002Fprojects\u002Fhostal-bartis","Hostal Bartis","hostal-bartis",7,"Tourism","2020","https:\u002F\u002Fhostalbartis.com","\u002Fimages\u002Fprojects\u002Fhostal-bartis-home.webp",3578,1882,"Website for a family-run hostel to showcase its rooms and services and receive booking requests.",[544,547,550],{"src":545,"width":17,"height":18,"alt":546},"\u002Fimages\u002Fprojects\u002Fhostal-bartis-habitacions.webp","Rooms page",{"src":548,"width":17,"height":18,"alt":549},"\u002Fimages\u002Fprojects\u002Fhostal-bartis-doble.webp","Double room page with photo gallery",{"src":551,"width":17,"height":18,"alt":552},"\u002Fimages\u002Fprojects\u002Fhostal-bartis-historia.webp","Hostel history page",[21,22,23,111,24],{"type":27,"children":555,"toc":601},[556,560,565,569,592,596],{"type":30,"tag":31,"props":557,"children":558},{"id":33},[559],{"type":36,"value":37},{"type":30,"tag":39,"props":561,"children":562},{},[563],{"type":36,"value":564},"Hostal Bartis, a family business in Figueres founded in 1909, needed a website that conveyed the feel of the place, showcased its rooms and services, and let it receive booking requests directly instead of relying only on booking platforms.",{"type":30,"tag":31,"props":566,"children":567},{"id":46},[568],{"type":36,"value":49},{"type":30,"tag":51,"props":570,"children":571},{},[572,577,582,587],{"type":30,"tag":55,"props":573,"children":574},{},[575],{"type":36,"value":576},"I designed and built the site with Laravel and Bootstrap, fully mobile-friendly.",{"type":30,"tag":55,"props":578,"children":579},{},[580],{"type":36,"value":581},"I built it on my own CMS so the owners could update texts, photos and rooms from an admin panel.",{"type":30,"tag":55,"props":583,"children":584},{},[585],{"type":36,"value":586},"Content was available in Catalan, Spanish and English, with foreign visitors in mind.",{"type":30,"tag":55,"props":588,"children":589},{},[590],{"type":36,"value":591},"I added a contact and booking request form.",{"type":30,"tag":31,"props":593,"children":594},{"id":77},[595],{"type":36,"value":80},{"type":30,"tag":39,"props":597,"children":598},{},[599],{"type":36,"value":600},"The site has been online since 2020, and the owners have managed its content on their own ever since.",{"title":7,"searchDepth":87,"depth":87,"links":602},[603,604,605],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:hostal-bartis.md","en\u002Fprojects\u002Fhostal-bartis.md","en\u002Fprojects\u002Fhostal-bartis",{"_path":610,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":611,"description":7,"slug":612,"order":613,"category":11,"sector":614,"year":615,"role":14,"status":15,"outstanding":6,"url":7,"image":616,"imageWidth":17,"imageHeight":18,"summary":617,"technologies":618,"body":619,"_type":92,"_id":666,"_source":94,"_file":667,"_stem":668,"_extension":97},"\u002Fen\u002Fprojects\u002Fmerce-paytuvi","Mercè Paytuví","merce-paytuvi",8,"Textile craft","2019","\u002Fimages\u002Fprojects\u002Fmerce-paytuvi-2x.webp","Website and blog for a textile artisan from Mont-ras, with two versions between 2019 and 2023.",[21,22,23,111,24],{"type":27,"children":620,"toc":661},[621,625,630,634,652,656],{"type":30,"tag":31,"props":622,"children":623},{"id":33},[624],{"type":36,"value":37},{"type":30,"tag":39,"props":626,"children":627},{},[628],{"type":36,"value":629},"Mercè Paytuví is a textile artisan from Mont-ras who wanted to showcase her work, explain her creative process and publish news without asking for help every time.",{"type":30,"tag":31,"props":631,"children":632},{"id":46},[633],{"type":36,"value":49},{"type":30,"tag":51,"props":635,"children":636},{},[637,642,647],{"type":30,"tag":55,"props":638,"children":639},{},[640],{"type":36,"value":641},"In 2019 I built the first version of the site with Laravel, in Catalan and English. It was one of the first projects where I used my own CMS.",{"type":30,"tag":55,"props":643,"children":644},{},[645],{"type":36,"value":646},"Between 2022 and 2023 I rebuilt it with a new Bootstrap 5 design, and added a blog with categories plus Spanish.",{"type":30,"tag":55,"props":648,"children":649},{},[650],{"type":36,"value":651},"She could update texts, images and blog posts herself from the admin panel.",{"type":30,"tag":31,"props":653,"children":654},{"id":77},[655],{"type":36,"value":80},{"type":30,"tag":39,"props":657,"children":658},{},[659],{"type":36,"value":660},"It was a collaboration over several years that grew alongside her project. The website is no longer online.",{"title":7,"searchDepth":87,"depth":87,"links":662},[663,664,665],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:merce-paytuvi.md","en\u002Fprojects\u002Fmerce-paytuvi.md","en\u002Fprojects\u002Fmerce-paytuvi",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"slug":9,"order":10,"category":11,"sector":12,"year":13,"role":14,"status":15,"outstanding":6,"url":7,"image":16,"imageWidth":17,"imageHeight":18,"summary":19,"technologies":670,"body":671,"_type":92,"_id":93,"_source":94,"_file":95,"_stem":96,"_extension":97},[21,22,23,24,25],{"type":27,"children":672,"toc":712},[673,677,681,685,704,708],{"type":30,"tag":31,"props":674,"children":675},{"id":33},[676],{"type":36,"value":37},{"type":30,"tag":39,"props":678,"children":679},{},[680],{"type":36,"value":43},{"type":30,"tag":31,"props":682,"children":683},{"id":46},[684],{"type":36,"value":49},{"type":30,"tag":51,"props":686,"children":687},{},[688,692,696,700],{"type":30,"tag":55,"props":689,"children":690},{},[691],{"type":36,"value":59},{"type":30,"tag":55,"props":693,"children":694},{},[695],{"type":36,"value":64},{"type":30,"tag":55,"props":697,"children":698},{},[699],{"type":36,"value":69},{"type":30,"tag":55,"props":701,"children":702},{},[703],{"type":36,"value":74},{"type":30,"tag":31,"props":705,"children":706},{"id":77},[707],{"type":36,"value":80},{"type":30,"tag":39,"props":709,"children":710},{},[711],{"type":36,"value":85},{"title":7,"searchDepth":87,"depth":87,"links":713},[714,715,716],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},{"_path":718,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":719,"description":7,"slug":720,"order":721,"category":11,"sector":722,"year":13,"role":14,"status":15,"outstanding":6,"url":7,"image":723,"imageWidth":17,"imageHeight":18,"summary":724,"gallery":725,"technologies":729,"body":732,"_type":92,"_id":779,"_source":94,"_file":780,"_stem":781,"_extension":97},"\u002Fen\u002Fprojects\u002Fdavid-busquets","David Busquets","david-busquets",10,"Music","\u002Fimages\u002Fprojects\u002Fdavidbusquets-2x.webp","Website for a musician with a gallery, music videos, a playlist and tour dates.",[726],{"src":727,"width":17,"height":18,"alt":728},"\u002Fimages\u002Fprojects\u002Fdavidbusquets-albums.webp","Albums section with links to music platforms",[254,730,731],"Tailwind","Vite",{"type":27,"children":733,"toc":774},[734,738,743,747,765,769],{"type":30,"tag":31,"props":735,"children":736},{"id":33},[737],{"type":36,"value":37},{"type":30,"tag":39,"props":739,"children":740},{},[741],{"type":36,"value":742},"Musician David Busquets wanted a lightweight website bringing all his work together: music, videos, photos and upcoming gigs.",{"type":30,"tag":31,"props":744,"children":745},{"id":46},[746],{"type":36,"value":49},{"type":30,"tag":51,"props":748,"children":749},{},[750,755,760],{"type":30,"tag":55,"props":751,"children":752},{},[753],{"type":36,"value":754},"I built a single-page application with Vue 3, Vite and Tailwind CSS, fast and mobile-friendly.",{"type":30,"tag":55,"props":756,"children":757},{},[758],{"type":36,"value":759},"I created dedicated components: photo gallery, music videos, playlist and a gig calendar.",{"type":30,"tag":55,"props":761,"children":762},{},[763],{"type":36,"value":764},"The site was multilingual, switching language without reloading the page.",{"type":30,"tag":31,"props":766,"children":767},{"id":77},[768],{"type":36,"value":80},{"type":30,"tag":39,"props":770,"children":771},{},[772],{"type":36,"value":773},"The site brought all of the musician's work together in one place. It is no longer online.",{"title":7,"searchDepth":87,"depth":87,"links":775},[776,777,778],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:david-busquets.md","en\u002Fprojects\u002Fdavid-busquets.md","en\u002Fprojects\u002Fdavid-busquets",{"_path":783,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":784,"description":7,"slug":785,"order":786,"category":11,"sector":787,"year":788,"role":14,"status":105,"outstanding":6,"url":789,"image":790,"imageWidth":791,"imageHeight":792,"summary":793,"technologies":794,"body":800,"_type":92,"_id":852,"_source":94,"_file":853,"_stem":854,"_extension":97},"\u002Fen\u002Fprojects\u002Fdavid-crous","David Crous","david-crous",11,"Personal portfolio","2026","https:\u002F\u002Fcrousmayne.com","\u002Fimages\u002Fprojects\u002Fdavidcrous-home.webp",3582,1870,"This very website: static, in three languages and hosted on Cloudflare Pages.",[338,795,796,797,798,799],"Vue 3","Tailwind 4","Nuxt Content","Nuxt i18n","Figma",{"type":27,"children":801,"toc":847},[802,806,811,815,838,842],{"type":30,"tag":31,"props":803,"children":804},{"id":33},[805],{"type":36,"value":37},{"type":30,"tag":39,"props":807,"children":808},{},[809],{"type":36,"value":810},"My previous website depended on a CMS with a server and a database. I wanted something faster, easier to maintain and free to keep online.",{"type":30,"tag":31,"props":812,"children":813},{"id":46},[814],{"type":36,"value":49},{"type":30,"tag":51,"props":816,"children":817},{},[818,823,828,833],{"type":30,"tag":55,"props":819,"children":820},{},[821],{"type":36,"value":822},"I redesigned and rebuilt it from scratch with Nuxt 3, Tailwind 4 and Nuxt Content, with all content in Markdown files.",{"type":30,"tag":55,"props":824,"children":825},{},[826],{"type":36,"value":827},"Every page is generated as static HTML, in Catalan, Spanish and English.",{"type":30,"tag":55,"props":829,"children":830},{},[831],{"type":36,"value":832},"It is hosted on Cloudflare Pages: it publishes automatically with every change and measures visits without cookies.",{"type":30,"tag":55,"props":834,"children":835},{},[836],{"type":36,"value":837},"It has per-language SEO (hreflang, sitemap and Schema.org) and a hero with an interactive particle animation.",{"type":30,"tag":31,"props":839,"children":840},{"id":77},[841],{"type":36,"value":80},{"type":30,"tag":39,"props":843,"children":844},{},[845],{"type":36,"value":846},"It is the website you are looking at right now.",{"title":7,"searchDepth":87,"depth":87,"links":848},[849,850,851],{"id":33,"depth":87,"text":37},{"id":46,"depth":87,"text":49},{"id":77,"depth":87,"text":80},"content:en:projects:david-crous.md","en\u002Fprojects\u002Fdavid-crous.md","en\u002Fprojects\u002Fdavid-crous",1791375140464]