#!/usr/bin/env bun /** * Optimal Days Finder * * Find the best days in a month (or year) for specific activities based on * Personal Day cycles. Perfect for scheduling launches, meetings, creative work, etc. * * Usage: * bun optimal-days.ts --birthdate "5/13/1982" --month 11 --year 2025 --day 1 * bun optimal-days.ts --birthdate "5/13/1982" --month 11 --year 2025 --day 8 --activity "business" * bun optimal-days.ts --birthdate "5/13/1982" --year 2025 --day 3 (find all Day 3s in the year) */ import { calculateCycles } from './cycles'; import { loadProfile } from './profile-manager'; // Parse command line arguments const args = process.argv.slice(2); let birthdate = ''; let profileId = ''; let month: number | null = null; let year: number = new Date().getFullYear(); let targetDay: number | null = null; let activity = ''; for (let i = 0; i < args.length; i++) { if ((args[i] === '--profile' || args[i] === '-p') && args[i + 1]) { profileId = args[i + 1]; i++; } else if ((args[i] === '--birthdate' || args[i] === '-b') && args[i + 1]) { birthdate = args[i + 1]; i++; } else if ((args[i] === '--month' || args[i] === '-m') && args[i + 1]) { month = parseInt(args[i + 1]); i++; } else if ((args[i] === '--year' || args[i] === '-y') && args[i + 1]) { year = parseInt(args[i + 1]); i++; } else if ((args[i] === '--day' || args[i] === '-d') && args[i + 1]) { targetDay = parseInt(args[i + 1]); i++; } else if ((args[i] === '--activity' || args[i] === '-a') && args[i + 1]) { activity = args[i + 1].toLowerCase(); i++; } else if (args[i] === '--help' || args[i] === '-h') { console.log(` Optimal Days Finder Find the best days for specific activities based on Personal Day cycles. USAGE: bun optimal-days.ts --profile [OPTIONS] bun optimal-days.ts --birthdate "mm/dd/yyyy" [OPTIONS] OPTIONS: -p, --profile ID Use saved profile -b, --birthdate DATE Your birthdate (mm/dd/yyyy) [required if no profile] -m, --month NUMBER Month to search (1-12) [optional - searches whole year if omitted] -y, --year NUMBER Year to search [default: current year] -d, --day NUMBER Target Personal Day number (1-9, 11, 22, 33) -a, --activity NAME Activity type (new, creative, business, study, etc.) [optional] -h, --help Show this help message EXAMPLES: # With profile bun optimal-days.ts --profile rob -m 11 -y 2025 -d 1 bun optimal-days.ts --profile rob -y 2025 -d 8 # With birthdate bun optimal-days.ts -b "5/13/1982" -m 11 -y 2025 -d 1 bun optimal-days.ts -b "5/13/1982" -y 2025 -d 8 bun optimal-days.ts -b "5/13/1982" -m 12 -y 2025 -a new bun optimal-days.ts -b "5/13/1982" -d 3 PERSONAL DAY MEANINGS: 1 - New beginnings, initiatives, independence 2 - Cooperation, partnerships, details 3 - Creative expression, communication, social 4 - Hard work, organization, foundation building 5 - Change, freedom, marketing, variety 6 - Service, responsibility, teaching, family 7 - Introspection, study, spirituality, rest 8 - Achievement, business, power, success 9 - Completion, endings, release, letting go 11 - Inspiration, intuition, spiritual leadership 22 - Master building, manifestation 33 - Master teaching, healing, service ACTIVITY KEYWORDS: new, begin, start, launch → Day 1 creative, write, content → Day 3 business, money, scale → Day 8 study, learn, research → Day 7 complete, finish, publish → Day 9 teach, serve, help → Day 6 `); process.exit(0); } } // Load profile if specified if (profileId) { const profile = loadProfile(profileId); if (!profile) { console.error(`Error: Profile '${profileId}' not found`); console.error('List profiles with: bun profile.ts list'); process.exit(1); } birthdate = profile.birthdate; } if (!birthdate) { console.error('Error: --birthdate is required (or use --profile)'); console.error('Try: bun optimal-days.ts --help'); process.exit(1); } // Activity to Personal Day mapping const activityMap: Record = { 'new': [1], 'begin': [1], 'start': [1], 'launch': [1, 8], 'creative': [3], 'write': [3], 'content': [3], 'communicate': [3], 'business': [8], 'money': [8], 'financial': [8], 'scale': [8], 'study': [7], 'learn': [7], 'research': [7], 'certification': [7], 'complete': [9], 'finish': [9], 'publish': [9], 'release': [9], 'teach': [6, 33], 'serve': [6, 33], 'help': [6], 'organize': [4], 'build': [4, 22], 'system': [4], 'change': [5], 'market': [5], 'promote': [5], 'partner': [2], 'collaborate': [2], 'spiritual': [7, 11], 'inspire': [11], }; // Determine target day from activity if not specified if (!targetDay && activity) { const matchedDays = activityMap[activity]; if (matchedDays && matchedDays.length > 0) { targetDay = matchedDays[0]; // Use first match console.log(`\n🎯 Searching for Personal Day ${targetDay} days (best for "${activity}" activities)\n`); } else { console.error(`Error: Unknown activity "${activity}"`); console.error('Try: new, creative, business, study, complete, teach, etc.'); process.exit(1); } } if (!targetDay) { console.error('Error: Either --day or --activity is required'); console.error('Try: bun optimal-days.ts --help'); process.exit(1); } // Day meanings const dayMeanings: Record = { 1: { name: 'New Beginnings', energy: 'Initiative, Independence, Leadership', bestFor: [ 'Starting new projects or ventures', 'First client meetings', 'Launching products/services', 'Making bold decisions', 'Taking independent action', 'Breaking new ground' ] }, 2: { name: 'Cooperation', energy: 'Partnership, Patience, Details', bestFor: [ 'Building partnerships', 'Collaborative meetings', 'Detail-oriented work', 'Diplomatic negotiations', 'Relationship building', 'Refining and perfecting' ] }, 3: { name: 'Creative Expression', energy: 'Communication, Creativity, Social', bestFor: [ 'Writing and content creation', 'Public speaking', 'Social media and networking', 'Creative projects', 'Presentations', 'Joyful collaboration' ] }, 4: { name: 'Foundation Building', energy: 'Hard Work, Organization, Structure', bestFor: [ 'Building systems and processes', 'Organizing and planning', 'Infrastructure work', 'Physical projects', 'Financial planning', 'Detail implementation' ] }, 5: { name: 'Change & Freedom', energy: 'Variety, Adventure, Marketing', bestFor: [ 'Marketing and promotion', 'Trying new approaches', 'Embracing change', 'Travel and exploration', 'Experimenting', 'Pivoting strategies' ] }, 6: { name: 'Service & Responsibility', energy: 'Teaching, Helping, Family', bestFor: [ 'Client service work', 'Teaching and training', 'Taking on responsibility', 'Family matters', 'Home projects', 'Community service' ] }, 7: { name: 'Introspection', energy: 'Study, Spirituality, Analysis', bestFor: [ 'Deep study and learning', 'Research and analysis', 'Spiritual practice', 'Private development', 'Rest and rejuvenation', 'Strategic thinking' ] }, 8: { name: 'Achievement', energy: 'Power, Business, Success', bestFor: [ 'Business deals and negotiations', 'Financial decisions', 'Scaling operations', 'Authority building', 'Major launches', 'Leadership actions' ] }, 9: { name: 'Completion', energy: 'Release, Endings, Letting Go', bestFor: [ 'Completing projects', 'Publishing finished work', 'Releasing products', 'Ending what no longer serves', 'Wrapping up loose ends', 'Clearing space' ] }, 11: { name: 'Inspiration', energy: 'Intuition, Illumination, Spiritual Leadership', bestFor: [ 'Inspiring others', 'Channeling intuition', 'Spiritual teaching', 'Visionary work', 'Illuminating insights', 'Master-level guidance' ] }, 22: { name: 'Master Building', energy: 'Manifestation, Large-Scale Vision', bestFor: [ 'Building lasting legacies', 'Large-scale projects', 'Master-level manifestation', 'Visionary implementation', 'Foundation for decades', 'Ambitious launches' ] }, 33: { name: 'Master Teaching', energy: 'Healing, Compassionate Service', bestFor: [ 'Master teaching moments', 'Healing and service work', 'Compassionate leadership', 'Educational initiatives', 'Serving at highest level', 'Impact-focused action' ] } }; // Avoid activities const avoidActivities: Record = { 1: ['Waiting for others', 'Being passive', 'Following only'], 2: ['Solo ventures', 'Rushing', 'Being impatient'], 3: ['Heavy analytical work', 'Isolation', 'Serious only mode'], 4: ['Starting completely new things', 'Taking shortcuts', 'Scattered work'], 5: ['Rigid routines', 'Being stuck', 'Resisting change'], 6: ['Selfish pursuits', 'Avoiding responsibility', 'Neglecting others'], 7: ['Major public launches', 'Excessive socializing', 'Surface-level work'], 8: ['Spiritual retreats', 'Passive waiting', 'Small thinking'], 9: ['Starting new ventures', 'Beginning fresh', 'Initiating'], 11: ['Ignoring intuition', 'Playing small', 'Logical-only thinking'], 22: ['Small projects', 'Short-term thinking', 'Doubting vision'], 33: ['Selfish profit focus', 'Burnout', 'Saving everyone without boundaries'] }; interface OptimalDay { date: Date; dateString: string; dayOfWeek: string; personalDay: number; personalMonth: number; monthName: string; } // Find optimal days function findOptimalDays( birthdate: string, targetDay: number, month: number | null, year: number ): OptimalDay[] { const results: OptimalDay[] = []; const startMonth = month || 1; const endMonth = month || 12; for (let m = startMonth; m <= endMonth; m++) { const daysInMonth = new Date(year, m, 0).getDate(); for (let d = 1; d <= daysInMonth; d++) { const dateStr = `${m}/${d}/${year}`; const cycles = calculateCycles(birthdate, dateStr); if (cycles.personal.day === targetDay) { const date = new Date(year, m - 1, d); results.push({ date, dateString: dateStr, dayOfWeek: date.toLocaleDateString('en-US', { weekday: 'long' }), personalDay: cycles.personal.day, personalMonth: cycles.personal.month, monthName: date.toLocaleDateString('en-US', { month: 'long' }) }); } } } return results; } // Main execution console.log(`\n═══════════════════════════════════════════════════════════════`); console.log(`🎯 OPTIMAL DAYS FINDER`); console.log(`═══════════════════════════════════════════════════════════════\n`); const searchPeriod = month ? `${new Date(year, month - 1).toLocaleDateString('en-US', { month: 'long' })} ${year}` : `All of ${year}`; console.log(`Searching: ${searchPeriod}`); console.log(`Personal Day: ${targetDay} (${dayMeanings[targetDay]?.name || 'Unknown'})\n`); const optimalDays = findOptimalDays(birthdate, targetDay, month, year); if (optimalDays.length === 0) { console.log(`❌ No Personal Day ${targetDay} days found in ${searchPeriod}\n`); process.exit(0); } console.log(`Found ${optimalDays.length} optimal day${optimalDays.length > 1 ? 's' : ''}:\n`); // Display results grouped by month const byMonth: Record = {}; optimalDays.forEach(day => { if (!byMonth[day.monthName]) byMonth[day.monthName] = []; byMonth[day.monthName].push(day); }); for (const [monthName, days] of Object.entries(byMonth)) { console.log(`📅 ${monthName.toUpperCase()} ${year}:`); days.forEach(day => { const date = day.date; const dateFormatted = `${monthName} ${date.getDate()}, ${year}`; console.log(` • ${day.dayOfWeek}, ${dateFormatted}`); }); console.log(''); } // Display day meaning and guidance const meaning = dayMeanings[targetDay]; if (meaning) { console.log(`═══════════════════════════════════════════════════════════════`); console.log(`PERSONAL DAY ${targetDay}: ${meaning.name.toUpperCase()}`); console.log(`═══════════════════════════════════════════════════════════════\n`); console.log(`🌟 ENERGY: ${meaning.energy}\n`); console.log(`✅ BEST FOR:`); meaning.bestFor.forEach(item => console.log(` • ${item}`)); console.log(''); if (avoidActivities[targetDay]) { console.log(`⚠️ AVOID ON THESE DAYS:`); avoidActivities[targetDay].forEach(item => console.log(` • ${item}`)); console.log(''); } } // Practical scheduling tips console.log(`═══════════════════════════════════════════════════════════════`); console.log(`💡 SCHEDULING TIPS`); console.log(`═══════════════════════════════════════════════════════════════\n`); if (targetDay === 1) { console.log(`→ Schedule important launches and "first steps" on these days`); console.log(`→ Use for kickoff meetings and bold initiatives`); console.log(`→ These are YOUR days to lead and take charge\n`); } else if (targetDay === 3) { console.log(`→ Perfect days for content creation and publishing`); console.log(`→ Schedule presentations and networking events`); console.log(`→ Social media campaigns work great on Day 3\n`); } else if (targetDay === 7) { console.log(`→ Block these days for deep work and study`); console.log(`→ Avoid scheduling external meetings if possible`); console.log(`→ Use for strategy, analysis, and preparation\n`); } else if (targetDay === 8) { console.log(`→ Schedule major business deals and negotiations`); console.log(`→ Perfect for product launches and promotions`); console.log(`→ Make big financial decisions on these days\n`); } else if (targetDay === 9) { console.log(`→ Ideal days to ship completed projects`); console.log(`→ Schedule "wrapping up" and "final release" work`); console.log(`→ Good for ending contracts or relationships\n`); } // Show first 3 as "upcoming opportunities" if searching future const today = new Date(); const futureDays = optimalDays.filter(d => d.date >= today).slice(0, 3); if (futureDays.length > 0) { console.log(`═══════════════════════════════════════════════════════════════`); console.log(`🚀 UPCOMING OPPORTUNITIES`); console.log(`═══════════════════════════════════════════════════════════════\n`); futureDays.forEach((day, i) => { const daysUntil = Math.ceil((day.date.getTime() - today.getTime()) / (1000 * 60 * 60 * 24)); const urgent = daysUntil <= 7 ? '⚡' : ''; console.log(`${i + 1}. ${urgent} ${day.dayOfWeek}, ${day.monthName} ${day.date.getDate()}`); console.log(` (${daysUntil} days from now - Personal Month ${day.personalMonth})\n`); }); } console.log(`✨ Use these optimal days to align your actions with natural energy cycles\n`);