diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..8b2be385d --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# Environments +.env +.venv/ +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Node +node_modules/ +npm-debug.log +yarn-error.log +package-lock.json + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# IDEs and Editors +.vscode/ +.idea/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db diff --git a/App/App.py b/App/App.py deleted file mode 100644 index 21e5c8e35..000000000 --- a/App/App.py +++ /dev/null @@ -1,791 +0,0 @@ -# Developed by dnoobnerd [https://dnoobnerd.netlify.app] Made with Streamlit - - -###### Packages Used ###### -import streamlit as st # core package used in this project -import pandas as pd -import base64, random -import time,datetime -import pymysql -import os -import socket -import platform -import geocoder -import secrets -import io,random -import plotly.express as px # to create visualisations at the admin session -import plotly.graph_objects as go -from geopy.geocoders import Nominatim -# libraries used to parse the pdf files -from pyresparser import ResumeParser -from pdfminer3.layout import LAParams, LTTextBox -from pdfminer3.pdfpage import PDFPage -from pdfminer3.pdfinterp import PDFResourceManager -from pdfminer3.pdfinterp import PDFPageInterpreter -from pdfminer3.converter import TextConverter -from streamlit_tags import st_tags -from PIL import Image -# pre stored data for prediction purposes -from Courses import ds_course,web_course,android_course,ios_course,uiux_course,resume_videos,interview_videos -import nltk -nltk.download('stopwords') - - -###### Preprocessing functions ###### - - -# Generates a link allowing the data in a given panda dataframe to be downloaded in csv format -def get_csv_download_link(df,filename,text): - csv = df.to_csv(index=False) - ## bytes conversions - b64 = base64.b64encode(csv.encode()).decode() - href = f'{text}' - return href - - -# Reads Pdf file and check_extractable -def pdf_reader(file): - resource_manager = PDFResourceManager() - fake_file_handle = io.StringIO() - converter = TextConverter(resource_manager, fake_file_handle, laparams=LAParams()) - page_interpreter = PDFPageInterpreter(resource_manager, converter) - with open(file, 'rb') as fh: - for page in PDFPage.get_pages(fh, - caching=True, - check_extractable=True): - page_interpreter.process_page(page) - print(page) - text = fake_file_handle.getvalue() - - ## close open handles - converter.close() - fake_file_handle.close() - return text - - -# show uploaded file path to view pdf_display -def show_pdf(file_path): - with open(file_path, "rb") as f: - base64_pdf = base64.b64encode(f.read()).decode('utf-8') - pdf_display = F'' - st.markdown(pdf_display, unsafe_allow_html=True) - - -# course recommendations which has data already loaded from Courses.py -def course_recommender(course_list): - st.subheader("**Courses & Certificates Recommendations 👨‍🎓**") - c = 0 - rec_course = [] - ## slider to choose from range 1-10 - no_of_reco = st.slider('Choose Number of Course Recommendations:', 1, 10, 5) - random.shuffle(course_list) - for c_name, c_link in course_list: - c += 1 - st.markdown(f"({c}) [{c_name}]({c_link})") - rec_course.append(c_name) - if c == no_of_reco: - break - return rec_course - - -###### Database Stuffs ###### - - -# sql connector -connection = pymysql.connect(host='localhost',user='root',password='root@MySQL4admin',db='cv') -cursor = connection.cursor() - - -# inserting miscellaneous data, fetched results, prediction and recommendation into user_data table -def insert_data(sec_token,ip_add,host_name,dev_user,os_name_ver,latlong,city,state,country,act_name,act_mail,act_mob,name,email,res_score,timestamp,no_of_pages,reco_field,cand_level,skills,recommended_skills,courses,pdf_name): - DB_table_name = 'user_data' - insert_sql = "insert into " + DB_table_name + """ - values (0,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""" - rec_values = (str(sec_token),str(ip_add),host_name,dev_user,os_name_ver,str(latlong),city,state,country,act_name,act_mail,act_mob,name,email,str(res_score),timestamp,str(no_of_pages),reco_field,cand_level,skills,recommended_skills,courses,pdf_name) - cursor.execute(insert_sql, rec_values) - connection.commit() - - -# inserting feedback data into user_feedback table -def insertf_data(feed_name,feed_email,feed_score,comments,Timestamp): - DBf_table_name = 'user_feedback' - insertfeed_sql = "insert into " + DBf_table_name + """ - values (0,%s,%s,%s,%s,%s)""" - rec_values = (feed_name, feed_email, feed_score, comments, Timestamp) - cursor.execute(insertfeed_sql, rec_values) - connection.commit() - - -###### Setting Page Configuration (favicon, Logo, Title) ###### - - -st.set_page_config( - page_title="AI Resume Analyzer", - page_icon='./Logo/recommend.png', -) - - -###### Main function run() ###### - - -def run(): - - # (Logo, Heading, Sidebar etc) - img = Image.open('./Logo/RESUM.png') - st.image(img) - st.sidebar.markdown("# Choose Something...") - activities = ["User", "Feedback", "About", "Admin"] - choice = st.sidebar.selectbox("Choose among the given options:", activities) - link = 'Built with 🤍 by Deepak Padhi' - st.sidebar.markdown(link, unsafe_allow_html=True) - st.sidebar.markdown(''' - - - - - - -

Visitors web counter

- - ''', unsafe_allow_html=True) - - ###### Creating Database and Table ###### - - - # Create the DB - db_sql = """CREATE DATABASE IF NOT EXISTS CV;""" - cursor.execute(db_sql) - - - # Create table user_data and user_feedback - DB_table_name = 'user_data' - table_sql = "CREATE TABLE IF NOT EXISTS " + DB_table_name + """ - (ID INT NOT NULL AUTO_INCREMENT, - sec_token varchar(20) NOT NULL, - ip_add varchar(50) NULL, - host_name varchar(50) NULL, - dev_user varchar(50) NULL, - os_name_ver varchar(50) NULL, - latlong varchar(50) NULL, - city varchar(50) NULL, - state varchar(50) NULL, - country varchar(50) NULL, - act_name varchar(50) NOT NULL, - act_mail varchar(50) NOT NULL, - act_mob varchar(20) NOT NULL, - Name varchar(500) NOT NULL, - Email_ID VARCHAR(500) NOT NULL, - resume_score VARCHAR(8) NOT NULL, - Timestamp VARCHAR(50) NOT NULL, - Page_no VARCHAR(5) NOT NULL, - Predicted_Field BLOB NOT NULL, - User_level BLOB NOT NULL, - Actual_skills BLOB NOT NULL, - Recommended_skills BLOB NOT NULL, - Recommended_courses BLOB NOT NULL, - pdf_name varchar(50) NOT NULL, - PRIMARY KEY (ID) - ); - """ - cursor.execute(table_sql) - - - DBf_table_name = 'user_feedback' - tablef_sql = "CREATE TABLE IF NOT EXISTS " + DBf_table_name + """ - (ID INT NOT NULL AUTO_INCREMENT, - feed_name varchar(50) NOT NULL, - feed_email VARCHAR(50) NOT NULL, - feed_score VARCHAR(5) NOT NULL, - comments VARCHAR(100) NULL, - Timestamp VARCHAR(50) NOT NULL, - PRIMARY KEY (ID) - ); - """ - cursor.execute(tablef_sql) - - - ###### CODE FOR CLIENT SIDE (USER) ###### - - if choice == 'User': - - # Collecting Miscellaneous Information - act_name = st.text_input('Name*') - act_mail = st.text_input('Mail*') - act_mob = st.text_input('Mobile Number*') - sec_token = secrets.token_urlsafe(12) - host_name = socket.gethostname() - ip_add = socket.gethostbyname(host_name) - dev_user = os.getlogin() - os_name_ver = platform.system() + " " + platform.release() - g = geocoder.ip('me') - latlong = g.latlng - geolocator = Nominatim(user_agent="http") - location = geolocator.reverse(latlong, language='en') - address = location.raw['address'] - cityy = address.get('city', '') - statee = address.get('state', '') - countryy = address.get('country', '') - city = cityy - state = statee - country = countryy - - - # Upload Resume - st.markdown('''
Upload Your Resume, And Get Smart Recommendations
''',unsafe_allow_html=True) - - ## file upload in pdf format - pdf_file = st.file_uploader("Choose your Resume", type=["pdf"]) - if pdf_file is not None: - with st.spinner('Hang On While We Cook Magic For You...'): - time.sleep(4) - - ### saving the uploaded resume to folder - save_image_path = './Uploaded_Resumes/'+pdf_file.name - pdf_name = pdf_file.name - with open(save_image_path, "wb") as f: - f.write(pdf_file.getbuffer()) - show_pdf(save_image_path) - - ### parsing and extracting whole resume - resume_data = ResumeParser(save_image_path).get_extracted_data() - if resume_data: - - ## Get the whole resume data into resume_text - resume_text = pdf_reader(save_image_path) - - ## Showing Analyzed data from (resume_data) - st.header("**Resume Analysis 🤘**") - st.success("Hello "+ resume_data['name']) - st.subheader("**Your Basic info 👀**") - try: - st.text('Name: '+resume_data['name']) - st.text('Email: ' + resume_data['email']) - st.text('Contact: ' + resume_data['mobile_number']) - st.text('Degree: '+str(resume_data['degree'])) - st.text('Resume pages: '+str(resume_data['no_of_pages'])) - - except: - pass - ## Predicting Candidate Experience Level - - ### Trying with different possibilities - cand_level = '' - if resume_data['no_of_pages'] < 1: - cand_level = "NA" - st.markdown( '''

You are at Fresher level!

''',unsafe_allow_html=True) - - #### if internship then intermediate level - elif 'INTERNSHIP' in resume_text: - cand_level = "Intermediate" - st.markdown('''

You are at intermediate level!

''',unsafe_allow_html=True) - elif 'INTERNSHIPS' in resume_text: - cand_level = "Intermediate" - st.markdown('''

You are at intermediate level!

''',unsafe_allow_html=True) - elif 'Internship' in resume_text: - cand_level = "Intermediate" - st.markdown('''

You are at intermediate level!

''',unsafe_allow_html=True) - elif 'Internships' in resume_text: - cand_level = "Intermediate" - st.markdown('''

You are at intermediate level!

''',unsafe_allow_html=True) - - #### if Work Experience/Experience then Experience level - elif 'EXPERIENCE' in resume_text: - cand_level = "Experienced" - st.markdown('''

You are at experience level!''',unsafe_allow_html=True) - elif 'WORK EXPERIENCE' in resume_text: - cand_level = "Experienced" - st.markdown('''

You are at experience level!''',unsafe_allow_html=True) - elif 'Experience' in resume_text: - cand_level = "Experienced" - st.markdown('''

You are at experience level!''',unsafe_allow_html=True) - elif 'Work Experience' in resume_text: - cand_level = "Experienced" - st.markdown('''

You are at experience level!''',unsafe_allow_html=True) - else: - cand_level = "Fresher" - st.markdown('''

You are at Fresher level!!''',unsafe_allow_html=True) - - - ## Skills Analyzing and Recommendation - st.subheader("**Skills Recommendation 💡**") - - ### Current Analyzed Skills - keywords = st_tags(label='### Your Current Skills', - text='See our skills recommendation below',value=resume_data['skills'],key = '1 ') - - ### Keywords for Recommendations - ds_keyword = ['tensorflow','keras','pytorch','machine learning','deep Learning','flask','streamlit'] - web_keyword = ['react', 'django', 'node jS', 'react js', 'php', 'laravel', 'magento', 'wordpress','javascript', 'angular js', 'C#', 'Asp.net', 'flask'] - android_keyword = ['android','android development','flutter','kotlin','xml','kivy'] - ios_keyword = ['ios','ios development','swift','cocoa','cocoa touch','xcode'] - uiux_keyword = ['ux','adobe xd','figma','zeplin','balsamiq','ui','prototyping','wireframes','storyframes','adobe photoshop','photoshop','editing','adobe illustrator','illustrator','adobe after effects','after effects','adobe premier pro','premier pro','adobe indesign','indesign','wireframe','solid','grasp','user research','user experience'] - n_any = ['english','communication','writing', 'microsoft office', 'leadership','customer management', 'social media'] - ### Skill Recommendations Starts - recommended_skills = [] - reco_field = '' - rec_course = '' - - ### condition starts to check skills from keywords and predict field - for i in resume_data['skills']: - - #### Data science recommendation - if i.lower() in ds_keyword: - print(i.lower()) - reco_field = 'Data Science' - st.success("** Our analysis says you are looking for Data Science Jobs.**") - recommended_skills = ['Data Visualization','Predictive Analysis','Statistical Modeling','Data Mining','Clustering & Classification','Data Analytics','Quantitative Analysis','Web Scraping','ML Algorithms','Keras','Pytorch','Probability','Scikit-learn','Tensorflow',"Flask",'Streamlit'] - recommended_keywords = st_tags(label='### Recommended skills for you.', - text='Recommended skills generated from System',value=recommended_skills,key = '2') - st.markdown('''

