A secure, private terminal-based journaling application designed specifically for developers going through heartbreak, breakups, or betrayal. EmotionCtl provides a safe digital sanctuary to process emotions, track healing progress, and maintain mental health during life's most challenging moments.
As developers, we're often so focused on solving technical problems that we neglect our emotional well-being. When relationships end or trust is broken, we need a private space to process these complex feelings without judgment. EmotionCtl combines the security you expect as a developer with the emotional support you need as a human.
π Complete Privacy: Military-grade AES-256-CBC encryption keeps your deepest thoughts secure
π Safe Space: Judgment-free zone designed for emotional processing and healing
π Expressive Journaling: Write freely with mood tracking, tags, and rich text support
π Pattern Recognition: Search and analyze your emotional journey to understand triggers and growth
πΎ Secure Backups: Encrypted backups ensure your healing journey is never lost
π¨ Gentle Interface: Calming terminal UI that respects your emotional state
π Progress Tracking: Visualize your healing journey with detailed statistics
π‘οΈ Developer-Grade Security: PBKDF2 password hashing and local-only storage
- Node.js 14+ and npm/yarn
- Git
You can run EmotionCtl instantly without installation using npx:
# Initialize your safe space
npx emotionctl init
# Start writing
npx emotionctl write
# Read your entries
npx emotionctl readThis downloads and runs the latest version each time, ensuring you always have the most up-to-date healing tools.
For frequent use, you can install EmotionCtl globally on your system:
# Install directly from npm
npm install -g emotionctlOr with yarn:
# Install with yarn
yarn global add emotionctlOnce installed globally, you can use emotionctl from anywhere on your system:
# Initialize your safe space
emotionctl init
# Start writing
emotionctl write
# Read your entries
emotionctl read --list
# Get help
emotionctl --helpFor development or contributing to the project:
- Clone or download this repository
- Install dependencies:
yarn install- Build the project:
yarn build- Run locally:
node dist/index.js --helpCreate your private, encrypted emotional sanctuary:
emotionctl initThis creates a secure space where you can process your feelings without fear of judgment or exposure.
Express yourself freely in a safe environment:
emotionctl writeOr capture a specific moment:
emotionctl write --title "The day everything changed"Review your emotional progress:
emotionctl readFind entries from difficult days:
emotionctl read --listLook back at a specific moment:
emotionctl read --date 2025-07-02Search for growth patterns:
emotionctl read --search "healing"
emotionctl read --search "breakthrough"
emotionctl read --search "stronger"Delete an entry:
emotionctl delete --id <entry-id>Create a backup:
emotionctl backup --output ~/my-journal-backup.jsonRestore from backup:
emotionctl restore --input ~/my-journal-backup.jsonChange your password:
emotionctl change-passwordemotionctl resetRun without any commands for interactive mode:
emotionctlyarn dev- Run in development mode with ts-nodeyarn build- Build the TypeScript projectyarn watch- Build in watch modeyarn test- Run testsyarn lint- Run ESLintyarn format- Format code with Prettier
src/
βββ index.ts # Main entry point and CLI setup
βββ types/
β βββ index.ts # TypeScript type definitions
βββ services/
βββ AuthManager.ts # Password and authentication management
βββ CryptoService.ts # Encryption/decryption utilities
βββ JournalManager.ts # Journal entry management
βββ CLIInterface.ts # User interface and interaction
βββ Editor.ts # Journal Editor
- Algorithm: AES-256-CBC encryption
- Key Derivation: PBKDF2 with SHA-256 (10,000 iterations)
- Random Elements: Each encryption uses a unique salt and IV
- Password Hashing: Passwords are hashed using PBKDF2 before storage
- All data is stored locally in
~/.emotionctl/ - Journal entries are encrypted before being written to disk
- Configuration and authentication data are stored separately
- No data is ever transmitted over the network
- Use a strong, unique password for your journal
- Regularly create encrypted backups
- Store backups in secure locations
- Never share your journal password
~/.emotionctl/
βββ auth.json # Encrypted authentication data
βββ config.json # Journal configuration
βββ entries.json # Encrypted journal entries
- commander: CLI framework
- inquirer: Interactive prompts
- chalk: Terminal colors
- crypto-js: Encryption library
- date-fns: Date manipulation
- fs-extra: Enhanced file system operations
- typescript: TypeScript compiler
- ts-node: TypeScript execution
- jest: Testing framework
- eslint: Code linting
- prettier: Code formatting
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Run linting and tests
- Submit a pull request
MIT License - see LICENSE file for details
"Journal not initialized"
- Run
emotionctl initto set up your journal
"Authentication failed"
- Ensure you're entering the correct password
- If you forgot your password, you'll need to restore from a backup or start fresh
"Permission denied"
- Ensure you have write permissions to your home directory
- On some systems, you may need to run with appropriate permissions
If you encounter issues:
- Check that all dependencies are installed correctly
- Ensure Node.js version is 16+
- Verify file permissions in your home directory
- Check that no other processes are using the journal files
This application is designed for personal use and stores all data locally. While it uses strong encryption, please consider:
- Regular backups are essential
- Store backups securely
- Use a strong, memorable password
- Keep your system secure and updated
- Be aware that this is not audited cryptographic software
For sensitive information, consider using additional security measures like full-disk encryption.