AI Powered job seeking app
File Structure for Backend and Frontend:
/hackathon-project
├── backend
│   ├── app.py
│   ├── config.py
│   ├── models.py
│   ├── routes.py
│   ├── services
│   │   ├── nlp_service.py
│   │   ├── auth_service.py
│   │   └── chatbot_service.py
│   ├── database
│   │   └── db_init.py
│   ├── requirements.txt
└── frontend
    ├── public
    │   └── index.html
    ├── src
    │   ├── components
    │   │   ├── JobMatch.js
    │   │   ├── ChatBot.js
    │   │   └── Dashboard.js
    │   ├── App.js
    │   ├── index.js
    └── package.json
Backend Code (Flask + Python)
  
  
  app.py
from flask import Flask
from routes import auth_blueprint, nlp_blueprint
from database.db_init.py import init_db
app = Flask(__name__)
# Initialize database
init_db(app)
# Register routes
app.register_blueprint(auth_blueprint)
app.register_blueprint(nlp_blueprint)
if __name__ == '__main__':
    app.run(debug=True)
  
  
  config.py
import os
class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'supersecretkey'
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///site.db'
    SQLALCHEMY_TRACK_MODIFICATIONS = False
  
  
  models.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(150), unique=True, nullable=False)
    email = db.Column(db.String(150), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
class Job(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(150), nullable=False)
    description = db.Column(db.Text, nullable=False)
  
  
  routes.py
from flask import Blueprint, jsonify, request
from services.nlp_service import classify_job
from services.auth_service import login_user
auth_blueprint = Blueprint('auth', __name__)
nlp_blueprint = Blueprint('nlp', __name__)
@auth_blueprint.route('/login', methods=['POST'])
def login():
    data = request.json
    return login_user(data['username'], data['password'])
@nlp_blueprint.route('/match', methods=['POST'])
def match():
    job_desc = request.json.get('description')
    return classify_job(job_desc)
  
  
  nlp_service.py
import requests
def classify_job(description):
    url = 'https://tabiya-api.com/classify'
    response = requests.post(url, json={'description': description})
    return response.json()
  
  
  auth_service.py
from models import User
def login_user(username, password):
    user = User.query.filter_by(username=username).first()
    if user and user.password == password:
        return {'message': 'Login successful'}, 200
    return {'message': 'Invalid credentials'}, 401
  
  
  database/db_init.py
from flask_sqlalchemy import SQLAlchemy
from models import db
def init_db(app):
    app.config.from_object('config.Config')
    db.init_app(app)
    with app.app_context():
        db.create_all()
  
  
  requirements.txt
Flask==2.0.1
Flask-SQLAlchemy==2.5.1
requests==2.26.0
Frontend Code (React + JavaScript)
  
  
  src/App.js
import React from 'react';
import JobMatch from './components/JobMatch';
import ChatBot from './components/ChatBot';
import Dashboard from './components/Dashboard';
function App() {
  return (
    <div>
      <h1>Hackathon Project</h1>
      <JobMatch />
      <ChatBot />
      <Dashboard />
    </div>
  );
}
export default App;
  
  
  src/components/JobMatch.js
import React, { useState } from 'react';
import axios from 'axios';
const JobMatch = () => {
  const [description, setDescription] = useState('');
  const [result, setResult] = useState(null);
  const handleSubmit = async () => {
    const response = await axios.post('/match', { description });
    setResult(response.data);
  };
  return (
    <div>
      <h2>Job Matcher</h2>
      <textarea onChange={(e) => setDescription(e.target.value)} />
      <button onClick={handleSubmit}>Match Job</button>
      {result && <div>{JSON.stringify(result)}</div>}
    </div>
  );
};
export default JobMatch;
  
  
  src/components/ChatBot.js
import React from 'react';
const ChatBot = () => {
  return (
    <div>
      <h2>AI Chatbot</h2>
      <p>Chatbot will be implemented here...</p>
    </div>
  );
};
export default ChatBot;
  
  
  src/components/Dashboard.js
import React from 'react';
const Dashboard = () => {
  return (
    <div>
      <h2>Entrepreneurship Dashboard</h2>
      <p>Track your progress and business plans here...</p>
    </div>
  );
};
export default Dashboard;
Run Instructions:
- 
Backend: - Install dependencies: pip install -r requirements.txt.
- Start the server: python app.py.
 
- Install dependencies: 
- 
Frontend: - Navigate to the frontendfolder.
- Install dependencies: npm install.
- Start the frontend: npm start.
 
 
- Navigate to the 
Updated Backend with Error Handling and Real-time Job Matching
1. Error Handling in Backend Services
Let's first add proper error handling to the backend services, ensuring the app returns meaningful messages instead of crashing on exceptions.
  
  
  services/nlp_service.py (Error handling added)
import requests
def classify_job(description):
    try:
        url = 'https://tabiya-api.com/classify'
        response = requests.post(url, json={'description': description})
        response.raise_for_status()  # Raises HTTPError for bad responses
        return response.json()
    except requests.exceptions.HTTPError as http_err:
        return {"error": f"HTTP error occurred: {http_err}"}, 500
    except Exception as err:
        return {"error": f"An error occurred: {err}"}, 500
  
  
  auth_service.py (Error handling added)
from models import User
def login_user(username, password):
    try:
        user = User.query.filter_by(username=username).first()
        if user and user.password == password:
            return {'message': 'Login successful'}, 200
        return {'message': 'Invalid credentials'}, 401
    except Exception as err:
        return {"error": f"An error occurred: {err}"}, 500
2. Real-time Job Matching with WebSockets
To implement real-time job matching, we can use Flask-SocketIO on the backend and socket.io on the frontend for real-time communication.
Add WebSocket Support to Backend
Install Flask-SocketIO:
pip install flask-socketio
  
  
  Update app.py to support SocketIO:
from flask import Flask
from flask_socketio import SocketIO, emit
from routes import auth_blueprint, nlp_blueprint
from database.db_init import init_db
app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="*")  # Enable WebSockets
# Initialize database
init_db(app)
# Register routes
app.register_blueprint(auth_blueprint)
app.register_blueprint(nlp_blueprint)
# Real-time job matching with WebSockets
@socketio.on('match_job')
def handle_job_matching(data):
    job_desc = data.get('description')
    if not job_desc:
        emit('job_match_result', {'error': 'Job description is required'}, broadcast=True)
        return
    result = classify_job(job_desc)
    emit('job_match_result', result, broadcast=True)  # Broadcast result
