WINK est une application web moderne de gestion d'inscription et d'authentification d'entreprises. Le projet implémente un processus d'inscription multi-étapes permettant aux utilisateurs de :
- Saisir leurs informations personnelles (prénom, nom, email, photo de profil)
- Créer leur espace de travail (nom de l'entreprise, logo, adresse)
- Compléter les informations sur l'entreprise (description, secteur d'activité, taille)
Une fois l'inscription terminée, l'utilisateur peut se connecter avec ses identifiants pour accéder à l'application.
- ✅ Authentification : Système de connexion sécurisé avec gestion de session
- ✅ Inscription multi-étapes : Processus guidé en 3 étapes avec sauvegarde automatique
- ✅ Gestion d'entreprise : Création et gestion de profils d'entreprise
- ✅ Upload de fichiers : Upload de photos de profil et logos d'entreprise
- ✅ Internationalisation : Support français et anglais
- ✅ Validation de formulaire : Validation côté client avec Valibot
- ✅ Mock API : Utilisation de MSW pour simuler les appels API
Ce projet implémente une Clean Architecture adaptée à Nuxt 3, garantissant une séparation claire des responsabilités et une maintenabilité optimale.
wink-technical-test/
├── adapters/ # Adapters pour intégrations externes
│ ├── api/
│ │ ├── ApiAdapter.ts # Implémentation concrète de l'API
│ │ └── types.ts # Interface IApiAdapter
│ └── __mocks__/
│ └── ApiAdapter.mock.ts # Mock pour tests
│
├── repositories/ # Repositories pour logique métier
│ └── company/
│ ├── CompanyRepository.ts # Logique métier Company
│ └── types.ts # Types du repository
│
├── composables/ # ViewModels (logique de présentation)
│ ├── auth/
│ │ ├── useAuth.ts # Gestion de l'authentification
│ │ └── useLoginForm.ts # Formulaire de connexion
│ ├── company/
│ │ └── useCompanyRegistration.ts
│ ├── registration/
│ │ ├── useAboutYouForm.ts
│ │ ├── usePersonalDetailsForm.ts
│ │ ├── useRegistrationState.ts
│ │ └── useWorkspaceForm.ts
│ └── repositories/
│ └── useCompanyRepository.ts
│
├── components/ # Composants Vue (UI pure)
│ ├── company/
│ │ ├── CompanyRegistrationForm.vue
│ │ └── CompanyLogoUpload.vue
│ ├── profile/
│ │ └── ProfileUploader.vue
│ └── ui/
│ ├── LanguageSwitcher.vue
│ └── ProfileSelector.vue
│
├── pages/ # Pages Nuxt (routing)
│ ├── index.vue # Page d'accueil
│ ├── login.vue # Page de connexion
│ └── welcome/
│ ├── personal-details.vue # Étape 1
│ ├── workspace.vue # Étape 2
│ └── about-you.vue # Étape 3
│
├── plugins/ # Injection de dépendances
│ ├── adapters.provider.ts # Provide les adapters
│ └── msw.client.ts # Configuration MSW
│
├── mocks/ # Handlers MSW
│ └── handlers/
│ ├── auth.ts # Mock endpoints d'authentification
│ ├── companies.ts # Mock endpoints entreprises
│ └── index.ts
│
├── middleware/ # Middleware Nuxt
│ └── auth.ts # Protection des routes
│
├── layouts/ # Layouts Nuxt
│ └── auth.vue # Layout pour pages d'authentification
│
├── i18n/ # Fichiers de traduction
│ └── locales/
│ ├── fr.json
│ └── en.json
│
└── types/ # Types TypeScript globaux
├── company.ts
└── nuxt.d.ts
- View (Component) : UI uniquement, pas de logique métier
- ViewModel (Composable) : État et logique de présentation
- Repository : Logique métier pure
- Adapter : Intégrations externes (API, services)
- Les composants dépendent des composables
- Les composables dépendent des repositories
- Les repositories dépendent des adapters (via interfaces)
- Injection de dépendances via
nuxtApp.provide()etinject()
- Interfaces TypeScript partout
- Pas de
any - Types stricts avec validation runtime (Valibot)
Component (Vue)
↓ utilise
Composable (ViewModel)
↓ utilise
Repository (Logique métier)
↓ utilise
Adapter (Interface)
↓ implémente
ApiAdapter (Concret)
↓ appelle
API (MSW mockée)
- Framework : Nuxt 3 - Framework Vue.js full-stack
- UI : Nuxt UI - Composants UI basés sur Tailwind CSS
- Validation : Valibot - Validation de schémas légère et performante
- Internationalisation : @nuxtjs/i18n - Support multilingue
- Mocking : MSW - Mock Service Worker pour les APIs
- TypeScript : Typage statique pour une meilleure maintenabilité
- Tailwind CSS : Framework CSS utilitaire
- Node.js 18+
- pnpm (recommandé) ou npm/yarn/bun
-
Cloner le projet (si applicable)
git clone <repository-url> cd wink-technical-test
-
Installer les dépendances
# Avec pnpm (recommandé) pnpm install # Ou avec npm npm install # Ou avec yarn yarn install # Ou avec bun bun install
Démarrer le serveur de développement sur http://localhost:3000 :
# Avec pnpm
pnpm dev
# Avec npm
npm run dev
# Avec yarn
yarn dev
# Avec bun
bun run devLe serveur de développement démarre automatiquement avec :
- ✅ Hot Module Replacement (HMR)
- ✅ MSW activé pour mocker les APIs
- ✅ Support TypeScript
- ✅ Internationalisation (FR/EN)
-
Construire l'application
pnpm build
-
Prévisualiser la build de production
pnpm preview
L'architecture est conçue pour être facilement testable :
- Adapters : Mockables via
MockApiAdapter - Repositories : Testables sans DOM, logique métier pure
- Composables : Testables avec mocks des repositories
- Components : Testables avec mocks des composables
# Lancer les tests
pnpm test-
Page de connexion (
/login)- Connexion avec email/mot de passe
- Lien vers l'inscription
-
Étape 1 - Informations personnelles (
/welcome/personal-details)- Prénom, nom, email
- Photo de profil (optionnel)
- Sauvegarde automatique dans le localStorage
-
Étape 2 - Espace de travail (
/welcome/workspace)- Nom de l'entreprise
- Logo de l'entreprise
- Adresse du siège social
- Sauvegarde automatique
-
Étape 3 - À propos (
/welcome/about-you)- Description de l'entreprise
- Secteur d'activité
- Taille de l'entreprise
- Création du compte final
Les identifiants de test sont affichés sur la page de connexion :
- Email :
demo@example.com - Password :
demo123
Le projet utilise MSW pour mocker les APIs, aucune configuration supplémentaire n'est nécessaire pour le développement.
Les langues supportées sont configurées dans nuxt.config.ts :
- Français (par défaut)
- Anglais
Le changement de langue se fait automatiquement selon les préférences du navigateur ou via le composant LanguageSwitcher.
Pour plus de détails sur l'architecture, consultez le fichier ARCHITECTURE.md.
Ce projet a été développé en 11 à 12 heures de travail, incluant :
- La mise en place de l'architecture Clean Architecture
- L'intégration de tous les composants et fonctionnalités
- La configuration de MSW pour le mocking des APIs
- L'implémentation de l'internationalisation (FR/EN)
- La création du processus d'inscription multi-étapes
- La gestion de l'authentification et des sessions
Ce projet est un test technique. Pour toute question ou suggestion, n'hésitez pas à ouvrir une issue.
Ce projet est un test technique et n'est pas destiné à la production.