Adding this skills to resume will boost🚀 the chances of getting a Job
''',unsafe_allow_html=True) - # course recommendation - rec_course = course_recommender(ds_course) - break - - #### Web development recommendation - elif i.lower() in web_keyword: - print(i.lower()) - reco_field = 'Web Development' - st.success("** Our analysis says you are looking for Web Development Jobs **") - recommended_skills = ['React','Django','Node JS','React JS','php','laravel','Magento','wordpress','Javascript','Angular JS','c#','Flask','SDK'] - recommended_keywords = st_tags(label='### Recommended skills for you.', - text='Recommended skills generated from System',value=recommended_skills,key = '3') - st.markdown('''
Adding this skills to resume will boost🚀 the chances of getting a Job💼
''',unsafe_allow_html=True) - # course recommendation - rec_course = course_recommender(web_course) - break - - #### Android App Development - elif i.lower() in android_keyword: - print(i.lower()) - reco_field = 'Android Development' - st.success("** Our analysis says you are looking for Android App Development Jobs **") - recommended_skills = ['Android','Android development','Flutter','Kotlin','XML','Java','Kivy','GIT','SDK','SQLite'] - recommended_keywords = st_tags(label='### Recommended skills for you.', - text='Recommended skills generated from System',value=recommended_skills,key = '4') - st.markdown('''
Adding this skills to resume will boost🚀 the chances of getting a Job💼
''',unsafe_allow_html=True) - # course recommendation - rec_course = course_recommender(android_course) - break - - #### IOS App Development - elif i.lower() in ios_keyword: - print(i.lower()) - reco_field = 'IOS Development' - st.success("** Our analysis says you are looking for IOS App Development Jobs **") - recommended_skills = ['IOS','IOS Development','Swift','Cocoa','Cocoa Touch','Xcode','Objective-C','SQLite','Plist','StoreKit',"UI-Kit",'AV Foundation','Auto-Layout'] - recommended_keywords = st_tags(label='### Recommended skills for you.', - text='Recommended skills generated from System',value=recommended_skills,key = '5') - st.markdown('''
Adding this skills to resume will boost🚀 the chances of getting a Job💼
''',unsafe_allow_html=True) - # course recommendation - rec_course = course_recommender(ios_course) - break - - #### Ui-UX Recommendation - elif i.lower() in uiux_keyword: - print(i.lower()) - reco_field = 'UI-UX Development' - st.success("** Our analysis says you are looking for UI-UX Development Jobs **") - recommended_skills = ['UI','User Experience','Adobe XD','Figma','Zeplin','Balsamiq','Prototyping','Wireframes','Storyframes','Adobe Photoshop','Editing','Illustrator','After Effects','Premier Pro','Indesign','Wireframe','Solid','Grasp','User Research'] - recommended_keywords = st_tags(label='### Recommended skills for you.', - text='Recommended skills generated from System',value=recommended_skills,key = '6') - st.markdown('''
Adding this skills to resume will boost🚀 the chances of getting a Job💼
''',unsafe_allow_html=True) - # course recommendation - rec_course = course_recommender(uiux_course) - break - - #### For Not Any Recommendations - elif i.lower() in n_any: - print(i.lower()) - reco_field = 'NA' - st.warning("** Currently our tool only predicts and recommends for Data Science, Web, Android, IOS and UI/UX Development**") - recommended_skills = ['No Recommendations'] - recommended_keywords = st_tags(label='### Recommended skills for you.', - text='Currently No Recommendations',value=recommended_skills,key = '6') - st.markdown('''
Maybe Available in Future Updates
''',unsafe_allow_html=True) - # course recommendation - rec_course = "Sorry! Not Available for this Field" - break - - - ## Resume Scorer & Resume Writing Tips - st.subheader("**Resume Tips & Ideas 🥂**") - resume_score = 0 - - ### Predicting Whether these key points are added to the resume - if 'Objective' or 'Summary' in resume_text: - resume_score = resume_score+6 - st.markdown('''
[+] Awesome! You have added Objective/Summary
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add your career objective, it will give your career intension to the Recruiters.
''',unsafe_allow_html=True) - - if 'Education' or 'School' or 'College' in resume_text: - resume_score = resume_score + 12 - st.markdown('''
[+] Awesome! You have added Education Details
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Education. It will give Your Qualification level to the recruiter
''',unsafe_allow_html=True) - - if 'EXPERIENCE' in resume_text: - resume_score = resume_score + 16 - st.markdown('''
[+] Awesome! You have added Experience
''',unsafe_allow_html=True) - elif 'Experience' in resume_text: - resume_score = resume_score + 16 - st.markdown('''
[+] Awesome! You have added Experience
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Experience. It will help you to stand out from crowd
''',unsafe_allow_html=True) - - if 'INTERNSHIPS' in resume_text: - resume_score = resume_score + 6 - st.markdown('''
[+] Awesome! You have added Internships
''',unsafe_allow_html=True) - elif 'INTERNSHIP' in resume_text: - resume_score = resume_score + 6 - st.markdown('''
[+] Awesome! You have added Internships
''',unsafe_allow_html=True) - elif 'Internships' in resume_text: - resume_score = resume_score + 6 - st.markdown('''
[+] Awesome! You have added Internships
''',unsafe_allow_html=True) - elif 'Internship' in resume_text: - resume_score = resume_score + 6 - st.markdown('''
[+] Awesome! You have added Internships
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Internships. It will help you to stand out from crowd
''',unsafe_allow_html=True) - - if 'SKILLS' in resume_text: - resume_score = resume_score + 7 - st.markdown('''
[+] Awesome! You have added Skills
''',unsafe_allow_html=True) - elif 'SKILL' in resume_text: - resume_score = resume_score + 7 - st.markdown('''
[+] Awesome! You have added Skills
''',unsafe_allow_html=True) - elif 'Skills' in resume_text: - resume_score = resume_score + 7 - st.markdown('''
[+] Awesome! You have added Skills
''',unsafe_allow_html=True) - elif 'Skill' in resume_text: - resume_score = resume_score + 7 - st.markdown('''
[+] Awesome! You have added Skills
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Skills. It will help you a lot
''',unsafe_allow_html=True) - - if 'HOBBIES' in resume_text: - resume_score = resume_score + 4 - st.markdown('''
[+] Awesome! You have added your Hobbies
''',unsafe_allow_html=True) - elif 'Hobbies' in resume_text: - resume_score = resume_score + 4 - st.markdown('''
[+] Awesome! You have added your Hobbies
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Hobbies. It will show your personality to the Recruiters and give the assurance that you are fit for this role or not.
''',unsafe_allow_html=True) - - if 'INTERESTS'in resume_text: - resume_score = resume_score + 5 - st.markdown('''
[+] Awesome! You have added your Interest
''',unsafe_allow_html=True) - elif 'Interests'in resume_text: - resume_score = resume_score + 5 - st.markdown('''
[+] Awesome! You have added your Interest
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Interest. It will show your interest other that job.
''',unsafe_allow_html=True) - - if 'ACHIEVEMENTS' in resume_text: - resume_score = resume_score + 13 - st.markdown('''
[+] Awesome! You have added your Achievements
''',unsafe_allow_html=True) - elif 'Achievements' in resume_text: - resume_score = resume_score + 13 - st.markdown('''
[+] Awesome! You have added your Achievements
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Achievements. It will show that you are capable for the required position.
''',unsafe_allow_html=True) - - if 'CERTIFICATIONS' in resume_text: - resume_score = resume_score + 12 - st.markdown('''
[+] Awesome! You have added your Certifications
''',unsafe_allow_html=True) - elif 'Certifications' in resume_text: - resume_score = resume_score + 12 - st.markdown('''
[+] Awesome! You have added your Certifications
''',unsafe_allow_html=True) - elif 'Certification' in resume_text: - resume_score = resume_score + 12 - st.markdown('''
[+] Awesome! You have added your Certifications
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Certifications. It will show that you have done some specialization for the required position.
''',unsafe_allow_html=True) - - if 'PROJECTS' in resume_text: - resume_score = resume_score + 19 - st.markdown('''
[+] Awesome! You have added your Projects
''',unsafe_allow_html=True) - elif 'PROJECT' in resume_text: - resume_score = resume_score + 19 - st.markdown('''
[+] Awesome! You have added your Projects
''',unsafe_allow_html=True) - elif 'Projects' in resume_text: - resume_score = resume_score + 19 - st.markdown('''
[+] Awesome! You have added your Projects
''',unsafe_allow_html=True) - elif 'Project' in resume_text: - resume_score = resume_score + 19 - st.markdown('''
[+] Awesome! You have added your Projects
''',unsafe_allow_html=True) - else: - st.markdown('''
[-] Please add Projects. It will show that you have done work related the required position or not.
''',unsafe_allow_html=True) - - st.subheader("**Resume Score 📝**") - - st.markdown( - """ - """, - unsafe_allow_html=True, - ) - - ### Score Bar - my_bar = st.progress(0) - score = 0 - for percent_complete in range(resume_score): - score +=1 - time.sleep(0.1) - my_bar.progress(percent_complete + 1) - - ### Score - st.success('** Your Resume Writing Score: ' + str(score)+'**') - st.warning("** Note: This score is calculated based on the content that you have in your Resume. **") - - # print(str(sec_token), str(ip_add), (host_name), (dev_user), (os_name_ver), (latlong), (city), (state), (country), (act_name), (act_mail), (act_mob), resume_data['name'], resume_data['email'], str(resume_score), timestamp, str(resume_data['no_of_pages']), reco_field, cand_level, str(resume_data['skills']), str(recommended_skills), str(rec_course), pdf_name) - - - ### Getting Current Date and Time - ts = time.time() - cur_date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d') - cur_time = datetime.datetime.fromtimestamp(ts).strftime('%H:%M:%S') - timestamp = str(cur_date+'_'+cur_time) - - - ## Calling insert_data to add all the data into user_data - insert_data(str(sec_token), str(ip_add), (host_name), (dev_user), (os_name_ver), (latlong), (city), (state), (country), (act_name), (act_mail), (act_mob), resume_data['name'], resume_data['email'], str(resume_score), timestamp, str(resume_data['no_of_pages']), reco_field, cand_level, str(resume_data['skills']), str(recommended_skills), str(rec_course), pdf_name) - - ## Recommending Resume Writing Video - st.header("**Bonus Video for Resume Writing Tips💡**") - resume_vid = random.choice(resume_videos) - st.video(resume_vid) - - ## Recommending Interview Preparation Video - st.header("**Bonus Video for Interview Tips💡**") - interview_vid = random.choice(interview_videos) - st.video(interview_vid) - - ## On Successful Result - st.balloons() - - else: - st.error('Something went wrong..') - - - ###### CODE FOR FEEDBACK SIDE ###### - elif choice == 'Feedback': - - # timestamp - ts = time.time() - cur_date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d') - cur_time = datetime.datetime.fromtimestamp(ts).strftime('%H:%M:%S') - timestamp = str(cur_date+'_'+cur_time) - - # Feedback Form - with st.form("my_form"): - st.write("Feedback form") - feed_name = st.text_input('Name') - feed_email = st.text_input('Email') - feed_score = st.slider('Rate Us From 1 - 5', 1, 5) - comments = st.text_input('Comments') - Timestamp = timestamp - submitted = st.form_submit_button("Submit") - if submitted: - ## Calling insertf_data to add dat into user feedback - insertf_data(feed_name,feed_email,feed_score,comments,Timestamp) - ## Success Message - st.success("Thanks! Your Feedback was recorded.") - ## On Successful Submit - st.balloons() - - - # query to fetch data from user feedback table - query = 'select * from user_feedback' - plotfeed_data = pd.read_sql(query, connection) - - - # fetching feed_score from the query and getting the unique values and total value count - labels = plotfeed_data.feed_score.unique() - values = plotfeed_data.feed_score.value_counts() - - - # plotting pie chart for user ratings - st.subheader("**Past User Rating's**") - fig = px.pie(values=values, names=labels, title="Chart of User Rating Score From 1 - 5", color_discrete_sequence=px.colors.sequential.Aggrnyl) - st.plotly_chart(fig) - - - # Fetching Comment History - cursor.execute('select feed_name, comments from user_feedback') - plfeed_cmt_data = cursor.fetchall() - - st.subheader("**User Comment's**") - dff = pd.DataFrame(plfeed_cmt_data, columns=['User', 'Comment']) - st.dataframe(dff, width=1000) - - - ###### CODE FOR ABOUT PAGE ###### - elif choice == 'About': - - st.subheader("**About The Tool - AI RESUME ANALYZER**") - - st.markdown(''' - -

