resume_parser / templates /review_output.html
Imarticuslearning's picture
Upload 3 files
6017878 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Resume Review Output</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"> <!-- Font Awesome CDN -->
<style>
body {
background-image: url('https://www.example.com/light-bg.jpg');
background-size: cover;
background-color: #f4f4f9;
color: #2c3e50;
font-family: 'Roboto', sans-serif;
overflow-x: hidden;
}
.container {
background: rgba(255, 255, 255, 0.95);
border-radius: 15px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
padding: 20px;
margin-top: 50px;
}
.card {
border: none;
background: linear-gradient(135deg, #ecf0f1, #ffffff);
border-radius: 15px;
transition: transform 0.3s, box-shadow 0.3s;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
}
.info-section .info-item {
background: rgba(236, 240, 241, 0.8);
padding: 15px;
margin-bottom: 10px;
border-radius: 10px;
transition: background-color 0.3s, transform 0.3s;
}
.info-section .info-item:hover {
background: rgba(236, 240, 241, 0.9);
transform: translateY(-3px);
}
.info-title {
font-size: 1.2rem;
font-weight: 500;
color: #2980b9;
}
.info-content {
font-size: 1rem;
font-weight: 400;
color: #34495e;
}
.btn-toggle {
background-color: #e74c3c;
border: none;
color: #ffffff;
cursor: pointer;
font-size: 1rem;
padding: 10px 20px;
border-radius: 5px;
display: inline-flex;
align-items: center;
transition: background-color 0.3s, transform 0.3s;
}
.btn-toggle::after {
content: '\25BC';
margin-left: 10px;
transition: transform 0.3s;
}
.btn-toggle[aria-expanded="true"]::after {
transform: rotate(180deg);
}
.btn-toggle:hover {
background-color: #c0392b;
transform: scale(1.05);
}
h1 {
font-size: 2.5rem;
font-weight: 700;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
color: #2c3e50;
}
a {
color: #3498db;
}
a:hover {
text-decoration: underline;
color: #2980b9;
}
.collapse {
background-color: rgba(255, 255, 255, 0.9);
padding: 10px;
border-radius: 10px;
}
.section-header {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.section-header i {
margin-right: 10px;
}
.tips-box {
opacity: 0;
visibility: hidden;
transition: opacity 0.4s ease, visibility 0.4s ease;
background: #f8f9fa;
padding: 15px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
max-width: 300px;
}
.hover-container:hover .tips-box {
opacity: 1;
visibility: visible;
}
.no-data {
color: #e74c3c;
font-style: italic;
font-size: 1rem;
}
/* Circular Progress Bar */
.circle-container {
display: flex;
justify-content: center;
align-items: center;
margin-top: 20px;
}
.progress-circle {
width: 150px;
height: 150px;
background: #e6e6e6;
border-radius: 50%;
position: relative;
overflow: hidden;
}
.circle {
width: 100%;
height: 100%;
border-radius: 50%;
background: #3b6ff3;
clip-path: circle(50% at 50% 50%);
position: relative;
overflow: hidden;
}
.mask, .fill {
width: 100%;
height: 100%;
position: absolute;
border-radius: 50%;
}
.mask.full {
clip: rect(0px, 150px, 150px, 75px);
background-color: #3b6ff3;
transform: rotate(180deg);
}
.mask.half {
clip-path: polygon(50% 50%, 0% 100%, 0% 0%);
transform: rotate(calc(3.6deg * 75)); /* 75 is the percentage */
transform-origin: center left;
}
.inside-circle {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
font-weight: bold;
color: #3b6ff3;
background: white;
border-radius: 50%;
width: 110px;
height: 110px;
margin: auto;
top: 20px;
left: 20px;
}
/* Right Sidebar Styling */
#rightSidebar {
position: fixed;
top: 70px; /* below navbar or header if any, adjust as needed */
right: 20px;
width: 320px;
max-height: 80vh;
background: rgba(255, 255, 255, 0.95);
border-radius: 15px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
padding: 20px;
overflow-y: auto;
z-index: 1050;
font-family: 'Roboto', sans-serif;
color: #2c3e50;
}
#rightSidebar h4 {
font-weight: 700;
color: #2980b9;
margin-bottom: 10px;
border-bottom: 2px solid #2980b9;
padding-bottom: 5px;
}
#rightSidebar .section {
margin-bottom: 20px;
}
#rightSidebar .section ul {
padding-left: 20px;
margin-top: 10px;
}
#rightSidebar .no-data {
font-style: italic;
color: #e74c3c;
font-size: 0.9rem;
}
/* Collapse toggles for sidebar */
#rightSidebar .btn-toggle {
background-color: #2980b9;
color: white;
font-size: 0.95rem;
padding: 5px 10px;
border-radius: 5px;
border: none;
width: 100%;
text-align: left;
margin-top: 5px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
user-select: none;
}
#rightSidebar .btn-toggle:hover {
background-color: #216b9c;
}
#rightSidebar .btn-toggle i {
transition: transform 0.3s ease;
}
#rightSidebar .btn-toggle[aria-expanded="true"] i {
transform: rotate(180deg);
}
.skill-tag {
display: inline-block;
background-color: #e0f7fa;
color: #00796b;
padding: 4px 8px;
border-radius: 12px;
font-size: 14px;
border: 1px solid #b2ebf2;
margin: 3px;
}
.skills-container {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.gemini-suggestion-box {
margin-top: 30px;
padding: 20px;
border: 1px solid #ccc;
border-radius: 12px;
background-color: #f9f9f9;
max-width: 600px;
}
.gemini-suggestion-box textarea {
width: 100%;
height: 120px;
padding: 10px;
border-radius: 8px;
font-size: 14px;
resize: vertical;
margin-bottom: 10px;
}
.gemini-suggestion-box button {
background-color: #5a2a91;
color: white;
border: none;
padding: 10px 16px;
border-radius: 6px;
cursor: pointer;
}
.gemini-suggestion-box pre {
margin-top: 15px;
background-color: #efefef;
padding: 12px;
border-radius: 8px;
white-space: pre-wrap;
}
.score-badge {
background: #3498db;
color: white;
padding: 3px 8px;
border-radius: 12px;
font-size: 0.85rem;
margin-left: 10px;
}
</style>
</head>
<body>
<div class="container">
<div class="card shadow-lg p-4">
<h3 class="text-center mb-4">Resume Review Output</h3>
<div class="content">
<div class="info-section">
<!-- Hover Section -->
<div class="info-item hover-container">
<!-- Resume Score -->
<div>
<div class="section-header d-flex align-items-center mb-2">
<i class="fas fa-star me-2"></i>
<div class="info-title">Resume Score:</div>
</div>
<div class="info-content">
<!-- {{ parsed_resume['imarticus_score'] or 'No score available.' }} -->
</div>
</div>
<div class="info-content">
{% set max_score = 52 %}
{% set score = parsed_resume['imarticus_score'] %}
{% set percentage = (score / max_score) * 100 %}
{% if percentage == 0 %}
{% set rating = 'The resume is bad' %}
{% elif percentage <= 15 %}
{% set rating = 'Resume needs significant improvement' %}
{% elif percentage <= 35 %}
{% set rating = 'Resume needs improvement' %}
{% elif percentage <= 55 %}
{% set rating = 'Resume is average' %}
{% elif percentage <= 75 %}
{% set rating = 'Resume is good' %}
{% elif percentage <= 90 %}
{% set rating = 'Resume is very good' %}
{% else %}
{% set rating = 'Resume is excellent' %}
{% endif %}
<!--<p>Resume Score: <strong>{{ percentage|round(2) }}% </strong></p>-->
<!-- Circular Progress Bar Section -->
<!--
<div class="progress-circle">
<div class="mask full">
<div class="fill" style="transform: rotate(180deg);"></div>
</div>
<div class="mask half">
<div class="fill" style="transform: rotate(90deg);"></div>
<div class="inside-circle">{{ percentage|round(2) }}%</div>
</div>
-->
<p>Evaluation: <strong>{{ rating }}</strong></p>
</div>
<!--
<div class="tips-box">
<p class="fw-bold mb-2"><i class="fas fa-lightbulb me-2"></i>Tips & Hints</p>
<ul class="mb-0">
<li>Incorporate job-specific keywords to match your desired role.</li>
<li>Quantify your achievements, such as "Reduced costs by 15%."</li>
<li>Keep formatting consistent, including fonts and alignment.</li>
<li>Add a concise professional summary highlighting key skills.</li>
<li>Proofread thoroughly to eliminate grammar or spelling mistakes.</li>
</ul>
</div>
-->
</div>
<!-- Basic Information Section -->
<div class="info-item">
<div class="section-header">
<i class="fas fa-user"></i>
<div class="info-title">Basic Information Section:</div>
</div>
<div class="info-content">{{ parsed_resume['basic_information_section'] }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-id-badge"></i>
<div class="info-title">Name:</div>
<span class="score-badge">{{ parsed_resume['name_score'] }} / 3</span>
</div>
<div class="info-content">{{ parsed_resume['name'] }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-phone"></i>
<div class="info-title">Contact Number:</div>
<span class="score-badge">{{ parsed_resume['contact_score'] }} / 3</span>
</div>
<div class="info-content">{{ parsed_resume['contact_number'] }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-envelope"></i>
<div class="info-title">Email:</div>
<span class="score-badge">{{ parsed_resume['email_score'] }} / 3</span>
</div>
<div class="info-content">{{ parsed_resume['email'] }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fab fa-linkedin"></i>
<div class="info-title">LinkedIn:</div>
<span class="score-badge">{{ parsed_resume['linkedin_url_score'] }} / 3</span>
</div>
<div class="info-content"><a href="{{ parsed_resume['linkedin_urls'] }}">{{ parsed_resume['linkedin_urls'] }}</a></div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fab fa-github"></i>
<div class="info-title">GitHub:</div>
<span class="score-badge">{{ parsed_resume['github_url_score'] }} / 3</span>
</div>
<div class="info-content"><a href="{{ parsed_resume['github_urls'] }}">{{ parsed_resume['github_urls'] }}</a></div>
</div>
<!-- Extra URLs Section -->
<div class="info-item">
<div class="section-header">
<i class="fas fa-link"></i>
<div class="info-title">Additional URLs:</div>
</div>
<div class="info-content">
<ul>
{% if parsed_resume['extra_urls'] %}
{% for platform, urls in parsed_resume['extra_urls'].items() %}
{% for url in urls %}
<li><strong>{{ platform|capitalize }}:</strong> <a href="{{ url }}" target="_blank">{{ url }}</a></li>
{% endfor %}
{% endfor %}
{% else %}
<p class="no-data">No additional URLs found.</p>
{% endif %}
</ul>
</div>
</div>
<p><strong>Found Skills:</strong></p>
<div class="skills-container" id="found-keywords">
<ul>
{% if parsed_resume['found_keywords'] %}
{% for keyword in parsed_resume['found_keywords'] %}
<span class="skill-tag">{{ keyword }}</span>
{% endfor %}
{% else %}
<span style="color: #888;">No skills found.</span>
{% endif %}
</ul>
</div>
<!--
<p><strong>Missing Skills:</strong>
<button class="btn-toggle" data-toggle="collapse" data-target="#missing-skills" aria-expanded="false" aria-controls="missing-skills">
<i class="fas fa-minus-circle"></i> Click here
</button>
</p>
<div class="collapse" id="missing-skills">
<ul>
{% if parsed_resume['missing_skills'] %}
{% for skill in parsed_resume['missing_skills'] %}
<li>{{ skill }}</li>
{% endfor %}
{% else %}
<p class="no-data">No missing skills found.</p>
{% endif %}
</ul>
</div>
<p><strong>Missing Sections:</strong>
<button class="btn-toggle" data-toggle="collapse" data-target="#missing-sections" aria-expanded="false" aria-controls="missing-sections">
<i class="fas fa-minus-circle"></i> Click here
</button>
</p>
<div class="collapse" id="missing-sections">
<ul>
{% if parsed_resume['missing_sections'] %}
{% for section in parsed_resume['missing_sections'] %}
<li>{{ section }}</li>
{% endfor %}
{% else %}
<p class="no-data">No missing sections found.</p>
{% endif %}
</ul>
</div>
-->
<p><strong>Grammar Issues in Career Objective and Profile Summary:</strong>
</p>
<div class="skills-container" id="grammar-issues">
<ul>
{% if parsed_resume['grammar_issues'] %}
{% for issue in parsed_resume['grammar_issues'] %}
<li>{{ issue }}</li>
{% endfor %}
{% else %}
<span style="color: #888;">No grammar issues found.</span>
{% endif %}
</ul>
</div>
<p><strong>Spelling Errors:</strong>
</p>
<div class="skills-container" id="spelling-errors">
<ul>
{% if parsed_resume['spelling_errors'] %}
{% for error in parsed_resume['spelling_errors'] %}
<li>{{ error }}</li>
{% endfor %}
{% else %}
<span style="color: #888;">No spelling errors found.</span>
{% endif %}
</ul>
</div>
<!-- Experience and Other Sections -->
<div class="info-item">
<div class="section-header">
<i class="fas fa-sort-amount-up"></i>
<div class="info-title">Experience Order Suggestion:</div>
</div>
<div class="info-content">{{ parsed_resume['experience_order_suggestion'] or 'No suggestion available.' }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-briefcase"></i>
<div class="info-title">Work Experience Check:</div>
</div>
<div class="info-content">{{ parsed_resume['work_experience_check'] or 'No issues found.' }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-clock"></i>
<div class="info-title">Project Length Suggestion:</div>
</div>
<div class="info-content">{{ parsed_resume['project_length_suggestion'] or 'No suggestion available.' }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-project-diagram"></i>
<div class="info-title">Common Projects:</div>
</div>
<div class="info-content">{{ parsed_resume['common_projects'] or 'No projects found.' }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-certificate"></i>
<div class="info-title">Certifications & Academic Endeavours:</div>
</div>
<div class="info-content">
{% if parsed_resume['certifications']['found'] %}
<span style="color: green;">✔ {{ parsed_resume['certifications']['message'] }}</span>
<br>
<strong>Extracted Text:</strong> {{ parsed_resume['certifications']['text'] }}
{% else %}
<span style="color: red;">✖ No Imarticus certification found.</span>
{% endif %}
</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-graduation-cap"></i>
<div class="info-title">Education Order Suggestion:</div>
</div>
<div class="info-content">{{ parsed_resume['education_order_suggestion'] or 'No suggestion available.' }}</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-link"></i>
<div class="info-title">Recommended Blogs:</div>
</div>
<div class="info-content">
{% if parsed_resume['recommended_blogs'] %}
<ul>
{% for blog in parsed_resume['recommended_blogs'] %}
<li><a href="{{ blog }}" target="_blank">{{ blog }}</a></li>
{% endfor %}
</ul>
{% else %}
No recommended blogs found.
{% endif %}
</div>
</div>
<div class="info-item">
<div class="section-header">
<i class="fas fa-youtube"></i>
<div class="info-title">Recommended YouTube Links:</div>
</div>
<div class="info-content">
{% if parsed_resume['recommended_youtube_links'] %}
<ul>
{% for youtube_link in parsed_resume['recommended_youtube_links'] %}
<li><a href="{{ youtube_link }}" target="_blank">{{ youtube_link }}</a></li>
{% endfor %}
</ul>
{% else %}
No recommended YouTube links found.
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
<div id="rightSidebar" aria-label="Resume Suggestions Sidebar" role="complementary">
<p>Resume Score: <strong>{{ percentage|round(2) }}% </strong></p>
<div class="progress-circle">
<div class="mask full">
<div class="fill" style="transform: rotate(180deg);"></div> <!-- adjust angle for >50% -->
</div>
<div class="mask half">
<div class="fill" style="transform: rotate(90deg);"></div> <!-- adjust angle for actual percentage -->
</div>
<div class="inside-circle">{{ percentage|round(2) }}%</div>
</div>
<div class="section">
<h4><i class="fas fa-lightbulb"></i> Tips for Basic Information</h4>
<ul>
<li>Incorporate job-specific keywords to match your desired role.</li>
<li>Quantify your achievements, such as "Reduced costs by 15%."</li>
<li>Keep formatting consistent, including fonts and alignment.</li>
<li>Add a concise professional summary highlighting key skills.</li>
<li>Proofread thoroughly to eliminate grammar or spelling mistakes.</li>
</ul>
</div>
<div class="section">
<button class="btn-toggle" type="button" data-toggle="collapse" data-target="#missingSectionsCollapse" aria-expanded="false" aria-controls="missingSectionsCollapse">
<span>Show Missing Sections</span> <i class="fas fa-chevron-down"></i>
</button>
<div class="collapse" id="missingSectionsCollapse">
<ul>
{% if parsed_resume['missing_sections'] %}
{% for section in parsed_resume['missing_sections'] %}
<li>{{ section }}</li>
{% endfor %}
{% else %}
<li class="no-data">No missing sections found.</li>
{% endif %}
</ul>
</div>
</div>
<div class="section">
<button class="btn-toggle" type="button" data-toggle="collapse" data-target="#skillsToAddCollapse" aria-expanded="false" aria-controls="skillsToAddCollapse">
<span>Skills to be Added</span> <i class="fas fa-chevron-down"></i>
</button>
<div class="collapse" id="skillsToAddCollapse">
<ul>
{% if parsed_resume['missing_skills'] %}
{% for skill in parsed_resume['missing_skills'] %}
<li>{{ skill }}</li>
{% endfor %}
{% else %}
<li class="no-data">No missing skills found.</li>
{% endif %}
</ul>
</div>
</div>
<div class="section">
<button class="btn-toggle" type="button" data-toggle="collapse" data-target="#projectSuggestionsCollapse" aria-expanded="false" aria-controls="projectSuggestionsCollapse">
<span>Project Suggestions</span> <i class="fas fa-chevron-down"></i>
</button>
<div class="collapse" id="projectSuggestionsCollapse">
<ul>
{% if parsed_resume['common_projects'] %}
<li>{{ parsed_resume['common_projects'] }}</li>
{% else %}
<li class="no-data">No project suggestions available.</li>
{% endif %}
</ul>
</div>
</div>
<div class="section">
<button class="btn-toggle" type="button" data-toggle="collapse" data-target="#certificationSuggestionsCollapse" aria-expanded="false" aria-controls="certificationSuggestionsCollapse">
<span>Certifications Based Suggestions</span> <i class="fas fa-chevron-down"></i>
</button>
<div class="collapse" id="certificationSuggestionsCollapse">
<div>
{% if parsed_resume['certifications']['found'] %}
<p style="color: green;">✔ {{ parsed_resume['certifications']['message'] }}</p>
<p><strong>Extracted Text:</strong> {{ parsed_resume['certifications']['text'] }}</p>
{% else %}
<p class="no-data">✖ No Imarticus certification found.</p>
{% endif %}
</div>
</div>
</div>
<div class="section">
<button class="btn-toggle" type="button" data-toggle="collapse" data-target="#projectSuggestionsCollapse" aria-expanded="false" aria-controls="projectSuggestionsCollapse">
<span>Grammar Issues</span> <i class="fas fa-chevron-down"></i>
</button>
<div class="skills-container" id="grammar-issues">
<ul>
{% if parsed_resume['grammar_issues'] %}
{% for issue in parsed_resume['grammar_issues'] %}
<li>{{ issue }}</li>
{% endfor %}
{% else %}
<span style="color: #888;">No grammar issues found.</span>
{% endif %}
</ul>
</div>
</div>
</div>
<!-- Toast Container for Missing Section Alerts -->
<div aria-live="polite" aria-atomic="true"
style="position: fixed; top: 20px; right: 20px; z-index: 1060;">
<div id="missingInfoToast" class="toast" role="alert" aria-live="assertive"
aria-atomic="true" data-delay="7000">
<div class="toast-header bg-danger text-white">
<strong class="mr-auto">Missing Information Alert</strong>
<button type="button" class="ml-2 mb-1 close text-white" data-dismiss="toast" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="toast-body">
<ul id="missingInfoList" style="margin:0; padding-left: 20px;"></ul>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.1/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>