#!/usr/bin/env node
import fs from 'fs';
import path from 'path';
function organizeFiles() {
console.log('๐ ORGANIZING EMAIL ORGANIZATION FILES\n');
const baseDir = '/Users/ceverson/Development/email_organization/core';
// Define directory structure
const directories = {
'scripts': 'Main organization and utility scripts',
'analysis': 'Email analysis and reporting scripts',
'setup': 'Initial setup and configuration scripts',
'sieve': 'FastMail Sieve filtering rules',
'src': 'Core library and client code',
'docs': 'Documentation and guides'
};
// File categorization
const fileCategories = {
'scripts': [
'organize-everything.js',
'final-organization.js',
'conversation-based-organization.js',
'smart-inbox-organization.js',
'final-inbox-cleanup.js',
'move-final-newsletters.js',
'organize-todays-inbox.js'
],
'analysis': [
'count-all-emails.js',
'check-inbox-contents.js',
'check-todays-emails.js',
'comprehensive-spam-review.js',
'check-spam-folder.js'
],
'setup': [
'create-hierarchical-labels.js',
'delete-excess-labels.js',
'delete-remaining-empty-folders.js'
],
'sieve': [
'fastmail-sieve-rules.txt'
],
'src': [
'src/' // This is already a directory
]
};
// Create directories
console.log('๐ Creating directory structure:');
for (const [dirName, description] of Object.entries(directories)) {
const dirPath = path.join(baseDir, dirName);
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath, { recursive: true });
console.log(` โ
Created: ${dirName}/ - ${description}`);
} else {
console.log(` โ Exists: ${dirName}/ - ${description}`);
}
}
console.log('\n๐ Moving files to appropriate directories:');
// Move files to their categories
for (const [category, files] of Object.entries(fileCategories)) {
if (category === 'src') continue; // src is already organized
console.log(`\n๐ ${category.toUpperCase()}:`);
for (const fileName of files) {
const sourcePath = path.join(baseDir, fileName);
const targetDir = path.join(baseDir, category);
const targetPath = path.join(targetDir, fileName);
if (fs.existsSync(sourcePath)) {
if (!fs.existsSync(targetPath)) {
fs.renameSync(sourcePath, targetPath);
console.log(` โ
Moved: ${fileName} โ ${category}/`);
} else {
console.log(` โ Already in place: ${fileName}`);
}
} else {
console.log(` โ ๏ธ Not found: ${fileName}`);
}
}
}
// Create docs directory content
const docsDir = path.join(baseDir, 'docs');
const readmePath = path.join(docsDir, 'README.md');
if (!fs.existsSync(readmePath)) {
const readmeContent = `# Email Organization System
This directory contains documentation for the comprehensive email organization system.
## Quick Start
1. **Setup**: Run scripts in \`setup/\` to create hierarchical labels
2. **Organization**: Use scripts in \`scripts/\` to organize emails
3. **Analysis**: Use scripts in \`analysis/\` to review and monitor
4. **Filtering**: Deploy sieve rules from \`sieve/\` to FastMail
## Directory Structure
- \`scripts/\` - Main organization and utility scripts
- \`analysis/\` - Email analysis and reporting scripts
- \`setup/\` - Initial setup and configuration scripts
- \`sieve/\` - FastMail Sieve filtering rules
- \`src/\` - Core library and client code
- \`docs/\` - Documentation and guides
## Key Features
- **Hierarchical Organization**: 5 main categories with subcategories
- **Auto-purge Settings**: Automatic cleanup of old newsletters/promotions
- **Comprehensive Spam Detection**: Multi-year threat intelligence
- **Conversation-based Logic**: Preserves actionable emails
- **100% Organization**: Processes all 8,000+ emails
## Maintenance
- Run \`analysis/check-todays-emails.js\` daily to monitor new emails
- Use \`scripts/organize-todays-inbox.js\` for daily inbox management
- Review spam folder monthly with \`analysis/comprehensive-spam-review.js\`
`;
fs.writeFileSync(readmePath, readmeContent);
console.log('\n๐ Created: docs/README.md');
}
console.log('\n๐ FILE ORGANIZATION COMPLETE!');
console.log('='.repeat(60));
console.log('๐ All scripts organized into logical directories');
console.log('๐ Documentation created in docs/');
console.log('โ
System ready for easy maintenance and use');
}
organizeFiles();