Initialisation des systèmes...

Baptiste.Dev
Retour aux projets
Projet Perso★ Featured

Speakzy

Plateforme gratuite d'apprentissage du bulgare (et d'autres langues) avec leçons interactives, exercices variés et gamification.

Speakzy

Speakzy

Plateforme gratuite d'apprentissage de langues — actuellement en version 0.2 alpha, disponible sur speakzy.fr.

Speakzy permet d'apprendre le bulgare, le français, l'anglais et le polonais à travers des leçons interactives et des exercices variés, le tout gratuitement.


#D'où vient l'idée ?

Tout a commencé lors de mon voyage en Bulgarie (Sofia, Varna, Plovdiv). Suite à certaines rencontres là-bas, j'ai voulu apprendre le bulgare. Le problème : aucune application existante ne permettait de l'apprendre correctement, rapidement et gratuitement.

J'ai alors essayé d'apprendre avec l'IA, et j'ai trouvé sa manière d'enseigner vraiment efficace et rapide. L'idée de Speakzy est née de là : créer une app qui reproduit cette approche pédagogique pour apprendre le bulgare (et d'autres langues) correctement et gratuitement.


#Timeline du développement

PériodeÉtape
Mai 2025Début du développement. MVP fonctionnel en 2 semaines.
Mi-juin 2025Première mise en ligne (v0.1) sur pixelatlantis.eu, hébergée sur l'infra développée avec des amis.
Fin juin 2025Achat du domaine speakzy.fr.
Juillet — Octobre 2025Stand-by. L'app reste en ligne mais sans développement actif.
Octobre 2025Retrait de l'hébergement pour un changement total d'infrastructure.
Février 2026Reprise du développement. Refonte complète du design, ajout de fonctionnalités, dockerisation. Remise en production sur speakzy.fr.
Mi-mars 2026Ajout de la gestion multilingue complète de l'interface + ajout du polonais.
Aujourd'huiVersion 0.2 alpha disponible sur speakzy.fr.

#Stack technique

CoucheTechnologies
FrontendNext.js 15 (App Router, Turbopack), React 19, TypeScript, Tailwind CSS 4, Framer Motion
BackendAPI Routes Next.js, architecture en couches (routes → services → repositories)
Base de donnéesPostgreSQL 16 via Prisma ORM
AuthentificationJWT (jose, edge-compatible) + bcrypt, cookies httpOnly/Secure/SameSite
ValidationZod sur toutes les entrées API
i18nSystème maison : React Context + fichiers JSON par namespace (4 langues)
DéploiementDocker multi-stage (Node 20 Alpine), docker-compose avec PostgreSQL

#Comment ça marche

Leçons

Speakzy propose 3 types de leçons adaptés à l'apprentissage d'une nouvelle langue :

  • Alphabet — Apprendre les caractères et la prononciation (essentiel pour le cyrillique bulgare)
  • Vocabulaire — Traduction et signification des mots courants
  • Conjugaison — Formes verbales et grammaire

Chaque leçon est liée à une paire de langues (source → cible), ce qui permet d'apprendre le bulgare depuis le français ou depuis l'anglais par exemple.

Exercices

6 types d'exercices sont disponibles, rendus dynamiquement selon leur type :

  • QCM — Choisir la bonne réponse parmi plusieurs propositions
  • QCM aléatoire — QCM avec options mélangées à chaque tentative
  • Réponse libre — Taper/saisir la réponse correcte
  • Matching — Associer les éléments de deux colonnes
  • Construction de phrases — Reconstituer une phrase à partir de mots
  • Challenge chronométré — 60 secondes pour répondre à un maximum de questions

Chaque exercice suit la progression de l'utilisateur avec un score (0-100%) et un statut de complétion.

Interface multilingue

L'interface elle-même est disponible en 4 langues (français, anglais, bulgare, polonais) via un système i18n maison basé sur React Context et des fichiers JSON de traduction organisés par namespace (common, auth, exercises, lessons, admin...).

Clavier virtuel

Pour les langues utilisant un alphabet non-latin (comme le cyrillique bulgare), un clavier virtuel intégré permet de saisir les caractères directement dans le navigateur.


#Sécurité

  • Authentification : JWT avec expiration 7 jours + cookies httpOnly/Secure/SameSite strict
  • Mots de passe : bcrypt (10 rounds), validation stricte (8 caractères min, majuscule, chiffre, caractère spécial)
  • Rate limiting : 5 tentatives de login par 15 minutes
  • Validation : Zod sur toutes les entrées API
  • Headers HTTP : CSP, HSTS, X-Frame-Options DENY, X-Content-Type-Options nosniff

#Panel Admin

Un dashboard complet protégé par rôle permet de :

  • Gérer les langues (créer, modifier, configurer les drapeaux et gradients)
  • Gérer les leçons par langue (CRUD complet avec sélection du type)
  • Gérer les exercices avec leurs questions et réponses
  • Administrer les comptes utilisateurs

#Ce que j'ai appris

Speakzy est ma première application déployée en production. C'est le projet qui m'a fait passer du code local à un vrai produit accessible publiquement.

  • Déploiement réel : Première expérience de mise en production sur une vraie infra, gestion des DNS, certificats SSL, Docker en prod
  • SEO : Découverte des enjeux du référencement sur un vrai site public — meta tags, Open Graph, structure des pages
  • Internationalisation : Construire un système i18n from scratch, gérer les namespaces, les fallbacks et le support de 4 langues
  • Itération produit : Passer d'un MVP en 2 semaines à une app en production, avec une refonte design complète, des pivots d'infrastructure et un domaine dédié