- A tool which parses information from a resume using natural language processing and finds the keywords, cluster them onto sectors based on their keywords. And lastly show recommendations, predictions, analytics to the applicant based on keyword matching. -

- -

- How to use it: -

- User -
- In the Side Bar choose yourself as user and fill the required fields and upload your resume in pdf format.
- Just sit back and relax our tool will do the magic on it's own.

- Feedback -
- A place where user can suggest some feedback about the tool.

- Admin -
- For login use admin as username and admin@resume-analyzer as password.
- It will load all the required stuffs and perform analysis. -



- -

- Built with 🤍 by - Deepak Padhi through - Dr Bright --(Data Scientist) -

- - ''',unsafe_allow_html=True) - - - ###### CODE FOR ADMIN SIDE (ADMIN) ###### - else: - st.success('Welcome to Admin Side') - - # Admin Login - ad_user = st.text_input("Username") - ad_password = st.text_input("Password", type='password') - - if st.button('Login'): - - ## Credentials - if ad_user == 'admin' and ad_password == 'admin@resume-analyzer': - - ### Fetch miscellaneous data from user_data(table) and convert it into dataframe - cursor.execute('''SELECT ID, ip_add, resume_score, convert(Predicted_Field using utf8), convert(User_level using utf8), city, state, country from user_data''') - datanalys = cursor.fetchall() - plot_data = pd.DataFrame(datanalys, columns=['Idt', 'IP_add', 'resume_score', 'Predicted_Field', 'User_Level', 'City', 'State', 'Country']) - - ### Total Users Count with a Welcome Message - values = plot_data.Idt.count() - st.success("Welcome Deepak ! Total %d " % values + " User's Have Used Our Tool : )") - - ### Fetch user data from user_data(table) and convert it into dataframe - cursor.execute('''SELECT ID, sec_token, ip_add, act_name, act_mail, act_mob, convert(Predicted_Field using utf8), Timestamp, Name, Email_ID, resume_score, Page_no, pdf_name, convert(User_level using utf8), convert(Actual_skills using utf8), convert(Recommended_skills using utf8), convert(Recommended_courses using utf8), city, state, country, latlong, os_name_ver, host_name, dev_user from user_data''') - data = cursor.fetchall() - - st.header("**User's Data**") - df = pd.DataFrame(data, columns=['ID', 'Token', 'IP Address', 'Name', 'Mail', 'Mobile Number', 'Predicted Field', 'Timestamp', - 'Predicted Name', 'Predicted Mail', 'Resume Score', 'Total Page', 'File Name', - 'User Level', 'Actual Skills', 'Recommended Skills', 'Recommended Course', - 'City', 'State', 'Country', 'Lat Long', 'Server OS', 'Server Name', 'Server User',]) - - ### Viewing the dataframe - st.dataframe(df) - - ### Downloading Report of user_data in csv file - st.markdown(get_csv_download_link(df,'User_Data.csv','Download Report'), unsafe_allow_html=True) - - ### Fetch feedback data from user_feedback(table) and convert it into dataframe - cursor.execute('''SELECT * from user_feedback''') - data = cursor.fetchall() - - st.header("**User's Feedback Data**") - df = pd.DataFrame(data, columns=['ID', 'Name', 'Email', 'Feedback Score', 'Comments', 'Timestamp']) - st.dataframe(df) - - ### query to fetch data from user_feedback(table) - query = 'select * from user_feedback' - plotfeed_data = pd.read_sql(query, connection) - - ### Analyzing All the Data's in pie charts - - # fetching feed_score from the query and getting the unique values and total value count - labels = plotfeed_data.feed_score.unique() - values = plotfeed_data.feed_score.value_counts() - - # Pie chart for user ratings - st.subheader("**User Rating's**") - fig = px.pie(values=values, names=labels, title="Chart of User Rating Score From 1 - 5 🤗", color_discrete_sequence=px.colors.sequential.Aggrnyl) - st.plotly_chart(fig) - - # fetching Predicted_Field from the query and getting the unique values and total value count - labels = plot_data.Predicted_Field.unique() - values = plot_data.Predicted_Field.value_counts() - - # Pie chart for predicted field recommendations - st.subheader("**Pie-Chart for Predicted Field Recommendation**") - fig = px.pie(df, values=values, names=labels, title='Predicted Field according to the Skills 👽', color_discrete_sequence=px.colors.sequential.Aggrnyl_r) - st.plotly_chart(fig) - - # fetching User_Level from the query and getting the unique values and total value count - labels = plot_data.User_Level.unique() - values = plot_data.User_Level.value_counts() - - # Pie chart for User's👨‍💻 Experienced Level - st.subheader("**Pie-Chart for User's Experienced Level**") - fig = px.pie(df, values=values, names=labels, title="Pie-Chart 📈 for User's 👨‍💻 Experienced Level", color_discrete_sequence=px.colors.sequential.RdBu) - st.plotly_chart(fig) - - # fetching resume_score from the query and getting the unique values and total value count - labels = plot_data.resume_score.unique() - values = plot_data.resume_score.value_counts() - - # Pie chart for Resume Score - st.subheader("**Pie-Chart for Resume Score**") - fig = px.pie(df, values=values, names=labels, title='From 1 to 100 💯', color_discrete_sequence=px.colors.sequential.Agsunset) - st.plotly_chart(fig) - - # fetching IP_add from the query and getting the unique values and total value count - labels = plot_data.IP_add.unique() - values = plot_data.IP_add.value_counts() - - # Pie chart for Users - st.subheader("**Pie-Chart for Users App Used Count**") - fig = px.pie(df, values=values, names=labels, title='Usage Based On IP Address 👥', color_discrete_sequence=px.colors.sequential.matter_r) - st.plotly_chart(fig) - - # fetching City from the query and getting the unique values and total value count - labels = plot_data.City.unique() - values = plot_data.City.value_counts() - - # Pie chart for City - st.subheader("**Pie-Chart for City**") - fig = px.pie(df, values=values, names=labels, title='Usage Based On City 🌆', color_discrete_sequence=px.colors.sequential.Jet) - st.plotly_chart(fig) - - # fetching State from the query and getting the unique values and total value count - labels = plot_data.State.unique() - values = plot_data.State.value_counts() - - # Pie chart for State - st.subheader("**Pie-Chart for State**") - fig = px.pie(df, values=values, names=labels, title='Usage Based on State 🚉', color_discrete_sequence=px.colors.sequential.PuBu_r) - st.plotly_chart(fig) - - # fetching Country from the query and getting the unique values and total value count - labels = plot_data.Country.unique() - values = plot_data.Country.value_counts() - - # Pie chart for Country - st.subheader("**Pie-Chart for Country**") - fig = px.pie(df, values=values, names=labels, title='Usage Based on Country 🌏', color_discrete_sequence=px.colors.sequential.Purpor_r) - st.plotly_chart(fig) - - ## For Wrong Credentials - else: - st.error("Wrong ID & Password Provided") - -# Calling the main (run()) function to make the whole process run -run() diff --git a/App/Logo/RESUM.png b/App/Logo/RESUM.png deleted file mode 100644 index c1274e6e8..000000000 Binary files a/App/Logo/RESUM.png and /dev/null differ diff --git a/App/Logo/recommend.png b/App/Logo/recommend.png deleted file mode 100644 index dc1e7988d..000000000 Binary files a/App/Logo/recommend.png and /dev/null differ diff --git a/App/Uploaded_Resumes/Analyzer Test Resume .pdf b/App/Uploaded_Resumes/Analyzer Test Resume .pdf deleted file mode 100644 index 6fb0074bb..000000000 Binary files a/App/Uploaded_Resumes/Analyzer Test Resume .pdf and /dev/null differ diff --git a/App/requirements.txt b/App/requirements.txt deleted file mode 100644 index 60186f751..000000000 --- a/App/requirements.txt +++ /dev/null @@ -1,93 +0,0 @@ -altair==4.2.0 -attrs==22.1.0 -blinker==1.5 -blis==0.7.8 -cachetools==5.2.0 -catalogue==1.0.0 -certifi==2022.6.15 -cffi==1.15.1 -chardet==5.0.0 -charset-normalizer==2.1.1 -click==8.1.3 -colorama==0.4.5 -commonmark==0.9.1 -cryptography==37.0.4 -cycler==0.11.0 -cymem==2.0.6 -decorator==5.1.1 -docx2txt==0.8 -entrypoints==0.4 -fonttools==4.37.2 -future==0.18.2 -geocoder==1.38.1 -geographiclib==1.52 -geopy==2.2.0 -gitdb==4.0.9 -GitPython==3.1.27 -idna==3.3 -importlib-metadata==4.12.0 -Jinja2==3.1.2 -joblib==1.1.0 -jsonschema==4.15.0 -kiwisolver==1.4.4 -langcodes==3.3.0 -MarkupSafe==2.1.1 -matplotlib==3.5.3 -murmurhash==1.0.8 -nltk==3.7 -numpy==1.23.2 -packaging==21.3 -pafy==0.5.5 -pandas==1.4.4 -pathy==0.6.2 -pdfminer.six==20220524 -pdfminer3==2018.12.3.0 -Pillow==9.2.0 -plac==1.1.3 -plotly==5.10.0 -preshed==3.0.7 -protobuf==3.20.1 -pyarrow==9.0.0 -pycparser==2.21 -pycryptodome==3.15.0 -pydantic==1.9.2 -pydeck==0.8.0b1 -Pygments==2.13.0 -Pympler==1.0.1 -PyMySQL==1.0.2 -pyparsing==3.0.9 -pyresparser==1.0.6 -pyrsistent==0.18.1 -python-dateutil==2.8.2 -pytz==2022.2.1 -pytz-deprecation-shim==0.1.0.post0 -ratelim==0.1.6 -regex==2022.8.17 -requests==2.28.1 -rich==12.5.1 -semver==2.13.0 -six==1.16.0 -smart-open==5.2.1 -smmap==5.0.0 -sortedcontainers==2.4.0 -spacy==2.3.5 -spacy-legacy==3.0.10 -spacy-loggers==1.0.3 -srsly==1.0.5 -streamlit==1.12.2 -streamlit-tags==1.2.8 -tenacity==8.0.1 -thinc==7.4.5 -toml==0.10.2 -toolz==0.12.0 -tornado==6.2 -tqdm==4.64.1 -typer==0.4.2 -typing_extensions==4.3.0 -tzdata==2022.2 -tzlocal==4.2 -urllib3==1.26.12 -validators==0.20.0 -wasabi==0.10.1 -watchdog==2.1.9 -zipp==3.8.1 diff --git a/README.md b/README.md index 6e39847ae..682be895c 100644 --- a/README.md +++ b/README.md @@ -1,302 +1,343 @@ -

Best View in Light Mode and Desktop Site (Recommended)


+
-![AI-Resume-Analyzer](https://socialify.git.ci/deepakpadhi986/AI-Resume-Analyzer/image?description=1&descriptionEditable=5th%20Sem%20Final%20Year%20Project%20at%20Kirti%20M%20Doongursee%20College%20(2022%20-%2023)&font=Raleway&language=1&pattern=Plus&theme=Light) +# AI Resume Analyzer + +### Enterprise-Grade Resume Analysis & Job Matching Platform + +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) +[![Python](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/) +[![Node.js](https://img.shields.io/badge/node.js-16+-green.svg)](https://nodejs.org/) +[![React](https://img.shields.io/badge/react-18+-61dafb.svg)](https://reactjs.org/) + +An intelligent, AI-powered platform that analyzes resumes, matches them against job descriptions, and provides actionable insights to improve candidate profiles through advanced Natural Language Processing and Machine Learning. + +[Features](#features) • [Architecture](#architecture) • [Quick Start](#quick-start) • [Documentation](#documentation) • [License](#license) -
-

🌴 AI RESUME ANALYZER 🌴

-

A Tool for Resume Analysis, Predictions and Recommendations

- -

- last update - open source - language - code size - - license - -

- - -

- View Demo - · - Installation - · - Project Report -

-

- - Built with 🤍 by - Deepak Padhi through - Dr Bright --(Data Scientist) - -

- 🚀 A Project Submitted for the partial fulfilment of the degree B.sc CS at - Kirti College during academic year 2022-23 - -


- -## About the Project 🥱 -
-
screenshot

-

- A tool which parses information from a resume using natural language processing and finds the keywords, cluster them onto sectors based on their keywords. - And lastly show recommendations, predictions, analytics to the applicant / recruiter based on keyword matching. -

-## Scope 😲 -i. It can be used for getting all the resume data into a structured tabular format and csv as well, so that the organization can use those data for analytics purposes - -ii. By providing recommendations, predictions and overall score user can improve their resume and can keep on testing it on our tool - -iii. And it can increase more traffic to our tool because of user section - -iv. It can be used by colleges to get insight of students and their resume before placements - -v. Also, to get analytics for roles which users are mostly looking for - -vi. To improve this tool by getting feedbacks - - -## Tech Stack 🍻 -
- Frontend - -
- -
- Backend - -
- -
-Database - -
- -
-Modules - -
- - -## Features 🤦‍♂️ -### Client: - -- Fetching Location and Miscellaneous Data - - Using Parsing Techniques to fetch -- Basic Info -- Skills -- Keywords - -Using logical programs, it will recommend -- Skills that can be added -- Predicted job role -- Course and certificates -- Resume tips and ideas -- Overall Score -- Interview & Resume tip videos - -### Admin: - -- Get all applicant’s data into tabular format -- Download user’s data into csv file -- View all saved uploaded pdf in Uploaded Resume folder -- Get user feedback and ratings - - Pie Charts for: - -- Ratings -- Predicted field / roles -- Experience level -- Resume score -- User count -- City -- State -- Country - -### Feedback: - -- Form filling -- Rating from 1 – 5 -- Show overall ratings pie chart -- Past user comments history - -## Requirements 😅 -### Have these things installed to make your process smooth -1) Python (3.9.12) https://www.python.org/downloads/release/python-3912/ -2) MySQL https://www.mysql.com/downloads/ -3) Visual Studio Code **(Prefered Code Editor)** https://code.visualstudio.com/Download -4) Visual Studio build tools for C++ https://aka.ms/vs/17/release/vs_BuildTools.exe - -## Setup & Installation 👀 - -To run this project, perform the following tasks 😨 - -Download the code file manually or via git -```bash -git clone https://github.com/deepakpadhi986/AI-Resume-Analyzer.git +--- + +## Overview + +The AI Resume Analyzer is a comprehensive, production-ready system designed to streamline the recruitment process through intelligent automation. Built on a modern microservice architecture, it combines the power of Python's NLP capabilities with a robust Node.js backend and an intuitive React frontend. + +### Key Capabilities + +- **Intelligent Resume Parsing**: Leverages advanced NLP algorithms (pyresparser, NLTK, spaCy) to extract structured information from unstructured resume documents +- **Job Description Matching**: Performs semantic analysis to calculate compatibility scores between candidate profiles and job requirements +- **Gap Analysis**: Identifies skill deficiencies and provides targeted recommendations for professional development +- **Resume Enhancement**: Offers AI-driven suggestions to improve resume quality, including stronger action verbs, quantifiable metrics, and professional formatting +- **Overclaim Detection**: Analyzes resumes for unsupported skill claims to ensure authenticity +- **Career Field Prediction**: Classifies candidates into appropriate career domains (Data Science, Web Development, Mobile Development, UI/UX) +- **Comprehensive Scoring**: Implements a 100-point scoring system based on industry best practices + +--- + +## Architecture + +The system employs a **microservice-based architecture** designed for scalability, maintainability, and performance: + +``` +┌─────────────────────────────────────────────────────────────┐ +│ AI Resume Analyzer │ +│ │ +│ ┌──────────────┐ ┌──────────────┐ │ +│ │ Frontend │ HTTP │ Backend │ │ +│ │ React UI │◄───────►│ Node.js │ │ +│ │ Port 5173 │ │ Port 5000 │ │ +│ └──────────────┘ └──────┬───────┘ │ +│ │ │ +│ │ REST API │ +│ ▼ │ +│ ┌──────────────┐ │ +│ │ AI Engine │ │ +│ │ Python │ │ +│ │ Port 5001 │ │ +│ └──────────────┘ │ +│ │ │ +│ ┌──────────────┐ │ +│ │ Database │ │ +│ │ MongoDB │ │ +│ └──────────────┘ │ +└─────────────────────────────────────────────────────────────┘ ``` -Create a virtual environment and activate it **(recommended)** +### Technology Stack -Open your command prompt and change your project directory to ```AI-Resume-Analyzer``` and run the following command -```bash -python -m venv venvapp +| Layer | Technology | Purpose | +| ------------- | ---------------------------- | ------------------------------------------------- | +| **Frontend** | React 18, Tailwind CSS | Modern, responsive user interface | +| **Backend** | Node.js, Express | RESTful API, business logic, JD matching | +| **AI Engine** | Python, Flask, NLP libraries | Resume parsing, skill extraction, predictions | +| **Database** | MongoDB | Persistent storage for analyses and user data | +| **NLP** | pyresparser, NLTK, spaCy | Natural language processing and entity extraction | + +--- + +## Features + +### For Candidates + +- **Resume Analysis**: Upload your resume and receive instant, comprehensive feedback +- **Skill Gap Identification**: Understand which skills you need to develop for your target role +- **Resume Scoring**: Get an objective quality score with specific improvement recommendations +- **Career Guidance**: Receive personalized course and certification recommendations +- **Enhancement Suggestions**: Improve your resume with AI-powered writing tips + +### For Recruiters + +- **Batch Processing**: Analyze multiple resumes efficiently +- **Job Matching**: Automatically match candidates to job descriptions +- **Candidate Ranking**: Sort applicants by compatibility score +- **Analytics Dashboard**: Visualize candidate data and trends +- **Export Capabilities**: Download analysis results in various formats + +### Technical Features -cd venvapp/Scripts +- **Dual Analysis Modes**: Choose between fast basic analysis or comprehensive AI-powered analysis +- **Fallback Mechanism**: Ensures system reliability even if AI service is unavailable +- **Scalable Architecture**: Microservices can be scaled independently +- **RESTful API**: Well-documented endpoints for easy integration +- **Error Handling**: Robust error management with graceful degradation -activate +--- +## Project Structure + +``` +AI-Resume-Analyzer/ +├── Resume-JD-Matcher/ +│ ├── client/ # React Frontend Application +│ │ ├── src/ +│ │ ├── public/ +│ │ └── package.json +│ ├── server/ # Node.js Backend Service +│ │ ├── models/ +│ │ ├── utils/ +│ │ ├── index.js +│ │ └── package.json +│ ├── python-service/ # Python AI Microservice +│ │ ├── app.py +│ │ ├── requirements.txt +│ │ └── README.md +│ ├── docs/ # Documentation +│ │ ├── INTEGRATION_GUIDE.md +│ │ ├── QUICKSTART.md +│ │ └── API_REFERENCE.md +│ └── start-all.bat # Automated startup script +├── LICENSE +└── README.md ``` -Downloading packages from ```requirements.txt``` inside ``App`` folder -```bash -cd../.. +--- -cd App +## Quick Start -pip install -r requirements.txt +### Prerequisites -python -m spacy download en_core_web_sm +Ensure the following are installed on your system: + +- **Node.js** (v16.0.0 or higher) - [Download](https://nodejs.org/) +- **Python** (v3.9.0 or higher) - [Download](https://www.python.org/downloads/) +- **MongoDB** (v4.4 or higher) - [Download](https://www.mongodb.com/try/download/community) +- **Git** - [Download](https://git-scm.com/downloads) + +### Installation + +#### Option 1: Automated Setup (Windows) +```bash +cd Resume-JD-Matcher +start-all.bat ``` -After installation is finished create a Database ```cv``` +This script automatically starts all three services (Frontend, Backend, AI Engine). -And change user credentials inside ```App.py``` -https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/17e1cdb207fef62557dc394f4158bda515e541fd/App/App.py#L95 +#### Option 2: Manual Setup -Go to ```venvapp\Lib\site-packages\pyresparser``` folder +**1. Clone the Repository** -And replace the ```resume_parser.py``` with ```resume_parser.py``` +```bash +git clone https://github.com/yourusername/AI-Resume-Analyzer.git +cd AI-Resume-Analyzer/Resume-JD-Matcher +``` -which was provided by me inside ```pyresparser``` folder +**2. Setup Python AI Service** -``Congratulations 🥳😱 your set-up 👆 and installation is finished 😵🤯`` +```bash +cd python-service +pip install -r requirements.txt +python -m spacy download en_core_web_sm +python app.py +``` -I hope that your ``venvapp`` is activated and working directory is inside ``App`` +**3. Setup Node.js Backend** (New Terminal) -Run the ```App.py``` file using ```bash -streamlit run App.py +cd server +npm install +npm start +``` + +**4. Setup React Frontend** (New Terminal) +```bash +cd client +npm install +npm run dev ``` -## Known Error 🤪 -If ``GeocoderUnavailable`` error comes up then just check your internet connection and network speed +**5. Access the Application** -## Issue While Installation and Set-up 🤧 -Check-out installation [Video](https://youtu.be/WFruijLC1Nc) +Open your browser and navigate to: `http://localhost:5173` -Feel Free to Send mail +--- -## Usage -- After the setup it will do stuff's automatically -- You just need to upload a resume and see it's magic -- Try first with my resume uploaded in ``Uploaded_Resumes`` folder -- Admin userid is ``admin`` and password is ``admin@resume-analyzer`` +## Documentation - -## Roadmap 🛵 -* [x] Predict user experience level. -* [x] Add resume scoring criteria for skills and projects. -* [x] Added fields and recommendations for web, android, ios, data science. -* [ ] Add more fields for other roles, and its recommendations respectively. -* [x] Fetch more details from users resume. -* [ ] View individual user details. +Comprehensive documentation is available in the following guides: -## Contributing 🤘 -Pull requests are welcome. +| Document | Description | +| ------------------------------------------------------------------ | -------------------------------------------- | +| [Quick Start Guide](./Resume-JD-Matcher/QUICKSTART.md) | Step-by-step setup instructions | +| [Integration Guide](./Resume-JD-Matcher/INTEGRATION_GUIDE.md) | Technical architecture and API documentation | +| [Integration Summary](./Resume-JD-Matcher/INTEGRATION_SUMMARY.md) | Overview of system integration | +| [File Locking Fix](./Resume-JD-Matcher/server/FILE_LOCKING_FIX.md) | Windows file handling documentation | -For major changes, please open an issue first to discuss what you would like to change. +--- -I've attached the synopsis of the project +## API Endpoints -If you want the full report of project -Email Me ``it's FREE`` +### Backend Service (Port 5000) -## Acknowledgement 🤗 -- Dr Bright - (The Full Stack Data Scientist BootCamp) -- Resume Parser with Natural Language Processing -- pyresparser +- `POST /api/analyze` - Basic resume analysis +- `POST /api/ai-analyze` - AI-powered comprehensive analysis +- `GET /api/history` - Retrieve analysis history -## Preview 👽 +### Python AI Service (Port 5001) -### Client Side +- `GET /health` - Service health check +- `POST /api/analyze-resume` - NLP-based resume parsing +- `POST /api/extract-text` - PDF text extraction -**Main Screen** +For detailed API documentation, see [Integration Guide](./Resume-JD-Matcher/INTEGRATION_GUIDE.md). -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/user/1-main-screen.png?raw=true) +--- -**Resume Analysis** +## Configuration -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/user/2-analysis.jpg?raw=true) +### Environment Variables -**Skill Recommendation** +Create a `.env` file in the `server` directory: -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/user/3-recom.png?raw=true) +```env +PORT=5000 +MONGODB_URI=mongodb://localhost:27017/resume-matcher +PYTHON_SERVICE_URL=http://localhost:5001 +NODE_ENV=development +``` -**Course Recommendation** +### Database Setup -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/user/4-recom.png?raw=true) +Ensure MongoDB is running: -**Tips and Overall Score** +```bash +# Windows +net start MongoDB -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/user/5-tipsscore.png?raw=true) +# macOS/Linux +sudo systemctl start mongod +``` -**Video Recommendation** +--- -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/user/6-recom.png?raw=true) +## Testing -### Feedback +Run the test suite: -**Feedback Form** +```bash +# Backend tests +cd server +npm test -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/feedback/1-form.png?raw=true) +# Frontend tests +cd client +npm test -**Overall Rating Analysis and Comment History** +# Python service tests +cd python-service +pytest +``` -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/feedback/2-analytics.png?raw=true) +--- -### Admin +## Deployment -**Login** +### Production Build -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/admin/1-main-screen.png?raw=true) +```bash +# Build frontend +cd client +npm run build -**User Count and it's data** +# Start backend in production mode +cd server +NODE_ENV=production npm start +``` -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/admin/2-user-data.png?raw=true) +### Docker Deployment -**Exported csv file** +```bash +docker-compose up -d +``` + +--- + +## Contributing + +We welcome contributions! Please follow these guidelines: + +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/AmazingFeature`) +3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + +--- + +## License -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/admin/3-user-datacsv.png?raw=true) +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. -**Feedback Data** +--- -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/admin/4-feed-data.png?raw=true) +## Acknowledgments -**Pie Chart Analytical Representation of clusters** +- **pyresparser** - Resume parsing library +- **NLTK** - Natural Language Toolkit +- **spaCy** - Industrial-strength NLP +- **React** - Frontend framework +- **Node.js** - Backend runtime +- **MongoDB** - Database solution -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/admin/5-pieexp.png?raw=true) +--- -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/admin/6-piescre.jpg?raw=true) +## Support -![Screenshot](https://github.com/deepakpadhi986/AI-Resume-Analyzer/blob/main/screenshots/admin/7-pielocation.png?raw=true) +For issues, questions, or contributions: -### Built with 🤍 AI RESUME ANALYZER by Deepak Padhi +- **Issues**: [GitHub Issues](https://github.com/yourusername/AI-Resume-Analyzer/issues) +- **Documentation**: See the `docs/` directory +- **Email**: support@example.com + +--- + +
+ +**Built with precision and care for the recruitment industry** + +Made with ❤️ using React, Node.js, Python, and AI/NLP + +© 2026 AI Resume Analyzer. All rights reserved. + +
diff --git a/RESUME ANALYSER SYNOPSIS.pdf b/RESUME ANALYSER SYNOPSIS.pdf deleted file mode 100644 index 67e4dd8b1..000000000 Binary files a/RESUME ANALYSER SYNOPSIS.pdf and /dev/null differ diff --git a/Resume-JD-Matcher/README.md b/Resume-JD-Matcher/README.md new file mode 100644 index 000000000..75c3a7bf1 --- /dev/null +++ b/Resume-JD-Matcher/README.md @@ -0,0 +1,597 @@ +# AI Resume & Job Description Matcher + +## Enterprise-Grade Resume Analysis Platform + +A sophisticated, full-stack application leveraging Natural Language Processing (NLP) and Machine Learning to analyze resumes against job descriptions, providing intelligent insights, skill gap analysis, and personalized career recommendations. + +--- + +## Table of Contents + +- [Overview](#overview) +- [Key Features](#key-features) +- [System Architecture](#system-architecture) +- [Technology Stack](#technology-stack) +- [Prerequisites](#prerequisites) +- [Installation](#installation) +- [Configuration](#configuration) +- [Usage](#usage) +- [API Documentation](#api-documentation) +- [Project Structure](#project-structure) +- [Contributing](#contributing) +- [License](#license) + +--- + +## Overview + +The AI Resume & JD Matcher is a production-ready platform designed to revolutionize the recruitment process through intelligent automation. Built on a modern microservice architecture, it combines: + +- **Advanced NLP** for resume parsing and skill extraction +- **Semantic Analysis** for job description matching +- **AI-Powered Recommendations** for career development +- **Comprehensive Analytics** for recruitment insights + +--- + +## Key Features + +### Core Functionality + +- **Intelligent Resume Parsing** + - Extracts structured data from unstructured PDF documents + - Identifies skills, experience, education, and contact information + - Supports multiple resume formats and layouts + +- **Job Description Matching** + - Calculates semantic similarity between resumes and job requirements + - Provides percentage-based compatibility scores + - Identifies matching and missing skills + +- **Gap Analysis** + - Pinpoints skill deficiencies for target roles + - Offers prioritized learning recommendations + - Tracks professional development progress + +- **Resume Enhancement** + - AI-driven suggestions for improving resume quality + - Identifies weak phrases and recommends stronger alternatives + - Suggests quantifiable metrics and action verbs + - Detects overclaimed skills without supporting evidence + +- **Career Recommendations** + - Predicts appropriate career fields based on skill profile + - Suggests relevant courses and certifications + - Provides curated learning resources and video tutorials + +- **Analytics Dashboard** + - Comprehensive history of all analyses + - Visual representation of candidate data + - Export capabilities for further processing + +### Advanced Features + +- **Dual Analysis Modes** + - Basic Mode: Fast, keyword-based analysis + - AI Mode: Comprehensive NLP-powered analysis + +- **Overclaim Detection** + - Identifies skills listed without project/experience evidence + - Ensures resume authenticity + +- **Experience Level Classification** + - Automatically categorizes candidates (Fresher/Intermediate/Experienced) + - Based on resume content and structure + +- **Scoring System** + - 100-point resume quality score + - Detailed feedback on each section + - Industry-standard evaluation criteria + +--- + +## System Architecture + +``` +┌─────────────────────────────────────────────────────────┐ +│ Application Layer │ +│ │ +│ ┌──────────────┐ ┌──────────────┐ │ +│ │ React UI │◄───────►│ Express │ │ +│ │ (Frontend) │ HTTP │ (Backend) │ │ +│ │ Port 5173 │ │ Port 5000 │ │ +│ └──────────────┘ └──────┬───────┘ │ +│ │ │ +│ │ REST API │ +│ ▼ │ +│ ┌──────────────┐ │ +│ │ Python AI │ │ +│ │ Microservice│ │ +│ │ Port 5001 │ │ +│ └──────┬───────┘ │ +│ │ │ +│ ┌──────────────────────────────┴──────────┐ │ +│ │ │ │ +│ ▼ ▼ │ +│ ┌──────────────┐ ┌──────────────┐ │ +│ │ MongoDB │ │ NLP Engine │ │ +│ │ Database │ │ (pyresparser│ │ +│ │ │ │ NLTK, spaCy)│ │ +│ └──────────────┘ └──────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Technology Stack + +### Frontend + +- **React 18** - Modern UI library with hooks +- **Vite** - Next-generation frontend tooling +- **Tailwind CSS** - Utility-first CSS framework +- **Axios** - Promise-based HTTP client + +### Backend + +- **Node.js** - JavaScript runtime +- **Express.js** - Web application framework +- **Multer** - File upload middleware +- **pdf-parse** - PDF text extraction +- **Natural** - NLP library for JavaScript + +### AI Microservice + +- **Python 3.9+** - Programming language +- **Flask** - Lightweight web framework +- **pyresparser** - Resume parsing library +- **NLTK** - Natural Language Toolkit +- **spaCy** - Industrial-strength NLP +- **pdfminer3** - PDF text extraction + +### Database + +- **MongoDB** - NoSQL document database +- **Mongoose** - MongoDB object modeling + +--- + +## Prerequisites + +Ensure the following software is installed on your system: + +| Software | Version | Purpose | +| ----------- | ------- | --------------- | +| **Node.js** | 16.0.0+ | Backend runtime | +| **npm** | 8.0.0+ | Package manager | +| **Python** | 3.9.0+ | AI microservice | +| **MongoDB** | 4.4+ | Database | +| **Git** | Latest | Version control | + +### System Requirements + +- **RAM**: 4GB minimum, 8GB recommended +- **Storage**: 2GB free space +- **OS**: Windows 10+, macOS 10.15+, or Linux + +--- + +## Installation + +### Quick Start (Automated) + +For Windows users, use the automated startup script: + +```bash +start-all.bat +``` + +This will automatically start all three services. + +### Manual Installation + +#### 1. Clone the Repository + +```bash +git clone +cd Resume-JD-Matcher +``` + +#### 2. Backend Setup + +```bash +cd server +npm install +``` + +Create a `.env` file: + +```env +PORT=5000 +MONGODB_URI=mongodb://localhost:27017/resume-matcher +PYTHON_SERVICE_URL=http://localhost:5001 +NODE_ENV=development +``` + +Start the server: + +```bash +npm start +``` + +Server will be available at `http://localhost:5000` + +#### 3. Frontend Setup + +Open a new terminal: + +```bash +cd client +npm install +npm run dev +``` + +Frontend will be available at `http://localhost:5173` + +#### 4. Python AI Service Setup + +Open a new terminal: + +```bash +cd python-service +pip install -r requirements.txt +python -m spacy download en_core_web_sm +python app.py +``` + +AI service will be available at `http://localhost:5001` + +--- + +## Configuration + +### Environment Variables + +#### Backend (`server/.env`) + +```env +PORT=5000 +MONGODB_URI=mongodb://localhost:27017/resume-matcher +PYTHON_SERVICE_URL=http://localhost:5001 +NODE_ENV=development +MAX_FILE_SIZE=16777216 # 16MB in bytes +``` + +#### Frontend (`client/.env`) + +```env +VITE_API_URL=http://localhost:5000 +``` + +### Database Configuration + +Ensure MongoDB is running: + +```bash +# Windows +net start MongoDB + +# macOS +brew services start mongodb-community + +# Linux +sudo systemctl start mongod +``` + +--- + +## Usage + +### For End Users + +1. **Access the Application** + - Navigate to `http://localhost:5173` in your web browser + +2. **Upload Resume** + - Click the upload button + - Select a PDF resume file (max 16MB) + +3. **Provide Job Description** (Optional) + - Paste the job description text + - This enables job matching and gap analysis + +4. **Choose Analysis Mode** + - **Quick Analysis**: Fast, basic parsing + - **AI Analysis**: Comprehensive NLP-based analysis + +5. **Review Results** + - View match score and compatibility + - Examine skill gaps and recommendations + - Review resume enhancement suggestions + - Access personalized learning resources + +### For Developers + +#### Running Tests + +```bash +# Backend tests +cd server +npm test + +# Frontend tests +cd client +npm test + +# Python service tests +cd python-service +pytest +``` + +#### Development Mode + +```bash +# Backend with auto-reload +cd server +npm run dev + +# Frontend with HMR +cd client +npm run dev +``` + +--- + +## API Documentation + +### Backend Endpoints (Port 5000) + +#### POST /api/analyze + +Basic resume analysis (Node.js only) + +**Request:** + +```http +POST /api/analyze +Content-Type: multipart/form-data + +resume: +jobDescription: (optional) +``` + +**Response:** + +```json +{ + "candidateEmail": "john@example.com", + "extractedSkills": ["python", "react", "mongodb"], + "overallMatchScore": 75, + "missingSkills": ["docker", "kubernetes"], + "recommendations": { + "skills": ["..."], + "courses": ["..."] + } +} +``` + +#### POST /api/ai-analyze + +AI-powered comprehensive analysis + +**Request:** + +```http +POST /api/ai-analyze +Content-Type: multipart/form-data + +resume: +jobDescription: (optional) +``` + +**Response:** + +```json +{ + "success": true, + "analysis": { + "aiPowered": true, + "pythonAnalysis": { + /* AI analysis data */ + }, + "jdMatching": { + /* Job matching data */ + } + } +} +``` + +#### GET /api/history + +Retrieve analysis history + +**Response:** + +```json +[ + { + "_id": "...", + "resumeName": "john_doe.pdf", + "timestamp": "2026-02-03T...", + "overallMatchScore": 75 + } +] +``` + +### Python AI Service Endpoints (Port 5001) + +#### GET /health + +Health check + +**Response:** + +```json +{ + "status": "healthy", + "service": "AI Resume Analyzer" +} +``` + +#### POST /api/analyze-resume + +NLP-based resume analysis + +**Request:** + +```http +POST /api/analyze-resume +Content-Type: multipart/form-data + +resume: +``` + +**Response:** + +```json +{ + "success": true, + "data": { + "basic_info": { + /* ... */ + }, + "skills": { + /* ... */ + }, + "experience": { + /* ... */ + }, + "score": { + /* ... */ + } + } +} +``` + +For complete API documentation, see [INTEGRATION_GUIDE.md](./docs/INTEGRATION_GUIDE.md). + +--- + +## Project Structure + +``` +Resume-JD-Matcher/ +├── client/ # React Frontend +│ ├── src/ +│ │ ├── components/ # React components +│ │ ├── App.jsx # Main application +│ │ └── main.jsx # Entry point +│ ├── public/ # Static assets +│ ├── package.json +│ └── vite.config.js +│ +├── server/ # Node.js Backend +│ ├── models/ # Mongoose models +│ │ └── Analysis.js +│ ├── utils/ # Utility functions +│ │ ├── skillsData.js +│ │ ├── courseData.js +│ │ └── enhancementData.js +│ ├── uploads/ # Temporary file storage +│ ├── index.js # Main server file +│ ├── cleanup-uploads.js # Utility script +│ └── package.json +│ +├── python-service/ # Python AI Microservice +│ ├── app.py # Flask application +│ ├── requirements.txt # Python dependencies +│ ├── resume_parser_fix.py # pyresparser fix +│ ├── courses_data.py # Course recommendations +│ └── README.md +│ +├── docs/ # Documentation +│ ├── INTEGRATION_GUIDE.md # Full integration details +│ ├── QUICKSTART.md # Quick setup guide +│ ├── SCORING_FIX.md # Scoring logic updates +│ ├── FILE_LOCKING_FIX.md # Windows file locking fix +│ └── ... # Other docs +│ +├── start-all.bat # Windows startup script +├── README.md +└── LICENSE +``` + +--- + +## Contributing + +We welcome contributions from the community! Please follow these guidelines: + +### Development Workflow + +1. **Fork the Repository** +2. **Create a Feature Branch** + ```bash + git checkout -b feature/YourFeatureName + ``` +3. **Make Your Changes** + - Follow existing code style + - Add tests for new features + - Update documentation as needed +4. **Commit Your Changes** + ```bash + git commit -m "Add: Brief description of your changes" + ``` +5. **Push to Your Fork** + ```bash + git push origin feature/YourFeatureName + ``` +6. **Open a Pull Request** + - Provide a clear description of changes + - Reference any related issues + +### Code Style + +- **JavaScript**: Follow Airbnb style guide +- **Python**: Follow PEP 8 +- **React**: Use functional components with hooks +- **Commits**: Use conventional commit messages + +--- + +## License + +This project is licensed under the MIT License - see the [LICENSE](../LICENSE) file for details. + +--- + +## Support & Contact + +For questions, issues, or contributions: + +- **Documentation**: See the `docs/` directory +- **Issues**: [GitHub Issues](https://github.com/yourusername/AI-Resume-Analyzer/issues) +- **Discussions**: [GitHub Discussions](https://github.com/yourusername/AI-Resume-Analyzer/discussions) + +--- + +## Acknowledgments + +Special thanks to the open-source community and the following projects: + +- [pyresparser](https://github.com/OmkarPathak/pyresparser) - Resume parsing library +- [NLTK](https://www.nltk.org/) - Natural Language Toolkit +- [spaCy](https://spacy.io/) - Industrial-strength NLP +- [React](https://reactjs.org/) - Frontend framework +- [Express](https://expressjs.com/) - Backend framework +- [MongoDB](https://www.mongodb.com/) - Database solution + +--- + +
+ +**Built with precision for the modern recruitment industry** + +© 2026 AI Resume Analyzer. All rights reserved. + +
diff --git a/Resume-JD-Matcher/client/.gitignore b/Resume-JD-Matcher/client/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/Resume-JD-Matcher/client/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Resume-JD-Matcher/client/README.md b/Resume-JD-Matcher/client/README.md new file mode 100644 index 000000000..18bc70ebe --- /dev/null +++ b/Resume-JD-Matcher/client/README.md @@ -0,0 +1,16 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/Resume-JD-Matcher/client/eslint.config.js b/Resume-JD-Matcher/client/eslint.config.js new file mode 100644 index 000000000..4fa125da2 --- /dev/null +++ b/Resume-JD-Matcher/client/eslint.config.js @@ -0,0 +1,29 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + }, + }, +]) diff --git a/Resume-JD-Matcher/client/index.html b/Resume-JD-Matcher/client/index.html new file mode 100644 index 000000000..f07b3d04d --- /dev/null +++ b/Resume-JD-Matcher/client/index.html @@ -0,0 +1,13 @@ + + + + + + + client + + +
+ + + diff --git a/Resume-JD-Matcher/client/package.json b/Resume-JD-Matcher/client/package.json new file mode 100644 index 000000000..3629db5d8 --- /dev/null +++ b/Resume-JD-Matcher/client/package.json @@ -0,0 +1,37 @@ +{ + "name": "client", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "autoprefixer": "^10.4.24", + "axios": "^1.13.4", + "clsx": "^2.1.1", + "framer-motion": "^12.30.0", + "lucide-react": "^0.563.0", + "postcss": "^8.5.6", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.13.0", + "recharts": "^3.7.0", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^3.4.17" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "vite": "^7.2.4" + } +} diff --git a/Resume-JD-Matcher/client/postcss.config.js b/Resume-JD-Matcher/client/postcss.config.js new file mode 100644 index 000000000..2e7af2b7f --- /dev/null +++ b/Resume-JD-Matcher/client/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/Resume-JD-Matcher/client/src/App.jsx b/Resume-JD-Matcher/client/src/App.jsx new file mode 100644 index 000000000..d88755c68 --- /dev/null +++ b/Resume-JD-Matcher/client/src/App.jsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; +import Navbar from './components/Navbar'; +import Home from './pages/Home'; +import Results from './pages/Results'; +import Admin from './pages/Admin'; +import ResumeBuilder from './pages/ResumeBuilder'; + +function App() { + return ( + + + } /> + } /> + } /> + } /> + + + ); +} + +export default App; diff --git a/Resume-JD-Matcher/client/src/components/Navbar.jsx b/Resume-JD-Matcher/client/src/components/Navbar.jsx new file mode 100644 index 000000000..1f5da6d7c --- /dev/null +++ b/Resume-JD-Matcher/client/src/components/Navbar.jsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { FileText, LayoutDashboard, PenTool } from 'lucide-react'; + +const Navbar = () => { + return ( + + ); +}; + +export default Navbar; diff --git a/Resume-JD-Matcher/client/src/index.css b/Resume-JD-Matcher/client/src/index.css new file mode 100644 index 000000000..7991707e0 --- /dev/null +++ b/Resume-JD-Matcher/client/src/index.css @@ -0,0 +1,125 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + body { + @apply bg-slate-50 text-slate-900 font-sans antialiased; + /* Use system font stack that is very close to Inter */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + } +} + +@layer components { + .glass-card { + @apply bg-white/70 backdrop-blur-xl border border-white/50 shadow-lg rounded-2xl; + } + + .glass-card-hover { + @apply hover:shadow-xl hover:-translate-y-0.5 transition-all duration-300; + } + + .primary-gradient { + @apply bg-gradient-to-r from-slate-900 via-blue-900 to-slate-900; + } + + .text-gradient { + @apply bg-gradient-to-r from-slate-900 to-blue-700 bg-clip-text text-transparent; + } + + .btn-primary { + @apply px-8 py-3 bg-slate-900 hover:bg-slate-800 text-white font-semibold rounded-xl + shadow-lg shadow-slate-900/20 transition-all active:scale-[0.98] + flex items-center justify-center gap-2; + } + + .input-field { + @apply w-full p-4 rounded-xl bg-white border border-slate-200 + focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 + outline-none transition-all placeholder:text-slate-400 text-slate-700; + } + + .resume-template { + @apply glass-card hover:shadow-xl hover:-translate-y-1 transition-all duration-300 + cursor-pointer group; + } + + .template-preview { + @apply bg-slate-50 rounded-lg p-4 text-xs font-mono leading-relaxed + border border-slate-100 overflow-hidden; + } + + /* Premium Animation Classes */ + .animate-float { + animation: float 6s ease-in-out infinite; + } + + .animate-glow { + animation: glow 2s ease-in-out infinite alternate; + } + + .animate-gradient { + background-size: 200% 200%; + animation: gradient 4s ease infinite; + } + + .animate-shimmer { + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent); + animation: shimmer 2s infinite; + } + + .animate-bounce-slow { + animation: bounce-slow 3s ease-in-out infinite; + } + + .animate-scale-pulse { + animation: scale-pulse 2s ease-in-out infinite; + } +} + +/* Custom Animations */ +@keyframes float { + 0%, 100% { transform: translateY(0px); } + 50% { transform: translateY(-10px); } +} + +@keyframes glow { + from { box-shadow: 0 0 20px rgba(59, 130, 246, 0.3); } + to { box-shadow: 0 0 30px rgba(59, 130, 246, 0.6); } +} + +@keyframes gradient { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +@keyframes shimmer { + 0% { transform: translateX(-100%); } + 100% { transform: translateX(100%); } +} + +@keyframes bounce-slow { + 0%, 100% { transform: translateY(0px); } + 50% { transform: translateY(-5px); } +} + +@keyframes scale-pulse { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); } +} + +/* Custom Scrollbar */ +::-webkit-scrollbar { + width: 8px; +} +::-webkit-scrollbar-track { + background: transparent; +} +::-webkit-scrollbar-thumb { + background: #cbd5e1; + border-radius: 4px; +} +::-webkit-scrollbar-thumb:hover { + background: #94a3b8; +} diff --git a/Resume-JD-Matcher/client/src/main.jsx b/Resume-JD-Matcher/client/src/main.jsx new file mode 100644 index 000000000..b9a1a6dea --- /dev/null +++ b/Resume-JD-Matcher/client/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/Resume-JD-Matcher/client/src/pages/Admin.jsx b/Resume-JD-Matcher/client/src/pages/Admin.jsx new file mode 100644 index 000000000..b3acde241 --- /dev/null +++ b/Resume-JD-Matcher/client/src/pages/Admin.jsx @@ -0,0 +1,129 @@ +import React, { useEffect, useState } from 'react'; +import axios from 'axios'; +import { Download } from 'lucide-react'; + +const Admin = () => { + const [history, setHistory] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + fetchHistory(); + }, []); + + const fetchHistory = async () => { + try { + const { data } = await axios.get('http://localhost:5000/api/history'); + setHistory(data); + } catch (err) { + console.error(err); + } finally { + setLoading(false); + } + }; + + const downloadCSV = () => { + // Simple CSV Export Logic + const headers = ['Date', 'Candidate', 'Role Match', 'Score', 'Category']; + const rows = history.map(item => [ + new Date(item.timestamp).toLocaleDateString(), + item.candidateEmail || 'N/A', + 'N/A', // Role name not explicitly parsed yet, simplified + item.overallMatchScore + '%', + item.category + ]); + + const csvContent = "data:text/csv;charset=utf-8," + + headers.join(",") + "\n" + + rows.map(e => e.join(",")).join("\n"); + + const encodedUri = encodeURI(csvContent); + const link = document.createElement("a"); + link.setAttribute("href", encodedUri); + link.setAttribute("download", "usage_report.csv"); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }; + + return ( +
+
+

Admin Dashboard

+ +
+ +
+
+ + + + + + + + + + + + + {loading ? ( + + + + ) : history.length === 0 ? ( + + + + ) : ( + history.map((item) => ( + + + + + + + + + )) + )} + +
DateFile NameCandidate EmailDomainMatch ScoreStatus
Loading records...
No analyses found yet.
+ {new Date(item.timestamp).toLocaleDateString()} + + {item.resumeName} + + {item.candidateEmail || 'N/A'} + + + {item.category} + + +
+
+
= 70 ? 'bg-green-500' : item.overallMatchScore >= 40 ? 'bg-yellow-500' : 'bg-red-500'}`} + style={{ width: `${item.overallMatchScore}%` }} + /> +
+ {item.overallMatchScore}% +
+
+ {item.overallMatchScore >= 70 ? ( + Recommended + ) : ( + Review + )} +
+
+
+
+ ); +}; + +export default Admin; diff --git a/Resume-JD-Matcher/client/src/pages/Home.jsx b/Resume-JD-Matcher/client/src/pages/Home.jsx new file mode 100644 index 000000000..f821bedbf --- /dev/null +++ b/Resume-JD-Matcher/client/src/pages/Home.jsx @@ -0,0 +1,1060 @@ +import React, { useState } from 'react'; +import axios from 'axios'; +import { useNavigate, Link } from 'react-router-dom'; +import { Upload, FileText, CheckCircle, Loader2, Sparkles, Shield, BarChart3, ArrowRight, PenTool, TrendingUp } from 'lucide-react'; +import clsx from 'clsx'; + +const Home = () => { + const navigate = useNavigate(); + const [file, setFile] = useState(null); + const [jd, setJd] = useState(''); + const [loading, setLoading] = useState(false); + const [dragging, setDragging] = useState(false); + + // Handle File Drop + const handleDrop = (e) => { + e.preventDefault(); + setDragging(false); + if (e.dataTransfer.files?.[0]) { + setFile(e.dataTransfer.files[0]); + } + }; + + // Download Resume Template + const downloadTemplate = (templateType) => { + const templates = { + 'software-engineer': { + filename: 'Software_Engineer_Resume_Template.txt', + content: `JOHN DOE +Software Engineer +Email: john.doe@email.com | Phone: +1 (555) 123-4567 +LinkedIn: linkedin.com/in/johndoe | GitHub: github.com/johndoe + +PROFESSIONAL SUMMARY +Experienced Software Engineer with 3+ years developing scalable web applications using modern technologies. +Proven track record of delivering high-quality solutions and leading development teams. + +TECHNICAL SKILLS +• Languages: JavaScript, Python, Java, TypeScript +• Frontend: React.js, Vue.js, HTML5, CSS3, Tailwind CSS +• Backend: Node.js, Express.js, Django, REST APIs +• Databases: MongoDB, PostgreSQL, MySQL, Redis +• Cloud & DevOps: AWS, Docker, Kubernetes, CI/CD +• Tools: Git, Webpack, Jest, Postman + +PROFESSIONAL EXPERIENCE + +Senior Software Engineer | TechCorp Inc. | Jan 2022 - Present +• Developed 15+ responsive web applications using React.js and Node.js, serving 100K+ users +• Optimized database queries and API performance, reducing response time by 40% +• Led team of 3 junior developers, implementing agile methodologies and code review processes +• Architected microservices infrastructure using Docker and AWS, improving scalability by 60% + +Software Engineer | StartupXYZ | Jun 2020 - Dec 2021 +• Built full-stack e-commerce platform handling $2M+ in transactions annually +• Implemented automated testing suite, increasing code coverage from 60% to 95% +• Collaborated with UX team to improve user experience, resulting in 25% increase in conversion rate +• Mentored 2 interns and conducted technical interviews for new hires + +PROJECTS + +E-Commerce Platform | React, Node.js, MongoDB +• Full-stack application with user authentication, payment processing, and admin dashboard +• Implemented real-time inventory management and order tracking system +• Deployed on AWS with auto-scaling and load balancing + +Task Management App | Vue.js, Express.js, PostgreSQL +• Collaborative project management tool with real-time updates using WebSocket +• Integrated third-party APIs for calendar synchronization and email notifications +• Achieved 99.9% uptime with comprehensive error handling and monitoring + +EDUCATION +Bachelor of Science in Computer Science | University of Technology | 2020 +Relevant Coursework: Data Structures, Algorithms, Database Systems, Software Engineering + +CERTIFICATIONS +• AWS Certified Developer Associate (2023) +• MongoDB Certified Developer (2022) + +ACHIEVEMENTS +• Winner of Company Hackathon 2023 - Built AI-powered code review tool +• Speaker at TechConf 2023 - "Building Scalable React Applications" +• Open source contributor with 500+ GitHub stars across projects` + }, + 'data-scientist': { + filename: 'Data_Scientist_Resume_Template.txt', + content: `JANE SMITH +Data Scientist +Email: jane.smith@email.com | Phone: +1 (555) 987-6543 +LinkedIn: linkedin.com/in/janesmith | Portfolio: janesmith.dev + +PROFESSIONAL SUMMARY +Results-driven Data Scientist with 4+ years of experience in machine learning, statistical analysis, and data visualization. +Proven ability to extract actionable insights from complex datasets and drive business growth through data-driven solutions. + +TECHNICAL SKILLS +• Programming: Python, R, SQL, Scala, Java +• Machine Learning: Scikit-learn, TensorFlow, PyTorch, Keras, XGBoost +• Data Analysis: Pandas, NumPy, SciPy, Matplotlib, Seaborn +• Big Data: Spark, Hadoop, Kafka, Airflow +• Databases: PostgreSQL, MongoDB, Cassandra, Snowflake +• Cloud Platforms: AWS (SageMaker, S3, EC2), Google Cloud, Azure +• Visualization: Tableau, Power BI, Plotly, D3.js + +PROFESSIONAL EXPERIENCE + +Senior Data Scientist | DataTech Solutions | Mar 2021 - Present +• Built 20+ machine learning models achieving 90%+ accuracy for customer segmentation and churn prediction +• Analyzed 10M+ customer records using Python and SQL, identifying $5M in revenue opportunities +• Developed real-time recommendation system serving 1M+ users, increasing engagement by 35% +• Led cross-functional team of 5 members to implement MLOps pipeline, reducing model deployment time by 70% + +Data Scientist | Analytics Corp | Aug 2019 - Feb 2021 +• Created predictive models for fraud detection, reducing false positives by 45% +• Designed A/B testing framework for product optimization, improving conversion rates by 20% +• Built automated reporting dashboards using Tableau, saving 15 hours/week of manual work +• Collaborated with engineering team to productionize 8 ML models in cloud environment + +PROJECTS + +Customer Lifetime Value Prediction | Python, XGBoost, AWS +• Developed ML model to predict CLV with 92% accuracy using ensemble methods +• Implemented feature engineering pipeline processing 5M+ customer transactions +• Deployed model using AWS SageMaker with real-time inference capabilities + +Sales Forecasting System | Python, TensorFlow, Time Series Analysis +• Built LSTM neural network for multi-step sales forecasting with MAPE < 8% +• Integrated external data sources (weather, economic indicators) to improve accuracy +• Created interactive dashboard for stakeholders to visualize predictions and trends + +Sentiment Analysis Platform | Python, NLP, Docker +• Developed sentiment analysis system processing 100K+ social media posts daily +• Implemented BERT-based model achieving 94% accuracy on sentiment classification +• Built REST API and deployed using Docker containers on AWS ECS + +EDUCATION +Master of Science in Data Science | Stanford University | 2019 +Bachelor of Science in Statistics | UC Berkeley | 2017 + +CERTIFICATIONS +• AWS Certified Machine Learning - Specialty (2023) +• Google Cloud Professional Data Engineer (2022) +• Tableau Desktop Certified Professional (2021) + +PUBLICATIONS & ACHIEVEMENTS +• "Deep Learning for Customer Behavior Prediction" - Journal of Data Science (2023) +• Winner of Kaggle Competition - House Prices Prediction (Top 1%) +• Speaker at PyData Conference 2023 - "Scaling ML Models in Production"` + }, + 'ui-ux-designer': { + filename: 'UI_UX_Designer_Resume_Template.txt', + content: `ALEX CHEN +UI/UX Designer +Email: alex.chen@email.com | Phone: +1 (555) 456-7890 +Portfolio: alexchen.design | LinkedIn: linkedin.com/in/alexchen + +PROFESSIONAL SUMMARY +Creative UI/UX Designer with 5+ years of experience designing user-centered digital experiences. +Expertise in user research, prototyping, and creating design systems that drive engagement and conversion. + +DESIGN SKILLS +• Design Tools: Figma, Adobe XD, Sketch, Adobe Creative Suite, InVision +• Prototyping: Principle, Framer, Marvel, Zeplin +• User Research: User Interviews, Surveys, Usability Testing, A/B Testing +• Design Systems: Component Libraries, Style Guides, Design Tokens +• Frontend: HTML5, CSS3, JavaScript (basic), React (basic) +• Analytics: Google Analytics, Hotjar, Mixpanel, Amplitude + +PROFESSIONAL EXPERIENCE + +Senior UI/UX Designer | DesignTech Inc. | Jan 2021 - Present +• Designed 25+ mobile and web applications with average 4.8+ App Store rating +• Conducted user research with 500+ participants, improving user satisfaction by 40% +• Created comprehensive design system used by 50+ developers across 10 products +• Led design sprints and workshops, reducing product development time by 30% +• Mentored 3 junior designers and established design review processes + +UI/UX Designer | Creative Agency | Jun 2019 - Dec 2020 +• Redesigned e-commerce platform resulting in 60% increase in conversion rate +• Collaborated with product managers and developers in agile environment +• Created wireframes, prototypes, and high-fidelity designs for 15+ client projects +• Conducted usability testing sessions and implemented feedback to improve UX +• Developed brand guidelines and visual identity for 8 startup clients + +FEATURED PROJECTS + +Banking Mobile App | iOS & Android +• Designed intuitive banking app for 2M+ users with focus on accessibility +• Conducted extensive user research and created user personas and journey maps +• Implemented biometric authentication and simplified transaction flows +• Achieved 95% user satisfaction score and 40% increase in mobile transactions + +E-Learning Platform | Web Application +• Created comprehensive learning management system for 100K+ students +• Designed adaptive interface supporting multiple learning styles and accessibility needs +• Developed interactive course creation tools for educators +• Improved course completion rates by 45% through gamification elements + +Healthcare Dashboard | Web Application +• Designed data visualization dashboard for healthcare professionals +• Simplified complex medical data into intuitive charts and actionable insights +• Conducted stakeholder interviews with 20+ doctors and nurses +• Reduced time to find critical patient information by 50% + +EDUCATION +Bachelor of Fine Arts in Graphic Design | Art Institute | 2018 +UX Design Certificate | General Assembly | 2019 + +CERTIFICATIONS +• Google UX Design Professional Certificate (2023) +• Adobe Certified Expert - XD (2022) +• Certified Usability Analyst (CUA) (2021) + +ACHIEVEMENTS & RECOGNITION +• Winner of UX Design Awards 2023 - Best Mobile App Design +• Featured in Design Weekly - "Top 10 Designers to Watch" +• Speaker at Design Conference 2023 - "Building Inclusive Design Systems" +• Dribbble Top Shot with 50K+ likes and 500+ followers + +VOLUNTEER WORK +• UX Mentor at ADPList - Mentored 20+ aspiring designers +• Design volunteer for non-profit organizations - Pro bono work for 5 NGOs` + }, + 'devops-engineer': { + filename: 'Senior_DevOps_Engineer_Resume.txt', + content: `MARCUS JOHNSON +Senior DevOps Engineer & Cloud Architect +📧 marcus.johnson@email.com | 📱 +1 (555) 678-9012 +🔗 linkedin.com/in/marcusjohnson | ☁️ marcuscloud.dev | 🐙 github.com/marcusj + +═══════════════════════════════════════════════════════════════════════════════ + +PROFESSIONAL SUMMARY +═══════════════════════════════════════════════════════════════════════════════ +Innovative Senior DevOps Engineer with 8+ years of experience designing and implementing scalable +cloud infrastructure and CI/CD pipelines. Expert in containerization, orchestration, and +infrastructure as code. Led DevOps transformations that reduced deployment time by 90% and +improved system reliability to 99.99% uptime. + +TECHNICAL EXPERTISE +Cloud Platforms: AWS, Google Cloud, Azure • Containerization: Docker, Kubernetes, OpenShift +CI/CD Tools: Jenkins, GitLab CI, GitHub Actions • Infrastructure: Terraform, Ansible +Monitoring: Prometheus, Grafana, ELK Stack • Scripting: Bash, Python, Go + +PROFESSIONAL EXPERIENCE + +PRINCIPAL DEVOPS ENGINEER | Netflix | Los Gatos, CA | Feb 2021 - Present +• Lead DevOps strategy for streaming platform serving 230M+ global subscribers +• Architected multi-region Kubernetes infrastructure handling 1B+ requests daily +• Implemented chaos engineering practices improving system resilience by 40% +• Reduced deployment time from 4 hours to 15 minutes through advanced CI/CD pipelines +• Led team of 12 DevOps engineers across multiple product teams +• Achieved 99.99% uptime for critical streaming services + +SENIOR DEVOPS ENGINEER | Uber | San Francisco, CA | Jan 2019 - Jan 2021 +• Managed infrastructure for ride-sharing platform serving 100M+ users globally +• Implemented GitOps workflows reducing configuration drift by 95% +• Built auto-scaling Kubernetes clusters handling 500K+ concurrent requests +• Designed disaster recovery procedures with RTO < 15 minutes +• Reduced infrastructure costs by 35% through resource optimization + +KEY ACHIEVEMENTS +🏆 Netflix Engineering Excellence Award (2023) +🥇 Uber Innovation Award - Infrastructure Category (2020) +📊 Top 1% DevOps Engineer - Stack Overflow Developer Survey (2022) +🌟 CNCF Ambassador (2023) + +EDUCATION & CERTIFICATIONS +Bachelor of Science in Computer Engineering | Stanford University | 2015 +• AWS Certified Solutions Architect - Professional (2023) +• Certified Kubernetes Administrator (CKA) (2023) +• Google Cloud Professional DevOps Engineer (2022)` + }, + 'frontend-developer': { + filename: 'Senior_Frontend_Developer_Resume.txt', + content: `EMILY CHEN +Senior Frontend Developer & UI Engineer +📧 emily.chen@email.com | 📱 +1 (555) 789-0123 +🌐 emilychen.dev | 🔗 linkedin.com/in/emilychen | 🎨 dribbble.com/emilychen + +═══════════════════════════════════════════════════════════════════════════════ + +PROFESSIONAL SUMMARY +═══════════════════════════════════════════════════════════════════════════════ +Passionate Senior Frontend Developer with 6+ years of experience creating exceptional user +experiences for web and mobile applications. Expert in modern JavaScript frameworks, responsive +design, and performance optimization. Led frontend initiatives that improved user engagement by +50% and page load speeds by 70%. + +TECHNICAL EXPERTISE +Languages: JavaScript (ES6+), TypeScript, HTML5, CSS3, SASS/SCSS +Frameworks: React.js, Next.js, Vue.js, Angular, Svelte +State Management: Redux, Zustand, Vuex, Context API +Styling: Tailwind CSS, Styled Components, CSS Modules, Material-UI +Build Tools: Webpack, Vite, Parcel, Rollup • Testing: Jest, Cypress, Playwright + +PROFESSIONAL EXPERIENCE + +SENIOR FRONTEND DEVELOPER | Airbnb | San Francisco, CA | Jan 2021 - Present +• Lead frontend development for host dashboard serving 4M+ hosts globally +• Implemented micro-frontend architecture improving development velocity by 40% +• Optimized application performance achieving 95+ Lighthouse scores across all pages +• Built accessible components following WCAG 2.1 AA guidelines +• Mentored team of 6 junior developers and conducted code reviews +• Reduced bundle size by 60% through code splitting and lazy loading + +FRONTEND DEVELOPER | Stripe | San Francisco, CA | Mar 2019 - Dec 2020 +• Developed payment dashboard and checkout experiences for millions of merchants +• Built reusable React component library with 50+ components +• Implemented real-time data visualization using D3.js and Chart.js +• Achieved 99.9% uptime for critical payment flows +• Reduced customer support tickets by 30% through improved UX design +• Led A/B testing initiatives resulting in 25% increase in conversion rates + +KEY PROJECTS +🏠 Host Dashboard Redesign - 40% improvement in user task completion rates +💳 Payment Checkout Optimization - 35% reduction in cart abandonment +🛍️ Mobile PWA Development - 40% reduction in mobile bounce rate +⚡ Performance Optimization - 70% reduction in initial bundle size + +AWARDS & RECOGNITION +🏆 Airbnb Engineering Excellence Award (2023) +🥇 Stripe Innovation Award - Frontend Category (2020) +📱 Google Developer Expert - Web Technologies (2022) +🎨 Dribbble Featured Designer - 25K+ followers + +EDUCATION & CERTIFICATIONS +Bachelor of Science in Computer Science | UC Berkeley | 2015 +• Google Mobile Web Specialist (2023) • AWS Certified Cloud Practitioner (2022) +• React Developer Certification - Meta (2020)` + }, + 'backend-developer': { + filename: 'Senior_Backend_Developer_Resume.txt', + content: `ALEX RODRIGUEZ +Senior Backend Developer & System Architect +📧 alex.rodriguez@email.com | 📱 +1 (555) 890-1234 +🔗 linkedin.com/in/alexrodriguez | 💻 alexdev.io | 🐙 github.com/alexr + +═══════════════════════════════════════════════════════════════════════════════ + +PROFESSIONAL SUMMARY +═══════════════════════════════════════════════════════════════════════════════ +Experienced Senior Backend Developer with 7+ years of expertise in designing and implementing +scalable server-side applications and distributed systems. Expert in microservices architecture, +database optimization, and API design. Led backend initiatives that improved system performance +by 80% and reduced infrastructure costs by 40%. + +TECHNICAL EXPERTISE +Languages: Python, Java, Go, Node.js, C#, Rust +Frameworks: Django, FastAPI, Spring Boot, Express.js, .NET Core +Databases: PostgreSQL, MongoDB, Redis, MySQL, Cassandra, Elasticsearch +Cloud Platforms: AWS, Google Cloud, Azure • Message Queues: Apache Kafka, RabbitMQ +API Technologies: REST, GraphQL, gRPC, WebSocket • DevOps: Docker, Kubernetes, Jenkins + +PROFESSIONAL EXPERIENCE + +PRINCIPAL BACKEND ENGINEER | Discord | San Francisco, CA | Jan 2021 - Present +• Architect backend systems for real-time communication platform serving 150M+ users +• Design and implement microservices handling 1B+ messages daily +• Lead team of 10 backend engineers across multiple product areas +• Optimized database queries reducing response time by 75% +• Implemented event-driven architecture using Apache Kafka +• Achieved 99.99% uptime for critical messaging services + +SENIOR BACKEND DEVELOPER | Twitch | San Francisco, CA | Mar 2019 - Dec 2020 +• Developed streaming infrastructure supporting 30M+ daily active users +• Built real-time chat system handling 2M+ concurrent connections +• Implemented content delivery optimization reducing latency by 50% +• Designed auto-scaling systems handling traffic spikes during major events +• Led migration from monolithic to microservices architecture +• Reduced infrastructure costs by 35% through optimization initiatives + +KEY PROJECTS +💬 Real-time Messaging Platform - 1B+ messages daily with <100ms latency +🎮 Live Streaming Infrastructure - 3M+ concurrent users during major events +📱 Content Recommendation Engine - 35% increase in user engagement +☁️ Distributed File Storage - 99.999% data durability across petabytes + +AWARDS & RECOGNITION +🏆 Discord Engineering Excellence Award (2023) +🥇 Twitch Innovation Award - Infrastructure Category (2020) +📊 Top 1% Backend Developer - Stack Overflow (2022) +🌟 GitHub Arctic Code Vault Contributor (2020) + +EDUCATION & CERTIFICATIONS +Master of Science in Computer Science | Stanford University | 2017 +• AWS Certified Solutions Architect - Professional (2023) +• Google Cloud Professional Cloud Architect (2022) +• MongoDB Certified Developer Associate (2021)` + } + }; + + const template = templates[templateType]; + if (template) { + const blob = new Blob([template.content], { type: 'text/plain' }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = template.filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(url); + } + }; + + const submitAnalysis = async () => { + if (!file) return alert('Please upload a resume first'); + + setLoading(true); + const formData = new FormData(); + formData.append('resume', file); + formData.append('jobDescription', jd); + + try { + const { data } = await axios.post('http://localhost:5000/api/analyze', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }); + navigate('/results', { state: { data } }); + } catch (err) { + console.error(err); + alert('Analysis failed. Ensure server is running.'); + } finally { + setLoading(false); + } + }; + + return ( +
+ + {/* Professional Navbar */} + + +
+ + {/* Hero Section */} +
+ {/* Professional Hero Section */} +
+ {/* Premium Badge */} +
+
+ + + + +
+ + ✨ AI-Powered Resume Analysis • Trusted by 500K+ Professionals + +
+ + {/* Main Heading with Professional Typography */} +
+

+ + Land Your Dream Job + + + With AI Precision + +

+ +
+

+ Advanced AI technology analyzes your resume against job descriptions, + providing instant insights and + actionable recommendations to maximize your interview chances. +

+
+
+ + {/* Professional Feature Highlights */} +
+
+
+
+
+ +
+
+
+ Deep Analytics + 99.9% Accuracy +
+
+
+
+
+
+ +
+
+
+ Enterprise Security + Bank-Grade +
+
+
+
+
+
+ +
+
+
+ AI-Powered + GPT-4 Enhanced +
+
+
+ + {/* Professional Success Stats */} +
+
+
+
500K+
+
Resumes Analyzed
+
+
+
+
94%
+
Success Rate
+
+
+
+
4.9★
+
User Rating
+
+
+
+
+ + {/* Professional CTA Buttons */} +
+ + + + Build Resume + +
+
+ + {/* Professional Upload Section */} +
+ {/* Background Decoration */} +
+ +
+
+ + {/* Left: Resume Upload */} +
+
+
+
+
1
+
+
+

Upload Your Resume

+

PDF format • Maximum 16MB

+
+
+ +
{ e.preventDefault(); setDragging(true); }} + onDragLeave={() => setDragging(false)} + onDrop={handleDrop} + onClick={() => document.getElementById('fileInput').click()} + > + {/* Animated Background */} +
+ + setFile(e.target.files?.[0])} + /> + + {file ? ( +
+
+ +
+

{file.name}

+

{(file.size / 1024 / 1024).toFixed(2)} MB

+ +
+ ) : ( +
+
+
+ +
+
+ +
+
+
+

Drop your resume here

+

or click to browse from your device

+
+
+ PDF Only + Max 16MB +
+
+ )} +
+
+ + {/* Right: JD Input */} +
+
+
+
+
2
+
+
+

Job Description

+

Paste the complete job requirements

+
+
+ +
+