Skip to content

Repository files navigation

# Workly - Job Posting & Matching App A React Native mobile application that allows users to post and find jobs with AI-powered matching. The app supports one-time, part-time, and full-time jobs ranging from simple tasks like lawn mowing to complex professional work like software development. ## Features ### 🏠 Home Screen - **AI-Powered Job Recommendations**: Personalized job matches based on user skills, experience, and interests - **Recent Jobs**: Latest job postings from the platform - **Quick Actions**: Easy access to post jobs or browse all opportunities - **Statistics Dashboard**: Overview of job matches, new jobs, and available categories ### 🔍 Browse Jobs - **Advanced Search**: Search jobs by title, description, category, or skills - **Smart Filtering**: Filter by job category, type, complexity level, location, and budget - **Real-time Results**: Instant filtering and search results - **Job Cards**: Clean, informative job listings with key details ### ➕ Post Job - **Comprehensive Form**: Detailed job posting form with all necessary fields - **Job Categories**: 30+ categories from Technology to Gardening - **Job Types**: One-time, Part-time, Full-time, Contract, Internship - **Complexity Levels**: Beginner, Intermediate, Advanced, Expert - **Location Options**: On-site or remote work support - **Budget Range**: Flexible pricing with min/max budget options ### 👤 Profile - **User Dashboard**: Personal profile with skills, experience, and interests - **Job History**: Track posted jobs and applications - **Statistics**: Rating, completed jobs, and posted jobs count - **Application Status**: Monitor application progress and responses ## AI Matching Algorithm The app includes a sophisticated matching system that considers: - **Skills Matching**: Direct skill alignment between user and job requirements - **Location Compatibility**: Remote work options and geographic proximity - **Experience Level**: User rating and completed jobs history - **Interest Alignment**: Category preferences and user interests - **Match Scoring**: Percentage-based match scores with detailed reasoning ## Firebase Integration The app uses Firebase Firestore as the backend database with the following collections: - **users**: User profiles, skills, experience, and ratings - **jobs**: Job postings with all details and requirements - **applications**: Job applications with status tracking - **jobMatches**: AI-generated job matches with scores ### Firebase Setup 1. **Install Dependencies** ```bash npm install ``` 2. **Setup Firebase** ```bash npm run setup-firebase ``` 3. **Configure Firebase** - Go to [Firebase Console](https://console.firebase.google.com/) - Create a new project or select existing one - Enable Firestore Database - Copy your Firebase config to `config/firebase.ts` 4. **Seed Database** (Optional) ```bash npm run seed-database ``` 5. **Start the App** ```bash npm start ``` ### Firebase Configuration Update `config/firebase.ts` with your Firebase project credentials: ```typescript const firebaseConfig = { apiKey: "your-api-key", authDomain: "your-project-id.firebaseapp.com", projectId: "your-project-id", storageBucket: "your-project-id.appspot.com", messagingSenderId: "your-messaging-sender-id", appId: "your-app-id" }; ``` ### Database Management - **Seed Database**: `npm run seed-database` - Populates with sample data - **Clear Database**: `npm run clear-database` - Removes all data (development only) ## Technical Stack - **Framework**: React Native with Expo - **Backend**: Firebase Firestore - **Navigation**: Expo Router with tab-based navigation - **UI Components**: Custom themed components with dark/light mode support - **Type Safety**: Full TypeScript implementation - **Styling**: React Native StyleSheet with theme-aware colors ## Data Models ### Job - Title, description, category, type, complexity - Budget range and location details - Required skills and requirements - Status tracking and applicant management ### User - Profile information and contact details - Skills, experience, and interests - Rating system and job history - Location preferences ### Application - Cover letter and proposed terms - Status tracking (Pending, Accepted, Rejected, Withdrawn) - Rate proposals and estimated duration ## Getting Started 1. **Install Dependencies** ```bash npm install ``` 2. **Setup Firebase** ```bash npm run setup-firebase ``` 3. **Configure Firebase** - Follow the setup instructions - Update `config/firebase.ts` with your credentials 4. **Seed Database** (Optional) ```bash npm run seed-database ``` 5. **Start Development Server** ```bash npm start ``` 6. **Run on Device/Simulator** ```bash # iOS npm run ios # Android npm run android # Web npm run web ``` ## Project Structure ``` workly/ ├── app/ # Expo Router screens │ ├── (tabs)/ # Tab navigation screens │ │ ├── index.tsx # Home screen │ │ ├── browse.tsx # Job browsing │ │ ├── post.tsx # Job posting form │ │ └── profile.tsx # User profile ├── components/ # Reusable UI components │ ├── JobCard.tsx # Job listing component │ ├── SearchAndFilter.tsx # Search and filter UI │ └── ... # Other components ├── services/ # Data and business logic │ ├── firebaseService.ts # Firebase database operations │ ├── databaseSeeder.ts # Database seeding utility │ └── mockData.ts # Mock data (fallback) ├── config/ # Configuration files │ └── firebase.ts # Firebase configuration ├── types/ # TypeScript type definitions │ └── index.ts # App-wide types and interfaces └── scripts/ # Utility scripts └── setupFirebase.js # Firebase setup guide ``` ## Firebase Collections ### users ```typescript { id: string; name: string; email: string; skills: string[]; experience: string; interests: string[]; rating: number; completedJobs: number; location: { city: string; state: string; zipCode: string; }; createdAt: Date; } ``` ### jobs ```typescript { id: string; title: string; description: string; category: JobCategory; type: JobType; complexity: JobComplexity; budget: { min: number; max: number; currency: string; }; location: { city: string; state: string; zipCode: string; isRemote: boolean; }; requirements: string[]; skills: string[]; postedBy: string; status: JobStatus; applicants: string[]; createdAt: Date; updatedAt: Date; } ``` ### applications ```typescript { id: string; jobId: string; userId: string; coverLetter: string; proposedRate?: number; estimatedDuration?: string; status: ApplicationStatus; createdAt: Date; } ``` ### jobMatches ```typescript { id: string; jobId: string; userId: string; matchScore: number; reasons: string[]; createdAt: Date; } ``` ## Security Rules Set up Firestore security rules for production: ```javascript rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // Users can read/write their own data match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; } // Anyone can read jobs, authenticated users can create match /jobs/{jobId} { allow read: if true; allow create: if request.auth != null; allow update, delete: if request.auth != null && resource.data.postedBy == request.auth.uid; } // Users can manage their own applications match /applications/{applicationId} { allow read, write: if request.auth != null && (resource.data.userId == request.auth.uid || resource.data.jobId in get(/databases/$(database)/documents/jobs/$(resource.data.jobId)).data.postedBy); } // Job matches are read-only for users match /jobMatches/{matchId} { allow read: if request.auth != null && resource.data.userId == request.auth.uid; allow write: if false; // Only system can create matches } } } ``` ## Future Enhancements - **Authentication**: Firebase Auth integration for secure user management - **Real-time Updates**: Live job notifications and application updates - **Push Notifications**: Job alerts and application status updates - **Advanced AI**: Machine learning for better job matching - **Reviews & Ratings**: User feedback system - **Job Scheduling**: Calendar integration for job management - **Payment Integration**: Secure payment processing - **File Uploads**: Resume and portfolio attachments - **Chat System**: Communication between job posters and applicants ## Contributing This is a demonstration project showcasing a complete job posting and matching application with Firebase integration. The code is structured to be easily extensible and ready for production deployment. ## License This project is for demonstration purposes. Feel free to use as a reference for your own job posting applications. ## Join the community - [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides). - [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web. - [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. - [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. # workly # workly

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages