[{"data":1,"prerenderedAt":2177},["ShallowReactive",2],{"navigation":3,"\u002Fworks":46},[4],{"title":5,"path":6,"stem":7,"children":8,"page":45},"Works","\u002Fworks","works",[9,13,17,21,25,29,33,37,41],{"title":10,"path":11,"stem":12},"Currencia","\u002Fworks\u002Fcurrencia","works\u002Fcurrencia",{"title":14,"path":15,"stem":16},"Folio Magazine","\u002Fworks\u002Ffolio-magazine","works\u002Ffolio-magazine",{"title":18,"path":19,"stem":20},"Helpr","\u002Fworks\u002Fhelpr","works\u002Fhelpr",{"title":22,"path":23,"stem":24},"IV Patisserie","\u002Fworks\u002Fiv-patisserie","works\u002Fiv-patisserie",{"title":26,"path":27,"stem":28},"Mockline","\u002Fworks\u002Fmockline","works\u002Fmockline",{"title":30,"path":31,"stem":32},"Portfolio","\u002Fworks\u002Fportfolio","works\u002Fportfolio",{"title":34,"path":35,"stem":36},"Raftou - Mobile Game","\u002Fworks\u002Fraftou","works\u002Fraftou",{"title":38,"path":39,"stem":40},"Raycast x Bambulab","\u002Fworks\u002Fraycast-bambulab","works\u002Fraycast-bambulab",{"title":42,"path":43,"stem":44},"Combat Robot","\u002Fworks\u002Frobot","works\u002Frobot",false,[47,297,463,677,851,1085,1228,1565,1765],{"id":48,"title":10,"authors":49,"body":61,"contextPreview":281,"date":282,"description":283,"extension":284,"image":285,"meta":286,"minRead":287,"navigation":113,"path":11,"roles":288,"seo":290,"stem":12,"teamName":291,"technologies":292,"url":294,"year":295,"__hash__":296},"works\u002Fworks\u002Fcurrencia.md",[50,56],{"name":51,"to":52,"target":53,"avatar":54},"Johann Cavallucci","https:\u002F\u002Fx.com\u002FJohannCVL","_blank",{"src":55,"alt":51},"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72015679?v=4",{"name":57,"to":58,"target":53,"avatar":59},"Hugo Richard","https:\u002F\u002Fx.com\u002FHugoRCD__",{"src":60,"alt":57},"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F71938701?v=4",{"type":62,"value":63,"toc":272},"minimark",[64,69,74,87,93,96,100,107,121,123,127,207,209,213,226,228,232,245,247],[65,66,68],"h1",{"id":67},"crypto-tracker-currencia","Crypto Tracker – Currencia",[70,71,73],"h2",{"id":72},"overview","Overview",[75,76,77,78,81,82,86],"p",{},"Currencia is a platform designed to track cryptocurrencies with a clean and elegant interface.",[79,80],"br",{},"\nThe application includes scripts to collect data from multiple sources such as ",[83,84,85],"strong",{},"Kraken, CryptoCompare, and CoinMarketCap",", allowing for accurate and real-time information to be displayed.",[75,88,89,90,92],{},"Today, the application is no longer connected to its backend, but the UI\u002FUX, dashboard, and data handling remain strong examples of the work achieved.",[79,91],{},"\nBelow are screenshots and a live demo preview.",[94,95],"hr",{},[70,97,99],{"id":98},"preview","Preview",[75,101,102],{},[103,104],"img",{"alt":105,"src":106},"image","\u002Fassets\u002Fworks\u002Fcurrencia\u002Fcurrencia-home.webp",[75,108,109],{},[110,111],"video",{"src":112,"autoPlay":113,"loop":113,"muted":113,"playsInline":113,"className":114},"\u002Fassets\u002Fworks\u002Fcurrencia\u002Fcurrencia.mov",true,[115,116,117,118,119,120],"rounded-lg","shadow-lg","w-full","max-w-4xl","mx-auto","my-6",[94,122],{},[70,124,126],{"id":125},"technologies-used","Technologies Used",[128,129,130,143],"table",{},[131,132,133],"thead",{},[134,135,136,140],"tr",{},[137,138,139],"th",{},"Technology",[137,141,142],{},"Role",[144,145,146,157,167,177,187,197],"tbody",{},[134,147,148,154],{},[149,150,151],"td",{},[83,152,153],{},"Nuxt.js",[149,155,156],{},"Front-end framework",[134,158,159,164],{},[149,160,161],{},[83,162,163],{},"Tailwind",[149,165,166],{},"Styling and responsive design",[134,168,169,174],{},[149,170,171],{},[83,172,173],{},"TypeScript",[149,175,176],{},"Type safety and maintainability",[134,178,179,184],{},[149,180,181],{},[83,182,183],{},"Resend",[149,185,186],{},"Contact email management",[134,188,189,194],{},[149,190,191],{},[83,192,193],{},"Bun",[149,195,196],{},"Fast JavaScript runtime",[134,198,199,204],{},[149,200,201],{},[83,202,203],{},"RabbitMQ",[149,205,206],{},"Queue system for background tasks",[94,208],{},[70,210,212],{"id":211},"challenges","Challenges",[214,215,216,220,223],"ul",{},[217,218,219],"li",{},"Designing aesthetic and functional charts for crypto data",[217,221,222],{},"Handling and optimizing large datasets",[217,224,225],{},"Ensuring a smooth real-time tracking experience",[94,227],{},[70,229,231],{"id":230},"conclusion","Conclusion",[75,233,234,235,238,239,241,242,244],{},"Currencia was a very enriching project that pushed me to work with multiple data sources and learn how to ",[83,236,237],{},"manipulate, optimize, and display large volumes of data",".",[79,240],{},"\nIt was also a great opportunity to strengthen my skills in building a polished user interface while managing complex background processes.",[79,243],{},"\nOverall, this project represents an important step in my journey, and I am proud of the work accomplished.",[94,246],{},[248,249,255,256,255,268],"a",{"href":250,"target":53,"className":251},"https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fcurrencia",[252,253,254],"flex","items-center","space-x-2","\n  ",[257,258,263,264,255],"svg",{"width":259,"height":259,"viewBox":260,"fill":261,"xmlns":262},"24","0 0 24 24","currentColor","http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","\n    ",[265,266],"path",{"d":267},"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2",[269,270,271],"span",{},"Currencia on GitHub",{"title":273,"searchDepth":274,"depth":274,"links":275},"",2,[276,277,278,279,280],{"id":72,"depth":274,"text":73},{"id":98,"depth":274,"text":99},{"id":125,"depth":274,"text":126},{"id":211,"depth":274,"text":212},{"id":230,"depth":274,"text":231},"Crypto tracker project built in 2024 with Nuxt, Tailwind, TypeScript, and RabbitMQ; focused on real-time data aggregation, dashboard UX, and large dataset performance, and collaboration with Hugo Richard in 2024.","2024-01-23","Simple yet beautiful crypto tracker template","md","\u002Fassets\u002Fworks\u002Fcurrencia.webp",{},5,[289],"Full Stack",{"title":10,"description":283},"Team",[293,203,163],"Nuxt","https:\u002F\u002Fcurrencia.hrcd.fr\u002F","2024","RLoFYIHwaKowb6bh1sUqPlhPMD7yKY9MK-4zhzXSfMk",{"id":298,"title":14,"authors":299,"body":302,"contextPreview":450,"date":451,"description":452,"extension":284,"image":453,"meta":454,"minRead":287,"navigation":113,"path":15,"roles":455,"seo":457,"stem":16,"teamName":458,"technologies":459,"url":461,"year":295,"__hash__":462},"works\u002Fworks\u002Ffolio-magazine.md",[300],{"name":51,"to":52,"target":53,"avatar":301},{"src":55,"alt":51},{"type":62,"value":303,"toc":444},[304,308,310,331,333,335,393,395,397,413,415,417,431,433],[65,305,307],{"id":306},"a-creative-portfolio-experience","A Creative Portfolio Experience",[70,309,73],{"id":72},[75,311,312,313,316,317,319,320,323,324,326,327,330],{},"This personal portfolio project aims to showcase my work in a ",[83,314,315],{},"creative and intuitive way",", inspired by modern magazines.",[79,318],{},"\nI wanted to make it ",[83,321,322],{},"open source",", allowing others to get inspired or use it as a base for their own portfolios.",[79,325],{},"\nEach “magazine page” is an individual PNG image, which means even users with ",[83,328,329],{},"limited technical skills"," can add their own pages and use it as their personal portfolio.",[94,332],{},[70,334,126],{"id":125},[128,336,337,345],{},[131,338,339],{},[134,340,341,343],{},[137,342,139],{},[137,344,142],{},[144,346,347,356,365,375,385],{},[134,348,349,353],{},[149,350,351],{},[83,352,153],{},[149,354,355],{},"Front-end framework for fast and reactive rendering",[134,357,358,363],{},[149,359,360],{},[83,361,362],{},"Tailwind CSS",[149,364,166],{},[134,366,367,372],{},[149,368,369],{},[83,370,371],{},"Figma",[149,373,374],{},"UI\u002FUX design and mockup creation",[134,376,377,382],{},[149,378,379],{},[83,380,381],{},"Vercel",[149,383,384],{},"Full website hosting and deployment",[134,386,387,391],{},[149,388,389],{},[83,390,183],{},[149,392,186],{},[94,394],{},[70,396,212],{"id":211},[214,398,399,406],{},[217,400,401,402,405],{},"Designing an interface that ",[83,403,404],{},"resembles a magazine"," while remaining functional and easy to navigate.",[217,407,408,409,412],{},"Ensuring a ",[83,410,411],{},"responsive design"," that keeps the magazine look consistent across all devices.",[94,414],{},[70,416,231],{"id":230},[75,418,419,420,423,424,426,427,430],{},"This project allowed me to practice ",[83,421,422],{},"web development and design skills",", while creating a portfolio based on an idea I had and successfully realized.",[79,425],{},"\nGoing from concept to finished product is always rewarding, and I hope this project inspires other developers to explore ",[83,428,429],{},"creative approaches"," for their own portfolios.",[94,432],{},[248,434,255,437,255,441],{"href":435,"target":53,"className":436},"https:\u002F\u002Fgithub.com\u002Fcavalluccijohann\u002FPortfolio-Magazine",[252,253,254],[257,438,263,439,255],{"width":259,"height":259,"viewBox":260,"fill":261,"xmlns":262},[265,440],{"d":267},[269,442,443],{},"Folio Magazine on GitHub",{"title":273,"searchDepth":274,"depth":274,"links":445},[446,447,448,449],{"id":72,"depth":274,"text":73},{"id":125,"depth":274,"text":126},{"id":211,"depth":274,"text":212},{"id":230,"depth":274,"text":231},"Open-source magazine-style portfolio built with Nuxt, Tailwind, and TypeScript, focused on creative UI\u002FUX, responsive design, and easy content customization through image-based pages in 2024.","2024-02-15","A creative twist on the traditional portfolio, presenting work through an intuitive magazine interface","\u002Fassets\u002Fworks\u002FfolioMagazine.webp",{},[289,456],"UI\u002FUX Designer",{"title":14,"description":452},"Author",[293,163,460],"Typescript","https:\u002F\u002Ffoliomagazine.johanncvl.com\u002F","ATuKGYFI4fsSkMhkK7cDw7MfwDNo9watYPDVzm_edzY",{"id":464,"title":18,"authors":465,"body":475,"contextPreview":665,"date":666,"description":667,"extension":284,"image":668,"meta":669,"minRead":287,"navigation":113,"path":19,"roles":670,"seo":671,"stem":20,"teamName":291,"technologies":672,"url":674,"year":675,"__hash__":676},"works\u002Fworks\u002Fhelpr.md",[466,468,470],{"name":51,"to":52,"target":53,"avatar":467},{"src":55,"alt":51},{"name":57,"to":58,"target":53,"avatar":469},{"src":60,"alt":57},{"name":471,"to":472,"target":53,"avatar":473},"Paul Marniquet","https:\u002F\u002Fx.com\u002Fbypaulzer",{"src":474,"alt":471},"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72015483?v=4",{"type":62,"value":476,"toc":659},[477,481,483,491,505,509,578,580,582,610,612,614,621,628,639,646,648],[65,478,480],{"id":479},"automating-workflows","Automating Workflows",[70,482,73],{"id":72},[75,484,485,487,488,490],{},[83,486,18],{}," is a platform designed to automate tasks by connecting various applications, allowing users to create powerful workflows with ease.",[79,489],{},"\nBy integrating tools such as GitHub, Gmail, Linear, or Slack, Helpr streamlines processes and helps teams focus on what really matters — building, not repeating.",[75,492,493,494,497,498,500,501,504],{},"This project was developed as part of a ",[83,495,496],{},"team assignment at Epitech",", but we approached it as much more than just a school project.",[79,499],{},"\nOur goal was to build something that could evolve into a ",[83,502,503],{},"real SaaS product",", with simplicity and efficiency at its core.",[70,506,508],{"id":507},"️-technologies-used","️ Technologies Used",[128,510,511,519],{},[131,512,513],{},[134,514,515,517],{},[137,516,139],{},[137,518,142],{},[144,520,521,531,540,548,558,568],{},[134,522,523,528],{},[149,524,525],{},[83,526,527],{},"Vue.js",[149,529,530],{},"Core JavaScript framework for building the UI",[134,532,533,537],{},[149,534,535],{},[83,536,153],{},[149,538,539],{},"Front-end framework for server-side rendering and routing",[134,541,542,546],{},[149,543,544],{},[83,545,362],{},[149,547,166],{},[134,549,550,555],{},[149,551,552],{},[83,553,554],{},"Nest.js",[149,556,557],{},"Back-end framework for building scalable APIs",[134,559,560,565],{},[149,561,562],{},[83,563,564],{},"Prisma",[149,566,567],{},"ORM for managing database interactions",[134,569,570,575],{},[149,571,572],{},[83,573,574],{},"PostgreSQL",[149,576,577],{},"Relational database for storing application data",[94,579],{},[70,581,212],{"id":211},[214,583,584,590,600],{},[217,585,586,589],{},[83,587,588],{},"Building value through actions & services",": we wanted Helpr to offer a wide range of integrations so that the platform would provide real utility to users.",[217,591,592,595,596,599],{},[83,593,594],{},"Differentiating from Zapier",": at the time, we even added numerous actions powered by ",[83,597,598],{},"OpenAI",", before Zapier themselves had integrated them!",[217,601,602,605,606,609],{},[83,603,604],{},"Design & identity",": beyond functionality, we aimed to give Helpr a strong ",[83,607,608],{},"visual identity"," and a polished user experience, making it feel like a real SaaS product.",[94,611],{},[70,613,231],{"id":230},[75,615,616,617,620],{},"This project was ",[83,618,619],{},"led by Hugo RCD",", who introduced me to many of the technologies we used. It truly ignited my passion for working with modern stacks such as Vue, Nuxt, Nest.js, and Prisma.",[75,622,623,624,627],{},"Helpr was my ",[83,625,626],{},"first large-scale project",", and it became a real turning point:",[214,629,630,633,636],{},[217,631,632],{},"I discovered how exciting it is to combine design, product thinking, and technical challenges.",[217,634,635],{},"I learned an incredible amount about both front-end and back-end development.",[217,637,638],{},"Most importantly, I gained the confidence to tackle ambitious projects.",[75,640,641,642,645],{},"We are ",[83,643,644],{},"extremely proud of what we built"," together, and I see Helpr as the project that sparked many of the skills and ambitions I continue to develop today.",[94,647],{},[248,649,255,652,255,656],{"href":650,"target":53,"className":651},"https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fhelpr",[252,253,254],[257,653,263,654,255],{"width":259,"height":259,"viewBox":260,"fill":261,"xmlns":262},[265,655],{"d":267},[269,657,658],{},"Helpr on GitHub",{"title":273,"searchDepth":274,"depth":274,"links":660},[661,662,663,664],{"id":72,"depth":274,"text":73},{"id":507,"depth":274,"text":508},{"id":211,"depth":274,"text":212},{"id":230,"depth":274,"text":231},"Team-built workflow automation platform using Nuxt, NestJS, Prisma, and PostgreSQL; focused on app integrations, SaaS product design, scalable full-stack development and team collaboration in an Epitech project led by Hugo RCD in 2023.","2023-03-23","Automation tools connecting various applications to create powerful workflows","\u002Fassets\u002Fworks\u002Fhelpr.webp",{},[289],{"title":18,"description":667},[293,163,673],"NestJS","https:\u002F\u002Fhelpr.hrcd.fr\u002F","2023","IzK8RQUBZhk3rNdxgYLEs8RNVoTOqdXPf5puKClLcsE",{"id":678,"title":22,"authors":679,"body":682,"contextPreview":842,"date":451,"description":843,"extension":284,"image":844,"meta":845,"minRead":287,"navigation":113,"path":23,"roles":846,"seo":847,"stem":24,"teamName":458,"technologies":848,"url":849,"year":295,"__hash__":850},"works\u002Fworks\u002Fiv-patisserie.md",[680],{"name":51,"to":52,"target":53,"avatar":681},{"src":55,"alt":51},{"type":62,"value":683,"toc":835},[684,688,690,704,706,710,720,722,724,788,790,792,812,814,818],[65,685,687],{"id":686},"elegant-patisserie-website","Elegant Patisserie Website",[70,689,73],{"id":72},[75,691,692,693,696,697,700,701,703],{},"A showcase website for a ",[83,694,695],{},"modern patisserie",", designed to highlight each product in an ",[83,698,699],{},"elegant and minimalistic"," way.",[79,702],{},"\nThe project aimed to create a pleasant visual experience for visitors while providing the client with an easy-to-manage website.",[94,705],{},[70,707,709],{"id":708},"design","Design",[75,711,712,713,716,717,719],{},"I first created a ",[83,714,715],{},"mockup on Figma",", aiming to best reflect the client’s vision.",[79,718],{},"\nThe design prioritizes simplicity, readability, and elegance to showcase the products effectively.",[94,721],{},[70,723,126],{"id":125},[128,725,726,734],{},[131,727,728],{},[134,729,730,732],{},[137,731,139],{},[137,733,142],{},[144,735,736,744,754,762,770,780],{},[134,737,738,742],{},[149,739,740],{},[83,741,153],{},[149,743,355],{},[134,745,746,751],{},[149,747,748],{},[83,749,750],{},"Strapi",[149,752,753],{},"Headless CMS, allowing the client to easily manage content",[134,755,756,760],{},[149,757,758],{},[83,759,362],{},[149,761,166],{},[134,763,764,768],{},[149,765,766],{},[83,767,371],{},[149,769,374],{},[134,771,772,777],{},[149,773,774],{},[83,775,776],{},"VPS",[149,778,779],{},"Full hosting of the website",[134,781,782,786],{},[149,783,784],{},[83,785,183],{},[149,787,186],{},[94,789],{},[70,791,212],{"id":211},[214,793,794,800,806],{},[217,795,796,799],{},[83,797,798],{},"CMS choice",": after testing several options, Strapi was the most suitable for a client-manageable site.",[217,801,802,805],{},[83,803,804],{},"Minimalist design",": creating an elegant style while highlighting the products and staying true to the client’s vision.",[217,807,808,811],{},[83,809,810],{},"Full project management",": from design to deployment, coordinating and tracking all steps to achieve a professional result.",[94,813],{},[70,815,817],{"id":816},"final-result","Final Result",[214,819,820,823,826,832],{},[217,821,822],{},"An elegant and fully functional website, easy for the client to manage.",[217,824,825],{},"Mockup faithfully realized according to the initial vision.",[217,827,828,829,238],{},"First end-to-end client project, with ",[83,830,831],{},"full client satisfaction",[217,833,834],{},"Key learnings: UI\u002FUX design, modern web development, and full project management from A to Z.",{"title":273,"searchDepth":274,"depth":274,"links":836},[837,838,839,840,841],{"id":72,"depth":274,"text":73},{"id":708,"depth":274,"text":709},{"id":125,"depth":274,"text":126},{"id":211,"depth":274,"text":212},{"id":816,"depth":274,"text":817},"[object Object]","Elegant simplicity meets effective design in this modern patisserie website","\u002Fassets\u002Fworks\u002Fiv-patisserie.webp",{},[289,456],{"title":22,"description":843},[293,750,163,371],"https:\u002F\u002Fivpatisserie.com","aXQwCDgPQ7NAMmEEeXnOS3Q9YL-KCaLnqcFzJkuFE64",{"id":852,"title":26,"authors":853,"body":858,"contextPreview":1074,"date":1075,"description":1076,"extension":284,"image":1077,"meta":1078,"minRead":287,"navigation":113,"path":27,"roles":1079,"seo":1080,"stem":28,"teamName":291,"technologies":1081,"url":1082,"year":1083,"__hash__":1084},"works\u002Fworks\u002Fmockline.md",[854,856],{"name":51,"to":52,"target":53,"avatar":855},{"src":55,"alt":51},{"name":57,"to":58,"target":53,"avatar":857},{"src":60,"alt":57},{"type":62,"value":859,"toc":1068},[860,864,866,885,902,907,909,911,997,999,1001,1015,1017,1019,1025,1036,1039,1041,1052,1054],[65,861,863],{"id":862},"mockline-modern-ui-component-library","Mockline – Modern UI component library",[70,865,73],{"id":72},[75,867,868,870,871,873,874,877,878,881,882,238],{},[83,869,26],{}," is a modern, multi-framework component library, developed as a final-year project.",[79,872],{},"\nThe goal was to create a library similar to ",[83,875,876],{},"NuxtUI"," or ",[83,879,880],{},"RadixUI",", but usable across ",[83,883,884],{},"Nuxt, Vue, React, and Next",[75,886,887,888,891,892,238,895,897,898,901],{},"The ambition was to deliver a ",[83,889,890],{},"modern, minimal design"," combined with an excellent ",[83,893,894],{},"DX (Developer Experience)",[79,896],{},"\nThe project was initiated and led by ",[83,899,900],{},"HugoRCD",". While not 100% complete, it already provides a solid foundation with a clean structure, making it easy and practical to add new components.",[75,903,904],{},[103,905],{"alt":105,"src":906},"\u002Fassets\u002Fworks\u002Fexample-components.webp",[94,908],{},[70,910,126],{"id":125},[128,912,913,921],{},[131,914,915],{},[134,916,917,919],{},[137,918,139],{},[137,920,142],{},[144,922,923,932,945,957,967,977,987],{},[134,924,925,929],{},[149,926,927],{},[83,928,173],{},[149,930,931],{},"Type safety and robustness",[134,933,934,942],{},[149,935,936,938,939],{},[83,937,293],{}," \u002F ",[83,940,941],{},"Vue",[149,943,944],{},"Targeted front-end frameworks",[134,946,947,955],{},[149,948,949,938,952],{},[83,950,951],{},"Next",[83,953,954],{},"React",[149,956,944],{},[134,958,959,964],{},[149,960,961],{},[83,962,963],{},"TailwindCSS v4",[149,965,966],{},"Modern and minimal styling",[134,968,969,974],{},[149,970,971],{},[83,972,973],{},"Tailwind Merge",[149,975,976],{},"Tailwind class management",[134,978,979,984],{},[149,980,981],{},[83,982,983],{},"Tailwind Variants",[149,985,986],{},"Component variants management",[134,988,989,994],{},[149,990,991],{},[83,992,993],{},"Turborepo",[149,995,996],{},"Monorepo and project organization",[94,998],{},[70,1000,212],{"id":211},[214,1002,1003,1009],{},[217,1004,1005,1008],{},[83,1006,1007],{},"Building the core foundation"," of the library: ensuring new components could be added quickly and efficiently.",[217,1010,1011,1014],{},[83,1012,1013],{},"Multi-framework support",": managing compatibility across four environments (Nuxt, Vue, React, Next) in a single library.",[94,1016],{},[70,1018,231],{"id":230},[75,1020,1021,1022,1024],{},"Mockline was one of the most ambitious projects we set out to build.",[79,1023],{},"\nAlthough we don’t plan to maintain it long-term, it was an incredibly valuable learning experience.",[75,1026,1027,1028,1031,1032,1035],{},"The project reached a ",[83,1029,1030],{},"fully functional state for Vue and Nuxt",", while the ",[83,1033,1034],{},"React and Next versions",", though working, were not as fully developed.",[75,1037,1038],{},"In short: an ambitious, challenging, and highly rewarding project that pushed us forward technically and gave us deeper insights into multi-framework development.",[94,1040],{},[248,1042,255,1045,255,1049],{"href":1043,"target":53,"className":1044},"https:\u002F\u002Fgithub.com\u002FMockline\u002Fmockline",[252,253,254],[257,1046,263,1047,255],{"width":259,"height":259,"viewBox":260,"fill":261,"xmlns":262},[265,1048],{"d":267},[269,1050,1051],{},"Mockline on GitHub",[79,1053],{},[248,1055,255,1058,255,1065],{"href":1056,"target":53,"className":1057},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@mockline\u002Futils",[252,253,254],[257,1059,1062],{"width":1060,"height":1060,"viewBox":1061,"xmlns":262},"22","0 0 512 512",[265,1063],{"fill":261,"d":1064},"M71.609 112.569v286.649h143.432v-215.04h71.608v215.04h71.608V112.569zM430.08 40.96v430.08H0V40.96z",[269,1066,1067],{},"Mockline on NPM",{"title":273,"searchDepth":274,"depth":274,"links":1069},[1070,1071,1072,1073],{"id":72,"depth":274,"text":73},{"id":125,"depth":274,"text":126},{"id":211,"depth":274,"text":212},{"id":230,"depth":274,"text":231},"Ambitious multi-framework component library built with TypeScript, Tailwind, and Turborepo, focused on design-system consistency, DX, shared components across Nuxt\u002FVue\u002FReact\u002FNext in a team led by Hugo RCD in 2025.","2025-04-30","Modern UI component library focused on developer experience and design consistency.","\u002Fassets\u002Fworks\u002Fmockline.webp",{},[289,456],{"title":26,"description":1076},[293,163,173],"https:\u002F\u002Fmockline.hrcd.fr\u002F","2025","qkeAN3zeUKzb1r2cwbck8u1s239Di7YL72L9d0iWG5Q",{"id":1086,"title":30,"authors":1087,"body":1090,"contextPreview":1218,"date":1219,"description":1220,"extension":284,"image":1221,"meta":1222,"minRead":287,"navigation":113,"path":31,"roles":1223,"seo":1224,"stem":32,"teamName":458,"technologies":1225,"url":1226,"year":675,"__hash__":1227},"works\u002Fworks\u002Fportfolio.md",[1088],{"name":51,"to":52,"target":53,"avatar":1089},{"src":55,"alt":51},{"type":62,"value":1091,"toc":1212},[1092,1094,1096,1109,1111,1113,1165,1167,1169,1183,1185,1187,1199,1201],[65,1093,307],{"id":306},[70,1095,73],{"id":72},[75,1097,1098,1099,1102,1103,1105,1106,1108],{},"This is my first portfolio project. I wanted to create something ",[83,1100,1101],{},"simple yet effective",", while also making it ",[83,1104,322],{}," so others could get inspired or use it as a base for their own portfolios.",[79,1107],{},"\nIt includes all the essential features: a contact form, an “About Me” page, and a projects page.",[94,1110],{},[70,1112,508],{"id":507},[128,1114,1115,1123],{},[131,1116,1117],{},[134,1118,1119,1121],{},[137,1120,139],{},[137,1122,142],{},[144,1124,1125,1133,1141,1149,1157],{},[134,1126,1127,1131],{},[149,1128,1129],{},[83,1130,153],{},[149,1132,355],{},[134,1134,1135,1139],{},[149,1136,1137],{},[83,1138,362],{},[149,1140,166],{},[134,1142,1143,1147],{},[149,1144,1145],{},[83,1146,371],{},[149,1148,374],{},[134,1150,1151,1155],{},[149,1152,1153],{},[83,1154,381],{},[149,1156,384],{},[134,1158,1159,1163],{},[149,1160,1161],{},[83,1162,183],{},[149,1164,186],{},[94,1166],{},[70,1168,212],{"id":211},[214,1170,1171,1177],{},[217,1172,1173,1176],{},[83,1174,1175],{},"Designing something that reflects who I am"," – I wanted my portfolio to truly feel personal and represent me.",[217,1178,1179,1182],{},[83,1180,1181],{},"Owning my work"," – At the time I built this portfolio, I only had a few projects. Publishing a portfolio with so little might seem risky or even “ridiculous,” but I realized you have to start somewhere.",[94,1184],{},[70,1186,231],{"id":230},[75,1188,1189,1190,238,1193,1195,1196,1198],{},"This project was an opportunity to build something that ",[83,1191,1192],{},"represents me as a developer",[79,1194],{},"\nIt gave me a space to showcase my work, no matter how small, and create a personal “vitrine” I can be proud of.",[79,1197],{},"\nThis portfolio is very important to me, and I hope you enjoy discovering it as much as I enjoyed creating it.",[94,1200],{},[248,1202,255,1205,255,1209],{"href":1203,"target":53,"className":1204},"https:\u002F\u002Fgithub.com\u002Fcavalluccijohann\u002Fportfolio-johann",[252,253,254],[257,1206,263,1207,255],{"width":259,"height":259,"viewBox":260,"fill":261,"xmlns":262},[265,1208],{"d":267},[269,1210,1211],{},"Portfolio on GitHub",{"title":273,"searchDepth":274,"depth":274,"links":1213},[1214,1215,1216,1217],{"id":72,"depth":274,"text":73},{"id":507,"depth":274,"text":508},{"id":211,"depth":274,"text":212},{"id":230,"depth":274,"text":231},"First open-source portfolio by Johann; a Nuxt\u002FTailwind personal website with about, projects, and contact pages, focused on simple UX, personal branding, and initial professional presence in 2023.","2023-12-20","A simple yet effective personal site developed with Nuxt.js. My first step into professional web presence.","\u002Fassets\u002Fworks\u002Fportfolio.png",{},[289,456],{"title":30,"description":1220},[293,163,460],"https:\u002F\u002Fboilerplatefolio.johanncvl.com\u002F","hIHE_7n1HOVn14cstyAjSIJehYVkLIRn_VowKz9QDw8",{"id":1229,"title":34,"authors":1230,"body":1233,"contextPreview":1550,"date":1551,"description":1552,"extension":284,"image":1553,"meta":1554,"minRead":1555,"navigation":113,"path":35,"roles":1556,"seo":1557,"stem":36,"teamName":458,"technologies":1558,"url":1562,"year":1563,"__hash__":1564},"works\u002Fworks\u002Fraftou.md",[1231],{"name":51,"to":52,"target":53,"avatar":1232},{"src":55,"alt":51},{"type":62,"value":1234,"toc":1543},[1235,1239,1242,1245,1248,1252,1255,1258,1302,1305,1310,1314,1462,1464,1468,1471,1485,1489,1492,1495,1498,1500,1514,1516,1529,1531],[70,1236,1238],{"id":1237},"the-concept","The Concept",[75,1240,1241],{},"This game comes from a simple idea: what if we could establish an \"ongoing background game\" during vacations, parties, or even in everyday couple life? The goal of Raftou is to launch a game that runs parallel to a real-life moment, to make it even more fun and unpredictable.",[75,1243,1244],{},"So I decided to take action, grab this idea, and see it through to the end. Raftou represents 5 months of intense work: from conception to publication on the app stores, including design, architecture, development, and marketing.",[75,1246,1247],{},"It's a game that allows you to play with your friends or as a couple, anywhere and anytime. You create a game, invite your friends, and then everyone chooses the challenges they want to include or creates custom ones. Then, you just have to send these challenges to your targets and complete them to earn points. This concept turns simple moments (like a museum visit or a subway ride) into a real adventure.",[70,1249,1251],{"id":1250},"design-features","Design & Features",[75,1253,1254],{},"The entire application design was done by me, mainly on Figma. I sought to find the perfect balance between a simple, clean interface and an immersive gaming experience. Every logo, color, and animation was thought out to strengthen Raftou's visual identity and make navigation smooth.",[75,1256,1257],{},"Today, Raftou offers many features:",[214,1259,1260,1266,1272,1278,1284,1290,1296],{},[217,1261,1262,1265],{},[83,1263,1264],{},"Custom creation:"," The ability to create your own cards and challenges.",[217,1267,1268,1271],{},[83,1269,1270],{},"A large library:"," Over 400 cards spread across different categories (Party, Vacation, Couple, Friends...).",[217,1273,1274,1277],{},[83,1275,1276],{},"Customization:"," Theme switching (Dark mode \u002F Light mode) adapted to the player's environment.",[217,1279,1280,1283],{},[83,1281,1282],{},"Immersion:"," Sound effects, background music, and haptic feedback (vibrations).",[217,1285,1286,1289],{},[83,1287,1288],{},"Massive multiplayer:"," Games that can host up to 13 people simultaneously.",[217,1291,1292,1295],{},[83,1293,1294],{},"Strategy:"," The ability to counter an attack using the special \"Reverse\" card.",[217,1297,1298,1301],{},[83,1299,1300],{},"Longevity:"," \"Ongoing\" games that can last up to 1 year.",[75,1303,1304],{},"And new features are already under development...",[75,1306,1307],{},[103,1308],{"alt":105,"src":1309},"\u002Fassets\u002Fworks\u002Fraftou\u002FscreenShoots.webp",[70,1311,1313],{"id":1312},"technical-stack-architecture","Technical Stack & Architecture",[128,1315,1316,1325],{},[131,1317,1318],{},[134,1319,1320,1322],{},[137,1321,139],{},[137,1323,1324],{},"Role in the project",[144,1326,1327,1337,1346,1356,1365,1375,1385,1395,1405,1414,1424,1434,1444,1453],{},[134,1328,1329,1334],{},[149,1330,1331],{},[83,1332,1333],{},"React Native \u002F Expo",[149,1335,1336],{},"Cross-platform mobile application development",[134,1338,1339,1343],{},[149,1340,1341],{},[83,1342,173],{},[149,1344,1345],{},"Strict typing and end-to-end code safety",[134,1347,1348,1353],{},[149,1349,1350],{},[83,1351,1352],{},"Hono & Zod",[149,1354,1355],{},"Creation of the ultra-fast Backend API and data validation",[134,1357,1358,1362],{},[149,1359,1360],{},[83,1361,362],{},[149,1363,1364],{},"Design integration and component styling",[134,1366,1367,1372],{},[149,1368,1369],{},[83,1370,1371],{},"EAS (Expo)",[149,1373,1374],{},"CI\u002FCD, build management, and store deployment",[134,1376,1377,1382],{},[149,1378,1379],{},[83,1380,1381],{},"Nuxt 3",[149,1383,1384],{},"Creation of the showcase Landing Page and SEO optimization",[134,1386,1387,1392],{},[149,1388,1389],{},[83,1390,1391],{},"Better Auth",[149,1393,1394],{},"Secure player authentication management",[134,1396,1397,1402],{},[149,1398,1399],{},[83,1400,1401],{},"Socket.io",[149,1403,1404],{},"Real-time management for multiplayer interactions",[134,1406,1407,1411],{},[149,1408,1409],{},[83,1410,183],{},[149,1412,1413],{},"Management and sending of transactional emails",[134,1415,1416,1421],{},[149,1417,1418],{},[83,1419,1420],{},"Mongo & PostgreSQL",[149,1422,1423],{},"Databases (SQL for relational data, NoSQL for game flexibility)",[134,1425,1426,1431],{},[149,1427,1428],{},[83,1429,1430],{},"Linear",[149,1432,1433],{},"Agile project management, issue tracking, and roadmap",[134,1435,1436,1441],{},[149,1437,1438],{},[83,1439,1440],{},"GitHub",[149,1442,1443],{},"Code versioning, repository hosting, and collaboration",[134,1445,1446,1450],{},[149,1447,1448],{},[83,1449,371],{},[149,1451,1452],{},"UI\u002FUX design, screen prototyping, and graphic asset creation",[134,1454,1455,1459],{},[149,1456,1457],{},[83,1458,776],{},[149,1460,1461],{},"Hosting of the backend infrastructure (Hono API, Socket.io, Databases)",[94,1463],{},[70,1465,1467],{"id":1466},"challenges-development-deployment","Challenges (Development & Deployment)",[75,1469,1470],{},"Building a project of this scale solo was a real technical and creative challenge:",[214,1472,1473,1479],{},[217,1474,1475,1478],{},[83,1476,1477],{},"UI\u002FUX Design:"," Not being a professional designer, finding a design consistent with the game's concept that could appeal to a wide audience required many iterations. I had to do dozens of tests to find the right balance between simplicity and immersion.",[217,1480,1481,1484],{},[83,1482,1483],{},"Global Architecture:"," Connecting a real-time mobile app with a robust backend and two different types of databases was a real puzzle. I had to structure the project smartly to make it scalable.",[70,1486,1488],{"id":1487},"conclusion-and-next-steps","Conclusion and Next Steps",[75,1490,1491],{},"I am extremely proud of the final result. My initial goal was to create a complete product from A to Z and learn by doing. It's a total success: I have never learned as much as I did with Raftou.",[75,1493,1494],{},"This project forced me out of my developer comfort zone to touch on all the professions related to creating a technological product: UI\u002FUX Design, system architecture, mobile and real-time backend development, DevOps (CI\u002FCD), marketing, and store compliance. What I take away from this is not just the live application today, but the entire journey and the experience accumulated to get there.",[75,1496,1497],{},"Moving forward, I plan to improve the product by offering new special cards, new themes, and above all, focus my efforts on growing the Raftou player community!",[94,1499],{},[248,1501,1504,1510,1511],{"href":1502,"target":53,"className":1503},"https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fraftou-jeu-de-soir%C3%A9e\u002Fid6760556703",[252,253,254],[257,1505,1506],{"width":259,"height":259,"viewBox":260,"xmlns":262},[265,1507],{"fill":261,"fillRule":1508,"d":1509,"clipRule":1508},"evenodd","M10.58 1.87a1.25 1.25 0 1 0-2.16 1.26l2.133 3.656l-4.354 7.464H2a1.25 1.25 0 1 0 0 2.5h11a1.25 1.25 0 1 0 0-2.5H9.093l3.973-6.811l.026-.044L15.58 3.13a1.25 1.25 0 1 0-2.16-1.26L12 4.305zm4.5 7.714l2.72 4.666H22a1.25 1.25 0 1 1 0 2.5h-2.74l1.82 3.12a1.25 1.25 0 1 1-2.16 1.26l-2.887-4.95a1 1 0 0 1-.06-.104l-3.053-5.232a1.25 1.25 0 1 1 2.16-1.26m-9 9.832a1.25 1.25 0 0 0-2.16-1.26l-1 1.714a1.25 1.25 0 0 0 2.16 1.26z","  ",[269,1512,1513],{},"App Store",[79,1515],{},[248,1517,1520,1521,255,1526],{"href":1518,"target":53,"className":1519},"https:\u002F\u002Fwww.raftou.com",[252,253,254],"\n ",[257,1522,1523],{"width":259,"height":259,"viewBox":260,"xmlns":262},[265,1524],{"fill":261,"d":1525},"M16.36 14c.08-.66.14-1.32.14-2s-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2m-5.15 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95a8.03 8.03 0 0 1-4.33 3.56M14.34 14H9.66c-.1-.66-.16-1.32-.16-2s.06-1.35.16-2h4.68c.09.65.16 1.32.16 2s-.07 1.34-.16 2M12 19.96c-.83-1.2-1.5-2.53-1.91-3.96h3.82c-.41 1.43-1.08 2.76-1.91 3.96M8 8H5.08A7.92 7.92 0 0 1 9.4 4.44C8.8 5.55 8.35 6.75 8 8m-2.92 8H8c.35 1.25.8 2.45 1.4 3.56A8 8 0 0 1 5.08 16m-.82-2C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2s.06 1.34.14 2M12 4.03c.83 1.2 1.5 2.54 1.91 3.97h-3.82c.41-1.43 1.08-2.77 1.91-3.97M18.92 8h-2.95a15.7 15.7 0 0 0-1.38-3.56c1.84.63 3.37 1.9 4.33 3.56M12 2C6.47 2 2 6.5 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2",[269,1527,1528],{},"Landing Page",[79,1530],{},[248,1532,1520,1535,255,1540],{"href":1533,"target":53,"className":1534},"https:\u002F\u002Fwww.instagram.com\u002Fraftou.app\u002F",[252,253,254],[257,1536,1537],{"width":259,"height":259,"viewBox":260,"xmlns":262},[265,1538],{"fill":261,"d":1539},"M7.8 2h8.4C19.4 2 22 4.6 22 7.8v8.4a5.8 5.8 0 0 1-5.8 5.8H7.8C4.6 22 2 19.4 2 16.2V7.8A5.8 5.8 0 0 1 7.8 2m-.2 2A3.6 3.6 0 0 0 4 7.6v8.8C4 18.39 5.61 20 7.6 20h8.8a3.6 3.6 0 0 0 3.6-3.6V7.6C20 5.61 18.39 4 16.4 4zm9.65 1.5a1.25 1.25 0 0 1 1.25 1.25A1.25 1.25 0 0 1 17.25 8A1.25 1.25 0 0 1 16 6.75a1.25 1.25 0 0 1 1.25-1.25M12 7a5 5 0 0 1 5 5a5 5 0 0 1-5 5a5 5 0 0 1-5-5a5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3a3 3 0 0 0 3 3a3 3 0 0 0 3-3a3 3 0 0 0-3-3",[269,1541,1542],{},"Instagram",{"title":273,"searchDepth":274,"depth":274,"links":1544},[1545,1546,1547,1548,1549],{"id":1237,"depth":274,"text":1238},{"id":1250,"depth":274,"text":1251},{"id":1312,"depth":274,"text":1313},{"id":1466,"depth":274,"text":1467},{"id":1487,"depth":274,"text":1488},"Solo end-to-end mobile game product built by Johann in 2026, from concept to App Store release, combining game design, product strategy, and full-stack execution. Covers React Native\u002FExpo architecture, real-time multiplayer backend (Socket.io, Hono), auth, dual database approach (MongoDB + PostgreSQL), CI\u002FCD with EAS, and complete ownership of UI\u002FUX, deployment, and go-to-market assets. Useful for questions about mobile development, real-time systems, product building from A to Z, technical leadership in solo projects, and large-scope delivery across engineering, design, and operations.","2026-03-23","Mobile game available on Android and iOS. Play with friends or as a couple anytime, anywhere.","\u002Fassets\u002Fworks\u002Fraftou\u002Fraftou-site.webp",{},10,[289,456],{"title":34,"description":1552},[1559,460,1560,1561,163],"React Native","Expo & EAS","MongoDB","https:\u002F\u002Fwww.raftou.com\u002F","2026","S4Y-IOquDKn5BLxtnm4AiKTQ41tY0xo39orySTcs_xU",{"id":1566,"title":38,"authors":1567,"body":1570,"contextPreview":1756,"date":1757,"description":1758,"extension":284,"image":1759,"meta":1760,"minRead":287,"navigation":113,"path":39,"roles":1761,"seo":1762,"stem":40,"teamName":458,"technologies":1763,"url":1723,"year":1563,"__hash__":1764},"works\u002Fworks\u002Fraycast-bambulab.md",[1568],{"name":51,"to":52,"target":53,"avatar":1569},{"src":55,"alt":51},{"type":62,"value":1571,"toc":1746},[1572,1576,1578,1581,1584,1586,1590,1627,1632,1634,1684,1686,1688,1702,1704,1706,1709,1712,1714,1719,1721,1733,1735],[65,1573,1575],{"id":1574},"raycast-extension-for-bambulab-3d-printers","Raycast Extension for Bambulab 3D Printers",[70,1577,73],{"id":72},[75,1579,1580],{},"This is my first Raycast extension, designed to enhance the user experience for Bambulab 3D printer owners.\nIt facilitates access to essential information by combining the speed and convenience of Raycast with features specific to Bambulab printers.",[75,1582,1583],{},"I built this tool primarily to streamline my own daily usage. As a heavy Raycast user, I wanted to check temperatures, manage files, or emergency stop a print without leaving my keyboard. This extension bridges the gap between the printer's hardware and the developer's desktop environment.",[94,1585],{},[70,1587,1589],{"id":1588},"features","Features",[214,1591,1592,1598,1609,1615,1621],{},[217,1593,1594,1597],{},[83,1595,1596],{},"Real-time Dashboard",": Instantly view nozzle\u002Fbed temperatures, print progress, and remaining time.",[217,1599,1600,1603,1604,1608],{},[83,1601,1602],{},"Smart File Management",": Browse the printer's SD card via FTP, prioritizing ",[1605,1606,1607],"code",{},".3mf"," projects over raw G-code.",[217,1610,1611,1614],{},[83,1612,1613],{},"Direct Upload",": Send files from the Mac to the printer with a single keystroke.",[217,1616,1617,1620],{},[83,1618,1619],{},"Remote Control",": Pause, Resume, or Emergency Stop the printer. Toggle the chamber light.",[217,1622,1623,1626],{},[83,1624,1625],{},"AMS Integration",": Monitor filament slots, colors, and material types in the Automatic Material System.",[75,1628,1629],{},[103,1630],{"alt":105,"src":1631},"\u002Fassets\u002Fworks\u002Fraycast\u002Fbambulab-print.webp",[70,1633,508],{"id":507},[128,1635,1636,1644],{},[131,1637,1638],{},[134,1639,1640,1642],{},[137,1641,139],{},[137,1643,142],{},[144,1645,1646,1655,1664,1674],{},[134,1647,1648,1652],{},[149,1649,1650],{},[83,1651,954],{},[149,1653,1654],{},"Built the UI components (Lists, Action Panels, Forms) and managed local state.",[134,1656,1657,1661],{},[149,1658,1659],{},[83,1660,173],{},[149,1662,1663],{},"Ensured type safety for MQTT payloads and FTP file structures.",[134,1665,1666,1671],{},[149,1667,1668],{},[83,1669,1670],{},"Raycast API",[149,1672,1673],{},"Leveraged native hooks for navigation, toasts, and OS integration.",[134,1675,1676,1681],{},[149,1677,1678],{},[83,1679,1680],{},"MQTT & FTP",[149,1682,1683],{},"Handled real-time communication (IoT protocol) and file transfer with the hardware.",[94,1685],{},[70,1687,212],{"id":211},[214,1689,1690,1696],{},[217,1691,1692,1695],{},[83,1693,1694],{},"Learning the Raycast API"," – As this was my first Raycast extension, I had to familiarize myself with the API and its capabilities.",[217,1697,1698,1701],{},[83,1699,1700],{},"Reverse Engineering",": Understanding the Bambu Lab LAN protocol (MQTT) to interpret raw JSON payloads for status and AMS data.",[94,1703],{},[70,1705,231],{"id":230},[75,1707,1708],{},"This project was a fantastic introduction to the Raycast ecosystem. It not only improved my personal 3D printing workflow but also taught me a lot about IoT communication within a desktop app context.",[75,1710,1711],{},"I'm already planning future updates and looking forward to building more extensions!",[94,1713],{},[1715,1716,1718],"h3",{"id":1717},"more-than-80-people-have-installed-this-extension","More than 80 people have installed this extension.",[94,1720],{},[248,1722,255,1725,255,1730],{"href":1723,"target":53,"className":1724},"https:\u002F\u002Fwww.raycast.com\u002Fjohancvl\u002Fbambu-lab",[252,253,254],[257,1726,1727],{"width":259,"height":259,"viewBox":260,"xmlns":262},[265,1728],{"fill":261,"d":1729},"M6.004 15.492v2.504L0 11.992l1.258-1.249Zm2.504 2.504H6.004L12.008 24l1.253-1.253zm14.24-4.747L24 11.997L12.003 0L10.75 1.251L15.491 6h-2.865L9.317 2.692L8.065 3.944l2.06 2.06H8.691v9.31H18v-1.432l2.06 2.06l1.252-1.252L18 11.37V8.506ZM6.63 5.372L5.38 6.625l1.342 1.343l1.251-1.253Zm10.655 10.655l-1.247 1.251l1.342 1.343l1.253-1.251zM3.944 8.059L2.692 9.31l3.312 3.314v-2.506zm9.936 9.937h-2.504l3.314 3.312l1.25-1.252z",[269,1731,1732],{},"Store Raycast",[79,1734],{},[248,1736,255,1739,255,1743],{"href":1737,"target":53,"className":1738},"https:\u002F\u002Fgithub.com\u002Fraycast\u002Fextensions\u002Ftree\u002F3ef12fe31effee1dda69c4019b29bd9816eee17d\u002Fextensions\u002Fbambu-lab\u002F",[252,253,254],[257,1740,263,1741,255],{"width":259,"height":259,"viewBox":260,"fill":261,"xmlns":262},[265,1742],{"d":267},[269,1744,1745],{},"Bambulab extension on Github",{"title":273,"searchDepth":274,"depth":274,"links":1747},[1748,1749,1750,1751,1752],{"id":72,"depth":274,"text":73},{"id":1588,"depth":274,"text":1589},{"id":507,"depth":274,"text":508},{"id":211,"depth":274,"text":212},{"id":230,"depth":274,"text":231,"children":1753},[1754],{"id":1717,"depth":1755,"text":1718},3,"Raycast extension for Bambu Lab printers using React, TypeScript, MQTT, and FTP, enabling real-time monitoring, remote controls, and file management from a keyboard-first desktop workflow in 2026.","2026-02-01","A powerful Raycast extension to monitor and control Bambu Lab 3D printers.","\u002Fassets\u002Fworks\u002Fraycast\u002Fbambulab-control.webp",{},[289],{"title":38,"description":1758},[954,460,1670,1680],"-sDkZhPl4wmMJe-7dDi_To8lxigw5ehIOMbUftuQH0w",{"id":1766,"title":42,"authors":1767,"body":1770,"contextPreview":2166,"date":2167,"description":2168,"extension":284,"image":2169,"meta":2170,"minRead":287,"navigation":113,"path":43,"roles":2171,"seo":2172,"stem":44,"teamName":458,"technologies":2173,"url":2142,"year":1083,"__hash__":2176},"works\u002Fworks\u002Frobot.md",[1768],{"name":51,"to":52,"target":53,"avatar":1769},{"src":55,"alt":51},{"type":62,"value":1771,"toc":2151},[1772,1776,1780,1783,1788,1797,1810,1816,1818,1822,1825,1832,1836,1920,1922,1926,1957,1959,1962,1980,1990,1994,2033,2035,2039,2062,2064,2068,2076,2078,2080,2087,2111,2118,2127,2129,2133,2138,2140],[65,1773,1775],{"id":1774},"flamethrower-robot-arduino-combat-bot","Flamethrower Robot – Arduino Combat Bot",[70,1777,1779],{"id":1778},"quick-overview","Quick Overview",[75,1781,1782],{},"This project started as a simple challenge between two friends:",[75,1784,1785],{},[83,1786,1787],{},"Build a combat robot in 2 weeks, with less than €50. Each on our own!",[75,1789,1790,1791,1793,1794,1796],{},"After a lot of brainstorming, I decided to go with a flamethrower.",[79,1792],{},"\nFirst, because well… it’s cool",[79,1795],{},"\nAnd also because fire can slip into every little gap in the opponent’s defenses.",[75,1798,1799,1800,238,1803,1805,1806,1809],{},"But attack alone isn’t enough — I also had to think about ",[83,1801,1802],{},"defense",[79,1804],{},"\nI designed a ",[83,1807,1808],{},"conical shape"," to reduce grip points and deflect attacks, since I had no idea what my opponent was going to build.",[1811,1812,1813],"blockquote",{},[75,1814,1815],{},"Here’s a first glimpse of the BEAST…",[94,1817],{},[70,1819,1821],{"id":1820},"design-components","Design & Components",[75,1823,1824],{},"Having the idea is one thing… but how do you actually build it?",[75,1826,1827,1828,1831],{},"The first step was ",[83,1829,1830],{},"a lot of research"," to identify the most effective components while staying within the tight budget.",[1715,1833,1835],{"id":1834},"hardware-used","Hardware Used",[128,1837,1838,1848],{},[131,1839,1840],{},[134,1841,1842,1845],{},[137,1843,1844],{},"Component",[137,1846,1847],{},"Description",[144,1849,1850,1860,1870,1880,1890,1900,1910],{},[134,1851,1852,1857],{},[149,1853,1854],{},[83,1855,1856],{},"Arduino Uno",[149,1858,1859],{},"Main microcontroller",[134,1861,1862,1867],{},[149,1863,1864],{},[83,1865,1866],{},"HC-05",[149,1868,1869],{},"Bluetooth module for remote control",[134,1871,1872,1877],{},[149,1873,1874],{},[83,1875,1876],{},"L298N H-Bridge",[149,1878,1879],{},"Controls propulsion and motors",[134,1881,1882,1887],{},[149,1883,1884],{},[83,1885,1886],{},"DC Motors + Wheels",[149,1888,1889],{},"Robot movement",[134,1891,1892,1897],{},[149,1893,1894],{},[83,1895,1896],{},"3D-Printed Tank",[149,1898,1899],{},"Fuel storage (isopropanol)",[134,1901,1902,1907],{},[149,1903,1904],{},[83,1905,1906],{},"Electric Arc Igniter",[149,1908,1909],{},"Ignition system for the flame",[134,1911,1912,1917],{},[149,1913,1914],{},[83,1915,1916],{},"18650 Batteries",[149,1918,1919],{},"Power supply",[94,1921],{},[70,1923,1925],{"id":1924},"why-these-choices","Why These Choices?",[214,1927,1928,1933,1939,1945,1951],{},[217,1929,1930,1932],{},[83,1931,1856],{},": inexpensive, easy to program, perfect for prototyping.",[217,1934,1935,1938],{},[83,1936,1937],{},"Bluetooth (HC-05)",": simple integration, direct smartphone control.",[217,1940,1941,1944],{},[83,1942,1943],{},"L298N",": allows independent control of both motors (forward\u002Fbackward\u002Fleft\u002Fright).",[217,1946,1947,1950],{},[83,1948,1949],{},"3D Printing",": crucial for custom fuel tank and structural parts.",[217,1952,1953,1956],{},[83,1954,1955],{},"Arc Igniter",": reliable even in movement, remotely activated, stable ignition.",[94,1958],{},[70,1960,1949],{"id":1961},"_3d-printing",[75,1963,1964,1965,1967,1968,1971,1972,1975,1976,1979],{},"For this project, I modeled and printed most of the parts: from the robot’s base to the pump that sprays fluid.",[79,1966],{},"\nI used ",[83,1969,1970],{},"Fusion 360"," for modeling, ",[83,1973,1974],{},"Bambu Studio slicer",", and the ",[83,1977,1978],{},"Bambu Lab P1P Mini"," printer (amazing machine btw).",[70,1981,1983,1984,1986],{"id":1982},"here-are-some-of-the-printed-partsinsert-images-here","Here are some of the printed parts:",[79,1985],{},[1987,1988,1989],"em",{},"(insert images here)",[70,1991,1993],{"id":1992},"challenges-faced","Challenges Faced",[214,1995,1996,2002,2008,2014,2020],{},[217,1997,1998,2001],{},[83,1999,2000],{},"Time",": 2 weeks working only in the evenings — really short, especially with a flamethrower system.",[217,2003,2004,2007],{},[83,2005,2006],{},"Power",": managing multiple components with a limited battery.",[217,2009,2010,2013],{},[83,2011,2012],{},"Budget",": everything had to be built from scratch (DIY pump, printed frame, etc.).",[217,2015,2016,2019],{},[83,2017,2018],{},"Electronics",": learning to handle power, safety, and proper integration.",[217,2021,2022,2025,2026,2028,2029,2032],{},[83,2023,2024],{},"The Pump",": designing a system able to propel fluid several meters.",[79,2027],{},"\nI modeled it ",[83,2030,2031],{},"from scratch",", and even though first tests were with water, it worked — a small victory!",[94,2034],{},[70,2036,2038],{"id":2037},"what-i-learned","What I Learned",[214,2040,2041,2044,2047,2050,2056],{},[217,2042,2043],{},"How to integrate multiple Arduino modules",[217,2045,2046],{},"Using Bluetooth in embedded projects",[217,2048,2049],{},"Electronics basics: voltage, current, components, safety",[217,2051,2052,2053],{},"Managing a technical project under ",[83,2054,2055],{},"real-world constraints",[217,2057,2058,2059],{},"Fusion 360 modeling & improving my ",[83,2060,2061],{},"3D printing skills",[94,2063],{},[70,2065,2067],{"id":2066},"electronics-schematic","Electronics Schematic",[75,2069,2070,2071,2073],{},"Here’s a schematic of the electronic setup:",[79,2072],{},[1987,2074,2075],{},"(Add a visual here: Fritzing, Lucidchart, or even a hand-drawn diagram)",[94,2077],{},[70,2079,817],{"id":816},[75,2081,2082,2083,2086],{},"The robot is ",[83,2084,2085],{},"fully functional",":",[214,2088,2089,2092,2095,2101],{},[217,2090,2091],{},"Moves in all directions",[217,2093,2094],{},"Controlled remotely via smartphone",[217,2096,2097,2098],{},"Flamethrower system works and is ",[83,2099,2100],{},"safe",[217,2102,2103,2104,2107,2108],{},"Respected the challenge: ",[83,2105,2106],{},"\u003C €50",", ",[83,2109,2110],{},"\u003C 2 weeks",[75,2112,2113,2114,2117],{},"But… I still ",[83,2115,2116],{},"lost"," 😅",[1811,2119,2120],{},[75,2121,2122,2123,2126],{},"💡 Tip: if you ever set up this kind of challenge, agree on a ",[83,2124,2125],{},"size and weight limit"," to avoid unfair advantages!",[94,2128],{},[70,2130,2132],{"id":2131},"gallery","Gallery",[75,2134,2135],{},[1987,2136,2137],{},"(Add photos here: finished robot, inner parts, flame, 3D prints, tests, etc.)",[94,2139],{},[248,2141,255,2144,255,2148],{"href":2142,"target":53,"className":2143},"https:\u002F\u002Fgithub.com\u002Fcavalluccijohann\u002Farduino-robot-david",[252,253,254],[257,2145,263,2146,255],{"width":259,"height":259,"viewBox":260,"fill":261,"xmlns":262},[265,2147],{"d":267},[269,2149,2150],{},"Robot on GitHub",{"title":273,"searchDepth":274,"depth":274,"links":2152},[2153,2154,2157,2158,2159,2161,2162,2163,2164,2165],{"id":1778,"depth":274,"text":1779},{"id":1820,"depth":274,"text":1821,"children":2155},[2156],{"id":1834,"depth":1755,"text":1835},{"id":1924,"depth":274,"text":1925},{"id":1961,"depth":274,"text":1949},{"id":1982,"depth":274,"text":2160},"Here are some of the printed parts:(insert images here)",{"id":1992,"depth":274,"text":1993},{"id":2037,"depth":274,"text":2038},{"id":2066,"depth":274,"text":2067},{"id":816,"depth":274,"text":817},{"id":2131,"depth":274,"text":2132},"Fast-build combat robot project using Arduino, Bluetooth, and 3D printing, focused on embedded control, hardware constraints, and rapid prototyping under tight budget\u002Ftime limits in 2025.","2025-04-00","My first venture into competitive robotics. A mix of engineering challenges and competitive strategy.","\u002Fassets\u002Fworks\u002Frobot.webp",{},[289],{"title":42,"description":2168},[2174,1970,2175],"3D-Printing","Arduino","M4foUeURdi6AfY0Lk17eWKc-J4Q51N5mnAdsuAZjiMs",1778859911645]