A modern, comprehensive job application management platform that streamlines your job search. Track applications, manage professional profiles, and organize your career journey with an intuitive, responsive interface.
Experience the full application deployed on Vercel with Firebase backend integration.
- Next.js 15 - React framework with App Router and Turbopack
- React 19 - Latest React with concurrent features
- TypeScript - Full type safety throughout the application
- Tailwind CSS 4 - Modern utility-first CSS framework
- shadcn/ui - Beautifully designed, accessible components
- Radix UI - Unstyled, accessible UI primitives
- Lucide React - Consistent, beautiful icon library
- Tailwind CSS Animations - Smooth CSS-based transitions
- Class Variance Authority - Type-safe component variants
- Firebase - Complete backend-as-a-service platform
- Firestore - NoSQL database for real-time data synchronization
- Firebase Auth - Secure user authentication and session management
- Firebase Storage - Cloud file storage for resumes and images
- Firebase Cloud Functions - Serverless backend functions for AI analysis
- Google Gemini AI - Advanced AI integration for job description analysis
- Real-time Token Tracking - Live monitoring of AI API usage with 98.4% accuracy
- React Context - Global state management for jobs, profiles, and auth
- Custom Hooks - Reusable logic for data fetching and form handling
- Local Storage - Client-side persistence for UI preferences
- Real-time Updates - Live data synchronization across devices
- ESLint - Advanced linting with TypeScript, React, and accessibility rules
- Prettier - Consistent code formatting across the project
- Husky - Git hooks for pre-commit quality checks
- lint-staged - Optimized linting on staged files only
- TypeScript - Strict type checking and IntelliSense support
-
Clone the repository
git clone <repository-url> cd applyo
-
Install dependencies
npm install
-
Set up environment variables Create a
.env.localfile in the root directory:NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
-
Run the development server
npm run dev
-
Open your browser Navigate to http://localhost:3000
| Command | Description |
|---|---|
npm run dev |
Start development server with Turbopack |
npm run build |
Build the application for production |
npm run start |
Start the production server |
npm run lint |
Run ESLint to check for code issues |
npm run lint:fix |
Run ESLint and automatically fix issues |
npm run format |
Format all files with Prettier |
npm run format:check |
Check if files are formatted correctly |
npm run type-check |
Run TypeScript type checking |
npm run check-all |
Run type-check, lint, and format-check together |
- Create a Firebase project at Firebase Console
- Enable Authentication with Email/Password provider
- Create a Firestore database
- Set up Firebase Storage
- Configure security rules (see below)
- Copy your Firebase configuration to
.env.local
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Job applications - users can only access their own jobs
match /jobs/{jobId} {
allow create: if request.auth != null;
allow read, update, delete: if request.auth != null && resource.data.userId == request.auth.uid;
}
// Resumes - users can only access their own resumes
match /resumes/{resumeId} {
allow create: if request.auth != null;
allow read, update, delete: if request.auth != null && resource.data.userId == request.auth.uid;
}
// Profiles - users can only access their own profiles
match /profiles/{profileId} {
allow create: if request.auth != null;
allow read, update, delete: if request.auth != null && resource.data.userId == request.auth.uid;
}
// User profiles - users can only access their own profile
match /userProfiles/{profileId} {
allow create: if request.auth != null;
allow read, update, delete: if request.auth != null && resource.data.userId == request.auth.uid;
}
// Global token usage tracking - read-only for authenticated users
match /global/usage {
allow read: if request.auth != null;
allow write: if false; // Only Cloud Functions can write
}
}
}rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
// Users can only upload and access their own files
match /resumes/{userId}/{allPaths=**} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
match /profile-images/{userId}/{allPaths=**} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}src/
βββ app/ # Next.js App Router pages
β βββ ai-analysis/ # AI-powered job description analysis
β β βββ components/ # Analysis-specific components
β βββ applications/ # Job application management
β β βββ components/ # Application-specific components
β βββ dashboard/ # Main dashboard with overview
β β βββ components/ # Dashboard-specific components
β β βββ hooks/ # Dashboard-specific hooks
β βββ login/ # User authentication
β βββ profile/ # Complete profile management
β β βββ components/ # Profile-specific components
β βββ signup/ # User registration
βββ components/ # Reusable UI components
β βββ application-status/ # Application status components
β β βββ hooks/ # Status-related hooks
β βββ applications/ # Reusable application components
β βββ auth/ # Authentication components
β βββ icons/ # Custom icon components
β βββ layouts/ # Layout components
β βββ profile/ # Reusable profile components
β βββ ui/ # Base UI components (shadcn/ui)
βββ contexts/ # React Context providers
βββ firebase/ # Firebase configuration and services
β βββ services/ # Firebase service layer
βββ hooks/ # Custom React hooks
βββ lib/ # Utility functions and shared code
β βββ constants/ # Application constants
β βββ types/ # Type definitions
β βββ utils/ # Specialized utility modules
βββ types/ # Global TypeScript type definitions
scripts/ # Deployment and utility scripts
- Node.js 18+
- npm or yarn
- Firebase project with Firestore and Storage enabled
- Clone the repository and install dependencies
- Set up your Firebase project and configure environment variables
- Run the development server
- Open http://localhost:3000 in your browser
- 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
This project is licensed under the MIT License - see the LICENSE file for details.