{"@context":"https://schema.org","@graph":[{"@type":"Person","@id":"https://raphael-balet.ch/#person","name":"Raphaël Balet","givenName":"Raphaël","familyName":"Balet","url":"https://raphael-balet.ch","image":"https://raphael-balet.ch/img/me/raphael-balet.webp","description":"Raphaël Balet is a Design Engineer based in Sion, Switzerland, working with Angular, React, TypeScript, product design, and technical leadership.","jobTitle":"Design Engineer","email":"mailto:raphael.balet@outlook.com","telephone":"+41 78 827 49 59","address":{"@type":"PostalAddress","streetAddress":"Rue de St-Guérin 6","postalCode":"1950","addressLocality":"Sion","addressRegion":"Valais","addressCountry":"CH"},"contactPoint":{"@type":"ContactPoint","contactType":"professional inquiries","email":"raphael.balet@outlook.com","telephone":"+41 78 827 49 59","availableLanguage":["French","German","English"]},"knowsAbout":["Angular","TypeScript","React","TanStack","Node.js","NestJS","Golang","Ionic","Capacitor","CI/CD","Technical leadership"],"knowsLanguage":["French","German","English","Spanish"],"sameAs":["https://github.com/rbalet/","https://www.linkedin.com/in/rapha%C3%ABl-balet-3bab2a107/","https://x.com/RaphaelBalet","https://www.facebook.com/profile.php?id=100009909909955","https://www.instagram.com/raphaelbalet/"]},{"@type":"WebSite","@id":"https://raphael-balet.ch/#website","url":"https://raphael-balet.ch","name":"Raphaël Balet","alternateName":"raphaelbalet.ch","description":"Raphaël Balet is a Design Engineer based in Sion, Switzerland, working with Angular, React, TypeScript, product design, and technical leadership.","inLanguage":["en","fr","de"],"publisher":{"@id":"https://raphael-balet.ch/#person"}},{"@type":"ProfilePage","@id":"https://raphael-balet.ch/en/about-me#profile-page","url":"https://raphael-balet.ch/en/about-me","name":"About Raphaël Balet, Design Engineer and former CEO | Raphaël Balet","description":"The work, lessons, languages, and interests that shaped the Swiss Design Engineer and former CEO Raphaël Balet.","inLanguage":"en","isPartOf":{"@id":"https://raphael-balet.ch/#website"},"mainEntity":{"@id":"https://raphael-balet.ch/#person"}},{"@type":"ItemList","@id":"https://raphael-balet.ch/en/creations#open-source-projects","name":"Raphaël Balet open-source projects","itemListElement":[{"@type":"ListItem","position":1,"item":{"@type":"SoftwareSourceCode","name":"Ngx-translate-multi-http-loader","description":"Angular, translation, multi HTTP loader","codeRepository":"https://github.com/rbalet/ngx-translate-multi-http-loader","image":"https://raphael-balet.ch/img/websites/ngx-translate-multi-http-loader.webp","programmingLanguage":"TypeScript","author":{"@id":"https://raphael-balet.ch/#person"}}},{"@type":"ListItem","position":2,"item":{"@type":"SoftwareSourceCode","name":"Ngx-mat-input-tel","description":"Angular Material international phone input","codeRepository":"https://github.com/rbalet/ngx-mat-input-tel","image":"https://raphael-balet.ch/img/websites/ngx-mat-input-tel.webp","programmingLanguage":"TypeScript","author":{"@id":"https://raphael-balet.ch/#person"}}},{"@type":"ListItem","position":3,"item":{"@type":"SoftwareSourceCode","name":"Ngx-href","description":"Dynamic href for Angular","codeRepository":"https://github.com/rbalet/ngx-href","image":"https://raphael-balet.ch/img/websites/ngx-href.webp","programmingLanguage":"TypeScript","author":{"@id":"https://raphael-balet.ch/#person"}}},{"@type":"ListItem","position":4,"item":{"@type":"SoftwareSourceCode","name":"Ngx-back-button","description":"Back button for Angular","codeRepository":"https://github.com/rbalet/ngx-back-button","image":"https://raphael-balet.ch/img/websites/ngx-back-button.webp","programmingLanguage":"TypeScript","author":{"@id":"https://raphael-balet.ch/#person"}}},{"@type":"ListItem","position":5,"item":{"@type":"SoftwareSourceCode","name":"Ngx-kjua","description":"QR codes for Angular","codeRepository":"https://github.com/werthdavid/ngx-kjua","image":"https://raphael-balet.ch/img/websites/ngx-kjua.webp","programmingLanguage":"TypeScript","author":{"@id":"https://raphael-balet.ch/#person"}}}]},{"@type":"ItemList","@id":"https://raphael-balet.ch/en/creations#work","name":"Raphaël Balet development work","itemListElement":[{"@type":"ListItem","position":1,"item":{"@type":"CreativeWork","name":"Back office","headline":"Complex SaaS products","description":"I've helped build several SaaS products and the back offices behind them. Each one gave the team clear control over its users and data. Most of that work is covered by NDAs, so I can't share screenshots here.","keywords":"User roles, Cross-platform, Customizable, Extensible, Plugin-based","url":"https://raphael-balet.ch/en/creations#title-0","creator":{"@id":"https://raphael-balet.ch/#person"}}},{"@type":"ListItem","position":2,"item":{"@type":"CreativeWork","name":"Hybrid applications","headline":"Built for Android and iOS","description":"I've built several Android and iOS apps with Angular, Ionic, and Capacitor. One delivery setup shipped more than 30 updates at the press of a button. A few apps connected to their own back office, which let the team update content or configuration without releasing a new version. Those apps belong to clients, so the screenshots stay private.","keywords":"Angular, Ionic, Capacitor, Android, iOS, Fastlane, CI/CD","url":"https://raphael-balet.ch/en/creations#title-1","creator":{"@id":"https://raphael-balet.ch/#person"}}},{"@type":"ListItem","position":3,"item":{"@type":"CreativeWork","name":"Custom websites","headline":"Built from scratch","description":"I've built many multilingual websites from scratch, with search and accessibility considered from the beginning. I care about fast pages. SSR, sensible lazy loading, and lightweight assets have helped several sites score above 90 in Google PageSpeed Insights. Client work stays private, so I can only share a small part of it here.","keywords":"Angular, Localized, Optimized, SEO, SSR, Deferred loading, Lazy loading, PageSpeed Insights, PWA","url":"https://raphael-balet.ch/en/creations#title-2","creator":{"@id":"https://raphael-balet.ch/#person"}}},{"@type":"ListItem","position":4,"item":{"@type":"CreativeWork","name":"Handmade CMS","headline":"A custom WordPress-like CMS","description":"I helped build a custom CMS that several clients still use. It offers the familiar parts of WordPress, with features and plugins made for each client's needs. Building it from scratch taught us more about Angular than any tutorial could. This is private client work too, so I can't show it here.","keywords":"Angular, Customizable, Plugin-based, CMS, SEO, Prerender, Recursion","url":"https://raphael-balet.ch/en/creations#title-3","creator":{"@id":"https://raphael-balet.ch/#person"}}},{"@type":"ListItem","position":5,"item":{"@type":"CreativeWork","name":"Open source","headline":"Shared when it can save someone time","description":"I publish small tools when I think another developer might find them useful. If something I've learned can save someone else a few hours, I'd rather share it.","keywords":"Angular, Material, QR code, Stack Overflow, Open source","url":"https://raphael-balet.ch/en/creations#title-4","creator":{"@id":"https://raphael-balet.ch/#person"}}}]},{"@type":"ItemList","@id":"https://raphael-balet.ch/en/tech-stack#technologies","name":"Raphaël Balet technology stack","itemListElement":[{"@type":"DefinedTerm","name":"Angular","url":"https://angular.dev/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"React","url":"https://react.dev/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"RxJS","url":"https://rxjs.dev/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"TanStack","url":"https://tanstack.com/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Vite","url":"https://vite.dev/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Nx","url":"https://nx.dev/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"ESLint","url":"https://eslint.org/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"TypeScript","url":"https://www.typescriptlang.org/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"JavaScript","url":"https://developer.mozilla.org/docs/Web/JavaScript","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Capacitor","url":"https://capacitorjs.com/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Ionic","url":"https://ionicframework.com/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Electron","url":"https://www.electronjs.org/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Bootstrap 5","url":"https://getbootstrap.com/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Tailwind CSS","url":"https://tailwindcss.com/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Sass","url":"https://sass-lang.com/","inDefinedTermSet":"Front-end"},{"@type":"DefinedTerm","name":"Animations","url":"https://angular.dev/guide/animations","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"Bootstrap","url":"https://ng-bootstrap.github.io/","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"Forms","url":"https://angular.dev/guide/forms","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"i18n","url":"https://angular.dev/guide/i18n","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"Karma","url":"https://karma-runner.github.io/","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"Material","url":"https://material.angular.io/","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"PWA","url":"https://angular.dev/ecosystem/service-workers","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"Universal","url":"https://angular.dev/guide/ssr","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"Formly","url":"https://formly.dev/","inDefinedTermSet":"Angular"},{"@type":"DefinedTerm","name":"Golang","url":"https://go.dev/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"Nest.js","url":"https://nestjs.com/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"Express.js","url":"https://expressjs.com/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"Node.js","url":"https://nodejs.org/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"Better Auth","url":"https://better-auth.com/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"Prisma","url":"https://www.prisma.io/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"PHP","url":"https://www.php.net/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"MySQL","url":"https://www.mysql.com/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"Firebase","url":"https://firebase.google.com/","inDefinedTermSet":"Back-end"},{"@type":"DefinedTerm","name":"Git","url":"https://git-scm.com/","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"npm","url":"https://www.npmjs.com/","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"pnpm","url":"https://pnpm.io/","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"Webpack","url":"https://webpack.js.org/","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"GitHub Workflows","url":"https://github.com/features/actions","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"GitLab CI/CD","url":"https://about.gitlab.com/","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"Jenkins","url":"https://www.jenkins.io/","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"Semantic Release","url":"https://semantic-release.gitbook.io/","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"Husky","url":"https://typicode.github.io/husky/","inDefinedTermSet":"DevOps"},{"@type":"DefinedTerm","name":"Figma","url":"https://www.figma.com/","inDefinedTermSet":"Design"},{"@type":"DefinedTerm","name":"Adobe XD","url":"https://helpx.adobe.com/xd/get-started.html","inDefinedTermSet":"Design"},{"@type":"DefinedTerm","name":"Illustrator","url":"https://www.adobe.com/products/illustrator.html","inDefinedTermSet":"Design"},{"@type":"DefinedTerm","name":"ClickUp","url":"https://clickup.com/","inDefinedTermSet":"Team tools"},{"@type":"DefinedTerm","name":"Trello","url":"https://trello.com/","inDefinedTermSet":"Team tools"},{"@type":"DefinedTerm","name":"Slack","url":"https://slack.com/","inDefinedTermSet":"Team tools"},{"@type":"DefinedTerm","name":"TMetric","url":"https://tmetric.com/","inDefinedTermSet":"Team tools"},{"@type":"DefinedTerm","name":"Pipedrive","url":"https://www.pipedrive.com/","inDefinedTermSet":"Team tools"},{"@type":"DefinedTerm","name":"Monday","url":"https://monday.com/","inDefinedTermSet":"Team tools"},{"@type":"DefinedTerm","name":"Atlassian","url":"https://www.atlassian.com/","inDefinedTermSet":"Team tools"},{"@type":"DefinedTerm","name":"VS Code","url":"https://code.visualstudio.com/","inDefinedTermSet":"Tools"},{"@type":"DefinedTerm","name":"Postman","url":"https://www.postman.com/","inDefinedTermSet":"Tools"},{"@type":"DefinedTerm","name":"Insomnia","url":"https://insomnia.rest/","inDefinedTermSet":"Tools"},{"@type":"DefinedTerm","name":"Notion","url":"https://www.notion.so/","inDefinedTermSet":"Tools"},{"@type":"DefinedTerm","name":"Google Workspace","url":"https://workspace.google.com/","inDefinedTermSet":"Tools"},{"@type":"DefinedTerm","name":"Microsoft 365","url":"https://www.microsoft.com/microsoft-365","inDefinedTermSet":"Tools"}]},{"@type":"ItemList","@id":"https://raphael-balet.ch/en#pages","name":"Raphaël Balet portfolio pages","itemListElement":[{"@type":"ListItem","position":1,"item":{"@type":"WebPage","url":"https://raphael-balet.ch/en","name":"Design Engineer in Switzerland","description":"Raphaël Balet is a Design Engineer based in Sion, Switzerland, working with Angular, React, TypeScript, product design, and technical leadership.","inLanguage":"en","isPartOf":{"@id":"https://raphael-balet.ch/#website"}}},{"@type":"ListItem","position":2,"item":{"@type":"WebPage","url":"https://raphael-balet.ch/en/tech-stack","name":"Tools I use to design and build","description":"A practical look at the Angular, React, back-end, DevOps, and design tools Raphaël Balet uses for web and mobile products.","inLanguage":"en","isPartOf":{"@id":"https://raphael-balet.ch/#website"}}},{"@type":"ListItem","position":3,"item":{"@type":"WebPage","url":"https://raphael-balet.ch/en/creations","name":"Web, mobile, and open-source projects","description":"SaaS products, mobile apps, custom websites, CMS platforms, and open-source Angular tools built by Raphaël Balet.","inLanguage":"en","isPartOf":{"@id":"https://raphael-balet.ch/#website"}}},{"@type":"ListItem","position":4,"item":{"@type":"WebPage","url":"https://raphael-balet.ch/en/about-me","name":"About Raphaël Balet, Design Engineer and former CEO","description":"The work, lessons, languages, and interests that shaped the Swiss Design Engineer and former CEO Raphaël Balet.","inLanguage":"en","isPartOf":{"@id":"https://raphael-balet.ch/#website"}}},{"@type":"ListItem","position":5,"item":{"@type":"WebPage","url":"https://raphael-balet.ch/en/my-vision","name":"Raphaël Balet's approach to technology","description":"Raphaël Balet's personal view on sustainable technology, useful products, business, and the thoughtful use of AI.","inLanguage":"en","isPartOf":{"@id":"https://raphael-balet.ch/#website"}}},{"@type":"ListItem","position":6,"item":{"@type":"WebPage","url":"https://raphael-balet.ch/en/contact","name":"Contact Raphaël Balet","description":"Contact Raphaël Balet in Sion about product design, Angular, React, technical leadership, or a project you would like to discuss.","inLanguage":"en","isPartOf":{"@id":"https://raphael-balet.ch/#website"}}}]}]}