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
You can’t perform that action at this time.