Compare commits

..

5 Commits

Author SHA1 Message Date
valere
61f7e20dbd update deploy
All checks were successful
Deploy valere.dev / deploy (push) Successful in 33s
2025-11-30 09:37:32 +01:00
valere
f72038a76e update cvs 2025-11-30 09:36:09 +01:00
valere
d2cd2affd4 yeah 2025-11-30 09:22:17 +01:00
valere
95d9a50c02 add new cvs
All checks were successful
Deploy valere.dev / deploy (push) Successful in 11s
2025-11-15 10:08:35 +01:00
valere
463540770a add home to repo 2025-11-15 09:59:44 +01:00
129 changed files with 2042 additions and 3125 deletions

View File

@@ -12,7 +12,7 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: install - name: install
run: | run: |
APP_DIR=/var/docker-web/store/${GITHUB_REPOSITORY##*/} APP_DIR=/var/docker-web/apps/${GITHUB_REPOSITORY##*/}
mkdir -p $APP_DIR mkdir -p $APP_DIR
cp -a $(find . -mindepth 1 -maxdepth 1 ! -name '.git' ! -name 'node_modules') "$APP_DIR/" cp -a $(find . -mindepth 1 -maxdepth 1 ! -name '.git' ! -name 'node_modules') "$APP_DIR/"
- name: up - name: up

View File

@@ -1,75 +1,5 @@
# Nuxt Minimal Starter # TODO
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. - [ ] boost SEO with AI (générer du contenu)
- [ ] animate logo
## Setup - [ ] Draw UI
Make sure to install dependencies:
```bash
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
# bun
bun install
```
## Development Server
Start the development server on `http://localhost:3000`:
```bash
# npm
npm run dev
# pnpm
pnpm dev
# yarn
yarn dev
# bun
bun run dev
```
## Production
Build the application for production:
```bash
# npm
npm run build
# pnpm
pnpm build
# yarn
yarn build
# bun
bun run build
```
Locally preview production build:
```bash
# npm
npm run preview
# pnpm
pnpm preview
# yarn
yarn preview
# bun
bun run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.

View File

@@ -0,0 +1,595 @@
<template>
<div class="w-1/2 flex flex-wrap items-center gap-7 p-32">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M24.4 16.83c-.4-1.74-2.9-1.73-3.28.02a5.58 5.58 0 0 1-4.43 4.4c-1.82.31-1.82 2.92 0 3.24a5.55 5.55 0 0 1 4.43 4.4c.36 1.68 2.9 1.7 3.27.01a5.6 5.6 0 0 1 4.46-4.4c1.75-.31 1.75-2.95 0-3.26a5.68 5.68 0 0 1-4.46-4.4Z"
fill="currentColor" fill-opacity=".5"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M1.83 5.84a4 4 0 0 1 4-4h14.2a4 4 0 0 1 4 4v7.9a3.66 3.66 0 0 0-4.86 2.68 3.68 3.68 0 0 1-2.22 2.7A12.76 12.76 0 0 0 3.83 13.5v5.66c0 1.1.9 2 2 2h7.9a3.82 3.82 0 0 0-.4 2h-7.5a4 4 0 0 1-4-4V5.84Zm18.88 2.44a2.82 2.82 0 1 1-5.64 0 2.82 2.82 0 0 1 5.64 0Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Image Generation
</div>
<label id="category-1" class="select-none"><input class="form-input peer sr-only hidden" type="radio" value="1">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M1.83 5.84a4 4 0 0 1 4-4h14.2a4 4 0 0 1 4 4v7.9a3.66 3.66 0 0 0-4.86 2.68 3.58 3.58 0 0 1-2.83 2.86 3.57 3.57 0 0 0-3 3.88h-7.5a4 4 0 0 1-4-4V5.84Zm8.43 10.66v-8c0-.45.52-.73.9-.5l5.97 3.65a1 1 0 0 1 0 1.7l-5.98 3.64a.59.59 0 0 1-.89-.5Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M24.4 16.83c-.4-1.74-2.9-1.73-3.28.02a5.58 5.58 0 0 1-4.43 4.4c-1.82.31-1.82 2.92 0 3.24a5.55 5.55 0 0 1 4.43 4.4c.36 1.68 2.9 1.7 3.27.01a5.6 5.6 0 0 1 4.46-4.4c1.75-.31 1.75-2.95 0-3.26a5.68 5.68 0 0 1-4.46-4.4Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Video Generation
</div>
</label><label id="category-2" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="2">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="m13.5 24.48-.57.01a11.55 11.55 0 1 1 11.46-10.15 3.67 3.67 0 0 0-5.22 2.52 3.58 3.58 0 0 1-2.83 2.86c-2.5.44-3.44 2.84-2.84 4.76ZM7.14 7.84a1 1 0 0 1 1-1h9.57a1 1 0 0 1 1 1V9.3a1 1 0 1 1-2 0v-.47h-2.78v8.2h.98a1 1 0 0 1 0 2H10.9a1 1 0 1 1 0-2h1.03v-8.2H9.14v.47a1 1 0 0 1-2 0V7.84Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M24.47 17.27c-.4-1.74-2.9-1.73-3.27.02a5.58 5.58 0 0 1-4.44 4.4c-1.82.32-1.82 2.93 0 3.24a5.55 5.55 0 0 1 4.43 4.4c.36 1.69 2.9 1.7 3.28.01a5.6 5.6 0 0 1 4.45-4.4c1.75-.3 1.76-2.95 0-3.25a5.68 5.68 0 0 1-4.45-4.42Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Text Generation
</div>
</label><label id="category-3" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="3">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M8.47 20.68v5.11a4 4 0 0 0 4 4h13.22a4 4 0 0 0 4-4V12.56a4 4 0 0 0-4-4h-4.34v5.76h6.37v2h-3.3a15 15 0 0 1-3.38 5.58c1.28 1 2.93 1.9 5.08 2.5l.97.27c-.36.77-.48 1.2-.54 1.93l-.96-.27c-2.54-.71-4.5-1.8-5.99-3.02-1.73 1.53-3.77 2.72-5.75 3.04l-.99.16c0-.85-.1-1.3-.32-1.97l.99-.16c1.45-.24 3.1-1.15 4.61-2.45-.38-.41-.72-.84-1.03-1.25H8.47Z"
fill="currentColor" fill-opacity=".5"></path>
<path d="m19.27 20.19.3.35a13.84 13.84 0 0 0 2.74-4.22h-.95v.36a4 4 0 0 1-2.1 3.5Z" fill="currentColor"
fill-opacity=".5"></path>
<path d="m11.56 8.17 1.36 4.04h-2.81l1.35-4.04h.1Z" fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M1.77 5.84a4 4 0 0 1 4-4h11.59a4 4 0 0 1 4 4v10.84a4 4 0 0 1-4 4H5.77a4 4 0 0 1-4-4V5.84Zm7.01 10.42.87-2.57h3.7l.88 2.57h2.33l-3.7-10h-2.57l-3.73 10h2.22Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Language Translation
</div>
</label><label id="category-4" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="4">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="m13.52 15.5 8-8a11.32 11.32 0 1 0 0 16.01l-8-8.01Zm-.16-4.94a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M25.49 7.89a1 1 0 0 1 1.41 0 11 11 0 0 1 0 15.55 1 1 0 1 1-1.42-1.41 9 9 0 0 0 0-12.73 1 1 0 0 1 0-1.41Zm-3.78 3.78a1 1 0 0 1 1.41-.02 5.67 5.67 0 0 1 .04 8.06 1 1 0 1 1-1.41-1.42 3.67 3.67 0 0 0-.03-5.2 1 1 0 0 1-.01-1.42Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Speech Synthesis
</div>
</label><label id="category-5" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="5">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="m22.32 27.79 5.32-3.08v-6.25l-5.82-3.38a1 1 0 0 1-.5-.87V7.68c0-.18-.1-.35-.25-.44l-4.81-2.8a.51.51 0 0 0-.52 0l-.5-.87.5.86-4.8 2.81a.51.51 0 0 0-.26.44v6.51a1 1 0 0 1-.5.87L4.62 18.3a.51.51 0 0 0-.25.45v5.65c0 .18.1.35.26.45l4.8 2.78c.16.09.36.09.52 0l.5.86-.5-.86 5.56-3.22a1 1 0 0 1 1 0l5.82 3.37Zm.75 1.87a1.5 1.5 0 0 1-1.5 0L16 26.44l-5.06 2.93c-.78.45-1.74.45-2.52 0l.5-.86-.5.86-4.8-2.78a2.51 2.51 0 0 1-1.26-2.18v-5.65c0-.9.47-1.72 1.24-2.17l5.08-2.97V7.68c0-.89.47-1.71 1.24-2.16l4.81-2.82a2.51 2.51 0 0 1 2.54 0l4.8 2.82a2.51 2.51 0 0 1 1.25 2.16v5.96l5.57 3.24c.47.27.75.76.75 1.3V25a1.5 1.5 0 0 1-.75 1.3l-5.82 3.36Z"
fill="currentColor" fill-opacity=".5"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M16 22.59a1 1 0 0 1-1-1v-3.14l-2.66-1.54a1 1 0 0 1 1-1.73L16 16.7l2.66-1.53a1 1 0 1 1 1 1.73L17 18.45v3.14a1 1 0 0 1-1 1Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="m22.32 27.79 5.32-3.08v-6.25l-5.82-3.38a1 1 0 0 1-.5-.87V7.68c0-.18-.1-.35-.25-.44l-4.81-2.8a.51.51 0 0 0-.52 0l-4.8 2.8a.51.51 0 0 0-.26.44v6.51a1 1 0 0 1-.5.87L4.62 18.3a.51.51 0 0 0-.25.45v5.65c0 .18.1.35.26.45l4.8 2.78c.16.09.36.09.52 0l5.56-3.22a1 1 0 0 1 1 0l5.82 3.37ZM15 21.59a1 1 0 1 0 2 0v-3.14l2.66-1.54a1 1 0 0 0-1-1.73L16 16.7l-2.66-1.53a1 1 0 1 0-1 1.73L15 18.45v3.14Z"
fill="currentColor" fill-opacity=".1"></path>
</svg> 3D Modeling
</div>
</label><label id="category-6" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="6">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M14.83 12.09a2.74 2.74 0 0 0-2.74 2.74v6.78a2.74 2.74 0 0 0 2.74 2.75h6.78a2.74 2.74 0 0 0 2.75-2.75v-6.78a2.74 2.74 0 0 0-2.75-2.74h-6.78Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M10.6 7.64h6.6a2.72 2.72 0 0 1 2.71 2.71v1.74h-5.08a2.74 2.74 0 0 0-2.74 2.74v5.08h-1.74a2.72 2.72 0 0 1-2.7-2.7V10.6a2.96 2.96 0 0 1 2.95-2.96Z"
fill="currentColor" fill-opacity=".5"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.62 3.6h4.12a1 1 0 0 0 0-2H2.62a1 1 0 0 0-1 1v5.13a1 1 0 1 0 2 0V3.6Zm19.64-1a1 1 0 0 1 1-1h5.12a1 1 0 0 1 1 1v5.13a1 1 0 1 1-2 0V3.61h-4.12a1 1 0 0 1-1-1ZM2.62 23.28a1 1 0 0 1 1 1v4.12h4.12a1 1 0 1 1 0 2H2.62a1 1 0 0 1-1-1v-5.12a1 1 0 0 1 1-1Zm26.76 0a1 1 0 0 1 1 1v5.12a1 1 0 0 1-1 1h-5.12a1 1 0 0 1 0-2h4.12v-4.12a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Object Detection
</div>
</label><label id="category-7" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="7">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M9.05 9.65a1 1 0 0 1 1-1h11.9a1 1 0 0 1 1 1v1.83a1 1 0 0 1-2 0v-.83H17v10.7h1.47a1 1 0 1 1 0 2h-5a1 1 0 0 1 0-2H15v-10.7h-3.95v.83a1 1 0 0 1-2 0V9.65Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.62 3.6h4.12a1 1 0 0 0 0-2H2.62a1 1 0 0 0-1 1v5.13a1 1 0 1 0 2 0V3.6Zm19.64-1a1 1 0 0 1 1-1h5.12a1 1 0 0 1 1 1v5.13a1 1 0 1 1-2 0V3.61h-4.12a1 1 0 0 1-1-1ZM2.62 23.28a1 1 0 0 1 1 1v4.12h4.12a1 1 0 1 1 0 2H2.62a1 1 0 0 1-1-1v-5.12a1 1 0 0 1 1-1Zm26.76 0a1 1 0 0 1 1 1v5.12a1 1 0 0 1-1 1h-5.12a1 1 0 0 1 0-2h4.12v-4.12a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Text Analysis
</div>
</label><label id="category-8" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="8">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M5.83 1.84a4 4 0 0 0-4 4v13.32a4 4 0 0 0 4 4h8.83v-.3c0-.64.24-1.24.66-1.7H5.83a2 2 0 0 1-2-2V13.5a12.84 12.84 0 0 1 13.28 5.88l3.74-3.7a5.85 5.85 0 0 1 3.17-1.64v-8.2a4 4 0 0 0-4-4H5.83Zm12.06 9.27a2.82 2.82 0 1 0 0-5.65 2.82 2.82 0 0 0 0 5.65Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M23.32 15.8a4.35 4.35 0 0 1 4.74 7.09l-5.4 5.45a1 1 0 0 1-.72.3h-4.78a1 1 0 0 1-1-1v-4.79a1 1 0 0 1 .3-.7l5.45-5.41c.4-.4.88-.73 1.4-.94Zm1.66 1.67a2.35 2.35 0 0 0-1.66.68l-5.16 5.12v3.37h3.37l5.11-5.16a2.35 2.35 0 0 0-1.66-4.01Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Image Editing
</div>
</label><label id="category-9" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="9">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M24.4 16.83c-.4-1.74-2.9-1.73-3.28.02a5.58 5.58 0 0 1-4.43 4.4c-1.82.31-1.82 2.92 0 3.24a5.55 5.55 0 0 1 4.43 4.4c.36 1.68 2.9 1.7 3.27.01a5.6 5.6 0 0 1 4.46-4.4c1.75-.31 1.75-2.95 0-3.26a5.68 5.68 0 0 1-4.46-4.4Z"
fill="currentColor" fill-opacity=".5"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7.06 7.94a1 1 0 0 1 1.42 0l3.44 3.44a1 1 0 0 1 0 1.42l-3.44 3.44a1 1 0 0 1-1.42-1.42L9.8 12.1 7.06 9.36a1 1 0 0 1 0-1.42Zm5.73 7.59a1 1 0 0 1 1-1h4.3a1 1 0 1 1 0 2h-4.3a1 1 0 0 1-1-1Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M5.83 3.84h14.2a2 2 0 0 1 2 2v7.73c.66-.1 1.36-.02 2 .23V5.84a4 4 0 0 0-4-4H5.82a4 4 0 0 0-4 4v13.32a4 4 0 0 0 4 4h7.35c-.06-.69.07-1.39.39-2H5.83a2 2 0 0 1-2-2V5.84c0-1.1.9-2 2-2Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Code Generation
</div>
</label><label id="category-10" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="10">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M20.23 17.68a1.27 1.27 0 1 1-2.54 0 1.27 1.27 0 0 1 2.54 0ZM14.32 17.68a1.27 1.27 0 1 1-2.54 0 1.27 1.27 0 0 1 2.54 0Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M24.17 22.24h-2.59a7.87 7.87 0 0 0 2-7.8A9.93 9.93 0 0 1 13.3 10.5a9.93 9.93 0 0 1-5.15 5.3 7.9 7.9 0 0 0 5.11 8.26 3.52 3.52 0 0 0 .27 2.18 9.9 9.9 0 1 1 10.64-4Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M3.98 16.05a11.98 11.98 0 0 1 23.96.14v5.55a2 2 0 0 1-2 2h-5.88a2 2 0 0 0-1.74-1H16.7a2 2 0 0 0 0 4h1.62a2 2 0 0 0 1.74-1h5.88a4 4 0 0 0 4-4v-2.72a1.5 1.5 0 0 0 1.04-1.43v-2.66c0-.76-.57-1.4-1.31-1.49a13.98 13.98 0 0 0-27.42 0 1.5 1.5 0 0 0-1.27 1.5v2.65a1.5 1.5 0 1 0 3 0v-1.54Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Question Answering
</div>
</label><label id="category-11" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="11">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M11.6 12.38c-.25-.25-.6-.4-.95-.4H9.32a1.34 1.34 0 0 0-1.34 1.35v9.35a1.34 1.34 0 0 0 1.34 1.34h1.33A1.34 1.34 0 0 0 12 22.68v-9.35c0-.36-.14-.7-.4-.95ZM17.61 8.37c-.25-.25-.59-.4-.94-.4h-1.34A1.34 1.34 0 0 0 14 9.33v13.36a1.34 1.34 0 0 0 1.34 1.34h1.34A1.34 1.34 0 0 0 18 22.68V9.32c0-.36-.15-.7-.4-.95ZM23.63 16.4c-.25-.26-.6-.4-.95-.4h-1.33A1.34 1.34 0 0 0 20 17.34v5.34a1.34 1.34 0 0 0 1.34 1.34h1.33a1.34 1.34 0 0 0 1.34-1.34v-5.34c0-.36-.14-.7-.39-.95Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7.65 2.36a5.29 5.29 0 0 0-5.29 5.29v16.7a5.29 5.29 0 0 0 5.29 5.29h16.7a5.29 5.29 0 0 0 5.29-5.29V7.65a5.29 5.29 0 0 0-5.29-5.29H7.65Zm9.96 6.01c-.25-.25-.59-.4-.94-.4h-1.34A1.34 1.34 0 0 0 14 9.33v13.36a1.34 1.34 0 0 0 1.34 1.34h1.34A1.34 1.34 0 0 0 18 22.68V9.32c0-.36-.15-.7-.4-.95Zm-6.01 4.01c-.25-.25-.6-.4-.95-.4H9.32a1.34 1.34 0 0 0-1.34 1.35v9.35a1.34 1.34 0 0 0 1.34 1.34h1.33A1.34 1.34 0 0 0 12 22.68v-9.35c0-.36-.14-.7-.4-.95ZM22.68 16a1.34 1.34 0 0 1 1.34 1.34v5.34a1.34 1.34 0 0 1-1.34 1.34h-1.33A1.34 1.34 0 0 1 20 22.68v-5.34A1.34 1.34 0 0 1 21.35 16h1.33Z"
fill="currentColor" fill-opacity=".15"></path>
</svg> Data Visualization
</div>
</label><label id="category-12" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="12">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M9.95 3.85a5 5 0 0 0-5 5v6a5 5 0 0 0 7.08 4.55 10.93 10.93 0 0 1-.91-3.33 2.92 2.92 0 0 1 2.93-3.21c.32 0 .62.04.9.13V8.85a5 5 0 0 0-5-5Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M13.03 21.14a7 7 0 0 1-10-5.3c-.09-.53-.53-.99-1.08-.99s-1 .45-.95 1a9 9 0 0 0 7.95 7.95v4.34a1 1 0 1 0 2 0V23.8a8.94 8.94 0 0 0 3.4-1.1c-.49-.47-.93-1-1.32-1.56Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M21.05 23.8a9 9 0 0 1-7.94-7.95c-.06-.55.39-1 .94-1 .55 0 1 .46 1.07 1a7 7 0 0 0 13.86 0c.08-.54.52-1 1.07-1s1 .45.95 1a9 9 0 0 1-7.95 7.95v4.35a1 1 0 1 1-2 0V23.8Z"
fill="currentColor" fill-opacity=".5"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M25.05 14.86v-6a3 3 0 0 0-6 0v6a3 3 0 0 0 6 0Zm-3-11a5 5 0 0 0-5 5v6a5 5 0 1 0 10 0v-6a5 5 0 0 0-5-5Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Voice Cloning
</div>
</label><label id="category-13" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="13">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M2.62 13.04v2.82L16.55 1.93h-2.83l-11.1 11.1ZM2.62 18.66v2.83l1.27-1.27a12.6 12.6 0 0 1 8.75-8.75l9.54-9.54h-2.83L2.62 18.66ZM3.43 23.47l-.8.82v.4c0 .7.17 1.36.49 1.93l.56-.56a12.63 12.63 0 0 1-.25-2.59ZM18.48 11.26a12.63 12.63 0 0 0-2.59-.25l9.09-9.08h.4c.7 0 1.36.18 1.93.5l-8.83 8.83ZM22.52 12.84c-.6-.37-1.22-.68-1.88-.94l8.11-8.12c.4.62.63 1.36.63 2.15v.05l-6.86 6.86ZM25.56 15.42c-.43-.5-.9-.98-1.41-1.4l5.23-5.24v2.83l-3.82 3.81ZM27.68 18.93c-.26-.66-.58-1.29-.94-1.88l2.64-2.65v2.83l-1.7 1.7ZM28.57 23.67a13.9 13.9 0 0 0-.25-2.58l1.06-1.06v2.83l-.81.81ZM27.82 27.86c.11-.31.21-.62.3-.94l1.1-1.1a4 4 0 0 1-1.4 2.04ZM10.93 1.93l-8.3 8.3V7.42L8.1 1.93h2.83ZM2.99 4.26c.4-.87 1.1-1.57 1.96-1.96L2.99 4.26Z"
fill="currentColor" fill-opacity=".5"></path>
<path
d="M20.51 24.67a1.35 1.35 0 1 1-2.7 0 1.35 1.35 0 0 1 2.7 0ZM14.2 24.67a1.35 1.35 0 1 1-2.7 0 1.35 1.35 0 0 1 2.7 0Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M24.57 23.58c0 1.56-.42 3.02-1.15 4.28h2.24a10.53 10.53 0 0 0 .46-7.32 10.57 10.57 0 1 0-19.79 7.32h2.25a8.53 8.53 0 0 1-1.1-5.12A10.6 10.6 0 0 0 13.11 17a10.55 10.55 0 0 0 11.1 4.18c.23.76.35 1.56.35 2.39Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Background Removal
</div>
</label><label id="category-14" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="14">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M22.07 2.61a1 1 0 0 1 1-1h6.3a1 1 0 0 1 1 1v6.3a1 1 0 1 1-2 0V5.04l-6.1 6.11a1 1 0 0 1-1.42-1.41l6.12-6.12h-3.9a1 1 0 0 1-1-1Z"
fill="currentColor" fill-opacity=".5"></path>
<path
d="M23 28.39a1 1 0 1 0 0 2h6.38a1 1 0 0 0 1-1V16a1 1 0 0 0-2 0v12.39h-5.39ZM16 1.61a1 1 0 1 1 0 2H3.61v5.95a1 1 0 0 1-2 0V2.6a1 1 0 0 1 1-1H16Z"
fill="currentColor" fill-opacity=".5"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M1.62 16.28c0-1.5 1.2-2.7 2.7-2.7h12.1c1.5 0 2.7 1.2 2.7 2.7v11.41c0 1.5-1.2 2.7-2.7 2.7H4.32a2.7 2.7 0 0 1-2.7-2.7V16.28Zm15.5 8.02c-1.5.47-2.9 1.22-4.1 2.18a10.06 10.06 0 0 0-9.4-3.78v5c0 .38.31.7.7.7h12.1a.7.7 0 0 0 .7-.7v-3.4Zm-.61-5.64a2.23 2.23 0 1 1-4.46 0 2.23 2.23 0 0 1 4.46 0Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Image Upscaling
</div>
</label><label id="category-15" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="15">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M5.84 1.84a4 4 0 0 0-4 4v13.32a4 4 0 0 0 4 4h14.04V19.4a3 3 0 0 1-2.08 1.25l.22.5H5.84a2 2 0 0 1-2-2V13.5a12.84 12.84 0 0 1 10.59 2.76V16a3 3 0 0 1 3-3h6.6V5.84a4 4 0 0 0-4-4H5.82Zm12.05 9.27a2.82 2.82 0 1 0 0-5.65 2.82 2.82 0 0 0 0 5.65Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M16.43 16a1 1 0 0 1 1-1h10.9a1 1 0 0 1 1 1v1.68a1 1 0 1 1-2 0V17h-3.45v9.64h1.26a1 1 0 1 1 0 2h-4.57a1 1 0 1 1 0-2h1.3V17h-3.44v.68a1 1 0 1 1-2 0V16Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> OCR
</div>
</label><label id="category-16" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="16">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M22.07 7.93H9.93a2 2 0 0 0-2 2v12.14c0 1.1.9 2 2 2h12.14a2 2 0 0 0 2-2V9.93a2 2 0 0 0-2-2Zm-12.14-2a4 4 0 0 0-4 4v12.14a4 4 0 0 0 4 4h12.14a4 4 0 0 0 4-4V9.93a4 4 0 0 0-4-4H9.93Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M10.8 12.02a1 1 0 0 1 1-1h8.4a1 1 0 1 1 0 2h-8.4a1 1 0 0 1-1-1ZM10.8 16a1 1 0 0 1 1-1h8.4a1 1 0 1 1 0 2h-8.4a1 1 0 0 1-1-1ZM10.8 19.98a1 1 0 0 1 1-1H16a1 1 0 1 1 0 2h-4.2a1 1 0 0 1-1-1Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.62 3.6h4.12a1 1 0 0 0 0-2H2.62a1 1 0 0 0-1 1v5.13a1 1 0 1 0 2 0V3.6Zm19.64-1a1 1 0 0 1 1-1h5.12a1 1 0 0 1 1 1v5.13a1 1 0 1 1-2 0V3.61h-4.12a1 1 0 0 1-1-1ZM2.62 23.28a1 1 0 0 1 1 1v4.12h4.12a1 1 0 1 1 0 2H2.62a1 1 0 0 1-1-1v-5.12a1 1 0 0 1 1-1Zm26.76 0a1 1 0 0 1 1 1v5.12a1 1 0 0 1-1 1h-5.12a1 1 0 0 1 0-2h4.12v-4.12a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Document Analysis
</div>
</label><label id="category-17" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="17">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M20.95 18.18c-.6-.25-.85-1-.5-1.53a4.15 4.15 0 0 1 3.53-1.86c1.75 0 2.95.8 3.56 1.8.53.86.83 2.46.03 3.65-.9 1.32-1.75 1.73-2.22 2.58-.1.2-.18.36-.22.7-.07.54-.52.97-1.07.97a1.1 1.1 0 0 1-1.1-1.21c.04-.38.13-.78.34-1.15.58-1.04 1.68-1.65 2.32-2.56.68-.97.3-2.76-1.62-2.76-.88 0-1.44.45-1.8 1-.25.42-.8.56-1.25.37Zm4.53 9.29a1.5 1.5 0 0 1-2.98 0c0-.82.67-1.5 1.49-1.5s1.49.68 1.49 1.5Z"
fill="currentColor" fill-opacity=".5"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M5.83 1.84a4 4 0 0 0-4 4v13.32a4 4 0 0 0 4 4h14.2a4 4 0 0 0 .94-.12 5.02 5.02 0 0 1 1.33-2.93c-.7.23-1.47.18-2.11-.08h-.01l-.02-.01a3.05 3.05 0 0 1-1.37-4.48 6.15 6.15 0 0 1 5.2-2.75h.03V5.84a4 4 0 0 0-4-4H5.83Zm.39 11.44c5.32 0 9.88 3.25 11.8 7.88H5.83a2 2 0 0 1-2-2V13.5c.78-.14 1.57-.22 2.39-.22Zm11.67-2.17a2.82 2.82 0 1 0 0-5.65 2.82 2.82 0 0 0 0 5.65Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Visual QA
</div>
</label><label id="category-18" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="18">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M11.4 21.75a3 3 0 0 1 3-3H27a3 3 0 0 1 3 3v5.04a3 3 0 0 1-3 3H14.4a3 3 0 0 1-3-3v-5.04Zm6.78 1.48a1.03 1.03 0 1 0 .52 1.93.75.75 0 0 1 .76 1.3 2.53 2.53 0 0 1-3.81-2.2 2.53 2.53 0 0 1 3.81-2.18.75.75 0 0 1-.76 1.3 1.03 1.03 0 0 0-.52-.15Zm4.9 1.04a1.03 1.03 0 0 1 1.55-.9.75.75 0 1 0 .76-1.29 2.53 2.53 0 0 0-3.81 2.19 2.53 2.53 0 0 0 3.81 2.19.75.75 0 0 0-.76-1.3 1.03 1.03 0 0 1-1.56-.9Z"
fill="currentColor" fill-opacity=".15"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M2.08 5.84a4 4 0 0 1 4-4h14.19a4 4 0 0 1 4 4v10.9h-9.05A12.73 12.73 0 0 0 4.08 13.5v5.66c0 1.1.9 2 2 2h3.36c-.02.2-.04.39-.04.59v1.4H6.08a4 4 0 0 1-4-4V5.85Zm18.88 2.44a2.82 2.82 0 1 1-5.65 0 2.82 2.82 0 0 1 5.65 0ZM18.18 23.23a1.03 1.03 0 1 0 .53 1.93.75.75 0 0 1 .75 1.3 2.53 2.53 0 0 1-3.81-2.2 2.53 2.53 0 0 1 3.81-2.18.75.75 0 1 1-.75 1.3 1.03 1.03 0 0 0-.53-.15ZM24.11 23.23a1.03 1.03 0 1 0 .52 1.93.75.75 0 0 1 .76 1.3 2.53 2.53 0 0 1-3.81-2.2 2.53 2.53 0 0 1 3.81-2.18.75.75 0 0 1-.76 1.3 1.03 1.03 0 0 0-.52-.15Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Image Captioning
</div>
</label><label id="category-19" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="19">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.9 3.81a5.32 5.32 0 0 1 3.67-1.45h16.86c1.36 0 2.68.52 3.67 1.45a4.93 4.93 0 0 1 1.54 3.57V20.6c0 1.35-.56 2.63-1.54 3.57a5.32 5.32 0 0 1-3.67 1.45h-6.76l-6.79 3.89a1 1 0 0 1-1.5-.87v-3.02h-1.8a5.32 5.32 0 0 1-3.68-1.45 4.93 4.93 0 0 1-1.54-3.57V7.38c0-1.35.56-2.63 1.54-3.57Zm17.14 6.34a1.27 1.27 0 1 1-2.54 0 1.27 1.27 0 0 1 2.54 0Zm-10.81 3a1 1 0 0 1 1.41.02 6.1 6.1 0 0 0 8.72 0 1 1 0 0 1 1.43 1.4 8.1 8.1 0 0 1-11.58 0 1 1 0 0 1 .02-1.42Zm2-1.73a1.27 1.27 0 1 0 0-2.54 1.27 1.27 0 0 0 0 2.54Z"
fill="currentColor" fill-opacity=".15"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M10.23 13.15a1 1 0 0 1 1.41.02 6.1 6.1 0 0 0 8.72 0 1 1 0 0 1 1.43 1.4 8.1 8.1 0 0 1-11.58 0 1 1 0 0 1 .02-1.42Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M21.04 10.15a1.27 1.27 0 1 1-2.54 0 1.27 1.27 0 0 1 2.54 0ZM13.5 10.15a1.27 1.27 0 1 1-2.54 0 1.27 1.27 0 0 1 2.54 0Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Chatbots
</div>
</label><label id="category-20" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="20">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path d="M12.67 14.32a1.03 1.03 0 1 1-2.05 0 1.03 1.03 0 0 1 2.05 0Z" fill="currentColor" fill-opacity=".8">
</path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M15.5 5.82a1 1 0 1 0-2 0v1.06a9 9 0 0 0 0 17.88v1.05a1 1 0 1 0 2 0V5.82Zm-2 11.99V8.89a7 7 0 0 0 0 13.85v-2.9a7.53 7.53 0 0 1-3.48-1.43 1 1 0 1 1 1.2-1.6c.67.5 1.45.84 2.28 1Z"
fill="currentColor" fill-opacity=".8"></path>
<path d="M24.5 15.82a7 7 0 0 0-7-7v-2a9 9 0 0 1 0 17.99v-2a7 7 0 0 0 7-7Z" fill="currentColor"
fill-opacity=".8"></path>
<path
d="M18.97 15.2A1.38 1.38 0 0 0 20 12.9l-2.41.91c0 .77.62 1.38 1.38 1.38ZM17.59 19.25c.97 0 2.04.03 2.86.69a1 1 0 0 0 1.25-1.56c-1.4-1.13-3.14-1.13-4.05-1.13h-.06v2Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.62 3.6h4.12a1 1 0 0 0 0-2H2.62a1 1 0 0 0-1 1v5.13a1 1 0 1 0 2 0V3.6Zm19.64-1a1 1 0 0 1 1-1h5.12a1 1 0 0 1 1 1v5.13a1 1 0 1 1-2 0V3.61h-4.12a1 1 0 0 1-1-1ZM2.62 23.28a1 1 0 0 1 1 1v4.12h4.12a1 1 0 1 1 0 2H2.62a1 1 0 0 1-1-1v-5.12a1 1 0 0 1 1-1Zm26.76 0a1 1 0 0 1 1 1v5.12a1 1 0 0 1-1 1h-5.12a1 1 0 0 1 0-2h4.12v-4.12a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Sentiment Analysis
</div>
</label><label id="category-21" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="21">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path opacity=".5" fill-rule="evenodd" clip-rule="evenodd"
d="M7.65 4.36a3.29 3.29 0 0 0-3.29 3.29v16.7a3.29 3.29 0 0 0 3.29 3.29h16.7a3.29 3.29 0 0 0 3.29-3.29V16a1 1 0 1 1 2 0v8.35a5.29 5.29 0 0 1-5.29 5.29H7.65a5.29 5.29 0 0 1-5.29-5.29V7.65a5.29 5.29 0 0 1 5.29-5.29H16a1 1 0 1 1 0 2H7.65Z"
fill="currentColor" fill-opacity=".5"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M27.54 11.77a1 1 0 0 1-1 1h-6.31a1 1 0 0 1-1-1v-6.3a1 1 0 1 1 2 0v3.89l6.12-6.12a1 1 0 1 1 1.41 1.41l-6.12 6.12h3.9a1 1 0 0 1 1 1ZM7.67 15.64a1 1 0 0 1 1-1h8.42a1 1 0 1 1 0 2H8.67a1 1 0 0 1-1-1ZM7.67 19.62a1 1 0 0 1 1-1h8.42a1 1 0 1 1 0 2H8.67a1 1 0 0 1-1-1ZM7.67 23.6a1 1 0 0 1 1-1h4.21a1 1 0 1 1 0 2h-4.2a1 1 0 0 1-1-1Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Text Summarization
</div>
</label><label id="category-22" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="22">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M24.16 13.86V4.19a2.22 2.22 0 0 0-2.59-2.22l-9.86 1.82a3.43 3.43 0 0 0-2.82 3.4v7.96a4.63 4.63 0 1 0 1.98 3.79V9.52l11.3-2.07v6.1c.67-.07 1.37.03 2 .31Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M15.27 19.55a4.63 4.63 0 0 1 6.42-5.92 3.55 3.55 0 0 0-2.68 2.79 3.58 3.58 0 0 1-2.83 2.86c-.33.06-.63.15-.9.27Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M24.24 16.83c-.4-1.74-2.89-1.73-3.27.02a5.58 5.58 0 0 1-4.44 4.4c-1.81.31-1.81 2.92 0 3.24a5.55 5.55 0 0 1 4.44 4.4c.36 1.68 2.9 1.7 3.27.01a5.6 5.6 0 0 1 4.46-4.4c1.75-.31 1.75-2.95 0-3.26a5.68 5.68 0 0 1-4.46-4.4Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Music Generation
</div>
</label><label id="category-23" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="23">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M17 6.89a1 1 0 1 0-2 0v2.3c-.35.46-.7.6-.95.6-.29 0-.7-.19-1.1-.83a1 1 0 0 0-1.7 1.06c.6.97 1.57 1.77 2.8 1.77.34 0 .65-.06.95-.16v1.31a3.7 3.7 0 0 1-4.81-.26 1 1 0 0 0-1.4 1.44A5.68 5.68 0 0 0 15 15.24V18c-.8-.05-1.55-.16-2.25-.32-1.67-.39-3.6.8-3.6 2.75 0 .85.36 1.48.87 1.93a5.68 5.68 0 0 0 1.82 1.02c.38.17.7.3 1 .47.33.2.5.39.58.57a2.83 2.83 0 0 0 5.16 0c.08-.17.25-.36.6-.56a8.86 8.86 0 0 1 1.29-.62 5.89 5.89 0 0 0 1.5-.9c.51-.44.89-1.07.89-1.9 0-1.96-1.94-3.15-3.61-2.76-.7.16-1.45.27-2.25.32v-2.76a5.72 5.72 0 0 0 6.2-1.12 1 1 0 0 0-1.38-1.44 3.7 3.7 0 0 1-4.82.26v-1.31c.3.1.61.16.95.16 1.24 0 2.2-.8 2.8-1.77a1 1 0 1 0-1.7-1.06c-.4.64-.81.83-1.1.83-.25 0-.6-.14-.95-.6v-2.3Zm2.7 12.74c.61-.15 1.16.33 1.16.8 0 .53-.66.78-1.16.97l-.29.12c-.39.17-.86.38-1.27.62-.52.31-1.07.76-1.38 1.46-.29.63-1.23.64-1.51 0a3.31 3.31 0 0 0-1.4-1.46 10.89 10.89 0 0 0-1.54-.73c-.5-.19-1.17-.43-1.17-.98 0-.47.55-.94 1.16-.8 1.14.26 2.39.4 3.7.4s2.57-.14 3.7-.4Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M20.86 20.43c0-.47-.55-.95-1.16-.8-1.13.26-2.39.4-3.7.4s-2.56-.14-3.7-.4c-.61-.14-1.16.33-1.16.8 0 .55.66.8 1.17.98l.27.11c.39.17.86.37 1.28.62.51.3 1.07.76 1.39 1.46.28.64 1.22.63 1.5 0 .32-.7.87-1.15 1.39-1.46.41-.24.88-.45 1.27-.63l.29-.1c.5-.2 1.16-.45 1.16-.98Z"
fill="currentColor" fill-opacity=".15"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7.65 2.36a5.29 5.29 0 0 0-5.29 5.29v16.7a5.29 5.29 0 0 0 5.29 5.29h16.7a5.29 5.29 0 0 0 5.29-5.29V7.65a5.29 5.29 0 0 0-5.29-5.29H7.65ZM16 5.9a1 1 0 0 1 1 1v2.3c.35.46.7.6.95.6.3 0 .7-.19 1.1-.83a1 1 0 0 1 1.7 1.06c-.6.97-1.56 1.77-2.8 1.77-.34 0-.65-.06-.95-.16v1.31a3.7 3.7 0 0 0 4.82-.26 1 1 0 0 1 1.38 1.44 5.68 5.68 0 0 1-6.2 1.12V18c.8-.05 1.55-.16 2.25-.32 1.67-.39 3.6.8 3.6 2.75 0 .84-.37 1.47-.87 1.91a5.89 5.89 0 0 1-1.8 1.03c-.4.17-.72.31-1 .49-.35.2-.52.39-.6.56a2.83 2.83 0 0 1-5.16 0c-.08-.18-.25-.36-.59-.57-.29-.17-.6-.3-1-.47l-.29-.13a5.68 5.68 0 0 1-1.52-.89 2.5 2.5 0 0 1-.88-1.93c0-1.95 1.94-3.14 3.61-2.75.7.16 1.45.27 2.25.32v-2.76a5.72 5.72 0 0 1-6.2-1.12 1 1 0 0 1 1.39-1.44 3.7 3.7 0 0 0 4.82.26v-1.31c-.3.1-.62.16-.96.16-1.23 0-2.2-.8-2.8-1.77a1 1 0 1 1 1.7-1.06c.4.64.81.83 1.1.83.25 0 .6-.14.95-.6v-2.3a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".15"></path>
</svg> Medical Imaging
</div>
</label><label id="category-24" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="24">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M16 26.57a10.57 10.57 0 1 0 0-21.14 10.57 10.57 0 0 0 0 21.14Zm.98-17.12a1 1 0 1 0-2 0v.7c-.5.12-1 .32-1.42.64a3.05 3.05 0 0 0-1.24 2.52c0 1.16.56 1.95 1.3 2.46.63.42 1.4.68 2.03.9l.14.04c.73.24 1.26.44 1.63.72.3.23.48.5.48 1.03 0 .63-.23.95-.49 1.13-.3.22-.78.34-1.36.3-1-.08-1.8-.6-2.04-1.1a1 1 0 1 0-1.81.85 4.15 4.15 0 0 0 2.78 2.08v.83a1 1 0 1 0 2 0v-.7a3.24 3.24 0 0 0 2.92-3.38c0-1.2-.51-2.05-1.26-2.62a7.51 7.51 0 0 0-2.21-1.04h-.02a6.98 6.98 0 0 1-1.65-.69c-.3-.2-.44-.4-.44-.8 0-.47.18-.74.43-.93.29-.21.72-.34 1.22-.34.78 0 1.33.31 1.5.58a1 1 0 0 0 1.7-1.06 3.38 3.38 0 0 0-2.2-1.41v-.71Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.62 3.6h4.12a1 1 0 1 0 0-2H2.62a1 1 0 0 0-1 1v5.13a1 1 0 0 0 2 0V3.6Zm19.64-1a1 1 0 0 1 1-1h5.12a1 1 0 0 1 1 1v5.13a1 1 0 1 1-2 0V3.61h-4.12a1 1 0 0 1-1-1ZM2.62 23.28a1 1 0 0 1 1 1v4.12h4.12a1 1 0 1 1 0 2H2.62a1 1 0 0 1-1-1v-5.12a1 1 0 0 1 1-1Zm26.76 0a1 1 0 0 1 1 1v5.12a1 1 0 0 1-1 1h-5.12a1 1 0 0 1 0-2h4.12v-4.12a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Financial Analysis
</div>
</label><label id="category-25" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="25">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M1.45 15.28a4.78 4.78 0 0 0 9.02 2.67l.76-1.5h4.47l.76 1.5c.18.37.4.7.67 1a3.7 3.7 0 0 0 1.88-2.53c.7-3.22 4.65-3.75 6.42-1.6l-.87-8.26a5.18 5.18 0 0 0-5.15-4.63H7.55c-2.65 0-4.86 2-5.15 4.62l-.95 8.73Zm17-3.96a2.19 2.19 0 1 0 0-4.38 2.19 2.19 0 0 0 0 4.38ZM9.73 6.67a1.35 1.35 0 1 0-2.7 0v1.1H5.91a1.35 1.35 0 0 0 0 2.71h1.1v1.11a1.35 1.35 0 1 0 2.71 0v-1.1h1.1a1.35 1.35 0 1 0 0-2.71h-1.1V6.67Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M24.24 16.83c-.4-1.74-2.89-1.73-3.27.02a5.58 5.58 0 0 1-4.44 4.4c-1.81.31-1.81 2.92 0 3.24a5.55 5.55 0 0 1 4.43 4.4c.37 1.68 2.9 1.7 3.28.01a5.6 5.6 0 0 1 4.46-4.4c1.75-.31 1.75-2.95 0-3.26a5.68 5.68 0 0 1-4.46-4.4Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Game AI
</div>
</label><label id="category-26" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="26">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<g opacity=".5" fill="currentColor" fill-opacity=".5">
<path
d="M12.8 15.18c0-1.1.9-2 2-2h2.47a2 2 0 0 1 2 2v13.37a2 2 0 0 1-2 2H14.8a2 2 0 0 1-2-2V15.18ZM22.18 22.67c0-1.1.9-2 2-2h2.46a2 2 0 0 1 2 2v5.88a2 2 0 0 1-2 2h-2.46a2 2 0 0 1-2-2v-5.88ZM3.36 19.92c0-1.1.9-2 2-2h2.46a2 2 0 0 1 2 2v8.63a2 2 0 0 1-2 2H5.36a2 2 0 0 1-2-2v-8.63Z">
</path>
</g>
<path
d="m16.48 2.23 1.13 2.28 2.5.35c.43.08.62.62.3.95L18.6 7.55l.43 2.48a.55.55 0 0 1-.8.58L16 9.45l-2.23 1.18a.56.56 0 0 1-.8-.58l.43-2.48L11.6 5.8a.55.55 0 0 1 .3-.95l2.49-.35 1.12-2.28c.2-.4.79-.4.97 0Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Model Benchmarking
</div>
</label><label id="category-27" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="27">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M15.85 8.22a2.9 2.9 0 0 1 4.79 1.06h2.99a1 1 0 1 1 0 2h-3a2.9 2.9 0 0 1-5.45 0h-6.8a1 1 0 1 1 0-2h6.8c.14-.4.37-.75.67-1.06Zm2.06 1.15a.9.9 0 1 0 0 1.82.9.9 0 0 0 0-1.82Zm-7.78 4.57A2.9 2.9 0 0 1 14.92 15h8.7a1 1 0 1 1 0 2h-8.7a2.9 2.9 0 0 1-5.46 0H8.37a1 1 0 1 1 0-2h1.09c.14-.4.37-.75.67-1.06Zm2.06 1.15a.9.9 0 1 0 0 1.82.9.9 0 0 0 0-1.82Zm6.52 4.57a2.9 2.9 0 0 1 4.79 1.06h.13a1 1 0 0 1 0 2h-.13a2.9 2.9 0 0 1-5.46 0H8.37a1 1 0 1 1 0-2h9.67c.14-.4.37-.75.67-1.05Zm2.06 1.15a.9.9 0 1 0 0 1.82.9.9 0 0 0 0-1.82Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M17.27 9.64a.9.9 0 1 1 1.28 1.28.9.9 0 0 1-1.28-1.28ZM11.54 15.36a.9.9 0 1 1 1.29 1.28.9.9 0 0 1-1.29-1.28ZM20.13 21.08a.9.9 0 1 1 1.28 1.28.9.9 0 0 1-1.28-1.28Z"
fill="currentColor" fill-opacity=".15"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M2.36 7.65a5.29 5.29 0 0 1 5.29-5.29h16.7a5.29 5.29 0 0 1 5.29 5.29v16.7a5.29 5.29 0 0 1-5.29 5.29H7.65a5.29 5.29 0 0 1-5.29-5.29V7.65Zm15.55-.28a2.9 2.9 0 0 0-2.73 1.9h-6.8a1 1 0 1 0 0 2h6.8a2.9 2.9 0 0 0 5.46 0h2.99a1 1 0 1 0 0-2h-3a2.9 2.9 0 0 0-2.72-1.9Zm-5.72 5.72A2.9 2.9 0 0 0 9.46 15H8.37a1 1 0 1 0 0 2h1.09a2.9 2.9 0 0 0 5.46 0h8.7a1 1 0 1 0 0-2h-8.7a2.9 2.9 0 0 0-2.73-1.9Zm8.58 5.72a2.9 2.9 0 0 0-2.73 1.91H8.37a1 1 0 0 0 0 2h9.67a2.9 2.9 0 0 0 5.46 0h.13a1 1 0 1 0 0-2h-.13a2.9 2.9 0 0 0-2.73-1.9Z"
fill="currentColor" fill-opacity=".15"></path>
</svg> Fine Tuning Tools
</div>
</label><label id="category-28" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="28">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M16 3c-3.42 0-6.56.61-8.9 1.65a9.05 9.05 0 0 0-2.88 1.92A4.02 4.02 0 0 0 3 9.33v13.34c0 1.06.49 2 1.22 2.76.72.76 1.73 1.4 2.89 1.92A22.53 22.53 0 0 0 16 29a1 1 0 1 0 0-2c-3.2 0-6.06-.58-8.08-1.48a7.1 7.1 0 0 1-2.25-1.47c-.49-.5-.67-.97-.67-1.38v-3.2c.6.46 1.32.87 2.1 1.22a22.53 22.53 0 0 0 8.9 1.64 1 1 0 1 0 0-2c-3.2 0-6.06-.58-8.08-1.47a7.1 7.1 0 0 1-2.25-1.47C5.18 16.88 5 16.4 5 16v-3.2c.6.46 1.32.87 2.1 1.22a22.53 22.53 0 0 0 8.9 1.65c3.42 0 6.56-.62 8.9-1.65.78-.35 1.5-.76 2.1-1.22V16a1 1 0 1 0 2 0V9.33c0-1.06-.49-2-1.22-2.76a9.05 9.05 0 0 0-2.89-1.92A22.53 22.53 0 0 0 16 3Z"
fill="currentColor" fill-opacity=".8"></path>
<path d="M24 20v4m0 0v4m0-4h4m-4 0h-4" stroke="currentColor" stroke-opacity=".5" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round"></path>
</svg> Dataset Creation
</div>
</label><label id="category-29" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="29">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M20.1 13.7a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM9.92 16.02l3.34-.12-3.07 5.88a3.5 3.5 0 0 0 6.2 3.24l2.72-5.2 1.45 2.92a1 1 0 0 0 1.5.35l3.16-2.39a1 1 0 0 0-1.2-1.6l-2.2 1.67-1.87-3.78a3.5 3.5 0 0 0-3.86-3.14 1 1 0 0 0-.29-.03l-6.64.22a1 1 0 0 0-.91.68l-1.45 4.3a1 1 0 0 0 1.9.63l1.22-3.63Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.62 3.6h4.12a1 1 0 0 0 0-2H2.62a1 1 0 0 0-1 1v5.13a1 1 0 1 0 2 0V3.6Zm19.64-1a1 1 0 0 1 1-1h5.12a1 1 0 0 1 1 1v5.13a1 1 0 1 1-2 0V3.61h-4.12a1 1 0 0 1-1-1ZM2.62 23.28a1 1 0 0 1 1 1v4.12h4.12a1 1 0 1 1 0 2H2.62a1 1 0 0 1-1-1v-5.12a1 1 0 0 1 1-1Zm26.76 0a1 1 0 0 1 1 1v5.12a1 1 0 0 1-1 1h-5.12a1 1 0 0 1 0-2h4.12v-4.12a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Pose Estimation
</div>
</label><label id="category-30" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="30">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M16 5.43a10.57 10.57 0 1 0 0 21.14 10.57 10.57 0 0 0 0-21.14Zm-8.53 9.74a8.57 8.57 0 1 0 16.76-1.57 10.57 10.57 0 0 1-11.1-4.16 10.57 10.57 0 0 1-5.66 5.73Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M20.51 17.1a1.35 1.35 0 1 1-2.7 0 1.35 1.35 0 0 1 2.7 0ZM14.2 17.1a1.35 1.35 0 1 1-2.7 0 1.35 1.35 0 0 1 2.7 0Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.62 3.6h4.12a1 1 0 0 0 0-2H2.62a1 1 0 0 0-1 1v5.13a1 1 0 1 0 2 0V3.6Zm19.64-1a1 1 0 0 1 1-1h5.12a1 1 0 0 1 1 1v5.13a1 1 0 1 1-2 0V3.61h-4.12a1 1 0 0 1-1-1ZM2.62 23.28a1 1 0 0 1 1 1v4.12h4.12a1 1 0 1 1 0 2H2.62a1 1 0 0 1-1-1v-5.12a1 1 0 0 1 1-1Zm26.76 0a1 1 0 0 1 1 1v5.12a1 1 0 0 1-1 1h-5.12a1 1 0 0 1 0-2h4.12v-4.12a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Face Recognition
</div>
</label><label id="category-31" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="31">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M3.62 3.6h1.56a1 1 0 0 0 0-2H2.62a1 1 0 0 0-1 1v2.57a1 1 0 1 0 2 0V3.6Zm8.82-1a1 1 0 0 1 1-1H16a1 1 0 0 1 1 1v2.57a1 1 0 1 1-2 0V3.61h-1.56a1 1 0 0 1-1-1Zm-9.82 9.84a1 1 0 0 1 1 1V15h1.56a1 1 0 1 1 0 2H2.62a1 1 0 0 1-1-1v-2.56a1 1 0 0 1 1-1Zm13.38 0a1 1 0 0 1 1 1V16a1 1 0 0 1-1 1h-2.56a1 1 0 1 1 0-2H15v-1.56a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".8"></path>
<circle cx="9.45" cy="9.11" r="2.62" fill="currentColor" fill-opacity=".8"></circle>
<circle cx="24.32" cy="9.11" r="2.62" fill="currentColor" fill-opacity=".5"></circle>
<circle cx="24.32" cy="24.36" r="2.62" fill="currentColor" fill-opacity=".5"></circle>
<circle cx="8.53" cy="23.99" r="2.62" fill="currentColor" fill-opacity=".5"></circle>
</svg> Anomaly Detection
</div>
</label><label id="category-32" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="32">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="m5.68 9.45 3.95-6.32a1.7 1.7 0 0 1 1.46-.8 1.73 1.73 0 0 1 1.79 1.7v4.53h5.74a1.79 1.79 0 0 1 1.71 2.05l-.32 2.1a1 1 0 0 0-.16.17l-3.7 4.98h-3.22a1.79 1.79 0 0 0-1.78 1.8v.53H8.2c-.48 0-.96-.1-1.4-.33l-1.11-.55-.02-9.86ZM3.2 9.1a1 1 0 0 1 1 1v8.93a1 1 0 1 1-2 0V10.1a1 1 0 0 1 1-1Z"
fill="currentColor" fill-opacity=".8"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="m19.83 12.91-3.67 4.95h-3.23c-.98 0-1.78.8-1.78 1.79V27c0 .98.8 1.78 1.78 1.79l3.23.04.03.02c.92.57 1.44.9 3.04.88h7.31a2.81 2.81 0 0 0 2.77-2.42l.43-2.37c.3-1.58.59-3.16.82-4.75a2.84 2.84 0 0 0-2.68-3.22c-.98-.03-1.96 0-2.94 0v-2.58a2.73 2.73 0 0 0-2.07-2.6 2.76 2.76 0 0 0-3.04 1.12Zm1.68 1.1c.15-.25.47-.39.85-.28.37.1.58.35.58.67v3.57a1 1 0 0 0 1 1h3.89c.45.02.82.47.76.91l-1.26 7.1v.05c-.05.39-.4.7-.79.7h-7.32c-.5 0-.93-.2-1.54-.51l-.02-7.06v-.97l1.7-2.29 2.1-2.83.05-.07Zm-5.85 5.85v.33l.02 6.63-2.53-.03v-6.93h2.51Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Recommendation Systems
</div>
</label><label id="category-33" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="33">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path
d="M16 8c-.73 0-1.36-.26-1.88-.78a2.57 2.57 0 0 1-.79-1.89c0-.73.26-1.36.79-1.88A2.58 2.58 0 0 1 16 2.67c.73 0 1.36.26 1.88.78.53.53.79 1.15.79 1.88a2.6 2.6 0 0 1-.79 1.89c-.52.52-1.14.78-1.88.78Z"
fill="currentColor" fill-opacity=".8"></path>
<path
d="M12 12v16a1.33 1.33 0 0 0 2.67 0v-6.67h2.66V28A1.33 1.33 0 0 0 20 28V12a53.4 53.4 0 0 0 6.69-1c.73-.18 1.16-.92.98-1.64a1.42 1.42 0 0 0-1.7-1.03c-1.32.3-2.72.53-4.17.69a54.36 54.36 0 0 1-11.6 0 37.59 37.59 0 0 1-4.18-.69 1.42 1.42 0 0 0-1.7 1.03c-.17.72.26 1.46 1 1.63A53.39 53.39 0 0 0 12 12Z"
fill="currentColor" fill-opacity=".5"></path>
</svg> Character Animation
</div>
</label><label id="category-34" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="34">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M16 1.67a9 9 0 1 0 7.97 13.18 7 7 0 1 1-6.47 12.34 9 9 0 0 1-1.5 1.4 9 9 0 1 0 8.7-15.6A9 9 0 0 0 16 1.66Zm-4.95 4.05a7 7 0 1 1 9.9 9.9 7 7 0 0 1-9.9-9.9Z"
fill="currentColor" fill-opacity=".5"></path>
<path d="M17.5 27.19a9 9 0 1 1-10.2-14.2A9 9 0 0 0 19.36 19a9 9 0 0 1-1.86 8.18Z" fill="currentColor"
fill-opacity=".8"></path>
</svg> Style Transfer
</div>
</label><label id="category-35" class="select-none"><input class="form-input peer sr-only hidden" type="radio"
value="35">
<div
class="flex flex-col items-center justify-center gap-1.5 text-[.82rem] leading-tight text-gray-500 hover:text-gray-700 peer-checked:text-indigo-700 hover:peer-checked:text-indigo-700 dark:text-gray-300 dark:hover:text-gray-100 dark:peer-checked:text-yellow-500 dark:hover:peer-checked:text-yellow-500">
<svg class="text-2xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
viewBox="0 0 32 32">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M11.4 21.75a3 3 0 0 1 3-3H27a3 3 0 0 1 3 3v5.04a3 3 0 0 1-3 3H14.4a3 3 0 0 1-3-3v-5.04Zm6.78 1.48a1.03 1.03 0 1 0 .52 1.93.75.75 0 0 1 .76 1.3 2.53 2.53 0 0 1-3.81-2.2 2.53 2.53 0 0 1 3.81-2.18.75.75 0 0 1-.76 1.3 1.03 1.03 0 0 0-.52-.15Zm4.9 1.04a1.03 1.03 0 0 1 1.55-.9.75.75 0 1 0 .76-1.29 2.53 2.53 0 0 0-3.81 2.19 2.53 2.53 0 0 0 3.81 2.19.75.75 0 0 0-.76-1.3 1.03 1.03 0 0 1-1.56-.9Z"
fill="currentColor" fill-opacity=".15"></path>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M2.08 5.84a4 4 0 0 1 4-4h14.19a4 4 0 0 1 4 4v10.9h-9.05A12.73 12.73 0 0 0 4.08 13.5v5.66c0 1.1.9 2 2 2h3.36c-.02.2-.04.39-.04.59v1.4H6.08a4 4 0 0 1-4-4V5.85Zm18.88 2.44a2.82 2.82 0 1 1-5.65 0 2.82 2.82 0 0 1 5.65 0ZM18.18 23.23a1.03 1.03 0 1 0 .53 1.93.75.75 0 0 1 .75 1.3 2.53 2.53 0 0 1-3.81-2.2 2.53 2.53 0 0 1 3.81-2.18.75.75 0 1 1-.75 1.3 1.03 1.03 0 0 0-.53-.15ZM24.11 23.23a1.03 1.03 0 1 0 .52 1.93.75.75 0 0 1 .76 1.3 2.53 2.53 0 0 1-3.81-2.2 2.53 2.53 0 0 1 3.81-2.18.75.75 0 0 1-.76 1.3 1.03 1.03 0 0 0-.52-.15Z"
fill="currentColor" fill-opacity=".8"></path>
</svg> Image
</div>
</label>
</div>
</template>

View File

@@ -1,36 +0,0 @@
<template>
<div class="bg-slate-100 w-screen h-screen">
<div id="logo-container">
...
</div>
</div>
</template>
<script setup>
import { gsap } from 'gsap'
import { onMounted } from 'vue'
onMounted(() => {
const tl = gsap.timeline({ defaults: { ease: "power2.out " } });
// B2 -> x: 95, y: 75
tl.to("#B2", { x: 95, y: 75 });
// B3 -> x: 115, y: 55
tl.to("#B3", { x: 115, y: 55 });
});
</script>
<style>
#logo-container {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
transform-origin: top left;
z-index: 1000;
}
#logo-vb .bar {
opacity: 0;
transform: translateY(20px);
}
</style>

View File

@@ -1,91 +1,3 @@
<template> <template>
<div class="card-container flex flex-col justify-center items-center dark:bg-slate-900"> <div>Home</div>
<section class="flex items-center p-8 max-w-screen-lg flex-col md:flex-row">
<div class="flex flex-col items-center">
<img src="/profil.jpg" class="max-w-96 p-2 rounded-full">
<div class="flex">
<img src="/tools/javascript.svg" title="javascript"
class="bg-white w-16 h-16 p-2 m-2 flex -mt-10 rounded-full -top-6 relative">
<img src="/tools/vue.svg" title="vue" class="bg-white w-16 h-16 p-2 m-2 flex -mt-10 rounded-full">
<img src="/tools/react.svg" title="pinia"
class="bg-white w-16 h-16 p-2 m-2 flex -mt-10 rounded-full relative">
<img src="/tools/tailwind.svg" title="tailwind"
class="bg-white w-16 h-16 p-2 m-2 flex -mt-10 rounded-full -top-6 relative">
</div>
</div>
<div class="ml-12 text-center">
<h1 class="mt-5 text-slate-800 font-extrabold text-5xl leading-relaxed text-left dark:text-slate-50">
Valère BRON
</h1>
<h2 class="text-yellow-700 dark:text-esyellow text-2xl leading-relaxed mb-8 font-mono text-left">
Développeur Front-end
</h2>
<p class="text-slate-800 dark:text-slate-100 text-lg font-mono text-left">
Développeur JavaScript Front-end avec une expertise en React & en Vue, je vous propose mes services
pour la réalisation de vos projets web.<br><br> Fort de 12 ans d'expérience sur divers projets, je maîtrise la
création
dapplications interactives et performantes, en respectant les meilleures pratiques de développement.
</p>
<a href="https://www.malt.fr/profile/valerebron"
class="text-black font-bold bg-esyellow p-6 ring-1 rounded-lg inline-block mt-12 hover:text-xl transition-all">
<img src="/malt.svg" class="inline pr-3">
Discutons de votre projet
</a>
</div>
</section>
<section class="w-screen flex flex-col items-center">
<p class="text-lg leading-relaxed font-mono p-8 max-w-screen-lg dark:text-white">
Les clients avec qui j'ai travaillé :
</p>
<div class="flex overflow-x-scroll w-screen">
<project @click="openProject(project)" v-if="folio && folio.projects" v-for="project in folio.projects"
:project="project">
</project>
</div>
</section>
<clientDialog :project="currentProject" :open="isDialogOpen" @closeDialog="closeProject()"></clientDialog>
<footer class="flex mt-8 [&>a>img]:h-9 [&>a>img]:w-9 [&>a>img]:p-1 dark:bg-slate-50 [&>a]:p-4 rounded-t-xl">
<a href="https://linkedin.com/in/valere-bron">
<img src="/linkedin.svg">
</a>
<a href="https://www.malt.fr/profile/valerebron">
<img src="/malt.svg">
</a>
<a href="https://github.com/valerebron">
<img src="/github.svg">
</a>
</footer>
</div>
</template> </template>
<script setup lang="ts">
const folio = ref(null)
onMounted(async () => {
const res = await fetch('/folio.json')
folio.value = await res.json()
})
useHead({
title: 'valère BRON - Developpeur web',
meta: [
{ name: 'description', content: 'Découvrez mon profil de développeur web et explorez mes compétences et expériences dans le domaine du développement web.' },
{ name: 'keywords', content: 'développeur web, Valère BRON, Lyon, France, HTML, CSS, JavaScript, Typescript, Tailwind, React, Vue' }
]
})
const isDialogOpen = ref(false)
const currentProject = ref({})
const openProject = function (project: project) {
currentProject.value = project
isDialogOpen.value = true
}
const closeProject = function () {
isDialogOpen.value = false
}
</script>
<style>
body {
overflow-x: hidden;
}
</style>

15
home/.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}

View File

@@ -0,0 +1,246 @@
#!/usr/bin/env python3
import os
import sys
import time
import shlex
import subprocess
import tempfile
from pathlib import Path
from typing import List, Tuple, Optional
# --- Configuration ---
HOME = Path.home()
SOURCES = [
HOME / "Music",
HOME / "Downloads",
]
DEST_ON_PHONE = "/sdcard/Music"
# Model tag as seen in `adb devices -l` (e.g., ... model:AGM_M7 ...)
ADB_MODEL_MATCH = ["AGM_M7", "AGM", "M7"]
POLL_INTERVAL_SEC = 60
SIZE_LIMIT_BYTES = 7 * 1024 ** 3 # 7 GiB
MUSIC_EXTS = {".mp3", ".m4a", ".ogg", ".aac", ".opus", ".alac", ".flac"}
# If you have a static Wi-Fi ADB endpoint, set it here (e.g., "192.168.1.50:5555").
ADB_IP_PORT: Optional[str] = None
# --- Helpers ---
def run(cmd: List[str], check: bool = False, text: bool = True, timeout: Optional[int] = None) -> subprocess.CompletedProcess:
try:
return subprocess.run(cmd, check=check, text=text, capture_output=True, timeout=timeout)
except Exception as e:
return subprocess.CompletedProcess(cmd, returncode=1, stdout="", stderr=str(e))
def ensure_adb_server() -> None:
run(["adb", "start-server"]) # best-effort
def list_adb_devices() -> List[str]:
proc = run(["adb", "devices", "-l"]) # do not check, we parse regardless
if proc.returncode != 0:
return []
lines = [ln.strip() for ln in proc.stdout.splitlines()]
# skip header line: "List of devices attached"
if lines and lines[0].lower().startswith("list of devices"):
lines = lines[1:]
return [ln for ln in lines if ln]
def adb_connect_if_needed():
if not ADB_IP_PORT:
return
devices = list_adb_devices()
if any(ADB_IP_PORT in ln for ln in devices):
return # already connected
run(["adb", "connect", ADB_IP_PORT])
def is_agm_connected() -> bool:
devices = list_adb_devices()
for ln in devices:
if "device" in ln and not ln.endswith("offline"):
if any(tag in ln for tag in ADB_MODEL_MATCH):
return True
return False
def gather_music_files() -> List[Tuple[Path, Path, float, int]]:
# Returns list of tuples: (root_dir, file_path, mtime, size)
entries: List[Tuple[Path, Path, float, int]] = []
for root in SOURCES:
try:
if not root.exists():
continue
for dirpath, _, filenames in os.walk(root):
dpath = Path(dirpath)
for fn in filenames:
p = dpath / fn
if p.suffix.lower() not in MUSIC_EXTS:
continue
try:
st = p.stat()
entries.append((root, p, st.st_mtime, st.st_size))
except Exception:
continue
except Exception:
continue
# newest first by mtime
entries.sort(key=lambda t: t[2], reverse=True)
return entries
def select_up_to_size(entries: List[Tuple[Path, Path, float, int]], limit_bytes: int) -> List[Tuple[Path, Path, int]]:
selected: List[Tuple[Path, Path, int]] = []
total = 0
for root, p, _mt, sz in entries:
if total >= limit_bytes:
break
selected.append((root, p, sz))
total += sz
return selected
def adb_shell(cmd: str) -> subprocess.CompletedProcess:
# Single string executed via adb shell
return run(["adb", "shell", cmd])
def remote_size(adb_path: str) -> Optional[int]:
# Uses stat if available; returns None if missing
# Escape path for shell
qpath = shlex.quote(adb_path)
proc = adb_shell(f"stat -c %s {qpath}")
if proc.returncode != 0 or not proc.stdout.strip():
return None
out = proc.stdout.strip()
if "No such file" in out or "not found" in out:
return None
try:
return int(out.splitlines()[-1].strip())
except Exception:
return None
def ensure_remote_dir(adb_path: str) -> None:
# mkdir -p dirname
dirname = os.path.dirname(adb_path)
if not dirname:
return
adb_shell(f"mkdir -p {shlex.quote(dirname)}")
def have_ffmpeg() -> bool:
proc = run(["ffmpeg", "-version"])
return proc.returncode == 0
def transcode_flac_to_mp3(src: Path) -> Optional[Path]:
try:
tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
tmp_path = Path(tmp.name)
tmp.close()
except Exception:
return None
cmd = [
"ffmpeg",
"-y",
"-i",
str(src),
"-vn",
"-c:a",
"libmp3lame",
"-q:a",
"2",
str(tmp_path),
]
proc = run(cmd)
if proc.returncode != 0:
try:
tmp_path.unlink(missing_ok=True) # type: ignore[arg-type]
except Exception:
pass
return None
return tmp_path
def push_file(local_path: Path, remote_path: str, size: int) -> bool:
# Skip if same size exists
rsz = remote_size(remote_path)
if rsz is not None and rsz == size:
print(f"[=] Skip (same size): {local_path} -> {remote_path}")
return True
ensure_remote_dir(remote_path)
proc = run(["adb", "push", "-p", str(local_path), remote_path])
if proc.returncode == 0:
print(f"[+] Pushed: {local_path} -> {remote_path}")
return True
else:
print(f"[!] Push failed: {local_path}\n{proc.stderr}")
return False
def sync_latest_batch():
entries = gather_music_files()
if not entries:
print("[i] No music files found.")
return
batch = select_up_to_size(entries, SIZE_LIMIT_BYTES)
print(f"[i] Selected {len(batch)} files up to {SIZE_LIMIT_BYTES/(1024**3):.2f} GiB")
for root, p, sz in batch:
try:
rel = p.relative_to(root)
except Exception:
rel = p.name # fallback
if p.suffix.lower() == ".flac":
if not have_ffmpeg():
print(f"[!] ffmpeg not available, skipping: {p}")
continue
mp3_tmp = transcode_flac_to_mp3(p)
if not mp3_tmp:
print(f"[!] Transcode failed, skipping: {p}")
continue
try:
if isinstance(rel, Path):
rel_mp3 = rel.with_suffix(".mp3")
remote = f"{DEST_ON_PHONE.rstrip('/')}/{rel_mp3.as_posix()}"
else:
remote = f"{DEST_ON_PHONE.rstrip('/')}/{Path(rel).with_suffix('.mp3').as_posix()}"
msz = mp3_tmp.stat().st_size
push_file(mp3_tmp, remote, msz)
finally:
try:
mp3_tmp.unlink()
except Exception:
pass
else:
remote = f"{DEST_ON_PHONE.rstrip('/')}/{rel.as_posix()}"
push_file(p, remote, sz)
def main():
print("[i] adb-music-sync daemon starting...")
ensure_adb_server()
connected_prev = False
while True:
try:
ensure_adb_server()
adb_connect_if_needed()
connected = is_agm_connected()
if connected and not connected_prev:
print("[+] AGM M7 connected. Starting sync of latest ~7 GiB...")
sync_latest_batch()
elif not connected and connected_prev:
print("[-] AGM M7 disconnected.")
connected_prev = connected
time.sleep(POLL_INTERVAL_SEC)
except KeyboardInterrupt:
print("[i] Exiting on user interrupt.")
sys.exit(0)
except Exception as e:
print(f"[!] Error in main loop: {e}")
time.sleep(POLL_INTERVAL_SEC)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
set -euo pipefail
SILENT=false
LOG_PREFIX="[adb-music-sync]"
PYTHON_SCRIPT="$HOME/.linux-env/adb-music-sync/adb-music-sync.py"
INSTALL_TARGET="$HOME/.local/bin/adb-music-sync.py"
AUTOSTART_DIR="$HOME/.config/autostart"
AUTOSTART_FILE="$AUTOSTART_DIR/adb-music-sync.desktop"
log() {
if [ "$SILENT" = true ]; then return; fi
echo "$LOG_PREFIX $*"
}
check_and_install_deps() {
# Minimal dependency: adb
if ! command -v adb >/dev/null 2>&1; then
if command -v apt >/dev/null 2>&1; then
log "[+] Installation d'adb (apt) ..."
sudo apt update -y && sudo apt install -y adb
elif command -v dnf >/dev/null 2>&1; then
log "[+] Installation d'adb (dnf) ..."
sudo dnf install -y android-tools
elif command -v pacman >/dev/null 2>&1; then
log "[+] Installation d'adb (pacman) ..."
sudo pacman -Sy --noconfirm android-tools
else
log "[!] adb introuvable et gestionnaire de paquets inconnu. Installez adb manuellement."
fi
fi
}
install_script() {
check_and_install_deps
log "[+] Copie du script Python..."
mkdir -p "$(dirname "$INSTALL_TARGET")"
cp "$PYTHON_SCRIPT" "$INSTALL_TARGET"
chmod +x "$INSTALL_TARGET"
log "[+] Création du fichier autostart..."
mkdir -p "$AUTOSTART_DIR"
cat > "$AUTOSTART_FILE" <<EOF
[Desktop Entry]
Type=Application
Exec=$INSTALL_TARGET
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=ADB Music Sync
Comment=Lance la synchronisation de ~5GiB de musique vers l'AGM M7 à la connexion ADB
EOF
log "[✓] Installation terminée. Le script se lancera automatiquement à l'ouverture de session."
}
uninstall_script() {
log "[+] Suppression du script Python et autostart..."
rm -f "$INSTALL_TARGET"
rm -f "$AUTOSTART_FILE"
log "[✓] Désinstallation terminée."
}
case "${1:-}" in
uninstall)
uninstall_script
;;
silent)
SILENT=true
uninstall_script &>/dev/null || true
install_script &>/dev/null
;;
*)
install_script
;;
esac

View File

@@ -0,0 +1,9 @@
[Desktop Entry]
Name=Android WiFi
Comment=Mirror and control Android devices over Wi-Fi
Exec=/home/valere/.local/bin/android-wifi.sh
Icon=/home/valere/.local/share/icons/android-wifi.svg
Terminal=false
Type=Application
Categories=Utility;
StartupNotify=true

View File

@@ -0,0 +1,10 @@
#!/bin/sh
if ! scrcpy; then
adb tcpip 5555 >/dev/null 2>&1 || true
ip=$(ip neighbor | grep -i "0e:52:03:1e:89:9a" | awk '{print $1}')
adb connect "${ip}:5555"
scrcpy
fi

View File

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" version="1.1">
<path style="opacity:0.2" d="m 16.846877,12 c -1.116351,0 -2.227419,0.912229 -2.015075,2 l 3.122973,16 -5.596557,11.109375 C 11.959876,41.871734 11.885244,42.336988 12.177176,43 c 0.278672,0.632897 0.998812,1 1.747448,1 H 24 34.075375 c 0.748637,0 1.468777,-0.367103 1.747448,-1 0.291932,-0.663012 0.217302,-1.128266 -0.181041,-1.890625 L 30.045225,30 33.168198,14 c 0.212344,-1.087771 -0.898724,-2 -2.015075,-2 H 24 Z"/>
<path style="fill:#cccccc" d="m 16.846877,11 c -1.116351,0 -2.227419,0.912229 -2.015075,2 l 3.122973,16 -5.596557,11.109375 C 11.959876,40.871734 11.885244,41.336988 12.177176,42 c 0.278672,0.632897 0.998812,1 1.747448,1 H 24 34.075375 c 0.748637,0 1.468777,-0.367103 1.747448,-1 0.291932,-0.663012 0.217302,-1.128266 -0.181041,-1.890625 L 30.045225,29 33.168198,13 c 0.212344,-1.087771 -0.898724,-2 -2.015075,-2 H 24 Z"/>
<rect style="opacity:0.2" width="40" height="32" x="4" y="6" rx="2" ry="2"/>
<path style="fill:#e4e4e4" d="m 4,33 v 2 c 0,1.108 0.892,2 2,2 h 36 c 1.108,0 2,-0.892 2,-2 v -2 z"/>
<path style="opacity:0.1" d="m 11.494141,15 a 1.5,1.5 0 0 0 -0.832032,0.255859 1.5,1.5 0 0 0 -0.40625,2.082032 l 3.13086,4.654297 C 10.404945,24.606192 8.4012371,28.299159 8.0019531,32.460938 7.9284599,34.000879 9.5546875,34 9.5546875,34 H 38.40625 c 0,0 1.672856,-3.38e-4 1.591797,-1.617188 -0.416529,-4.131451 -2.415618,-7.796833 -5.380859,-10.394531 l 3.126953,-4.65039 a 1.5,1.5 0 0 0 -0.40625,-2.082032 1.5,1.5 0 0 0 -1.125,-0.228515 1.5,1.5 0 0 0 -0.957032,0.634765 l -3.072265,4.566407 C 29.78649,18.814887 26.990024,18 24.001953,18 c -2.989385,0 -5.786177,0.815488 -8.183594,2.230469 l -3.074218,-4.56836 A 1.5,1.5 0 0 0 11.787109,15.027344 1.5,1.5 0 0 0 11.494141,15 Z"/>
<path style="fill:#077063" d="M 6,5 C 4.892,5 4,5.892 4,7 V 33 H 44 V 7 C 44,5.892 43.108,5 42,5 Z"/>
<path style="opacity:0.1;fill:#ffffff" d="M 6,5 C 4.892,5 4,5.892 4,7 V 8 C 4,6.892 4.892,6 6,6 h 36 c 1.108,0 2,0.892 2,2 V 7 C 44,5.892 43.108,5 42,5 Z"/>
<path style="fill:none;stroke:#30dd81;stroke-width:3;stroke-linecap:round" d="M 15.1998,21.000026 11.5,15.5"/>
<path style="fill:none;stroke:#30dd81;stroke-width:3;stroke-linecap:round" d="M 32.799764,21.000026 36.5,15.5"/>
<path style="fill:#30dd81" d="m 24.002386,17.000034 c -8.355868,0 -15.2214979,6.346843 -15.9999669,14.460906 C 7.9289259,33.000882 9.5544999,33 9.5544999,33 H 38.406003 c 0,0 1.672201,-3.35e-4 1.591142,-1.617185 C 39.182807,23.305596 32.331836,17.000034 24.002386,17.000034 Z"/>
<path style="opacity:0.2" d="m 16,25 a 1.9999959,1.9999959 0 0 0 -2,2 1.9999959,1.9999959 0 0 0 2,2 1.9999959,1.9999959 0 0 0 2,-2 1.9999959,1.9999959 0 0 0 -2,-2 z m 16,0 a 1.9999959,1.9999959 0 0 0 -2,2 1.9999959,1.9999959 0 0 0 2,2 1.9999959,1.9999959 0 0 0 2,-2 1.9999959,1.9999959 0 0 0 -2,-2 z"/>
<path style="fill:#ffffff" d="M 15.999996,24.000008 A 1.9999959,1.9999959 0 0 1 17.999992,26.000004 1.9999959,1.9999959 0 0 1 15.999996,28 1.9999959,1.9999959 0 0 1 14,26.000004 1.9999959,1.9999959 0 0 1 15.999996,24.000008 Z"/>
<path style="fill:#ffffff" d="M 31.999996,24.000008 A 1.9999959,1.9999959 0 0 1 33.999991,26.000004 1.9999959,1.9999959 0 0 1 31.999996,28 1.9999959,1.9999959 0 0 1 30,26.000004 1.9999959,1.9999959 0 0 1 31.999996,24.000008 Z"/>
<path style="fill:#ffffff;opacity:0.2" d="M 11.494141 14 A 1.5 1.5 0 0 0 10.662109 14.255859 A 1.5 1.5 0 0 0 10.115234 16.001953 A 1.5 1.5 0 0 1 10.662109 15.255859 A 1.5 1.5 0 0 1 11.494141 15 A 1.5 1.5 0 0 1 11.787109 15.027344 A 1.5 1.5 0 0 1 12.744141 15.662109 L 15.818359 20.230469 C 18.215776 18.815488 21.012568 18 24.001953 18 C 26.990024 18 29.78649 18.814887 32.183594 20.228516 L 35.255859 15.662109 A 1.5 1.5 0 0 1 36.212891 15.027344 A 1.5 1.5 0 0 1 37.337891 15.255859 A 1.5 1.5 0 0 1 37.910156 16.001953 A 1.5 1.5 0 0 0 37.337891 14.255859 A 1.5 1.5 0 0 0 36.212891 14.027344 A 1.5 1.5 0 0 0 35.255859 14.662109 L 32.183594 19.228516 C 29.78649 17.814887 26.990024 17 24.001953 17 C 21.012568 17 18.215776 17.815488 15.818359 19.230469 L 12.744141 14.662109 A 1.5 1.5 0 0 0 11.787109 14.027344 A 1.5 1.5 0 0 0 11.494141 14 z M 35.033203 21.369141 L 34.617188 21.988281 C 37.477056 24.493668 39.433905 27.993356 39.943359 31.945312 C 39.986866 31.783283 40.008864 31.598575 39.998047 31.382812 C 39.601372 27.448291 37.768055 23.938648 35.033203 21.369141 z M 12.970703 21.373047 C 10.220358 23.959215 8.3822757 27.496796 8.0019531 31.460938 C 7.9920657 31.668114 8.0150508 31.844846 8.0585938 32 C 8.5570234 28.027243 10.515755 24.509049 13.386719 21.992188 L 12.970703 21.373047 z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,11 @@
#!/bin/bash
# desktop apps
cp ~/.linux-env/applications/*/*.desktop ~/.local/share/applications/
cp ~/.linux-env/applications/*/*.sh ~/.local/bin/
cp ~/.linux-env/applications/*/*.svg ~/.local/share/icons/
chmod +x ~/.local/share/applications/*.desktop
chmod +x ~/.local/bin/*.sh
update-desktop-database ~/.local/share/applications/
gtk-update-icon-cache ~/.local/share/icons/ # inutile sauf si tu fais un vrai thème d'icônes

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
<client name="Azureus 3.0.5.0" author="seba14.org" version="1.0" processname="azureus"> <query>info_hash={infohash}&amp;peer_id={peerid}&amp;supportcrypto=1&amp;port={port}&amp;azudp={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0{event}&amp;numwant={numwant}&amp;no_peer_id=1&amp;compact=1&amp;key={key}&amp;azver=3</query>
<headers>User-Agent: Azureus 3.0.5.0;Windows XP;Java 1.6.0_05_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_Content-type: application/x-www-form-urlencoded_nl_</headers>
<peer_id prefix="-AZ3050-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="BitComet 1.07" author="seba14.org" version="1.0" processname="bitcomet">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;natmapped=1&amp;localip={localip}&amp;port_type=wan&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1&amp;key={key}{event}</query>
<headers>Host: {host}_nl_Connection: close_nl_Accpet: */*_nl_Accept-Encoding: gzip_nl_User-Agent: BitComet/1.7.12.3_nl_Pragma: no-cache_nl_Cache-Control: no-cache_nl_</headers>
<peer_id prefix="-BC0107-" type="random" length="12" urlencoding="true" upperCase="true" value="" />
<key type="numeric" length="5" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="BitComet 1.13" author="seba14.org" version="1.0" processname="bitcomet">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;natmapped=1&amp;localip={localip}&amp;port_type=wan&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1&amp;key={key}{event}</query>
<headers>Host: {host}_nl_Connection: close_nl_Accept: */*_nl_Accept-Encoding: gzip_nl_User-Agent: BitComet/1.13.6.22_nl_Pragma: no-cache_nl_Cache-Control: no-cache_nl_</headers>
<peer_id prefix="-BC0113-" type="random" length="12" urlencoding="true" upperCase="true" value="" />
<key type="numeric" length="5" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="BitTorrent 6.0.3 (8642)" author="Rebound" version="1.0" processname="bittorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: BitTorrent/6030_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="M6-0-3--" type="random" length="12" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="BitTyrant 1.1" author="res0r9lm" version="1.0" processname="Azureus">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;supportcrypto=1&amp;port={port}&amp;azudp={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}{event}&amp;numwant={numwant}&amp;no_peer_id=1&amp;compact=1&amp;key={key}</query>
<headers>User-Agent: AzureusBitTyrant 2.5.0.0BitTyrant;Windows XP;Java 1.5.0_10_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_Proxy-Connection: keep-alive_nl_Content-type: application/x-www-form-urlencoded_nl_</headers>
<peer_id prefix="AZ2500BT" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="Deluge 1.1.7" author="seba14.org" version="1.0">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}{event}&amp;key={key}&amp;compact=1&amp;numwant={numwant}&amp;supportcrypto=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: Deluge 1.1.7_nl_Connection: close_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-DE1170-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value="" />
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.0"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,9 @@
<client name="Deluge 1.1.9" author="seba14.org" version="1.0">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}{event}&amp;key={key}&amp;compact=1&amp;numwant={numwant}&amp;supportcrypto=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: Deluge 1.1.9_nl_Connection: close_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-DE1190-" type="printable" length="12" urlencoding="false" upperCase="false" value="" />
<key type="hex" length="8" urlencoding="false" upperCase="false" lowerCase="true" value=""/>
<protocol value="HTTP/1.0"/>
<hash upperCase="false"/>
<urlencoding exceptions="." />
</client>

View File

@@ -0,0 +1,8 @@
<client name="Halite 0.3.1.1" author="seba14.org" version="2.0"> <query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}{event}&amp;key={key}&amp;compact=1&amp;numwant={numwant}&amp;supportcrypto=1&amp;no_peer_id=1</query>
<headers>Accept-Encoding: gzip_nl_User-Agent: Halite v 0.3.1.1_nl_Host: {host}_nl_</headers>
<peer_id prefix="-HL0311-" type="printable" length="12" urlencoding="false"/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.0"/>
<hash upperCase="false"/>
<urlencoding exceptions="_-()~!*."/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="Transmission 1.06 (Build 5136)" author="seba14.org" version="1.0">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;corrupt=0&amp;left={left}&amp;compact=1&amp;numwant={numwant}&amp;key={key}&amp;supportcrypto=1&amp;requirecrypto=0{event}</query>
<headers>Host: {host}_nl_Connection: close_nl_User-Agent: Transmission/1.06 (5136)_nl_</headers>
<peer_id prefix="-TR1060-" type="alphanumeric" length="12" urlencoding="false" lowerCase="true" value=""/>
<key type="alphanumeric" length="10" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="Vuze 4.2.0.2" author="seba14.org" version="1.0" processname="azureus"> <query>info_hash={infohash}&amp;peer_id={peerid}&amp;supportcrypto=1&amp;port={port}&amp;azudp={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0{event}&amp;numwant={numwant}&amp;no_peer_id=1&amp;compact=1&amp;key={key}&amp;azver=3</query>
<headers>User-Agent: Azureus 4.2.0.2;Windows XP;Java 1.6.0_13_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
<peer_id prefix="-AZ4202-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
<urlencoding exceptions="*-._" />
</client>

View File

@@ -0,0 +1,9 @@
<client name="Vuze 4.2.0.4" author="Ratiomaster" version="1.0" processname="azureus">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;supportcrypto=1&amp;port={port}&amp;azudp={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0{event}&amp;numwant={numwant}&amp;no_peer_id=1&amp;compact=1&amp;key={key}&amp;azver=3</query>
<headers>User-Agent: Azureus 4.2.0.4;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
<peer_id prefix="-AZ4204-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
<urlencoding exceptions="*-._" />
</client>

View File

@@ -0,0 +1,9 @@
<client name="Vuze 4.2.0.8" author="KTC" version="1.0" processname="azureus">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;supportcrypto=1&amp;port={port}&amp;azudp={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0{event}&amp;numwant={numwant}&amp;no_peer_id=1&amp;compact=1&amp;key={key}&amp;azver=3</query>
<headers>User-Agent: Azureus 4.2.0.8;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
<peer_id prefix="-AZ4208-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
<urlencoding exceptions="*-._" />
</client>

View File

@@ -0,0 +1,8 @@
<client name="Vuze 4.3.0.6" author="seba14.org" version="1.0" processname="azureus"> <query>info_hash={infohash}&amp;peer_id={peerid}&amp;supportcrypto=1&amp;port={port}&amp;azudp={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0{event}&amp;numwant={numwant}&amp;no_peer_id=1&amp;compact=1&amp;key={key}&amp;azver=3</query>
<headers>User-Agent: Azureus 4.3.0.6;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
<peer_id prefix="-AZ4306-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
<urlencoding exceptions="*-._" />
</client>

View File

@@ -0,0 +1,8 @@
<client name="Vuze 4.4.0.4" author="seba14.org" version="2.0" processname="azureus"> <query>info_hash={infohash}&amp;peer_id={peerid}&amp;supportcrypto=1&amp;port={port}&amp;azudp={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0{event}&amp;numwant={numwant}&amp;no_peer_id=1&amp;compact=1&amp;key={key}&amp;azver=3</query>
<headers>User-Agent: Azureus 4.4.0.4;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
<peer_id prefix="-AZ4404-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
<urlencoding exceptions="*-._" />
</client>

View File

@@ -0,0 +1,8 @@
<client name="Vuze 4.5.0.0" author="seba14.org" version="2.0" processname="azureus"> <query>info_hash={infohash}&amp;peer_id={peerid}&amp;supportcrypto=1&amp;port={port}&amp;azudp={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0{event}&amp;numwant={numwant}&amp;no_peer_id=1&amp;compact=1&amp;key={key}&amp;azver=3</query>
<headers>User-Agent: Azureus 4.5.0.0;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
<peer_id prefix="-AZ4500-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="true"/>
<urlencoding exceptions="*-._" />
</client>

View File

@@ -0,0 +1,8 @@
<client name="BitLord 1.1" author="Ratiomaster" version="1.0" processname="bitlord">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;natmapped=1&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1&amp;key={key}{event}</query>
<headers>User-Agent: BitTorrent/3.4.2_nl_Connection: close_nl_Accept-Encoding: gzip, deflate_nl_Host: {host}_nl_Cache-Control: no-cache_nl_</headers>
<peer_id prefix="exbc%01%01LORDCz%03%92" type="random" length="6" urlencoding="true" upperCase="true" value="" />
<key type="numeric" length="4" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.0"/>
<hash upperCase="true"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="Burst 3.1.0b" author="RatioMaster" version="1.0" processname="btdownloadheadless">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;key={key}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;compact=1{event}</query>
<headers>Host: {host}_nl_Accept-Encoding: gzip_nl_User-Agent: BitTorrent/brst1.1.3_nl_</headers>
<peer_id prefix="Mbrst1-1-3" type="hex" length="10" urlencoding="false" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="false" value=""/>
<protocol value="HTTP/1.0"/>
<hash upperCase="true"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="uTorrent 1.7.7 build (8179)" author="uk10" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/1770_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT1770-%f3%9f" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="uTorrent 1.8.1 (build 12616)" author="SpongeBob101" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/1810_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT1810-H1" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="uTorrent 1.8.1 (build 12639)" author="MurderTR" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/1810_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT1810-_1" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="uTorrent 1.8.2 (build 15227)" author="Gox" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/1820_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT1820-%7b%3b" type="random" length="10" urlencoding="true" upperCase="false" value="" />
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="utorrent 1.8.2 (build 14153)" author="rogeruk" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>User-Agent: uTorrent/1820_nl_Accept-Encoding: gzip, deflate_nl_Host: {host}_nl_Cache-Control: no-cache_nl_</headers>
<peer_id prefix="-UT1820-I7" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="utorrent 1.8.2 (build 14458)" author="MurderTR" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>User-Agent: uTorrent/1820_nl_Accept-Encoding: gzip, deflate_nl_Host: {host}_nl_Cache-Control: no-cache_nl_</headers>
<peer_id prefix="-UT1820-z8" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="uTorrent 1.8.2 Build (15167)" author="seba14.org" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/1820_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT1820-%3f%3b" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,9 @@
<client name="uTorrent 1.8.3 Build (15728)" author="seba14.org" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/1830(15728)_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT1830-p%3d" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
<urlencoding exceptions="_()~._-" />
</client>

View File

@@ -0,0 +1,9 @@
<client name="uTorrent 1.8.4 Build (16150)" author="seba14.org" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/1840(16150)_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT1840-%16%3f" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
<urlencoding exceptions="_-~!*."/>
</client>

View File

@@ -0,0 +1,8 @@
<client name="uTorrent 1.8 (build 11813)" author="SpongeBob101" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/1800_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT1800-%25." type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
</client>

View File

@@ -0,0 +1,10 @@
<client name="uTorrent 2.0.4 Build (21431)" author="CoreCore and Anon" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/2040(21431)_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT2040-%b7S" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
<urlencoding exceptions="-._~"/>
<numwant value="200" randomize="false"/>
</client>

View File

@@ -0,0 +1,10 @@
<client name="uTorrent 2.0.4 Build (21515)" author="CoreCore and Anon" version="1.0" processname="utorrent">
<query>info_hash={infohash}&amp;peer_id={peerid}&amp;port={port}&amp;uploaded={uploaded}&amp;downloaded={downloaded}&amp;left={left}&amp;corrupt=0&amp;key={key}{event}&amp;numwant={numwant}&amp;compact=1&amp;no_peer_id=1</query>
<headers>Host: {host}_nl_User-Agent: uTorrent/2040(21515)_nl_Accept-Encoding: gzip_nl_</headers>
<peer_id prefix="-UT2040-%0bT" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
<protocol value="HTTP/1.1"/>
<hash upperCase="false"/>
<urlencoding exceptions="-._~"/>
<numwant value="200" randomize="false"/>
</client>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Name=RatioMaster
Comment=Ratio spoofing tool for torrents
Exec=wine /home/valere/.local/bin/RatioMaster/RM.exe
Path=/home/valere/.local/bin/RatioMaster
Icon=/home/valere/.local/bin/RatioMaster/logo.svg
Terminal=false
Type=Application
Categories=Network;P2P;
StartupNotify=true

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
width="773.29401"
height="773.29401"
viewBox="0 -28.5 247.45409 247.45409"
version="1.1"
preserveAspectRatio="xMidYMid"
id="svg3"
sodipodi:docname="logo.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs3" />
<sodipodi:namedview
id="namedview3"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="0.48911087"
inkscape:cx="-24.534315"
inkscape:cy="80.758786"
inkscape:window-width="1920"
inkscape:window-height="1132"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3" />
<g
id="g3"
transform="translate(5.5656067,239.04617)">
<rect
style="fill:#eb001b;fill-opacity:1;stroke-width:11.3833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.3;paint-order:fill markers stroke"
id="rect3"
width="112.2394"
height="112.45076"
x="-105.21542"
y="-209.79523"
transform="rotate(45)" />
<rect
style="fill:#f79e1b;fill-opacity:1;stroke-width:11.3833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.3;paint-order:fill markers stroke"
id="rect3-6"
width="112.2394"
height="112.45076"
x="-42.293499"
y="-272.13583"
transform="rotate(45)" />
<rect
style="fill:#ff5f00;fill-opacity:1;stroke-width:5.03456;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.3;paint-order:fill markers stroke"
id="rect3-6-5"
width="49.315277"
height="50.120525"
x="-42.293499"
y="-209.80559"
transform="rotate(45)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<ApplicationSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<textStopMinLeecher>0</textStopMinLeecher>
<updateAnnounceParamsOnStart>true</updateAnnounceParamsOnStart>
<finishedPercent>100</finishedPercent>
<uploadRate>55003.37</uploadRate>
<downloadRate>0.21</downloadRate>
<interval>1800</interval>
<TorrentClientsIndex>11</TorrentClientsIndex>
<checkLogEnabled>true</checkLogEnabled>
<checkRequestScrap>true</checkRequestScrap>
<checkShowTrayBaloon>true</checkShowTrayBaloon>
<checkTCPListen>false</checkTCPListen>
<customPort />
<customKey>WMAAIhLqVx</customKey>
<customPeersNum />
<customPeerID>-TR1060-pauut3h9agwn</customPeerID>
<textProxyHost />
<textProxyPort />
<textProxyPass />
<textProxyUser />
<comboProxyTypeIndex>0</comboProxyTypeIndex>
<checkNewVersion>true</checkNewVersion>
<checkRandomUpload>true</checkRandomUpload>
<checkRandomDownload>true</checkRandomDownload>
<RandomUploadFrom>50000</RandomUploadFrom>
<RandomUploadTo>100000</RandomUploadTo>
<RandomDownloadFrom>0</RandomDownloadFrom>
<RandomDownloadTo>4</RandomDownloadTo>
<ignoreFailureReason>false</ignoreFailureReason>
<torrentFilePath>C:\users\valere\Desktop\Downloads\l.horloger.de.saint-paul.1974.VOF RESTAUREE.1080p.BDrip.x265.FLAC-AZAZE.mkv.torrent</torrentFilePath>
<torrentHash>1164387932F4CB6B1267B3ABA7E0A4CD26593E14</torrentHash>
<stopProcessActionBox>0</stopProcessActionBox>
<stopProcessValue>1000</stopProcessValue>
<stopProcessUnitsBox>-1</stopProcessUnitsBox>
<selectedLanguage>Z:\home\valere\.local\bin\RatioMaster\lng\1english.lng</selectedLanguage>
<bindToIp>default</bindToIp>
<minimizeTotray>true</minimizeTotray>
<ignoreTimeout>false</ignoreTimeout>
<useUPnP>false</useUPnP>
<savePeerList>false</savePeerList>
</ApplicationSettings>

Binary file not shown.

106
home/bashrc/.bashrc Normal file
View File

@@ -0,0 +1,106 @@
# .linux-env
VIDEO_PATH_LOCAL="/home/valere/Downloads"
IMAGE_PATH_LOCAL="/home/valere/Downloads"
MUSIC_PATH_LOCAL="/home/valere/evilspins/web/mnt/media/files/music"
VIDEO_PATH="/home/root/media/video/autre"
IMAGE_PATH="/home/root/media/image/screenshit"
MUSIC_PATH="/home/root/media/files/music"
dlvideo() {
cd "$VIDEO_PATH" || return
pip install -U yt-dlp
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4" --merge-output-format mp4 "$@"
}
dlimage() {
wget -P "$IMAGE_PATH" "$1"
}
dlcover() {
query_or_file="$1"
manual_url="$2"
if [ -f "$query_or_file" ]; then
file="$query_or_file"
elif echo "$query_or_file" | grep -q '%(ext)'; then
file="$query_or_file"
else
file=$(find "$MUSIC_PATH" -type f \
\( -iname "*${query_or_file}*.mp3" -o -iname "*${query_or_file}*.m4a" -o -iname "*${query_or_file}*.flac" -o -iname "*${query_or_file}*.wav" -o -iname "*${query_or_file}*.ogg" \) \
| head -n 1)
fi
if [ -z "$file" ]; then
echo "❌ Aucun fichier trouvé pour: $query_or_file"
return 1
fi
base="${file%.*}"
if [ -n "$manual_url" ]; then
curl -s "$manual_url" -o "${base}.jpg"
echo "${base}.jpg saved from manual URL (fichier: $file)"
return
fi
artist_raw=$(echo "$base" | awk -F'__' '{print $2}')
title_raw=$(echo "$base" | awk -F'__' '{for(i=3;i<=NF;i++){printf (i>3?" ":""); printf $i}}')
artist=$(echo "$artist_raw" | tr '_' ' ')
title=$(echo "$title_raw" | tr '_' ' ')
query_enc=$(jq -rn --arg s "$artist $title" '$s|@uri')
it_url="https://itunes.apple.com/search?term=${query_enc}&entity=song&limit=1"
art=$(curl -s "$it_url" | jq -r '.results[0].artworkUrl100')
if [ -n "$art" ] && [ "$art" != "null" ]; then
art_hi=$(echo "$art" | sed 's/100x100bb/1000x1000bb/')
curl -s "$art_hi" -o "${base}.jpg"
echo "${base}.jpg saved from iTunes (fichier: $file)"
return
fi
api_key="5ae5d1212599f96ffa799e21da1b2a7a38274c94bb5ae8ad26ce8d5b08528aaa"
url=$(curl -s "https://serpapi.com/search.json?engine=google&q=${query_enc}&tbm=isch&api_key=${api_key}" \
| jq -r '.images_results[0].original')
if [ -n "$url" ] && [ "$url" != "null" ]; then
curl -s "$url" -o "${base}.jpg"
echo "${base}.jpg saved from Google Images (fichier: $file)"
else
echo "❌ No cover found for $artist - $title (fichier: $file)"
fi
}
dlmusic() {
mkdir -p "$MUSIC_PATH"
NOW=$(date +"%Y%m%d%H")
URL="$1"
# Récupère le titre
TITLE=$(yt-dlp --get-title "$URL")
# Transforme le titre pour le nom de fichier
SAFE_TITLE="${TITLE// - /__}"
SAFE_TITLE="${SAFE_TITLE// /_}"
TRACK_NAME="$MUSIC_PATH/${NOW}__${SAFE_TITLE}.%(ext)s"
# Téléchargement
yt-dlp -x --audio-format mp3 -o $TRACK_NAME "$URL"
dlcover $TRACK_NAME
}
search() {
find ./ -iname "*$1*"
}
searchinside() {
grep -rwl "$1" ./
}
alias evilsync='rsync -avz --delete -e ssh $MUSIC_PATH_LOCAL root@erudi.fr:$MUSIC_PATH'
alias evildiff='rsync -avzn --delete -e ssh $MUSIC_PATH_LOCAL root@erudi.fr:$MUSIC_PATH'
# end .linux-env

4
home/bashrc/install.sh Normal file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
sed -i '/# .linux-env/,/# .linux-env/d' ~/.bashrc
cat ~/.linux-env/bashrc/.bashrc >> ~/.bashrc

View File

@@ -0,0 +1,94 @@
#!/usr/bin/env python3
import evdev
import subprocess
import time
DEVICE_NAMES = ["8BitDo NGC Modkit"]
BUTTON_MAP = {
"304": "Return", # A
"305": None, # B (non utilisé)
"311": "Alt_L", # R
"307": "Right", # X
"308": "Left", # Y
# 318 (BTN_THUMBR) sera géré à part
}
def find_device():
for path in evdev.list_devices():
try:
dev = evdev.InputDevice(path)
if any(dn in dev.name for dn in DEVICE_NAMES):
return path
except Exception:
continue
return None
def is_dolphin_running():
try:
output = subprocess.check_output(["flatpak", "ps"]).decode()
return "org.DolphinEmu.dolphin-emu" in output
except Exception:
return False
def press_key(key, press):
# press=True -> key down, press=False -> key up
action = "keydown" if press else "keyup"
subprocess.run(["xdotool", action, key])
def handle_device(dev_path):
dev = evdev.InputDevice(dev_path)
try:
for event in dev.read_loop():
if event.type != evdev.ecodes.EV_KEY:
continue
key_code = str(event.code)
# cas spécial : joystick jaune (BTN_THUMBR, code 318)
if key_code == "318" and event.value == 1: # pression
press_key("Alt_L", True)
time.sleep(0.02)
press_key("Escape", True)
time.sleep(0.05)
press_key("Escape", False)
press_key("Alt_L", False)
continue
if key_code in BUTTON_MAP:
mapped_key = BUTTON_MAP[key_code]
if mapped_key is not None:
press_key(mapped_key, event.value == 1)
except OSError:
dev.close()
raise
def main():
connected = False
time.sleep(5) # délai pour que le serveur graphique soit prêt
while True:
dev_path = find_device()
if dev_path and not connected:
print(f"[+] Manette connectée: {dev_path}")
connected = True
if not is_dolphin_running():
try:
subprocess.Popen(["flatpak", "run", "org.DolphinEmu.dolphin-emu"])
except Exception as e:
print(f"[!] Impossible de lancer Dolphin: {e}")
try:
handle_device(dev_path)
except OSError:
print("[-] Manette déconnectée")
connected = False
try:
subprocess.Popen(["flatpak", "kill", "org.DolphinEmu.dolphin-emu"])
except Exception as e:
print(f"[!] Impossible de tuer Dolphin: {e}")
elif not dev_path and connected:
print("[-] Manette déconnectée")
connected = False
time.sleep(1)
if __name__ == "__main__":
main()

77
home/gamecube-pad/install.sh Executable file
View File

@@ -0,0 +1,77 @@
#!/bin/bash
set -e
PYTHON_SCRIPT="$HOME/.local/bin/gamecube-pad.py"
AUTOSTART_DIR="$HOME/.config/autostart"
AUTOSTART_FILE="$AUTOSTART_DIR/gamecube-pad.desktop"
SILENT=false
if [[ "$1" == "silent" ]]; then
SILENT=true
fi
log() {
if [ "$SILENT" = false ]; then
echo "$@"
fi
}
check_and_install_deps() {
for pkg in evdev uinput; do
if ! python3 -c "import $pkg" &>/dev/null; then
log "[!] Dépendance manquante : $pkg. Installation avec pip..."
python3 -m pip install --user "$pkg" &>/dev/null
fi
done
for cmd in xdotool wmctrl; do
if ! command -v "$cmd" &>/dev/null; then
log "[!] Commande manquante : $cmd. Merci de linstaller via votre gestionnaire de paquets."
fi
done
}
install_script() {
check_and_install_deps
log "[+] Copie du script Python..."
mkdir -p "$(dirname "$PYTHON_SCRIPT")"
cp "$HOME/.linux-env/gamecube-pad/gamecube-pad.py" "$PYTHON_SCRIPT"
chmod +x "$PYTHON_SCRIPT"
log "[+] Création du fichier autostart..."
mkdir -p "$AUTOSTART_DIR"
cat > "$AUTOSTART_FILE" <<EOF
[Desktop Entry]
Type=Application
Exec=$PYTHON_SCRIPT
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=GameCube Pad
Comment=Lance le script GameCube Pad au démarrage
EOF
log "[✓] Installation terminée. Le script se lancera automatiquement à l'ouverture de session."
}
uninstall_script() {
log "[+] Suppression du script Python et autostart..."
rm -f "$PYTHON_SCRIPT"
rm -f "$AUTOSTART_FILE"
log "[✓] Désinstallation terminée."
}
case "$1" in
uninstall)
uninstall_script
;;
silent)
SILENT=true
uninstall_script &>/dev/null
install_script &>/dev/null
;;
*)
install_script
;;
esac

16
home/install.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -e
# Chemin de base : le dossier où se trouve ce script
BASE_DIR="$(dirname "$(realpath "$0")")"
echo "[+] Recherche et exécution des install.sh..."
# Boucle récursive sur tous les fichiers install.sh
find "$BASE_DIR" -type f -name "install.sh" ! -path "$BASE_DIR/install.sh" | while read -r script; do
echo "[+] Lancement : $script"
chmod +x "$script"
"$script"
done
echo "[✓] Tous les install.sh ont été exécutés."

BIN
lettre-free.pdf Normal file

Binary file not shown.

7
pre-commit Normal file
View File

@@ -0,0 +1,7 @@
#!/bin/sh
# install bashrc if bashrc git edited
if git diff --quiet home/bashrc/.bashrc; then
else
./home/bashrc/install.sh
fi

BIN
public/cv/UTIgroup.pdf Normal file

Binary file not shown.

View File

@@ -1,97 +0,0 @@
# Valère BRON
**Technicien Support Applicatif Niveau 2 | Windows, Linux, SQL & SaaS**
Autonome, rigoureux et curieux, je dispose dune expérience technique polyvalente combinant développement, administration de systèmes et support applicatif.
Je souhaite mettre mes compétences au service dun rôle de **support niveau 2**, assurant la résolution dincidents complexes et laccompagnement des utilisateurs.
📞 [06 81 84 77 37](tel:+33681847737)
📧 [contact@valere.dev](mailto:contact@valere.dev)
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
💻 [GitHub](https://github.com/valerebron)
---
## 💡 Compétences principales
### Support Applicatif & Technique
- Analyse, diagnostic et résolution dincidents applicatifs complexes (niveau 2)
- Lecture et croisement de logs applicatifs, scripts et fichiers de configuration
- Installation, configuration et maintenance de logiciels métiers
- Interface avec utilisateurs finaux et équipes métiers pour assurer la continuité opérationnelle
- Documentation des procédures et suivi des tickets via outils de ticketing
### Environnements & Réseaux
- Systèmes : Windows, Linux (Ubuntu, Debian, Zorin OS), macOS
- Réseau : protocole TCP/IP, VPN, configurations LAN/Wi-Fi
- SaaS & architecture web : compréhension des flux, APIs REST et bases de données SQL
- Serveurs personnels et professionnels : Docker, Gitea, Jellyfin
### Développement & Automatisation
- Scripting Bash / Node.js pour diagnostic et automatisation
- Lecture et compréhension de code existant pour analyse dincidents
- Connaissances en Vue.js, Nuxt, TypeScript, NestJS pour support applicatif et debugging
### Relation & Support utilisateur
- Communication claire avec utilisateurs métiers et équipes IT
- Pédagogie, sens du service et accompagnement technique
- Rigueur et autonomie en environnement exigeant
---
## 🧰 Expériences professionnelles
### 2025 **Groupama** | Développeur Vue.js
Support technique interne, participation à la résolution dincidents applicatifs et coordination avec léquipe métier.
> 🔹 Diagnostic des anomalies, tests et validation des correctifs
### 2024 **Fitarena** | Développeur Vue.js
Maintenance applicative, suivi des bugs et assistance aux utilisateurs lors des évolutions du front-end.
> 🔹 Lecture des logs, vérification des flux API et tests fonctionnels
### 20212023 **Potager City** | Développeur Vue.js
Développement et optimisation dapplications web.
> 🔹 Mise en place de tests E2E, support applicatif interne, documentation technique
### 20182020 **Projets personnels & freelances**
Gestion et maintenance de serveurs personnels et professionnels : NAS, mini-serveurs Linux, Raspberry Pi.
> 🔹 Analyse des logs, correction de dysfonctionnements et administration système
---
## 🖥️ Projets techniques personnels
- **docker-web** : outil Bash pour orchestrer Docker et microservices
- **Serveurs Linux & NAS** : configuration, sécurité, supervision, flux applicatifs
- **Veille technique** : suivi des innovations hardware, software et cybersécurité
---
## 🎓 Diplômes
- 2011 Licence Ingénierie de lInternet
- 2010 BTS Communication et Industries Graphiques
---
## 🤝 Profil humain
- Rigueur, autonomie et réactivité
- Sens du service et pédagogie pour les utilisateurs métiers
- Capacité à travailler en environnement exigeant et en évolution rapide
---
**Souhait :** Rejoindre **Manpower / client secteur IT Marseille** pour assurer le support applicatif de niveau 2, contribuer à la résolution dincidents complexes et accompagner les utilisateurs dans leurs outils métiers.

View File

@@ -1,77 +0,0 @@
# Valère BRON
**Développeur Front-End & Fullstack | Vue.js, Angular, Node.js, TypeScript**
Développeur web expérimenté, spécialisé dans la création dinterfaces performantes et engageantes, avec un intérêt marqué pour lexpérience utilisateur, les performances logicielles et la qualité des composants. Je combine expertise front-end et back-end pour contribuer à des plateformes digitales complexes.
📞 [06 81 84 77 37](tel:+33681847737)
📧 [contact@valere.dev](mailto:contact@valere.dev)
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
💻 [GitHub](https://github.com/valerebron)
---
## 💡 Compétences
- **Front-end :** Angular 15, Vue 2/3, Nuxt, React.js, Tailwind, SCSS, Storybook, optimisation des performances, UI/UX
- **Back-end :** Node.js, NestJS, Express, GraphQL, Prisma, REST API, Websockets, MongoDB, PostgreSQL
- **DevOps & CI/CD :** Docker, Docker Compose, Git, GitHub Actions, GitLab CI, KeyCloak, Cloud AWS
- **Tests & qualité :** Jest, tests unitaires et dintégration, automatisation E2E
- **Méthodologies :** Scrum Agile, architecture modulaire, industrialisation des composants
---
## 🏢 Expériences
### 2025 Groupama | Développeur Vue.js / Front-End
- Développement et maintenance front-end (Vue 3) et intégration avec API REST
- Optimisation des performances et respect des bonnes pratiques daccessibilité
- Mob & pair programming, participation aux orientations produit et backlog
- Tests fonctionnels et unitaires pour sécuriser les déploiements
### 2024 Fitarena | Développeur Vue.js & UI
- Création de composants UI réutilisables et performants
- Refactorisation du code existant et optimisation front-end
- Collaboration étroite pour améliorer lexpérience utilisateur
### 20212023 Potager City | Développeur Front-End
- Optimisation front-end et SEO, mise en place de tests E2E
- Coordination avec les équipes produit pour des interfaces intuitives
- Gestion de la qualité et des performances logicielles
### 20202021 MassiveMusic | Développeur Fullstack
- Architecture front-end avec Atomic Design et SCSS normalisé
- Développement back-end Node.js et Prisma, CI/CD via Docker Compose
- Gestion des données et API sécurisées
### 20202021 Analytics | Développeur Node.js
- API GraphQL & TypeScript, suivi CI/CD et modélisation Prisma
### 2020 Studiolab | Développeur React.js
- Création de composants React & Ant Design pour projets web interactifs
### 2019 Euronews | Développeur Vue.js
- Intégration SCSS normalisée (ITCSS) pour la refonte du site
---
## 🎓 Diplômes
- 2011 Licence Ingénierie de lInternet
- 2010 BTS Communication et Industries Graphiques
---
## 🚀 Projets personnels & Compétences Visuelles
- Création de micro-animations front et effets visuels interactifs (SVG, CSS keyframes, transitions)
- Surcouche Docker Compose et microservices pour projets fullstack ([docker-web.valere.dev](https://docker-web.valere.dev))
- Développement de kits front-end Nuxt et Vue orientés UI/UX ([sidebase.io](https://sidebase.io))
- Expérimentation et optimisation dinterfaces utilisateurs pour des applications web et SaaS

View File

@@ -1,96 +0,0 @@
# Valère BRON
**Technicien Informatique Polyvalent | Systèmes, Réseaux & Applicatifs**
Autonome, rigoureux et curieux, jai passé plus de 10 ans dans le développement web avant délargir mes compétences à ladministration, au support et à la maintenance.
Aujourdhui, je souhaite mettre à profit mon expérience technique dans un rôle de **technicien polyvalent**, au croisement du matériel, des systèmes et des applications métiers.
📞 [06 81 84 77 37](tel:+33681847737)
📧 [contact@valere.dev](mailto:contact@valere.dev)
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
💻 [GitHub](https://github.com/valerebron)
---
## 💡 Compétences principales
### Gestion du parc informatique
- Installation, configuration et maintenance de postes Windows, macOS et Linux
- Gestion des comptes utilisateurs (Active Directory, Office 365)
- Sauvegarde, restauration et mise à jour du parc logiciel et matériel
- Maintenance matérielle (diagnostic, remplacement, optimisation)
- Mise en place et suivi de procédures de sécurité et de sauvegarde
### Gestion des applicatifs métiers
- Analyse des besoins utilisateurs et rédaction de cahiers de tests
- Participation aux phases de recette et validation des évolutions
- Suivi de la conformité fonctionnelle des mises à jour
- Interface avec prestataires et DSI pour le support applicatif
- Notions de SQL, APIs REST et intégration ERP
### Réseau & Sécurité
- Configuration de réseaux locaux et VPN
- Surveillance des performances, sécurisation des accès
- Déploiement de solutions Docker, Gitea, Jellyfin sur serveurs Linux
- Veille permanente sur les systèmes et la cybersécurité
### Développement & Automatisation
- Scripting Bash / Node.js pour tâches automatisées
- Connaissances en développement (Vue.js, Nuxt, TypeScript, NestJS)
- Outils CI/CD : Docker, GitLab, Drone
---
## 🧰 Expériences professionnelles
### 2025 **Groupama** | Développeur Vue.js
Collaboration étroite avec léquipe métier pour la mise en place dune nouvelle architecture applicative en micro-frontends.
> 🔹 Coordination technique et support utilisateur lors des phases de recette
### 2024 **Fitarena** | Développeur Vue.js
Développement dun agenda interactif et optimisation de la communication entre front et back.
> 🔹 Participation aux tests, à la validation fonctionnelle et à la maintenance des environnements
### 20212023 **Potager City** | Développeur Vue.js
Développement et maintien dune application Vue 2 performante et accessible.
> 🔹 Automatisation de tests E2E, gestion des déploiements et support technique aux équipes
### 20182020 **Projets personnels & freelances**
Mise en place et gestion de serveurs personnels et professionnels : NAS, mini-serveurs Linux, Raspberry Pi, Docker Compose, CI/CD.
> 🔹 Maintenance complète du matériel, sécurité et gestion des utilisateurs
---
## 🖥️ Projets techniques personnels
- **docker-web** : outil Bash dorchestration Docker (CI/CD et microservices)
- **NAS et serveurs Linux** : installation, configuration, sauvegardes et surveillance
- **Veille hardware & software** : suivi constant des innovations techniques et sécurité systèmes
---
## 🎓 Diplômes
- 2011 Licence Ingénierie de lInternet
- 2010 BTS Communication et Industries Graphiques
---
## 🤝 Profil humain
- Esprit danalyse, rigueur et adaptabilité
- Autonomie dans la gestion dun parc ou dun projet technique
- Pédagogie et sens du service utilisateur
- Capacité à faire le lien entre technique et besoins métier

View File

@@ -1,74 +0,0 @@
# Valère BRON
**Technicien Helpdesk / Support Informatique N0/N1**
📍 Marseille Permis B
📧 [contact@valere.dev](mailto:contact@valere.dev)
📞 [06 81 84 77 37](tel:+33681847737)
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron)
💻 [GitHub](https://github.com/valerebron)
---
## 🎯 Profil
Technicien informatique passionné, issu du développement web, je mets aujourdhui mon expérience technique au service du support et de lassistance utilisateur.
Habitué à diagnostiquer, réparer et configurer des systèmes variés (Windows, Linux, macOS), je recherche un poste de proximité où la réactivité, la rigueur et le sens du service sont essentiels.
---
## 💡 Compétences techniques
- **Systèmes :** Windows 10/11, Linux (Debian/Ubuntu), macOS
- **Réseaux & Support :** Active Directory, DHCP, VPN, sauvegardes, prise en main à distance
- **Postes de travail :** installation, déploiement dimage, maintenance hardware et software
- **Outils :** GLPI, Gitea, GitLab, outils de supervision et ticketing
- **Langues :** Français (natif), Anglais technique (niveau B2)
---
## 🏢 Expériences professionnelles
### 2025 Groupama | Développeur Vue.js
- Développement et maintenance dune application Vue 3 en environnement Agile.
- Tests fonctionnels et collaboration avec les équipes métiers et techniques.
- Support technique ponctuel auprès des utilisateurs internes.
### 2024 Fitarena | Développeur Vue.js
- Développement dun agenda interactif et intégration dAPI.
- Support aux utilisateurs et correction dincidents fonctionnels.
### 20212023 Potager City | Développeur Vue.js
- Développement front-end, maintenance applicative et optimisation des performances.
- Tests E2E et prévention des régressions techniques.
### Projets personnels (20202025)
- Montage, configuration et maintenance de serveurs NAS, mini-PC et Raspberry Pi.
- Déploiement dinfrastructures Docker (Gitea, Nginx Proxy, Jellyfin).
- Dépannage matériel et assistance technique pour particuliers et TPE.
- Développement dun outil Bash dorchestration Docker : [docker-web.valere.dev](https://docker-web.valere.dev).
---
## 🎓 Formation
- 2011 Licence Ingénierie de lInternet
- 2010 BTS Communication & Industries Graphiques
---
## ⚙️ Points forts
- Esprit danalyse et méthode dans la résolution dincidents
- Polyvalence : développement, systèmes, réseaux, matériel
- Habitude du travail en autonomie et du contact direct avec les utilisateurs
- Curiosité technique et veille active sur le hardware et la sécurité
---
## 🚀 Objectif
Mettre mes compétences techniques et ma rigueur au service du support de proximité, dans un environnement exigeant comme celui du transport maritime, au sein de **REACTIS**.

View File

@@ -1,92 +0,0 @@
# Valère BRON
**Technicien Maintenance & Support Utilisateurs | Windows, Linux, Hardware**
Autonome, rigoureux et passionné dinformatique, jai acquis au fil des années une expérience complète en développement, administration de systèmes et support utilisateurs.
Je souhaite aujourdhui mettre mon expertise technique et ma polyvalence au service dun rôle concret de maintenance et assistance sur site.
📞 [06 81 84 77 37](tel:+33681847737)
📧 [contact@valere.dev](mailto:contact@valere.dev)
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
💻 [GitHub](https://github.com/valerebron)
---
## 💡 Compétences principales
### Support & Maintenance
- Support technique de niveau 1 et 2 pour utilisateurs finaux
- Dépannage matériel : PC, écrans, imprimantes, PXI
- Installation et configuration dapplications métiers et open source
- Gestion des mesures de sécurité : BIOS, GPO, KB, MCS
- Inventaire matériel et suivi via GLPI
### Systèmes & Réseaux
- Maîtrise de Windows XP, 7, 10 et Linux (Ubuntu, Debian, Zorin OS)
- Réseaux locaux : configuration, dépannage et partage de ressources
- Déploiement et maintenance de serveurs personnels et professionnels (Docker, NAS, mini-serveurs)
### Développement & Automatisation
- Scripting Bash / Node.js pour automatiser tâches et diagnostics
- Lecture et compréhension de logs applicatifs et flux API
- Connaissances de base en SQL, REST API et intégration front-end (Vue.js, Nuxt, TypeScript)
### Relation & Support utilisateur
- Communication claire et pédagogie avec utilisateurs industriels et équipes IT
- Suivi et documentation des interventions et procédures
- Capacité à travailler sur site, autonome et organisé
---
## 🧰 Expériences professionnelles
### 2025 **Groupama** | Développeur Vue.js
Support interne, diagnostic et résolution de problèmes techniques sur lapplication interne.
> 🔹 Assistance aux utilisateurs, tests fonctionnels et suivi des correctifs
### 2024 **Fitarena** | Développeur Vue.js
Maintenance applicative et coordination avec le back-end pour résoudre incidents et bugs.
> 🔹 Lecture de logs, tests et optimisation des flux
### 20212023 **Potager City** | Développeur Vue.js
Développement et maintenance dapplications web.
> 🔹 Mise en place de tests, support technique et documentation interne
### 20182020 **Projets personnels & freelances**
Administration de serveurs Linux, NAS et mini-serveurs, dépannage matériel et logiciel, configuration et sécurité.
> 🔹 Gestion complète des équipements, inventaire, sauvegardes et mises à jour
---
## 🖥️ Projets techniques personnels
- **docker-web** : orchestration Docker & microservices via Bash
- Serveurs Linux et NAS : installation, supervision et maintenance
- Veille technique : suivi du hardware, software et sécurité
---
## 🎓 Diplômes
- 2011 Licence Ingénierie de lInternet
- 2010 BTS Communication et Industries Graphiques
---
## 🤝 Profil humain
- Autonomie, rigueur et sens du service
- Capacité à intervenir sur site et à expliquer clairement les solutions
- Polyvalence hardware, software et réseau

View File

@@ -1,90 +0,0 @@
# Valère BRON
**Technicien Systèmes, Réseaux & Support IT Marseille**
Polyvalent, autonome et passionné dinfrastructure, jinterviens sur tous les aspects techniques : systèmes, réseaux, stockage et virtualisation.
Jallie expérience en développement et en administration Linux/Docker à une vraie rigueur opérationnelle sur le terrain.
📞 [06 81 84 77 37](tel:+33681847737)
📧 [contact@valere.dev](mailto:contact@valere.dev)
🌐 [valere.dev](https://valere.dev)
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
💻 [GitHub](https://github.com/valerebron)
---
## 💡 Compétences principales
### 🖥️ Systèmes & Virtualisation
- Administration Linux (Ubuntu, Debian, Zorin OS) & Windows Server
- Gestion et maintenance denvironnements virtualisés (Docker, VMware)
- Sauvegarde, supervision et restauration des systèmes
- Gestion des comptes utilisateurs, permissions et scripts Bash
### 🌐 Réseaux & Sécurité
- Installation, configuration et diagnostic déquipements Cisco / Fortinet / Alcatel
- Configuration de VLAN, VPN, DHCP, DNS, routage et pare-feux
- Surveillance de la performance réseau et sécurité (logs, monitoring)
- Mise en place de NAS et solutions de stockage partagées
### 🧰 Support & Maintenance
- Support technique niveau 2/3 auprès dutilisateurs et équipes locales
- Diagnostic des incidents systèmes, réseaux et applicatifs
- Documentation technique et procédures dintervention
- Préparation et maintenance déquipements pour déploiement international
---
## 🧭 Expériences professionnelles
### 2025 **Développeur & Administrateur Linux freelance**
Conception et maintenance denvironnements Docker, scripts Bash et automatisations réseau.
> 🔹 Supervision de serveurs, NAS et configurations VPN
> 🔹 Support technique à distance et sur site
### 2024 **Fitarena** | Développeur Vue.js / Support applicatif
Participation à la maintenance et au support des applications internes.
> 🔹 Lecture de logs, diagnostic derreurs, mise en place de correctifs
### 20212023 **Potager City** | Développeur & Support IT
Suivi technique, support utilisateur et gestion du déploiement applicatif.
> 🔹 Coordination entre les équipes métiers et IT
> 🔹 Documentation et assistance en production
### 20182020 **Projets personnels & freelance**
Mise en place dinfrastructures locales (NAS, mini-serveurs, Docker, réseau).
> 🔹 Administration Linux et virtualisation
> 🔹 Automatisation via scripts Bash
---
## 🚢 Objectif professionnel
Intégrer le **service IT dune compagnie de croisières** pour assurer la maintenance et le support des infrastructures à bord et à terre.
Allier **mobilité internationale**, **expertise technique** et **réactivité terrain** pour garantir la fiabilité des systèmes en environnement exigeant.
---
## 🎓 Formation
- **Licence Ingénierie de lInternet** 2011
- **BTS Communication & Industries Graphiques** 2010
---
## 🧠 Points forts
- Polyvalence : systèmes, réseaux, développement, stockage
- Autonomie et rigueur sur le terrain
- Aisance en diagnostic et résolution dincidents complexes
- Goût du voyage et disponibilité pour interventions à bord

View File

@@ -1,100 +0,0 @@
# Valère BRON
**Technicien & Conseiller Informatique | Polyvalent systèmes, réseaux et développement**
Passionné par linformatique depuis toujours, jai dabord évolué comme développeur web avant délargir mes compétences vers le support, ladministration système et la maintenance de postes.
Curieux, rigoureux et orienté utilisateur, jaime autant **résoudre des pannes matérielles** qu**accompagner les utilisateurs** pour quils tirent le meilleur de leurs outils.
📞 [06 81 84 77 37](tel:+33681847737)
📧 [contact@valere.dev](mailto:contact@valere.dev)
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
💻 [GitHub](https://github.com/valerebron)
---
## 💡 Compétences principales
### Support & Maintenance
- Déploiement, installation et configuration de postes Windows, macOS et Linux
- Maintenance matérielle (diagnostic, remplacement de composants, optimisation des performances)
- Sécurisation et mise à jour des systèmes
- Sauvegarde, restauration et clonage de disques (NAS, SSD, Raspberry Pi, mini-ATX, etc.)
- Suivi et résolution dincidents logiciels et matériels
### Réseau & Systèmes
- Paramétrage réseau local et distant, partage de ressources, VPN
- Administration légère de serveurs Linux (Ubuntu, Debian, Zorin OS)
- Mise en place et supervision de NAS et serveurs personnels (Docker, Gitea, Jellyfin, etc.)
- Surveillance et optimisation des performances système
### Développement & Automatisation
- Scripting Bash et automatisation (outil personnel [docker-web](https://docker-web.valere.dev))
- Notions en Node.js, Vue.js et CI/CD (GitLab, Docker, etc.)
- Conception doutils internes simples pour améliorer la productivité
### Relation client & conseil
- Écoute, pédagogie et accompagnement des utilisateurs
- Expérience en support technique et collaboration avec équipes pluridisciplinaires
- Capacité à vulgariser les problèmes et proposer des solutions concrètes
---
## 🧰 Expériences professionnelles
### 2025 **Groupama** | Développeur Vue.js
Collaboration avec les équipes métier et techniques sur une architecture micro-frontend.
Mise en place de pratiques de travail collectives (pair/mob programming, suivi des priorités).
> 🔹 Coordination technique, support et communication avec les utilisateurs internes
### 2024 **Fitarena** | Développeur Vue.js
Refonte dun agenda interactif et optimisation du code existant.
> 🔹 Gestion denvironnements de développement, paramétrage des postes et assistance technique
### 20212023 **Potager City** | Développeur Vue.js
Maintenance et optimisation dune application web et de ses performances.
> 🔹 Veille sur la fiabilité des outils, tests techniques et amélioration continue des process
### 20182020 **Projets personnels & freelances**
Mise en place et administration de serveurs personnels :
NAS, serveurs Docker, Raspberry Pi, machines mini-ATX pour usage personnel et professionnel.
> 🔹 Configuration matérielle, virtualisation, sauvegardes et sécurité des systèmes
---
## 🖥️ Projets techniques personnels
- **docker-web** : surcouche Bash pour orchestrer des applications web Docker
- **Serveurs personnels** : NAS, mini-serveurs Linux et Raspberry Pi
- **Maintenance & assistance** : accompagnement technique de particuliers et dentreprises locales
- **Veille hardware & software** : suivi des innovations matérielles et logicielles grand public
---
## 🎓 Diplômes
- 2011 Licence Ingénierie de lInternet
- 2010 BTS Communication et Industries Graphiques
---
## 🤝 Profil humain
- Esprit déquipe, sens du service et communication claire
- Curiosité technique et autonomie
- Passion pour la compréhension et la transmission des savoirs informatiques
---
**Souhait :** Rejoindre **XEFI** pour mettre à profit mon expérience technique et mon sens du service dans un rôle concret et polyvalent au contact des utilisateurs.

156
public/cv/cv.css Normal file
View File

@@ -0,0 +1,156 @@
/* Default styles for https://apitemplate.io/pdf-tools/convert-markdown-to-pdf/ */
pre {
background: #2d2d2d;
border-radius: 4px;
margin: 0.5em 0;
}
code {
font-family: 'Fira Code', Consolas, Monaco, monospace;
}
/* Custom CSS */
/* ====== Markdown PDF Pro Theme ====== */
@page {
margin: 25mm 20mm;
margin-top: 0mm;
}
body {
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
font-size: 11pt;
line-height: 1.6;
color: #333;
background: white;
max-width: 800px;
margin: auto;
padding: 60px;
}
/* Headings */
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Segoe UI Semibold", "Helvetica Neue", Arial, sans-serif;
font-weight: 600;
margin-top: 2em;
margin-bottom: 0.6em;
line-height: 1.3;
color: #222;
}
h1 {
font-size: 24pt;
border-bottom: 2px solid #000;
/* accent color */
padding-bottom: 0.3em;
margin-top: 0;
}
h2 {
font-size: 18pt;
border-left: 4px solid #000;
padding-left: 0.5em;
}
h3 {
font-size: 14pt;
color: #444;
}
h4,
h5,
h6 {
font-size: 12pt;
color: #555;
}
/* Paragraphs */
p {
margin: 0.5em 0;
text-align: justify;
}
/* Links */
a {
color: #1e7fce;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* Lists */
ul,
ol {
margin: 0.5em 0 0.5em 2em;
}
li {
margin-bottom: 0.3em;
}
/* Blockquote */
blockquote {
border-left: 4px solid #0078D7;
margin: 1em 0;
padding: 0.5em 1em;
color: #555;
background: #f9f9f9;
font-style: italic;
}
/* Code */
code {
font-family: "Fira Code", "Consolas", monospace;
background: #f4f4f4;
padding: 0.2em 0.4em;
border-radius: 4px;
font-size: 0.95em;
}
pre {
background: #1e1e1e;
color: #dcdcdc;
padding: 1em;
border-radius: 6px;
overflow-x: auto;
font-size: 0.9em;
line-height: 1.4;
}
/* Tables */
table {
border-collapse: collapse;
margin: 1em 0;
width: 100%;
font-size: 0.95em;
}
th,
td {
border: 1px solid #ccc;
padding: 0.6em 0.8em;
text-align: left;
}
th {
background: #f0f0f0;
font-weight: 600;
}
tr:nth-child(even) td {
background: #fafafa;
}
/* Horizontal rule */
hr {
border: none;
border-top: 2px solid #eee;
margin: 2em 0;
}

Some files were not shown because too many files have changed in this diff Show More