OutilsProgrammation anniversaires
🏠

Programmation anniversaires

🚧 En construction

Vie quotidienne

Description

Gérez les anniversaires de vos proches et exportez vers vos agendas.

Gestionnaire d'anniversaires intelligent

Ne ratez plus jamais un anniversaire ! Cet outil vous permet de gérer tous les anniversaires de vos proches avec des rappels automatiques, synchronisation calendrier et export vers vos applications favorites (Google Calendar, Outlook, Apple Calendar).

🎁 Fonctionnalités principales :
  • • Rappels automatiques personnalisables
  • • Calcul d'âge et étapes importantes
  • • Suggestions de cadeaux par âge
  • • Historique des célébrations
📅 Intégrations :
  • • Export iCal (.ics) universel
  • • Synchronisation Google Calendar
  • • Import depuis contacts téléphone
  • • Notifications push/email

Types de rappels et notifications

Rappels avancés

Configurez des rappels multiples avec différents délais d'avance.

  • • 1 mois avant (pour prévoir)
  • • 1 semaine avant (pour acheter)
  • • 3 jours avant (pour préparer)
  • • Le jour J (pour souhaiter)
🎯
Personnalisation

Adaptez les rappels selon l'importance de chaque personne.

  • • Famille proche (rappels étendus)
  • • Amis (rappels standards)
  • • Collègues (rappels discrets)
  • • Connaissances (rappels simples)
📱
Multi-canaux

Recevez vos rappels sur tous vos appareils et plateformes.

  • • Notifications push navigateur
  • • Emails de rappel
  • • SMS (intégration optionnelle)
  • • Calendriers synchronisés
🎂
Événements spéciaux

Célébrez les étapes importantes avec des rappels spéciaux.

  • • Majorité (18 ans)
  • • Décennies (30, 40, 50 ans...)
  • • Centenaire (100 ans)
  • • Anniversaires de mariage

👥 Gestion des contacts et informations

📝 Informations stockées
  • Nom complet et surnom
  • Date de naissance complète
  • Relation (famille, ami, collègue)
  • Coordonnées (email, téléphone)
  • Préférences cadeaux/activités
  • Photo de profil
  • Notes personnelles
  • Historique des célébrations
🔄 Import/Export facilité
Import depuis :
  • • Contacts Google/iCloud
  • • Fichiers CSV/Excel
  • • Réseaux sociaux (Facebook)
  • • Carnet d'adresses Outlook
Export vers :
  • • Calendriers (.ics)
  • • Feuilles de calcul
  • • Sauvegarde JSON
  • • PDF imprimable

Suggestions intelligentes et aide à la planification

🎁 Suggestions cadeaux
  • Par tranche d'âge - Cadeaux adaptés
  • Par budget - Gammes de prix
  • Par relation - Famille/amis/collègues
  • Tendances - Idées populaires
  • Personnalisées - Selon les goûts
🎉 Idées célébration
  • Restaurants - Selon les goûts
  • Activités - Loisirs adaptés à l'âge
  • Surprises - Organisation d'événements
  • Voyages - Destinations d'anniversaire
  • DIY - Créations personnalisées
📊 Statistiques
  • Anniversaires par mois - Planning annuel
  • Budget prévisionnel - Coûts estimés
  • Âges moyens - Répartition par groupe
  • Fréquence contact - Relations actives
  • Tendances - Évolution des célébrations

💻 Exemple d'implémentation (JavaScript)

// Gestionnaire d'anniversaires avancé
class BirthdayManager {
  constructor() {
    this.contacts = JSON.parse(localStorage.getItem('birthdays') || '[]');
    this.reminders = JSON.parse(localStorage.getItem('reminders') || '[]');
  }
  
  // Ajouter un contact
  addContact(contactData) {
    const contact = {
      id: this.generateId(),
      name: contactData.name,
      surname: contactData.surname,
      nickname: contactData.nickname || '',
      birthDate: contactData.birthDate,
      relation: contactData.relation,
      email: contactData.email || '',
      phone: contactData.phone || '',
      preferences: contactData.preferences || [],
      photo: contactData.photo || '',
      notes: contactData.notes || '',
      createdAt: new Date().toISOString(),
      celebrations: []
    };
    
    this.contacts.push(contact);
    this.saveContacts();
    this.createDefaultReminders(contact);
    
    return contact;
  }
  
  // Calculer l'âge actuel et le prochain anniversaire
  calculateAge(birthDate, referenceDate = new Date()) {
    const birth = new Date(birthDate);
    const reference = new Date(referenceDate);
    
    let age = reference.getFullYear() - birth.getFullYear();
    const monthDiff = reference.getMonth() - birth.getMonth();
    
    if (monthDiff < 0 || (monthDiff === 0 && reference.getDate() < birth.getDate())) {
      age--;
    }
    
    // Prochain anniversaire
    const nextBirthday = new Date(reference.getFullYear(), birth.getMonth(), birth.getDate());
    if (nextBirthday < reference) {
      nextBirthday.setFullYear(nextBirthday.getFullYear() + 1);
    }
    
    const daysUntilBirthday = Math.ceil((nextBirthday - reference) / (1000 * 60 * 60 * 24));
    
    return {
      currentAge: age,
      nextAge: age + 1,
      nextBirthday: nextBirthday,
      daysUntilBirthday: daysUntilBirthday,
      isSpecialAge: this.isSpecialAge(age + 1)
    };
  }
  
