A SwiftUI application to manage files on local file system organized based on PARA method from Tiago Forte.
- Project Folder Monitoring: Select and monitor a projects directory in real-time
- Automatic Detection: Automatically detects subfolders and updates the list when changes occur
- Easy Archiving: Archive completed projects to a designated archiving folder with a single click
- Native macOS Experience: Built with SwiftUI for a seamless macOS experience
- Persistent Settings: Remembers your selected folders between app launches
- File System Integration: Direct integration with Finder for opening project folders
[Screenshots would be added here]
- macOS: 14.0 or later
- Swift: 5.9 or later
- Xcode Command Line Tools (for building from source)
- Download the latest DMG file from the Releases page
- Mount the DMG file
- Drag PARAManager to your Applications folder
- Launch the app
-
Clone the repository:
git clone https://github.com/yourusername/PARAManager.git cd PARAManager -
Build the project:
swift build -c release
-
Run the app:
.build/release/PARAManager
Use the included build script to create a distributable DMG:
./build-dmg.shFor detailed packaging instructions, see Packaging.md.
- Launch PARAManager
- Select Projects Folder: Click "Select Projects Folder" to choose the directory containing your projects
- Select Archiving Folder: Click "Select Archiving Folder" to choose where completed projects will be archived
- Monitor Projects: The app will automatically display all subfolders in your projects directory
- Archive Projects: Click "Archive" next to any project to move it to your archiving folder
- PARAManager automatically watches your selected projects folder
- New projects are detected immediately when added
- The interface updates in real-time without manual refresh
- Open: Click "Open" to open a project folder directly in Finder
- Archive: Click "Archive" to move a project to your designated archiving location
- Automatic Updates: The project list updates automatically when files change
- Your selected folders are remembered between app launches
- No need to reconfigure the app each time you use it
PARAManager/
├── PARAManagerApp.swift # Main app entry point
├── AppContext.swift # Shared app context
├── Models/
│ └── ProjectsModel.swift # Core business logic
├── ViewModels/
│ └── ProjectsViewModel.swift # UI state management
├── Views/
│ └── ProjectsView.swift # Main UI components
├── Utils/
│ └── FileWatcher.swift # File system monitoring
├── Package.swift # Swift Package Manager configuration
├── Info.plist # App metadata
├── Entitlements.plist # App permissions
└── build-dmg.sh # Build and packaging script
PARAManager follows the MVVM (Model-View-ViewModel) architecture pattern:
- Model (
ProjectsModel): Handles file system operations, folder monitoring, and archiving logic - View (
ProjectsView): SwiftUI interface for user interaction - ViewModel (
ProjectsViewModel): Manages UI state and coordinates between Model and View
- Monitors directory changes using macOS file system events
- Automatically updates the project list when changes occur
- Efficient resource management with proper cleanup
- Core business logic for folder management
- Handles archiving operations with error handling
- Persistent storage using UserDefaults
- Manages UI state and user interactions
- Coordinates with the Model layer
- Handles file picker dialogs and user feedback
# Install Xcode Command Line Tools
xcode-select --install
# Verify Swift version
swift --version# Build in debug mode
swift build
# Run the app
swift run# Build optimized release version
swift build -c release
# Run release version
.build/release/PARAManagerFor distribution, you'll need:
- Apple Developer Program membership
- Developer ID Application certificate
- Proper code signing and notarization
See Packaging.md for detailed instructions.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Swift style guidelines
- Add tests for new features
- Update documentation as needed
- Ensure code signing works before submitting PRs
- Ensure you're running macOS 14.0 or later
- Check that the app has necessary permissions
- Try building from source to see detailed error messages
- Verify the selected folder exists and is accessible
- Check that the app has permission to access the folder
- Restart the app if folder permissions have changed
- Ensure the archiving folder is selected
- Check that you have write permissions to the archiving location
- Verify the destination doesn't already contain a folder with the same name
- Ensure Xcode Command Line Tools are installed
- Check Swift version compatibility
- Verify all dependencies are properly resolved
To run in debug mode with additional logging:
swift build
swift runThis project is licensed under the MIT License - see the LICENSE file for details.
- Built with SwiftUI and Swift
- Uses native macOS file system APIs
- Inspired by the need for better project organization tools
- Issues: Report bugs and feature requests on GitHub Issues
- Discussions: Join the conversation on GitHub Discussions
- Documentation: Check the Packaging.md for build and distribution details
PARAManager - Simplify your project management workflow on macOS.