index.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <PageMeta
  3. title="Olivier Massot - Fullstack developer"
  4. description=""
  5. />
  6. <div class="banner">
  7. <h1>
  8. {{ $t('Fullstack developer') }}
  9. </h1>
  10. <h2>
  11. {{ $t('x_years_experience', { years: XP_YEARS }) }}
  12. </h2>
  13. <div class="introduction">
  14. <div>
  15. {{ $t('intro_part_1') }}
  16. </div>
  17. <div>
  18. {{ $t('intro_part_2') }}
  19. </div>
  20. <div>
  21. {{ $t('intro_part_3') }}
  22. </div>
  23. <div v-html="$t('intro_part_4')" />
  24. <div>
  25. {{ $t('intro_part_5') }}
  26. </div>
  27. <div class="logos mt-3">
  28. <BannerLogo
  29. href="https://github.com/olinox14"
  30. :img="theme.global.name.value === 'light' ? '/images/logos/github_large_light.png' : '/images/logos/github_large_dark.png'"
  31. :alt="i18n.t('Find me on Github')"
  32. />
  33. <BannerLogo
  34. href="https://stackoverflow.com/users/4279120/olinox14"
  35. img="/images/logos/stackoverflow.svg"
  36. :alt="i18n.t('Find me on Stackoverflow')"
  37. class="so-logo"
  38. />
  39. <BannerLogo
  40. href="https://www.linkedin.com/in/olivier-massot-60b87b181"
  41. img="/images/logos/linkedin.png"
  42. :alt="i18n.t('Find me on LinkedIn')"
  43. />
  44. <BannerLogo
  45. href="https://www.codingame.com/profile/75dcc329745def530c02ddb4485f22235683081"
  46. img="/images/logos/codingame.svg"
  47. :alt="i18n.t('Find me on Codingame')"
  48. />
  49. </div>
  50. </div>
  51. </div>
  52. <div class="badges">
  53. <h3>{{ $t("Competences") }}</h3>
  54. <v-container>
  55. <v-row>
  56. <v-col cols="4">
  57. <div class="badges-section">
  58. <h4>Languages</h4>
  59. <Badge
  60. title="Python"
  61. img="/images/logos/python.svg"
  62. :subtitle="$t('x_years', { years: 10 })"
  63. details="J'ai travaillé sur de très nombreux projets avec Python, depuis la version 2.7 jusqu'à la version 3.12: scripts variés, extensions QGis, projets web, librairies, utilitaires ou applications buraeautiques."
  64. />
  65. <Badge title="PHP" img="/images/logos/php.svg" :subtitle="$t('x_years', { years: 4 })" />
  66. <Badge title="Node.js" :img="theme.global.name.value === 'light' ? '/images/logos/nodejs_light.svg' : '/images/logos/nodejs_dark.svg'" :subtitle="$t('x_years', { years: 5 })" />
  67. <Badge title="C#" img="/images/logos/csharp.png" :subtitle="$t('x_years', { years: 2 })" />
  68. </div>
  69. <div class="badges-section">
  70. <h4>Frameworks</h4>
  71. <Badge title="Symfony" img="/images/logos/symfony.svg" :subtitle="$t('x_years', { years: 4 })" />
  72. <Badge title="Vue.js" img="/images/logos/vue.png" :subtitle="$t('x_years', { years: 3 })" />
  73. <Badge title="Nuxt.js" img="/images/logos/nuxt.svg" :subtitle="$t('x_years', { years: 3 })" />
  74. <Badge title="Django" :img="theme.global.name.value === 'light' ? '/images/logos/django-light.svg' : '/images/logos/django-dark.svg'" :subtitle="$t('x_years', { years: 3 })" />
  75. <Badge title=".Net" img="/images/logos/dotnet.svg" :subtitle="$t('x_years', { years: 2 })" />
  76. <Badge title="Jquery" :img="theme.global.name.value === 'light' ? '/images/logos/jquery.png' : '/images/logos/jquery_dark.png'" :subtitle="$t('x_years', { years: 4 })"/>
  77. </div>
  78. </v-col>
  79. <v-col cols="4">
  80. <div class="badges-section">
  81. <h4>DBs and search-engines</h4>
  82. <Badge title="Mysql" img="/images/logos/mysql.png" :subtitle="$t('x_years', { years: 6 })" />
  83. <Badge title="MariaDb" :img="theme.global.name.value === 'light' ? '/images/logos/mariadb.svg': '/images/logos/mariadb_dark.svg'" :subtitle="$t('x_years', { years: 6 })" />
  84. <Badge title="Postgresql" img="/images/logos/postgresql.svg" :subtitle="$t('x_years', { years: 5 })"/>
  85. <Badge title="SQL-Server" img="/images/logos/sql-server.svg" :subtitle="$t('x_years', { years: 6 })" />
  86. <Badge title="Sqlite" img="/images/logos/sqlite.svg" :subtitle="$t('x_years', { years: 5 })" />
  87. <Badge title="Solr" :img="theme.global.name.value === 'light' ? '/images/logos/solr_light.png' : '/images/logos/solr_dark.png'" :subtitle="$t('x_years', { years: 1 })" />
  88. </div>
  89. <div class="badges-section">
  90. <h4>Devops</h4>
  91. <Badge title="Docker" img="/images/logos/docker.svg" :subtitle="$t('x_years', { years: 5 })" />
  92. <Badge title="Gitlab CI" img="/images/logos/gitlab.svg" :subtitle="$t('x_years', { years: 8 })" />
  93. <Badge title="Github Actions" :img="theme.global.name.value === 'light' ? '/images/logos/github-light.svg' : '/images/logos/github-dark.svg'" :subtitle="$t('x_years', { years: 1 })" />
  94. <Badge title="Jenkins" img="/images/logos/jenkins.png" :subtitle="$t('x_years', { years: 4 })" />
  95. </div>
  96. </v-col>
  97. <v-col cols="4">
  98. <div class="badges-section">
  99. <h4>CMS</h4>
  100. <Badge title="Typo3" img="/images/logos/typo3.png" :subtitle="$t('x_years', { years: 4 })" />
  101. <Badge title="Wordpress" :img="theme.global.name.value === 'light' ? '/images/logos/wordpress.png' : '/images/logos/wordpress_dark.png'" :subtitle="$t('x_years', { years: 6 })"/>
  102. </div>
  103. <div class="badges-section">
  104. <h4>Other</h4>
  105. <Badge title="Mercure (SSE)" img="/images/logos/mercure_icon.png" :subtitle="$t('x_years', { years: 3 })" />
  106. <Badge title="Nextcloud" img="/images/logos/nextcloud.svg" :subtitle="$t('x_years', { years: 6 })" />
  107. <Badge title="Linux" img="/images/logos/linux.png" :subtitle="$t('x_years', { years: 10 })" />
  108. </div>
  109. <div class="badges-section">
  110. <h4>Management</h4>
  111. <Badge title="Management" img="/images/team-management.png" :subtitle="$t('x_years', { years: 10 })" />
  112. <Badge title="Continuous Improvement" img="/images/continuous-improvement.png" :subtitle="$t('x_years', { years: 9 })" />
  113. <Badge title="SCRUM" img="/images/scrum.png" :subtitle="$t('x_years', { years: 8 })" />
  114. <Badge title="Tutoring" img="/images/teacher.png" :subtitle="$t('x_years', { years: 6 })" />
  115. </div>
  116. <!-- <div class="badges-section">-->
  117. <!-- <h4>Languages</h4>-->
  118. <!-- <Badge title="English" img="" :subtitle="$t('good')" />-->
  119. <!-- <Badge title="French" img="" :subtitle="$t('native')" />-->
  120. <!-- <Badge title="Spanish" img="" :subtitle="$t('basic')" />-->
  121. <!-- </div>-->
  122. </v-col>
  123. </v-row>
  124. </v-container>
  125. </div>
  126. <div class="cursus">
  127. <h3>{{ $t("Cursus") }}</h3>
  128. </div>
  129. </template>
  130. <script setup lang="ts">
  131. import { useTheme } from 'vuetify'
  132. const i18n = useI18n()
  133. const theme = useTheme()
  134. const START_YEAR = 2011
  135. const CURRENT_YEAR = new Date().getFullYear();
  136. const XP_YEARS = CURRENT_YEAR - START_YEAR
  137. </script>
  138. <style scoped lang="scss">
  139. .banner {
  140. display: flex;
  141. flex-direction: column;
  142. justify-content: center;
  143. align-items: center;
  144. text-align: center;
  145. padding: 20px;
  146. h2 {
  147. margin: 18px 0 36px 0;
  148. border-bottom: none;
  149. }
  150. .introduction {
  151. max-width: 800px;
  152. text-align: justify;
  153. padding: 36px 64px;
  154. border: solid 1px rgba(var(--v-theme-on-neutral), 0.4);
  155. border-radius: 16px;
  156. background: rgba(var(--v-theme-primary-alt), 0.1);
  157. > div {
  158. margin-bottom: 16px;
  159. }
  160. :deep(a) {
  161. color: rgb(var(--v-theme-on-neutral));
  162. font-weight: 700;
  163. text-decoration: none;
  164. }
  165. .logos {
  166. display: flex;
  167. flex-direction: row;
  168. .so-logo {
  169. background-color: white;
  170. border-radius: 6px;
  171. }
  172. }
  173. }
  174. }
  175. .badges {
  176. .v-col {
  177. display: flex;
  178. flex-direction: column;
  179. }
  180. }
  181. .badges-section {
  182. display: flex;
  183. flex-direction: column;
  184. flex-wrap: wrap;
  185. justify-content: flex-start;
  186. margin: 12px 0;
  187. padding: 12px 6px;
  188. border: solid 1px rgba(var(--v-theme-primary-alt), 0.3);
  189. border-radius: 16px;
  190. flex: 1;
  191. h4 {
  192. font-size: 16px;
  193. margin: -24px 24px 6px 24px;
  194. padding: 0 12px;
  195. background: rgb(var(--v-theme-background));;
  196. }
  197. .v-card {
  198. margin: 6px 24px;
  199. }
  200. }
  201. </style>