  // Vérifier si l'âge est spécial
  isSpecialAge(age) {
    const specialAges = [18, 21, 30, 40, 50, 60, 65, 70, 75, 80, 90, 100];
    return specialAges.includes(age) || age % 10 === 0;
  }
  
  // Créer des rappels par défaut
  createDefaultReminders(contact) {
    const reminderTypes = [
      { days: 30, type: 'preparation', message: 'Anniversaire dans 1 mois - Commencer à planifier' },
      { days: 7, type: 'shopping', message: 'Anniversaire dans 1 semaine - Acheter le cadeau' },
      { days: 3, type: 'preparation', message: 'Anniversaire dans 3 jours - Finaliser les préparatifs' },
      { days: 0, type: 'celebration', message: 'C\'est aujourd\'hui l\'anniversaire !' }
    ];
    
    reminderTypes.forEach(reminder => {
      this.addReminder(contact.id, reminder.days, reminder.type, reminder.message);
    });
  }
  
  // Obtenir les anniversaires du mois
  getBirthdaysThisMonth(month = new Date().getMonth()) {
    return this.contacts.filter(contact => {
      const birthDate = new Date(contact.birthDate);
      return birthDate.getMonth() === month;
    }).sort((a, b) => {
      const dayA = new Date(a.birthDate).getDate();
      const dayB = new Date(b.birthDate).getDate();
      return dayA - dayB;
    });
  }
  
  // Obtenir les prochains anniversaires
  getUpcomingBirthdays(days = 30) {
    const today = new Date();
    const futureDate = new Date(today);
    futureDate.setDate(today.getDate() + days);
    
    return this.contacts.map(contact => {
      const ageInfo = this.calculateAge(contact.birthDate);
      return {
        ...contact,
        ...ageInfo
      };
    }).filter(contact => {
      return contact.daysUntilBirthday <= days;
    }).sort((a, b) => a.daysUntilBirthday - b.daysUntilBirthday);
  }
  
  // Générer un fichier iCal
  generateICalFile() {
    let icalContent = [
      'BEGIN:VCALENDAR',
      'VERSION:2.0',
      'PRODID:-//Birthday Manager//Birthday Events//EN',
      'CALSCALE:GREGORIAN'
    ];
    
    this.contacts.forEach(contact => {
      const birthDate = new Date(contact.birthDate);
      const currentYear = new Date().getFullYear();
      
      // Créer des événements pour les 5 prochaines années
      for (let year = currentYear; year <= currentYear + 5; year++) {
        const eventDate = new Date(year, birthDate.getMonth(), birthDate.getDate());
        const age = year - birthDate.getFullYear();
        
        const eventId = `birthday-${contact.id}-${year}`;
        const dateString = eventDate.toISOString().split('T')[0].replace(/-/g, '');
        
        icalContent.push(
          'BEGIN:VEVENT',
          `UID:${eventId}`,
          `DTSTART;VALUE=DATE:${dateString}`,
          `DTEND;VALUE=DATE:${dateString}`,
          `SUMMARY:🎂 ${contact.name} ${contact.surname} (${age} ans)`,
          `DESCRIPTION:Anniversaire de ${contact.name} - ${age} ans`,
          'RRULE:FREQ=YEARLY',
          'BEGIN:VALARM',
          'TRIGGER:-P1D',
          'ACTION:DISPLAY',
          `DESCRIPTION:Anniversaire de ${contact.name} demain !`,
          'END:VALARM',
          'END:VEVENT'
        );
      }
    });
    
    icalContent.push('END:VCALENDAR');
    
    return icalContent.join('\n');
  }
  
  // Suggestions de cadeaux par âge
  getGiftSuggestions(age, relation = 'friend', budget = 'medium') {
    const suggestions = {
      child: { // 0-12 ans
        low: ['Livre d\'histoires', 'Jeu de société simple', 'Peluche'],
        medium: ['Lego', 'Vélo', 'Console de jeu portable'],
        high: ['Tablette éducative', 'Trottinette électrique', 'Kit robotique']
      },
      teenager: { // 13-17 ans
        low: ['Accessoires mode', 'Livre YA', 'Produits beauté'],
        medium: ['Écouteurs sans fil', 'Vêtements de marque', 'Jeux vidéo'],
        high: ['Smartphone', 'Ordinateur portable', 'Appareil photo']
      },
      young_adult: { // 18-30 ans
        low: ['Plante verte', 'Bougie parfumée', 'Livre de développement personnel'],
        medium: ['Coffret dégustation', 'Accessoires tech', 'Vêtements qualité'],
        high: ['Voyage weekend', 'Montre connectée', 'Cours/formation']
      },
      adult: { // 30-60 ans
        low: ['Vin de qualité', 'Livre spécialisé', 'Produits artisanaux'],
        medium: ['Expérience gastronomique', 'Gadgets maison', 'Abonnement premium'],
        high: ['Bijoux', 'Art/décoration', 'Électroménager haut de gamme']
      },
      senior: { // 60+ ans
        low: ['Album photo personnalisé', 'Thé/café de qualité', 'Plaid douillet'],
        medium: ['Tablette simplifiée', 'Kit jardin', 'Massage/spa'],
        high: ['Voyage organisé', 'Œuvre d\'art', 'Équipement confort']
      }
    };
    
    let category;
    if (age < 13) category = 'child';
    else if (age < 18) category = 'teenager';
    else if (age < 31) category = 'young_adult';
    else if (age < 61) category = 'adult';
    else category = 'senior';
    
    return suggestions[category][budget] || suggestions[category]['medium'];
  }
  
