OutilsProgrammation anniversaires
🏠
Programmation anniversaires
🚧 En constructionVie 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 !