A modern desktop application built with Electron + React for AI-powered CV parsing and profile management.
- 🖥️ Desktop App: Native desktop experience with Electron
- 📁 Drag & Drop: Easy CV file upload with drag-and-drop support
- 🤖 AI Integration: Ready for integration with your existing AI parser API
- 🎨 Modern UI: Beautiful, responsive React-based interface
- 📱 Cross-Platform: Works on Windows, macOS, and Linux
- 🔒 Secure: Context isolation and secure IPC communication
- Frontend: React 18 + TypeScript + Vite
- Desktop: Electron 28
- Styling: Modern CSS with responsive design
- Build: Electron Builder for distribution
- Node.js 18+
- npm or yarn
-
Clone the repository
git clone <your-repo-url> cd ApplyAI
-
Install dependencies
npm install
npm run electron-devThis will:
- Start the Vite dev server on port 5173
- Launch the Electron app in development mode
- Enable hot reload for both React and Electron
npm run distThis creates distributable packages in the release/ folder.
ApplyAI/
├── electron/ # Electron main process
│ ├── main.ts # Main process entry point
│ └── preload.ts # Preload script for secure IPC
├── src/ # React application
│ ├── components/ # React components
│ │ ├── CVUploader.tsx # CV upload component
│ │ └── ProfileDisplay.tsx # Profile display component
│ ├── types.ts # TypeScript type definitions
│ ├── App.tsx # Main app component
│ ├── main.tsx # React entry point
│ └── index.css # Global styles
├── dist/ # Built React app (generated)
├── dist-electron/ # Built Electron files (generated)
├── release/ # Distribution packages (generated)
├── package.json # Project configuration
├── vite.config.ts # Vite configuration
├── tsconfig.json # TypeScript configuration
├── electron-builder.config.js # Electron Builder configuration
└── build-electron.js # Electron build script
The app is designed to integrate with your existing AI parser API. To connect it:
-
Update the upload handler in
src/App.tsx:const handleCVUpload = useCallback(async (files: File[]) => { setIsProcessing(true) try { for (const file of files) { // Send file to your AI parser API const formData = new FormData() formData.append('cv', file) const response = await fetch('YOUR_API_ENDPOINT', { method: 'POST', body: formData }) const parsedData = await response.json() // Create profile from parsed data const profile: CVProfile = { // Map your API response to CVProfile structure } setProfiles(prev => [...prev, profile]) } } catch (error) { console.error('Error processing CV:', error) } finally { setIsProcessing(false) } }, [])
-
Update types in
src/types.tsto match your API response structure
npm run dev- Start Vite dev server onlynpm run build- Build React app for productionnpm run electron-dev- Start Electron app in development modenpm run build:electron- Build Electron TypeScript filesnpm run electron-build- Build complete Electron appnpm run dist- Create distributable packages
npm run dist
# Creates .dmg file in release/ foldernpm run dist
# Creates .exe installer in release/ foldernpm run dist
# Creates AppImage in release/ folder- Context Isolation: Renderer process cannot access Node.js APIs directly
- Secure IPC: Communication between processes through preload script
- File Dialog Security: File operations handled securely through main process
- Modify CSS files in
src/components/for component-specific styles - Update
src/App.cssfor global app styling - The app uses a modern gradient design that can be easily customized
- Add new profile fields in
src/types.ts - Extend the UI components in
src/components/ - Add new Electron features in
electron/main.ts
-
Port 5173 already in use
- Kill the process using the port or change it in
vite.config.ts
- Kill the process using the port or change it in
-
Electron build fails
- Ensure all dependencies are installed:
npm install - Check TypeScript compilation:
npm run build:electron
- Ensure all dependencies are installed:
-
App doesn't start
- Check console for errors
- Ensure both Vite dev server and Electron are running
- Use
npm run electron-devfor development with hot reload - Check Electron DevTools for debugging
- Monitor the terminal for build and runtime errors
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the ISC License.
For issues and questions:
- Check the troubleshooting section
- Review the console logs
- Open an issue on GitHub
Built with ❤️ using Electron + React