  // Statistiques
  getStatistics() {
    const now = new Date();
    const monthlyCount = Array(12).fill(0);
    let totalAge = 0;
    
    this.contacts.forEach(contact => {
      const birthMonth = new Date(contact.birthDate).getMonth();
      monthlyCount[birthMonth]++;
      
      const age = this.calculateAge(contact.birthDate).currentAge;
      totalAge += age;
    });
    
    return {
      totalContacts: this.contacts.length,
      averageAge: Math.round(totalAge / this.contacts.length),
      busiestMonth: monthlyCount.indexOf(Math.max(...monthlyCount)),
      monthlyDistribution: monthlyCount,
      upcomingThisMonth: this.getBirthdaysThisMonth().length,
      specialAgesThisYear: this.getUpcomingBirthdays(365).filter(c => c.isSpecialAge).length
    };
  }
  
  // Utilitaires
  generateId() {
    return Date.now().toString(36) + Math.random().toString(36).substr(2);
  }
  
  saveContacts() {
    localStorage.setItem('birthdays', JSON.stringify(this.contacts));
  }
  
  exportData() {
    return {
      contacts: this.contacts,
      reminders: this.reminders,
      exportDate: new Date().toISOString()
    };
  }
}

// Exemple d'utilisation
const birthdayManager = new BirthdayManager();

// Ajouter un contact
birthdayManager.addContact({
  name: 'Alice',
  surname: 'Dupont',
  birthDate: '1995-06-15',
  relation: 'friend',
  email: 'alice@example.com',
  preferences: ['livres', 'yoga', 'cuisine']
});

// Voir les prochains anniversaires
console.log('Prochains anniversaires:', birthdayManager.getUpcomingBirthdays(30));

// Générer un fichier iCal
const icalData = birthdayManager.generateICalFile();
console.log('Fichier iCal généré:', icalData);

// Obtenir des suggestions de cadeaux
const suggestions = birthdayManager.getGiftSuggestions(25, 'friend', 'medium');
console.log('Suggestions cadeaux:', suggestions);

🚀 Fonctionnalités avancées

🤖 Intelligence artificielle :
  • Apprentissage - Analyse des préférences passées
  • Suggestions personnalisées - Basées sur l'historique
  • Budget optimal - Selon vos dépenses habituelles
  • Détection tendances - Cadeaux populaires
🔗 Intégrations sociales :
  • Réseaux sociaux - Import automatique Facebook
  • Partage calendrier - Famille et amis proches
  • Coordination cadeaux - Éviter les doublons
  • Photos souvenirs - Album des célébrations

Cas d'usage et bénéfices

👨‍👩‍👧‍👦 Famille
  • • Parents et grands-parents
  • • Fratrie et cousinage
  • • Beaux-parents
  • • Anniversaires de mariage
👥 Amis
  • • Cercle d'amis proches
  • • Connaissances sociales
  • • Amis d'enfance
  • • Nouveaux contacts
💼 Professionnel
  • • Équipe de travail
  • • Managers et subordonnés
  • • Clients importants
  • • Réseau professionnel
🎯 Spécial
  • • Enfants du quartier
  • • Personnes âgées isolées
  • • Associations/clubs
  • • Événements communautaires

💡 Conseils pour une gestion efficace

✅ Bonnes pratiques :
  • Mettez à jour régulièrement vos contacts
  • Notez les préférences après chaque cadeau offert
  • Programmez vos rappels selon votre rythme de vie
  • Sauvegardez vos données régulièrement
  • Partagez avec le conjoint pour éviter les oublis
💰 Gestion du budget :
  • Définissez un budget annuel par catégorie de relation
  • Anticipez les anniversaires groupés (décembre)
  • Profitez des soldes pour acheter à l'avance
  • Considérez les cadeaux faits main pour l'originalité
  • Gardez une enveloppe "anniversaires imprévus"

Informations

CatégorieVie quotidienne
Statut🚧 En construction
Gratuit✓ Oui
Inscription✗ Non requise

Une suggestion ? 💡

Vous avez une idée d'outil qui pourrait être utile ? N'hésitez pas à me contacter !