Application Webnovembre 2024

Avatar Express

Application web de génération d'avatars personnalisés par IA avec système de tokens et paiement en ligne.

L'histoire de sa construction

Avatar Express est une application complète permettant à ses utilisateurs de générer des avatars uniques grâce à l'IA DALL-E 3 d'OpenAI. L'utilisateur choisit ses caractéristiques — couleur des yeux, style vestimentaire, humeur, posture — et l'IA produit un avatar en haute qualité en quelques secondes. Le tout depuis une interface simple et intuitive développée en Blade avec Tailwind CSS. L'aspect métier du projet repose sur un système de tokens : chaque nouvel utilisateur reçoit des tokens gratuits à l'inscription, et peut en racheter via Stripe. L'intégration du paiement en ligne a été un axe technique majeur — gestion des webhooks Stripe, sécurisation des transactions, et mise à jour du solde en temps réel après confirmation du paiement. Côté back-end, Laravel orchestre l'ensemble : authentification, gestion des comptes, appels à l'API OpenAI, stockage des avatars générés et traçabilité des transactions en base MySQL. Ce projet m'a permis de monter en compétence sur l'intégration d'APIs tierces dans un contexte de production réel, avec des contraintes de fiabilité et de sécurité concrètes.

Technologies utilisées

  • Laravel
  • Git
  • PHP
  • Tailwind CSS
  • HTML
  • CSS
  • Docker
  • MySQL

J'en ai bavé mais j'y suis arrivé 🚀

// Génération de l'avatar via l'API DALL-E 3
public function generate(Request $request): JsonResponse
{
    $user = auth()->user();

    if ($user->tokens <= 0) {
        return response()->json(['error' => 'Tokens insuffisants'], 403);
    }

    $prompt = $this->buildPrompt($request->validated());

    $response = Http::withToken(config('services.openai.key'))
        ->post('https://api.openai.com/v1/images/generations', [
            'model'   => 'dall-e-3',
            'prompt'  => $prompt,
            'n'       => 1,
            'size'    => '1024x1024',
            'quality' => 'standard',
        ]);

    $user->decrement('tokens');

    return response()->json([
        'url' => $response->json('data.0.url'),
    ]);
}

Un projet similaire en tête ?

Site vitrine, WordPress, e-commerce ou application sur mesure : parlons-en, le premier échange et le devis sont gratuits.

Me contacter

D'autres réalisations

Tous les projets →