if __name__ == '__main__':
    socketio.run(app, debug=True)
3. Frontend Real-time Integration
  
  
  Install socket.io-client for real-time communication:
npm install socket.io-client
  
  
  Update JobMatch.js for real-time communication:
import React, { useState, useEffect } from 'react';
import io from 'socket.io-client';
const socket = io('http://localhost:5000');  // Backend WebSocket URL
const JobMatch = () => {
  const [description, setDescription] = useState('');
  const [result, setResult] = useState(null);
  useEffect(() => {
    // Listen for real-time job match results from server
    socket.on('job_match_result', (data) => {
      setResult(data);
    });
  }, []);
  const handleSubmit = () => {
    // Emit job description to backend for real-time matching
    socket.emit('match_job', { description });
  };
  return (
    <div>
      <h2>Real-time Job Matcher</h2>
      <textarea onChange={(e) => setDescription(e.target.value)} />
      <button onClick={handleSubmit}>Match Job</button>
      {result && <div>{JSON.stringify(result)}</div>}
    </div>
  );
};
export default JobMatch;
Updated Structure:
/hackathon-project
├── backend
│   ├── app.py                  # Flask backend with SocketIO
│   ├── config.py               # Configs for database, secrets
│   ├── models.py               # Database models
│   ├── routes.py               # API routes
│   ├── services
│   │   ├── nlp_service.py      # NLP matching logic with error handling
│   │   ├── auth_service.py     # Authentication logic with error handling
│   ├── database
│   │   └── db_init.py          # Database initialization
│   ├── requirements.txt        # Backend dependencies
└── frontend
    ├── src
    │   ├── components
    │   │   ├── JobMatch.js     # Frontend with real-time job matching
    │   └── App.js              # Main frontend app
    ├── package.json            # Frontend dependencies
Instructions to Run:
- 
Backend: - Install dependencies: pip install -r requirements.txt
- Run the backend: python app.py(now with WebSockets support)
 
- Install dependencies: 
- 
Frontend: - Navigate to the frontendfolder.
- Install dependencies: npm install.
- Run the frontend: npm start.
 
- Navigate to the 
 

 
    
Top comments (0)