<!-- ====================================================================
BROLYTICS LAB.IT - প্রফেশনাল এমপ্লয়ী পোর্টফোলিও সিস্টেম
প্ল্যাটফর্ম: Blogger / Blogspot (Pages > HTML View)
==================================================================== -->
<div id="brolytics-employee-portfolio">
<!-- ১. হিরো সেকশন (HERO BANNER) -->
<header class="blp-hero">
<div class="blp-hero-glow"></div>
<div class="blp-hero-container">
<!-- বাম পাশের প্রোফাইল ছবি -->
<div class="blp-hero-avatar-col">
<div class="blp-avatar-frame">
<img id="blp-hero-img" src="" alt="" fetchpriority="high" />
<div class="blp-signature" id="blp-signature">Rahid Hasan</div>
</div>
</div>
<!-- ডান পাশের প্রোফাইল ইনফো -->
<div class="blp-hero-info-col">
<div class="blp-role-pill">
<svg width="13" height="13" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
<span id="blp-badge-role">Full Stack Developer</span>
</div>
<h1 class="blp-hero-name">
<span id="blp-first-name">Rahid</span> <span class="blp-blue-text" id="blp-last-name">Hasan</span>
</h1>
<p class="blp-hero-designation" id="blp-hero-desig">Full Stack Developer</p>
<div class="blp-hero-meta-row">
<div class="blp-meta-item">
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg>
<span id="blp-meta-exp">5+ Years Experience</span>
</div>
<div class="blp-meta-item">
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
<span id="blp-meta-loc">Dinajpur, Bangladesh</span>
</div>
</div>
<p class="blp-hero-summary" id="blp-hero-bio"></p>
<div class="blp-hero-btns">
<button type="button" class="blp-btn blp-btn-download" id="blp-download-trigger">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
Download Profile
</button>
<button type="button" class="blp-btn blp-btn-hire-hero blp-open-modal">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
Hire Me
</button>
</div>
</div>
</div>
</header>
<!-- ২. মূল কন্টেন্ট বডি -->
<main class="blp-body">
<!-- ৩-কলামের প্রথম সারি (ABOUT ME, QUICK FACTS, CORE SKILLS & TOOLS) -->
<section class="blp-grid-top">
<!-- ABOUT ME CARD -->
<div class="blp-card blp-card-about">
<div class="blp-badge-header">
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
ABOUT ME
</div>
<h2 class="blp-card-title">Let's Build Something Great Together</h2>
<p class="blp-about-desc" id="blp-about-bio"></p>
<div class="blp-about-details-list">
<div class="blp-about-row">
<span class="blp-about-col-label"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> Name :</span>
<span class="blp-about-col-val" id="blp-detail-name">Rahid Hasan</span>
</div>
<div class="blp-about-row">
<span class="blp-about-col-label"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg> Affiliation :</span>
<span class="blp-about-col-val" id="blp-detail-company">Brolytics Lab.IT</span>
</div>
<div class="blp-about-row">
<span class="blp-about-col-label"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg> Experience :</span>
<span class="blp-about-col-val" id="blp-detail-exp">5+ Years</span>
</div>
<div class="blp-about-row">
<span class="blp-about-col-label"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg> Location :</span>
<span class="blp-about-col-val" id="blp-detail-location">Dinajpur, Bangladesh</span>
</div>
</div>
</div>
<!-- QUICK FACTS CARD -->
<div class="blp-card blp-card-facts">
<div class="blp-badge-header">
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>
QUICK FACTS
</div>
<div class="blp-facts-container">
<div class="blp-fact-box">
<div class="blp-fact-ico">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="8" r="7"/><polyline points="8.21 13.89 7 23 12 20 17 23 15.79 13.88"/></svg>
</div>
<div>
<div class="blp-fact-digit" id="blp-qf-exp">5+</div>
<div class="blp-fact-lbl">Years Experience</div>
</div>
</div>
<div class="blp-fact-box">
<div class="blp-fact-ico">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>
</div>
<div>
<div class="blp-fact-digit" id="blp-qf-projects">20+</div>
<div class="blp-fact-lbl">Projects Completed</div>
</div>
</div>
<div class="blp-fact-box">
<div class="blp-fact-ico">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
</div>
<div>
<div class="blp-fact-digit" id="blp-qf-satisfaction">100%</div>
<div class="blp-fact-lbl">Client Satisfaction</div>
</div>
</div>
<div class="blp-fact-box">
<div class="blp-fact-ico">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 14 14"/></svg>
</div>
<div>
<div class="blp-fact-digit" id="blp-qf-avail">Available</div>
<div class="blp-fact-lbl">For New Projects</div>
</div>
</div>
</div>
</div>
<!-- CORE SKILLS & TOOLS CARD -->
<div class="blp-card blp-card-skills">
<div class="blp-badge-header">
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>
CORE SKILLS
</div>
<div class="blp-skills-pills-wrap" id="blp-skills-list"></div>
<div class="blp-divider"></div>
<div class="blp-badge-header">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="4" y="4" width="16" height="16" rx="2"/><rect x="9" y="9" width="6" height="6"/><line x1="9" y1="1" x2="9" y2="4"/><line x1="15" y1="1" x2="15" y2="4"/><line x1="9" y1="20" x2="9" y2="23"/><line x1="15" y1="20" x2="15" y2="23"/></svg>
TOOLS & TECHNOLOGIES
</div>
<div class="blp-tools-list" id="blp-tools-list"></div>
</div>
</section>
<!-- ২-কলামের দ্বিতীয় সারি (WORK HISTORY & EDUCATION/CERTIFICATIONS) -->
<section class="blp-grid-middle">
<!-- WORK EXPERIENCE TIMELINE -->
<div class="blp-card blp-card-experience">
<div class="blp-badge-header">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg>
WORK HISTORY & EXPERIENCE
</div>
<div class="blp-timeline" id="blp-timeline-list"></div>
</div>
<!-- RIGHT SIDE: EDUCATION & CERTIFICATIONS -->
<div class="blp-side-group">
<!-- EDUCATION -->
<div class="blp-card" id="blp-edu-card">
<div class="blp-badge-header">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 10v6M2 10l10-5 10 5-10 5z"/><path d="M6 12v5c3 3 9 3 12 0v-5"/></svg>
EDUCATION
</div>
<div class="blp-edu-items" id="blp-edu-list"></div>
</div>
<!-- CERTIFICATIONS -->
<div class="blp-card" id="blp-cert-card">
<div class="blp-badge-header">
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"/></svg>
CERTIFICATIONS
</div>
<div class="blp-cert-items" id="blp-cert-list"></div>
</div>
</div>
</section>
<!-- ৩. SERVICES I PROVIDE -->
<section class="blp-section-wrapper" id="blp-services-sec">
<div class="blp-sec-header">
<span class="blp-sec-sub">WHAT I CAN DO FOR YOU</span>
<h2 class="blp-sec-title">Services I Provide</h2>
</div>
<div class="blp-services-grid" id="blp-services-grid"></div>
</section>
<!-- ৪. FEATURED PROJECTS -->
<section class="blp-section-wrapper" id="blp-projects-sec">
<div class="blp-sec-header blp-header-flex">
<div>
<span class="blp-sec-sub">FEATURED PROJECTS</span>
<h2 class="blp-sec-title">Some of My Recent Work</h2>
</div>
<a href="https://brolyticslab.blogspot.com/" target="_blank" rel="noopener noreferrer" class="blp-link-all">
View All Projects
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg>
</a>
</div>
<div class="blp-projects-grid" id="blp-projects-grid"></div>
</section>
<!-- ৫. BOTTOM HIRE CTA BANNER -->
<section class="blp-bottom-cta">
<div class="blp-cta-content">
<div class="blp-cta-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 3s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>
</div>
<div>
<h3 class="blp-cta-title">Interested in working together?</h3>
<p class="blp-cta-subtitle">Feel free to reach out if you have a project in mind or just want to say hello!</p>
</div>
</div>
<button type="button" class="blp-btn blp-btn-cta blp-open-modal">
<svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></svg>
Hire Me
</button>
</section>
<!-- ৬. ফুটার (কোম্পানি অফিশিয়াল কন্টাক্ট) -->
<footer class="blp-footer">
<p class="blp-footer-line">
Official Employee Portfolio •
<strong><a href="https://brolyticslab.blogspot.com/" target="_blank" rel="noopener noreferrer">Brolytics Lab.IT</a></strong>
</p>
<p class="blp-footer-sub">
Official Hiring: <a href="mailto:brolyticsit@gmail.com">brolyticsit@gmail.com</a> • WhatsApp: <a href="https://wa.me/8801845428433" target="_blank" rel="noopener noreferrer">+880 1845-428433</a>
</p>
</footer>
</main>
<!-- ৭. হায়ার মি মডাল (POPUP MODAL FORM) -->
<div class="blp-modal-overlay" id="blp-modal" aria-hidden="true">
<div class="blp-modal-card">
<button type="button" class="blp-modal-close" id="blp-modal-close-btn">×</button>
<!-- ইনপুট ফর্ম ভিউ -->
<div id="blp-form-stage">
<div class="blp-modal-top">
<img id="blp-modal-thumb" src="" alt="Avatar" class="blp-modal-avatar" />
<div>
<h3 class="blp-modal-title" id="blp-modal-heading">Hire Rahid Hasan</h3>
<p class="blp-modal-desc">Interested in working with this professional? Tell us about your requirement and our team will contact you.</p>
</div>
</div>
<form id="blp-ajax-form" novalidate>
<!-- স্প্যাম রোধ করার জন্য Honeypot -->
<input type="text" name="_honey" style="display:none !important;" tabindex="-1" autocomplete="off" />
<!-- স্বয়ংক্রিয়ভাবে ডাটা সাবমিট হবে -->
<input type="hidden" name="Selected_Employee" id="blp-input-emp-name" value="" />
<input type="hidden" name="Designation" id="blp-input-emp-role" value="" />
<input type="hidden" name="Portfolio_URL" id="blp-input-page-url" value="" />
<input type="hidden" name="_subject" id="blp-input-email-sub" value="New Hiring Request" />
<div class="blp-form-fields-grid">
<div class="blp-input-box">
<label>Your Name <span class="blp-red">*</span></label>
<input type="text" id="blp-f-name" name="Client_Name" placeholder="Enter your name" required />
<span class="blp-input-err">Name is required</span>
</div>
<div class="blp-input-box">
<label>Phone Number <span class="blp-red">*</span></label>
<input type="tel" id="blp-f-phone" name="Client_Phone" placeholder="+880 1XXX XXXXXX" required />
<span class="blp-input-err">Valid phone number required</span>
</div>
<div class="blp-input-box">
<label>Email Address <span class="blp-red">*</span></label>
<input type="email" id="blp-f-email" name="Client_Email" placeholder="you@company.com" required />
<span class="blp-input-err">Valid email is required</span>
</div>
<div class="blp-input-box">
<label>Company Name <span class="blp-red">*</span></label>
<input type="text" id="blp-f-company" name="Client_Company" placeholder="Your company name" required />
<span class="blp-input-err">Company name is required</span>
</div>
<div class="blp-input-box">
<label>Project / Business Name</label>
<input type="text" id="blp-f-project" name="Project_Name" placeholder="Project or business name" />
</div>
<div class="blp-input-box">
<label>Service Required <span class="blp-red">*</span></label>
<select id="blp-f-service" name="Service_Required" required>
<option value="" disabled selected>Select service</option>
</select>
<span class="blp-input-err">Please select a service</span>
</div>
<div class="blp-input-box blp-span-full">
<label>Website URL <span class="blp-gray">(Optional)</span></label>
<input type="url" id="blp-f-web" name="Client_Website" placeholder="https://example.com" />
</div>
<div class="blp-input-box blp-span-full">
<label>Project Details / Message <span class="blp-red">*</span></label>
<textarea id="blp-f-msg" name="Project_Details" rows="3" placeholder="Tell us about your project or requirement..." required></textarea>
<span class="blp-input-err">Please write your project requirement (minimum 10 characters)</span>
</div>
</div>
<div class="blp-modal-btn-row">
<button type="submit" class="blp-btn blp-btn-submit" id="blp-submit-button">
<svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></svg>
<span>Send Hiring Request</span>
</button>
<p class="blp-safe-note">Your request will be sent securely to Brolytics Lab.IT.</p>
</div>
</form>
</div>
<!-- সফলভাবে সাবমিট হওয়ার কনফার্মেশন স্ক্রিন (ছবির মতোই গ্রিন ব্যাজ) -->
<div id="blp-success-stage" class="blp-success-wrap" style="display:none;">
<div class="blp-green-check">
<svg width="34" height="34" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
</div>
<h3 class="blp-success-heading">Thank you for your request!</h3>
<p class="blp-success-paragraph">Our team has received your hiring inquiry. Brolytics Lab.IT will contact you shortly.</p>
<button type="button" class="blp-btn blp-btn-close-final" id="blp-final-close">Close</button>
</div>
</div>
</div>
</div>
<!-- ====================================================================
সিএসএস স্টাইল (সম্পূর্ণ স্কোপড: ব্লগারে কোনও কনফ্লিক্ট তৈরি করবে না)
==================================================================== -->
<style>
#brolytics-employee-portfolio {
--blp-navy-dark: #07152b;
--blp-navy-deep: #050e1d;
--blp-blue: #2563eb;
--blp-blue-light: #38bdf8;
--blp-blue-hover: #1d4ed8;
--blp-bg-subtle: #f1f6fd;
--blp-card-bg: #ffffff;
--blp-text-dark: #0f172a;
--blp-text-gray: #64748b;
--blp-border: #e2e8f0;
--blp-border-light: #edf2f7;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
color: var(--blp-text-dark);
background-color: var(--blp-bg-subtle);
line-height: 1.5;
width: 100%;
margin: 0 auto;
box-sizing: border-box;
overflow-x: hidden;
}
#brolytics-employee-portfolio *,
#brolytics-employee-portfolio *::before,
#brolytics-employee-portfolio *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
/* BUTTONS */
#brolytics-employee-portfolio .blp-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 10px 22px;
font-size: 0.9rem;
font-weight: 600;
border-radius: 8px;
cursor: pointer;
border: none;
outline: none;
transition: all 0.2s ease;
text-decoration: none;
}
#brolytics-employee-portfolio .blp-btn-download {
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.22);
color: #ffffff;
}
#brolytics-employee-portfolio .blp-btn-download:hover {
background: rgba(255, 255, 255, 0.18);
transform: translateY(-1px);
}
#brolytics-employee-portfolio .blp-btn-hire-hero {
background: var(--blp-blue);
color: #ffffff;
box-shadow: 0 4px 14px rgba(37, 99, 235, 0.35);
}
#brolytics-employee-portfolio .blp-btn-hire-hero:hover {
background: var(--blp-blue-hover);
transform: translateY(-1px);
}
/* HERO BANNER */
#brolytics-employee-portfolio .blp-hero {
position: relative;
background: linear-gradient(135deg, #050e1d 0%, #081a38 55%, #0b2654 100%);
color: #ffffff;
padding: 46px 24px;
border-radius: 0 0 16px 16px;
overflow: hidden;
}
#brolytics-employee-portfolio .blp-hero-glow {
position: absolute;
top: 0;
right: 0;
width: 60%;
height: 100%;
background: radial-gradient(circle at 80% 20%, rgba(56, 189, 248, 0.15), transparent 60%);
pointer-events: none;
}
#brolytics-employee-portfolio .blp-hero-container {
max-width: 1160px;
margin: 0 auto;
display: flex;
align-items: center;
gap: 36px;
position: relative;
z-index: 2;
}
#brolytics-employee-portfolio .blp-avatar-frame {
position: relative;
width: 195px;
height: 195px;
border-radius: 12px;
padding: 3px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.35), rgba(37, 99, 235, 0.5));
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.4);
flex-shrink: 0;
}
#brolytics-employee-portfolio #blp-hero-img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 9px;
display: block;
background: #1e293b;
}
#brolytics-employee-portfolio .blp-signature {
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
font-family: cursive, "Brush Script MT", sans-serif;
font-size: 1.15rem;
color: #ffffff;
text-shadow: 0 2px 5px rgba(0, 0, 0, 0.85);
white-space: nowrap;
pointer-events: none;
}
#brolytics-employee-portfolio .blp-hero-info-col {
flex: 1;
}
#brolytics-employee-portfolio .blp-role-pill {
display: inline-flex;
align-items: center;
gap: 6px;
background: rgba(37, 99, 235, 0.25);
border: 1px solid rgba(56, 189, 248, 0.35);
color: #7dd3fc;
font-size: 0.76rem;
font-weight: 700;
padding: 4px 12px;
border-radius: 9999px;
margin-bottom: 10px;
}
#brolytics-employee-portfolio .blp-hero-name {
font-size: 2.35rem;
font-weight: 800;
line-height: 1.15;
letter-spacing: -0.02em;
margin-bottom: 4px;
color: #ffffff;
}
#brolytics-employee-portfolio .blp-blue-text {
color: #38bdf8;
}
#brolytics-employee-portfolio .blp-hero-designation {
font-size: 1.1rem;
color: #cbd5e1;
margin-bottom: 12px;
font-weight: 500;
}
#brolytics-employee-portfolio .blp-hero-meta-row {
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-bottom: 14px;
}
#brolytics-employee-portfolio .blp-meta-item {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 0.86rem;
color: #cbd5e1;
}
#brolytics-employee-portfolio .blp-meta-item svg {
color: #38bdf8;
}
#brolytics-employee-portfolio .blp-hero-summary {
font-size: 0.93rem;
color: #cbd5e1;
line-height: 1.6;
max-width: 680px;
margin-bottom: 22px;
}
#brolytics-employee-portfolio .blp-hero-btns {
display: flex;
flex-wrap: wrap;
gap: 14px;
}
/* MAIN BODY CONTAINER */
#brolytics-employee-portfolio .blp-body {
max-width: 1160px;
margin: 0 auto;
padding: 30px 18px 48px;
display: flex;
flex-direction: column;
gap: 30px;
}
/* CARDS BASE */
#brolytics-employee-portfolio .blp-card {
background: var(--blp-card-bg);
border: 1px solid var(--blp-border);
border-radius: 12px;
padding: 22px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
transition: transform 0.2s, box-shadow 0.2s;
}
#brolytics-employee-portfolio .blp-card:hover {
box-shadow: 0 6px 14px rgba(0, 0, 0, 0.06);
}
#brolytics-employee-portfolio .blp-badge-header {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 0.72rem;
font-weight: 800;
color: var(--blp-blue);
letter-spacing: 0.05em;
margin-bottom: 10px;
}
#brolytics-employee-portfolio .blp-card-title {
font-size: 1.25rem;
font-weight: 800;
color: var(--blp-text-dark);
margin-bottom: 12px;
line-height: 1.3;
}
#brolytics-employee-portfolio .blp-divider {
height: 1px;
background: var(--blp-border-light);
margin: 18px 0;
}
/* TOP ROW: 3 COLUMNS */
#brolytics-employee-portfolio .blp-grid-top {
display: grid;
grid-template-columns: 1.3fr 0.85fr 1fr;
gap: 18px;
}
#brolytics-employee-portfolio .blp-about-desc {
font-size: 0.88rem;
color: var(--blp-text-gray);
line-height: 1.6;
margin-bottom: 18px;
}
#brolytics-employee-portfolio .blp-about-details-list {
display: flex;
flex-direction: column;
gap: 8px;
border-top: 1px dashed var(--blp-border);
padding-top: 14px;
}
#brolytics-employee-portfolio .blp-about-row {
display: flex;
justify-content: space-between;
font-size: 0.84rem;
}
#brolytics-employee-portfolio .blp-about-col-label {
display: inline-flex;
align-items: center;
gap: 5px;
color: var(--blp-text-gray);
}
#brolytics-employee-portfolio .blp-about-col-val {
font-weight: 600;
color: var(--blp-text-dark);
}
/* QUICK FACTS */
#brolytics-employee-portfolio .blp-facts-container {
display: flex;
flex-direction: column;
gap: 14px;
}
#brolytics-employee-portfolio .blp-fact-box {
display: flex;
align-items: center;
gap: 14px;
padding: 8px 12px;
border-radius: 8px;
background: #f8fafc;
border: 1px solid var(--blp-border-light);
}
#brolytics-employee-portfolio .blp-fact-ico {
width: 38px;
height: 38px;
border-radius: 8px;
background: #eff6ff;
color: var(--blp-blue);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
#brolytics-employee-portfolio .blp-fact-digit {
font-size: 1.25rem;
font-weight: 800;
color: var(--blp-text-dark);
line-height: 1.1;
}
#brolytics-employee-portfolio .blp-fact-lbl {
font-size: 0.76rem;
color: var(--blp-text-gray);
font-weight: 500;
}
/* CORE SKILLS & TOOLS */
#brolytics-employee-portfolio .blp-skills-pills-wrap {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
#brolytics-employee-portfolio .blp-pill-item {
font-size: 0.74rem;
font-weight: 600;
padding: 4px 10px;
border-radius: 9999px;
background: #eff6ff;
color: #1d4ed8;
border: 1px solid #dbeafe;
}
#brolytics-employee-portfolio .blp-tools-list {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
#brolytics-employee-portfolio .blp-tool-chip {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 4px 10px;
background: #f1f5f9;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 600;
color: #475569;
}
/* MIDDLE ROW: TIMELINE + SIDE */
#brolytics-employee-portfolio .blp-grid-middle {
display: grid;
grid-template-columns: 1.7fr 1.3fr;
gap: 18px;
}
#brolytics-employee-portfolio .blp-side-group {
display: flex;
flex-direction: column;
gap: 18px;
}
#brolytics-employee-portfolio .blp-timeline {
position: relative;
padding-left: 22px;
margin-top: 14px;
}
#brolytics-employee-portfolio .blp-timeline::before {
content: '';
position: absolute;
left: 6px;
top: 6px;
bottom: 0;
width: 2px;
background: #cbd5e1;
}
#brolytics-employee-portfolio .blp-tl-item {
position: relative;
margin-bottom: 24px;
}
#brolytics-employee-portfolio .blp-tl-item:last-child {
margin-bottom: 0;
}
#brolytics-employee-portfolio .blp-tl-dot {
position: absolute;
left: -22px;
top: 5px;
width: 14px;
height: 14px;
border-radius: 50%;
background: #ffffff;
border: 3px solid var(--blp-blue);
}
#brolytics-employee-portfolio .blp-tl-period {
font-size: 0.76rem;
font-weight: 700;
color: var(--blp-blue);
text-transform: uppercase;
}
#brolytics-employee-portfolio .blp-tl-role {
font-size: 1.05rem;
font-weight: 700;
color: var(--blp-text-dark);
}
#brolytics-employee-portfolio .blp-tl-comp {
font-size: 0.85rem;
font-weight: 600;
color: var(--blp-text-gray);
margin-bottom: 8px;
}
#brolytics-employee-portfolio .blp-tl-bullets {
list-style: disc inside;
font-size: 0.84rem;
color: var(--blp-text-gray);
line-height: 1.55;
}
/* EDUCATION & CERTIFICATIONS */
#brolytics-employee-portfolio .blp-mini-item {
padding: 10px 0;
border-bottom: 1px solid var(--blp-border-light);
}
#brolytics-employee-portfolio .blp-mini-item:last-child {
border-bottom: none;
padding-bottom: 0;
}
#brolytics-employee-portfolio .blp-mini-title {
font-size: 0.92rem;
font-weight: 700;
color: var(--blp-text-dark);
}
#brolytics-employee-portfolio .blp-mini-sub {
font-size: 0.83rem;
color: var(--blp-text-gray);
}
#brolytics-employee-portfolio .blp-mini-meta {
font-size: 0.77rem;
color: #94a3b8;
}
#brolytics-employee-portfolio .blp-cert-btn {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 0.77rem;
font-weight: 600;
color: var(--blp-blue);
text-decoration: none;
margin-top: 4px;
}
#brolytics-employee-portfolio .blp-cert-btn:hover {
text-decoration: underline;
}
/* SERVICES SECTION */
#brolytics-employee-portfolio .blp-section-wrapper {
display: flex;
flex-direction: column;
gap: 18px;
}
#brolytics-employee-portfolio .blp-sec-sub {
font-size: 0.74rem;
font-weight: 800;
color: var(--blp-blue);
letter-spacing: 0.05em;
}
#brolytics-employee-portfolio .blp-sec-title {
font-size: 1.45rem;
font-weight: 800;
color: var(--blp-text-dark);
}
#brolytics-employee-portfolio .blp-header-flex {
display: flex;
justify-content: space-between;
align-items: flex-end;
}
#brolytics-employee-portfolio .blp-link-all {
display: inline-flex;
align-items: center;
gap: 5px;
font-size: 0.86rem;
font-weight: 700;
color: var(--blp-blue);
text-decoration: none;
}
#brolytics-employee-portfolio .blp-services-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 16px;
}
#brolytics-employee-portfolio .blp-service-box {
background: #ffffff;
border: 1px solid var(--blp-border);
border-radius: 12px;
padding: 20px 16px;
display: flex;
flex-direction: column;
gap: 10px;
box-shadow: 0 1px 3px rgba(0,0,0,0.04);
}
#brolytics-employee-portfolio .blp-service-ico-wrap {
width: 36px;
height: 36px;
border-radius: 8px;
background: #eff6ff;
color: var(--blp-blue);
display: flex;
align-items: center;
justify-content: center;
}
#brolytics-employee-portfolio .blp-service-name {
font-size: 0.94rem;
font-weight: 700;
color: var(--blp-text-dark);
}
#brolytics-employee-portfolio .blp-service-text {
font-size: 0.81rem;
color: var(--blp-text-gray);
line-height: 1.45;
}
/* PROJECTS GRID */
#brolytics-employee-portfolio .blp-projects-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
#brolytics-employee-portfolio .blp-project-item {
background: #ffffff;
border: 1px solid var(--blp-border);
border-radius: 12px;
overflow: hidden;
display: flex;
flex-direction: column;
box-shadow: 0 1px 3px rgba(0,0,0,0.04);
}
#brolytics-employee-portfolio .blp-project-preview {
position: relative;
width: 100%;
aspect-ratio: 16 / 9;
background: #0f172a;
overflow: hidden;
}
#brolytics-employee-portfolio .blp-project-img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
#brolytics-employee-portfolio .blp-project-item:hover .blp-project-img {
transform: scale(1.04);
}
#brolytics-employee-portfolio .blp-project-content {
padding: 16px;
display: flex;
flex-direction: column;
flex: 1;
}
#brolytics-employee-portfolio .blp-project-head {
font-size: 0.98rem;
font-weight: 700;
color: var(--blp-text-dark);
margin-bottom: 6px;
}
#brolytics-employee-portfolio .blp-project-summary {
font-size: 0.81rem;
color: var(--blp-text-gray);
line-height: 1.45;
margin-bottom: 12px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
#brolytics-employee-portfolio .blp-project-tags {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 14px;
}
#brolytics-employee-portfolio .blp-ptag {
font-size: 0.7rem;
font-weight: 600;
padding: 2px 8px;
border-radius: 4px;
background: #f1f5f9;
color: #475569;
}
#brolytics-employee-portfolio .blp-btn-view-web {
margin-top: auto;
width: 100%;
padding: 8px 12px;
font-size: 0.84rem;
font-weight: 600;
border-radius: 6px;
background: var(--blp-blue);
color: #ffffff;
text-align: center;
text-decoration: none;
display: inline-block;
}
#brolytics-employee-portfolio .blp-btn-view-web:hover {
background: var(--blp-blue-hover);
}
/* BOTTOM CTA BANNER */
#brolytics-employee-portfolio .blp-bottom-cta {
background: linear-gradient(135deg, #050e1d 0%, #081a38 100%);
border-radius: 12px;
padding: 26px 32px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
color: #ffffff;
}
#brolytics-employee-portfolio .blp-cta-content {
display: flex;
align-items: center;
gap: 16px;
}
#brolytics-employee-portfolio .blp-cta-icon {
width: 48px;
height: 48px;
border-radius: 10px;
background: rgba(255, 255, 255, 0.08);
display: flex;
align-items: center;
justify-content: center;
color: #38bdf8;
flex-shrink: 0;
}
#brolytics-employee-portfolio .blp-cta-title {
font-size: 1.2rem;
font-weight: 800;
color: #ffffff;
}
#brolytics-employee-portfolio .blp-cta-subtitle {
font-size: 0.86rem;
color: #cbd5e1;
}
#brolytics-employee-portfolio .blp-btn-cta {
background: var(--blp-blue);
color: #ffffff;
padding: 12px 28px;
flex-shrink: 0;
}
#brolytics-employee-portfolio .blp-btn-cta:hover {
background: var(--blp-blue-hover);
}
/* FOOTER */
#brolytics-employee-portfolio .blp-footer {
text-align: center;
font-size: 0.82rem;
color: var(--blp-text-gray);
border-top: 1px solid var(--blp-border);
padding-top: 22px;
display: flex;
flex-direction: column;
gap: 4px;
}
#brolytics-employee-portfolio .blp-footer a {
color: var(--blp-blue);
text-decoration: none;
font-weight: 600;
}
/* MODAL */
#brolytics-employee-portfolio .blp-modal-overlay {
position: fixed;
inset: 0;
background: rgba(4, 11, 22, 0.72);
backdrop-filter: blur(4px);
z-index: 999999;
display: flex;
align-items: center;
justify-content: center;
padding: 16px;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
}
#brolytics-employee-portfolio .blp-modal-overlay.blp-active {
opacity: 1;
pointer-events: auto;
}
#brolytics-employee-portfolio .blp-modal-card {
background: #ffffff;
border-radius: 16px;
width: 100%;
max-width: 580px;
max-height: 90vh;
overflow-y: auto;
position: relative;
padding: 26px;
box-shadow: 0 20px 30px rgba(0,0,0,0.3);
}
#brolytics-employee-portfolio .blp-modal-close {
position: absolute;
top: 16px;
right: 18px;
background: none;
border: none;
font-size: 1.6rem;
color: #94a3b8;
cursor: pointer;
line-height: 1;
}
#brolytics-employee-portfolio .blp-modal-top {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 18px;
padding-right: 28px;
}
#brolytics-employee-portfolio .blp-modal-avatar {
width: 46px;
height: 46px;
border-radius: 50%;
object-fit: cover;
border: 2px solid var(--blp-blue);
flex-shrink: 0;
}
#brolytics-employee-portfolio .blp-modal-title {
font-size: 1.15rem;
font-weight: 800;
}
#brolytics-employee-portfolio .blp-modal-desc {
font-size: 0.78rem;
color: var(--blp-text-gray);
}
#brolytics-employee-portfolio .blp-form-fields-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
#brolytics-employee-portfolio .blp-span-full {
grid-column: span 2;
}
#brolytics-employee-portfolio .blp-input-box {
display: flex;
flex-direction: column;
gap: 4px;
}
#brolytics-employee-portfolio .blp-input-box label {
font-size: 0.76rem;
font-weight: 600;
color: #334155;
}
#brolytics-employee-portfolio .blp-red { color: #ef4444; }
#brolytics-employee-portfolio .blp-gray { color: #94a3b8; }
#brolytics-employee-portfolio .blp-input-box input,
#brolytics-employee-portfolio .blp-input-box select,
#brolytics-employee-portfolio .blp-input-box textarea {
width: 100%;
padding: 8px 11px;
font-size: 0.85rem;
border: 1px solid var(--blp-border);
border-radius: 6px;
background: #ffffff;
outline: none;
font-family: inherit;
}
#brolytics-employee-portfolio .blp-input-box input:focus,
#brolytics-employee-portfolio .blp-input-box select:focus,
#brolytics-employee-portfolio .blp-input-box textarea:focus {
border-color: var(--blp-blue);
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
}
#brolytics-employee-portfolio .blp-input-err {
font-size: 0.7rem;
color: #ef4444;
display: none;
}
#brolytics-employee-portfolio .blp-input-box.blp-error input,
#brolytics-employee-portfolio .blp-input-box.blp-error select,
#brolytics-employee-portfolio .blp-input-box.blp-error textarea {
border-color: #ef4444;
}
#brolytics-employee-portfolio .blp-input-box.blp-error .blp-input-err {
display: block;
}
#brolytics-employee-portfolio .blp-modal-btn-row {
margin-top: 16px;
display: flex;
flex-direction: column;
gap: 8px;
}
#brolytics-employee-portfolio .blp-btn-submit {
width: 100%;
background: var(--blp-blue);
color: #ffffff;
padding: 11px;
font-size: 0.95rem;
}
#brolytics-employee-portfolio .blp-safe-note {
font-size: 0.72rem;
color: #94a3b8;
text-align: center;
}
/* MODAL SUCCESS STATE */
#brolytics-employee-portfolio .blp-success-wrap {
text-align: center;
padding: 24px 8px;
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
}
#brolytics-employee-portfolio .blp-green-check {
width: 58px;
height: 58px;
border-radius: 50%;
background: #ecfdf5;
display: flex;
align-items: center;
justify-content: center;
}
#brolytics-employee-portfolio .blp-success-heading {
font-size: 1.25rem;
font-weight: 800;
color: #064e3b;
}
#brolytics-employee-portfolio .blp-success-paragraph {
font-size: 0.88rem;
color: #047857;
max-width: 360px;
line-height: 1.45;
}
#brolytics-employee-portfolio .blp-btn-close-final {
background: var(--blp-blue);
color: #ffffff;
}
/* RESPONSIVE */
@media (max-width: 1024px) {
#brolytics-employee-portfolio .blp-grid-top {
grid-template-columns: 1fr 1fr;
}
#brolytics-employee-portfolio .blp-card-skills {
grid-column: span 2;
}
#brolytics-employee-portfolio .blp-services-grid {
grid-template-columns: repeat(3, 1fr);
}
#brolytics-employee-portfolio .blp-projects-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 768px) {
#brolytics-employee-portfolio .blp-hero-container {
flex-direction: column;
text-align: center;
gap: 18px;
}
#brolytics-employee-portfolio .blp-avatar-frame {
margin: 0 auto;
}
#brolytics-employee-portfolio .blp-hero-meta-row,
#brolytics-employee-portfolio .blp-hero-btns {
justify-content: center;
}
#brolytics-employee-portfolio .blp-grid-top,
#brolytics-employee-portfolio .blp-grid-middle {
grid-template-columns: 1fr;
}
#brolytics-employee-portfolio .blp-card-skills {
grid-column: span 1;
}
#brolytics-employee-portfolio .blp-services-grid {
grid-template-columns: repeat(2, 1fr);
}
#brolytics-employee-portfolio .blp-bottom-cta {
flex-direction: column;
text-align: center;
}
#brolytics-employee-portfolio .blp-cta-content {
flex-direction: column;
}
#brolytics-employee-portfolio .blp-form-fields-grid {
grid-template-columns: 1fr;
}
#brolytics-employee-portfolio .blp-span-full {
grid-column: span 1;
}
}
@media (max-width: 520px) {
#brolytics-employee-portfolio .blp-services-grid,
#brolytics-employee-portfolio .blp-projects-grid {
grid-template-columns: 1fr;
}
#brolytics-employee-portfolio .blp-hero-name {
font-size: 1.85rem;
}
}
/* PRINT VIEW (FOR SAVE AS PDF) */
@media print {
#brolytics-employee-portfolio .blp-hero-btns,
#brolytics-employee-portfolio .blp-bottom-cta,
#brolytics-employee-portfolio .blp-modal-overlay,
#brolytics-employee-portfolio .blp-link-all,
#brolytics-employee-portfolio .blp-btn-view-web {
display: none !important;
}
#brolytics-employee-portfolio .blp-hero {
background: #07152b !important;
color: #ffffff !important;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
#brolytics-employee-portfolio .blp-card {
box-shadow: none !important;
border: 1px solid #ccc !important;
break-inside: avoid;
margin-bottom: 12px;
}
}
</style>
<!-- ====================================================================
জাভাস্ক্রিপ্ট ইঞ্জিন (এখান থেকেই পুরো পোর্টফোলিও সহজে এডিট করবেন)
==================================================================== -->
<script>
(function() {
"use strict";
// ====================================================================
// [১] কোম্পানির অফিশিয়াল সেটিংস (দরকার হলে পরিবর্তন করুন)
// ====================================================================
const CONFIG = {
companyName: "Brolytics Lab.IT",
companyWebsite: "https://brolyticslab.blogspot.com/",
hiringEmail: "brolyticsit@gmail.com",
companyWhatsApp: "+880 1845-428433",
// FormSubmit Endpoint (AJAX এর মাধ্যমে পেজ রিলোড ছাড়া মেসেজ যাবে)
formEndpoint: "https://formsubmit.co/ajax/brolyticsit@gmail.com"
};
// ====================================================================
// [২] এমপ্লয়ীর ব্যক্তিগত তথ্য (এখানে পরিবর্তন করলেই পুরো পেজ বদলে যাবে)
// ====================================================================
const employee = {
// এমপ্লয়ীর নাম (FirstName এবং LastName আলাদা রাখতে পারেন সুন্দর কালারের জন্য)
firstName: "Rahid",
lastName: "Hasan",
// ডেজিগনেশন ও পদবি
role: "Full Stack Developer",
// অভিজ্ঞতা ও কাজের লোকেশন
experience: "5+ Years Experience",
location: "Dinajpur, Bangladesh",
// প্রোফাইল ছবির লিংক (সরাসরি ইমেজ লিংক দিন)
profileImage: "https://images.unsplash.com/photo-1534528741775-53994a69daeb?auto=format&fit=crop&w=600&q=80",
// হিরো সেকশনের ছোট ইন্ট্রো
heroSummary: "I'm a passionate Full Stack Developer with 5+ years of experience in building modern, scalable and user-friendly web applications. I love turning ideas into real products using the latest technologies.",
// About সেকশনের বিস্তারিত বিবরণ
aboutText: "Rahid Hasan is a professional Full Stack Developer with 5+ years of experience in developing high-performance web applications, APIs, dashboards and scalable digital products. Focused on clean code and reliable architecture.",
// কুইক ফ্যাক্টস (Quick Facts)
facts: {
experienceYears: "5+",
completedProjects: "20+",
clientSatisfaction: "100%",
availability: "Available"
},
// স্কিলস লিস্ট (Core Skills)
skills: [
"React", "Next.js", "JavaScript", "TypeScript", "Node.js",
"Express.js", "MongoDB", "MySQL", "Firebase", "REST API",
"Git & GitHub", "Docker", "AWS", "Tailwind CSS", "HTML", "CSS"
],
// টুলস ও সফটওয়্যার (Tools & Technologies)
tools: [
"VS Code", "Figma", "Postman", "Git", "Docker", "Firebase", "AWS"
],
// কাজের অভিজ্ঞতা (Work History & Experience)
experienceHistory: [
{
period: "2020 – Present",
position: "Senior Full Stack Developer",
company: "Brolytics Lab.IT",
responsibilities: [
"Developed modern web applications using MERN stack.",
"Built REST APIs and integrated third-party services.",
"Optimized performance and security across products.",
"Collaborated with cross-functional teams."
]
},
{
period: "2018 – 2020",
position: "Web Developer",
company: "Creative IT Solutions",
responsibilities: [
"Developed responsive websites using HTML, CSS, JavaScript.",
"Worked on client projects and delivered on time.",
"Maintained and updated existing systems."
]
}
],
// শিক্ষাগত যোগ্যতা (Education)
education: [
{
degree: "B.Sc. in Computer Science",
institution: "University of Dinajpur",
year: "2016 – 2022",
description: "Focused on software development, databases and networking."
}
],
// সার্টিফিকেট (Certifications) - লিংক না থাকলে খালি রাখতে পারেন ""
certifications: [
{
name: "Full Stack Web Development",
organization: "Udemy",
year: "2023",
url: "https://example.com/certificate"
}
],
// সার্ভিসসমূহ (Services I Provide)
services: [
{
title: "Web Development",
description: "Modern, responsive and fast websites using latest technologies."
},
{
title: "Mobile App Development",
description: "Cross-platform mobile apps for Android & iOS using Flutter."
},
{
title: "API Development",
description: "Secure and scalable REST APIs for your applications."
},
{
title: "UI/UX Design",
description: "Clean, modern and user-friendly designs for better user experience."
},
{
title: "Website Maintenance",
description: "Keep your website updated, secure and running smoothly."
}
],
// প্রজেক্ট লিস্ট (Featured Projects) - শুধু লাইভ প্রজেক্টের লিংক দিন
projects: [
{
title: "E-Commerce Website",
image: "https://images.unsplash.com/photo-1557821552-17105176677c?auto=format&fit=crop&w=600&q=80",
description: "Modern e-commerce platform built for online businesses.",
technologies: ["React", "Node.js", "MongoDB"],
websiteUrl: "https://example.com"
},
{
title: "Task Management App",
image: "https://images.unsplash.com/photo-1507238691740-187a5b1d37b8?auto=format&fit=crop&w=600&q=80",
description: "Organized task manager with board views and notifications.",
technologies: ["Flutter", "Firebase"],
websiteUrl: "https://example.com"
},
{
title: "Portfolio Website",
image: "https://images.unsplash.com/photo-1460925895917-afdab827c52f?auto=format&fit=crop&w=600&q=80",
description: "Clean modern design showing agency work and capabilities.",
technologies: ["Next.js", "Tailwind CSS"],
websiteUrl: "https://example.com"
},
{
title: "Business Dashboard",
image: "https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&fit=crop&w=600&q=80",
description: "Interactive analytics dashboard tracking core business metrics.",
technologies: ["React", "Chart.js", "Firebase"],
websiteUrl: "https://example.com"
}
]
};
// ====================================================================
// [৩] রেন্ডারিং ইঞ্জিন (এখানে কোনো কিছু পরিবর্তনের প্রয়োজন নেই)
// ====================================================================
function sanitize(txt) {
if (!txt) return "";
return String(txt).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
}
function initPortfolio() {
const fullName = employee.firstName + " " + employee.lastName;
// ১. হিরো সেকশন বসানো
const heroImg = document.getElementById("blp-hero-img");
heroImg.src = employee.profileImage;
heroImg.alt = fullName;
heroImg.onerror = function() {
this.src = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 24 24' fill='%2364748b'%3E%3Cpath d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E";
};
document.getElementById("blp-signature").textContent = fullName;
document.getElementById("blp-badge-role").textContent = employee.role;
document.getElementById("blp-first-name").textContent = employee.firstName;
document.getElementById("blp-last-name").textContent = employee.lastName;
document.getElementById("blp-hero-desig").textContent = employee.role;
document.getElementById("blp-meta-exp").textContent = employee.experience;
document.getElementById("blp-meta-loc").textContent = employee.location;
document.getElementById("blp-hero-bio").textContent = employee.heroSummary;
// ২. About Me সেকশন
document.getElementById("blp-about-bio").textContent = employee.aboutText;
document.getElementById("blp-detail-name").textContent = fullName;
document.getElementById("blp-detail-company").textContent = CONFIG.companyName;
document.getElementById("blp-detail-exp").textContent = employee.experience;
document.getElementById("blp-detail-location").textContent = employee.location;
// ৩. Quick Facts
document.getElementById("blp-qf-exp").textContent = employee.facts.experienceYears;
document.getElementById("blp-qf-projects").textContent = employee.facts.completedProjects;
document.getElementById("blp-qf-satisfaction").textContent = employee.facts.clientSatisfaction;
document.getElementById("blp-qf-avail").textContent = employee.facts.availability;
// ৪. Core Skills
const skillsList = document.getElementById("blp-skills-list");
skillsList.innerHTML = "";
employee.skills.forEach(function(s) {
const sp = document.createElement("span");
sp.className = "blp-pill-item";
sp.textContent = s;
skillsList.appendChild(sp);
});
// ৫. Tools & Technologies
const toolsList = document.getElementById("blp-tools-list");
toolsList.innerHTML = "";
employee.tools.forEach(function(t) {
const sp = document.createElement("span");
sp.className = "blp-tool-chip";
sp.innerHTML = '<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> ' + sanitize(t);
toolsList.appendChild(sp);
});
// ৬. Work Experience
const tlList = document.getElementById("blp-timeline-list");
tlList.innerHTML = "";
employee.experienceHistory.forEach(function(exp) {
const box = document.createElement("div");
box.className = "blp-tl-item";
let bulletsHtml = "";
if (exp.responsibilities && exp.responsibilities.length) {
bulletsHtml = '<ul class="blp-tl-bullets">' + exp.responsibilities.map(function(b) { return '<li>' + sanitize(b) + '</li>'; }).join('') + '</ul>';
}
box.innerHTML =
'<div class="blp-tl-dot"></div>' +
'<div class="blp-tl-period">' + sanitize(exp.period) + '</div>' +
'<div class="blp-tl-role">' + sanitize(exp.position) + '</div>' +
'<div class="blp-tl-comp">' + sanitize(exp.company) + '</div>' +
bulletsHtml;
tlList.appendChild(box);
});
// ৭. Education
const eduCard = document.getElementById("blp-edu-card");
const eduList = document.getElementById("blp-edu-list");
if (!employee.education || !employee.education.length) {
eduCard.style.display = "none";
} else {
eduCard.style.display = "block";
eduList.innerHTML = "";
employee.education.forEach(function(ed) {
const d = document.createElement("div");
d.className = "blp-mini-item";
d.innerHTML =
'<div class="blp-mini-title">' + sanitize(ed.degree) + '</div>' +
'<div class="blp-mini-sub">' + sanitize(ed.institution) + '</div>' +
'<div class="blp-mini-meta">' + sanitize(ed.year) + (ed.description ? ' • ' + sanitize(ed.description) : '') + '</div>';
eduList.appendChild(d);
});
}
// ৮. Certifications
const certCard = document.getElementById("blp-cert-card");
const certList = document.getElementById("blp-cert-list");
if (!employee.certifications || !employee.certifications.length) {
certCard.style.display = "none";
} else {
certCard.style.display = "block";
certList.innerHTML = "";
employee.certifications.forEach(function(c) {
const d = document.createElement("div");
d.className = "blp-mini-item";
let linkHtml = "";
if (c.url && c.url.trim()) {
linkHtml = '<a href="' + sanitize(c.url) + '" target="_blank" rel="noopener noreferrer" class="blp-cert-btn">View Certificate →</a>';
}
d.innerHTML =
'<div class="blp-mini-title">' + sanitize(c.name) + '</div>' +
'<div class="blp-mini-sub">' + sanitize(c.organization) + ' (' + sanitize(c.year) + ')</div>' +
linkHtml;
certList.appendChild(d);
});
}
// ৯. Services
const srvSec = document.getElementById("blp-services-sec");
const srvGrid = document.getElementById("blp-services-grid");
const srvSelect = document.getElementById("blp-f-service");
if (!employee.services || !employee.services.length) {
srvSec.style.display = "none";
} else {
srvSec.style.display = "flex";
srvGrid.innerHTML = "";
srvSelect.innerHTML = '<option value="" disabled selected>Select service</option>';
employee.services.forEach(function(s) {
const sb = document.createElement("div");
sb.className = "blp-service-box";
sb.innerHTML =
'<div class="blp-service-ico-wrap"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg></div>' +
'<div class="blp-service-name">' + sanitize(s.title) + '</div>' +
'<p class="blp-service-text">' + sanitize(s.description) + '</p>';
srvGrid.appendChild(sb);
const opt = document.createElement("option");
opt.value = s.title;
opt.textContent = s.title;
srvSelect.appendChild(opt);
});
}
// ১০. Projects
const prjSec = document.getElementById("blp-projects-sec");
const prjGrid = document.getElementById("blp-projects-grid");
if (!employee.projects || !employee.projects.length) {
prjSec.style.display = "none";
} else {
prjSec.style.display = "flex";
prjGrid.innerHTML = "";
employee.projects.forEach(function(p) {
const item = document.createElement("div");
item.className = "blp-project-item";
const tags = (p.technologies || []).map(function(t) { return '<span class="blp-ptag">' + sanitize(t) + '</span>'; }).join('');
let btnHtml = "";
if (p.websiteUrl && p.websiteUrl.trim()) {
btnHtml = '<a href="' + sanitize(p.websiteUrl) + '" target="_blank" rel="noopener noreferrer" class="blp-btn-view-web">View Website</a>';
}
item.innerHTML =
'<div class="blp-project-preview">' +
'<img src="' + sanitize(p.image) + '" alt="' + sanitize(p.title) + '" class="blp-project-img" loading="lazy" decoding="async" />' +
'</div>' +
'<div class="blp-project-content">' +
'<div class="blp-project-head">' + sanitize(p.title) + '</div>' +
'<p class="blp-project-summary">' + sanitize(p.description) + '</p>' +
'<div class="blp-project-tags">' + tags + '</div>' +
btnHtml +
'</div>';
const img = item.querySelector(".blp-project-img");
img.onerror = function() {
this.src = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='225' viewBox='0 0 24 24' fill='%23334155'%3E%3Crect width='24' height='24' fill='%230f172a'/%3E%3Cpath fill='%2364748b' d='M4 5h16v14H4z'/%3E%3C/svg%3E";
};
prjGrid.appendChild(item);
});
}
// ১১. মডাল ফর্ম সেটআপ
document.getElementById("blp-modal-heading").textContent = "Hire " + fullName;
const modalAvatar = document.getElementById("blp-modal-thumb");
modalAvatar.src = employee.profileImage;
modalAvatar.alt = fullName;
modalAvatar.onerror = function() { heroImg.onerror.call(this); };
document.getElementById("blp-input-emp-name").value = fullName;
document.getElementById("blp-input-emp-role").value = employee.role;
document.getElementById("blp-input-page-url").value = window.location.href;
document.getElementById("blp-input-email-sub").value = "New Hiring Request – " + fullName;
}
// ====================================================================
// [৪] ইভেন্ট ও ইন্টারঅ্যাকশন
// ====================================================================
const modal = document.getElementById("blp-modal");
const modalClose = document.getElementById("blp-modal-close-btn");
const finalClose = document.getElementById("blp-final-close");
const formStage = document.getElementById("blp-form-stage");
const successStage = document.getElementById("blp-success-stage");
const ajaxForm = document.getElementById("blp-ajax-form");
const submitBtn = document.getElementById("blp-submit-button");
function showModal() {
modal.classList.add("blp-active");
modal.setAttribute("aria-hidden", "false");
document.body.style.overflow = "hidden";
}
function hideModal() {
modal.classList.remove("blp-active");
modal.setAttribute("aria-hidden", "true");
document.body.style.overflow = "";
setTimeout(function() {
formStage.style.display = "block";
successStage.style.display = "none";
ajaxForm.reset();
const errBoxes = ajaxForm.querySelectorAll(".blp-error");
errBoxes.forEach(function(b) { b.classList.remove("blp-error"); });
}, 250);
}
document.querySelectorAll(".blp-open-modal").forEach(function(btn) {
btn.addEventListener("click", showModal);
});
modalClose.addEventListener("click", hideModal);
finalClose.addEventListener("click", hideModal);
modal.addEventListener("click", function(e) { if (e.target === modal) hideModal(); });
document.addEventListener("keydown", function(e) { if (e.key === "Escape" && modal.classList.contains("blp-active")) hideModal(); });
// প্রোফাইল প্রিন্ট / Save as PDF
document.getElementById("blp-download-trigger").addEventListener("click", function() {
window.print();
});
// AJAX ফর্ম সাবমিট
ajaxForm.addEventListener("submit", function(e) {
e.preventDefault();
// ভ্যালিডেশন
const nameF = document.getElementById("blp-f-name");
const phoneF = document.getElementById("blp-f-phone");
const emailF = document.getElementById("blp-f-email");
const compF = document.getElementById("blp-f-company");
const srvF = document.getElementById("blp-f-service");
const msgF = document.getElementById("blp-f-msg");
let hasErr = false;
function checkField(el, condition) {
const box = el.closest(".blp-input-box");
if (condition) {
box.classList.add("blp-error");
hasErr = true;
} else {
box.classList.remove("blp-error");
}
}
checkField(nameF, !nameF.value.trim());
checkField(phoneF, !phoneF.value.trim() || phoneF.value.trim().length < 6);
checkField(emailF, !emailF.value.trim() || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(emailF.value.trim()));
checkField(compF, !compF.value.trim());
checkField(srvF, !srvF.value);
checkField(msgF, !msgF.value.trim() || msgF.value.trim().length < 10);
if (hasErr) return;
// সাবমিশন লোডিং স্টেট
const oldBtnText = submitBtn.innerHTML;
submitBtn.disabled = true;
submitBtn.innerHTML = "Sending Inquiry...";
const fData = new FormData(ajaxForm);
fetch(CONFIG.formEndpoint, {
method: "POST",
headers: { "Accept": "application/json" },
body: fData
})
.then(function(res) {
if (res.ok) {
formStage.style.display = "none";
successStage.style.display = "flex";
} else {
alert("Submission failed. Please try emailing directly to " + CONFIG.hiringEmail);
}
})
.catch(function() {
alert("Submission error. Please email directly to " + CONFIG.hiringEmail);
})
.finally(function() {
submitBtn.disabled = false;
submitBtn.innerHTML = oldBtnText;
});
});
// পেজ লোড হলে চালু হবে
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initPortfolio);
} else {
initPortfolio();
}
})();
</script>