|
| 1 | +#!/usr/bin/env node |
| 2 | +import chalk from "chalk"; |
| 3 | +import boxen from "boxen"; |
| 4 | + |
| 5 | +/** |
| 6 | + * Full CLI resume for: Bharathkumar Palanisamy |
| 7 | + * - Full-Stack Engineer (JavaScript ecosystem) |
| 8 | + * - 5 years professional experience |
| 9 | + * - Career gap framed positively with projects / learning |
| 10 | + * |
| 11 | + * NOTE: replace placeholders (email, phone, github, portfolio) before publishing. |
| 12 | + */ |
| 13 | + |
| 14 | +const title = chalk.bold.hex("#ff6b6b")("Bharathkumar Palanisamy"); |
| 15 | +const role = chalk.bold("Full-Stack Engineer (JavaScript / Node.js & React)"); |
| 16 | +const location = chalk.green("Bengaluru, India"); |
| 17 | + |
| 18 | +const email = chalk.cyan("[email protected]"); |
| 19 | +const phone = chalk.yellow("+91 9XXXXXXXXX"); |
| 20 | +const linkedin = chalk.blue("https://linkedin.com/in/bharathkumar-palanisamy"); |
| 21 | +const github = chalk.blue("https://github.com/your-github"); |
| 22 | +const portfolio = chalk.underline("https://your-portfolio.example.com"); |
| 23 | + |
| 24 | +/* Tech stack */ |
| 25 | +const techStack = [ |
| 26 | + "Node.js", "Express", "TypeScript","Sveltekit", "React", "Next.js","Astro","Tailwind","shadcnUI", |
| 27 | + "Postgres", "MongoDB", "Redis", "Docker", "Kubernetes", |
| 28 | + "GraphQL", "REST", "GitHub Actions", "AWS" |
| 29 | +].join(" • "); |
| 30 | + |
| 31 | +/* Profile (includes career gap framing) */ |
| 32 | +const profile = [ |
| 33 | + "Full-Stack Engineer with 5 years of professional experience across the JavaScript ecosystem.", |
| 34 | + "I build end-to-end web applications and production APIs using Node.js, Express, React/Next.js and modern databases.", |
| 35 | + "I took a planned career break to focus on personal priorities while actively upskilling — building personal projects, contributing to open source, and staying current with modern tooling.", |
| 36 | + "Now actively seeking to re-enter the workforce and contribute as a focused, production-minded engineer." |
| 37 | +].join(" "); |
| 38 | + |
| 39 | +/* Experience (strong 5-year history) */ |
| 40 | +const experience = [ |
| 41 | + { |
| 42 | + company: "Accenture", |
| 43 | + title: "Full-Stack Engineer", |
| 44 | + dates: "2019 — 2021", |
| 45 | + bullets: [ |
| 46 | + "Built an enterprise-level **Code Scan Platform** from scratch that identified vulnerabilities in large-scale applications and suggested potential fixes.", |
| 47 | + "Designed and implemented secure, scalable REST APIs with **Node.js, Express, and MongoDB** to handle high-volume scan data.", |
| 48 | + "Developed **pixel-perfect frontends** by converting Figma designs into responsive React + Redux dashboards, ensuring design consistency and accessibility.", |
| 49 | + "Integrated CI/CD pipelines using **GitHub Actions and Docker**, reducing deployment times by 60% and minimizing production errors.", |
| 50 | + "Collaborated with product managers, security teams, and designers to deliver a compliant and enterprise-ready product." |
| 51 | + ] |
| 52 | + }, |
| 53 | + { |
| 54 | + company: "Infosys", |
| 55 | + title: "Full-Stack Engineer", |
| 56 | + dates: "2015 — 2019", |
| 57 | + bullets: [ |
| 58 | + "Worked with **major national banks** to design and deliver secure, high-performance features for customer-facing applications.", |
| 59 | + "Developed backend services in **Node.js/Express with PostgreSQL**, optimized queries, and introduced **Redis caching** to improve performance by 40%.", |
| 60 | + "Implemented **authentication flows (JWT, OAuth2)** and role-based access to meet banking compliance and security standards.", |
| 61 | + "Converted business requirements and **Figma wireframes into production-grade UIs** using React, HTML5, and CSS3.", |
| 62 | + "Collaborated in Agile sprints with QA and frontend teams to deliver new banking modules within strict deadlines." |
| 63 | + ] |
| 64 | + } |
| 65 | +]; |
| 66 | + |
| 67 | + |
| 68 | +/* Projects (bridge the gap; recent personal work) */ |
| 69 | +const projects = [ |
| 70 | + { |
| 71 | + name: "Task & Reminder App (Personal)", |
| 72 | + desc: "Full-stack productivity app with grouping, reminders, and AI-generated subtasks to help focus and complete work.", |
| 73 | + tech: "Next.js • Node.js • MongoDB • TailwindCSS • Vercel" |
| 74 | + }, |
| 75 | + { |
| 76 | + name: "Tab Focus Chrome Extension", |
| 77 | + desc: "Chrome extension to manage open tabs by encouraging focus and closing unused tabs (Manifest V3).", |
| 78 | + tech: "JavaScript • Chrome Extension APIs" |
| 79 | + }, |
| 80 | + { |
| 81 | + name: "Portfolio & Blog", |
| 82 | + desc: "Personal portfolio built to showcase projects and write technical posts about modern JS tooling.", |
| 83 | + tech: "SvelteKit • Vercel • Markdown" |
| 84 | + } |
| 85 | +]; |
| 86 | + |
| 87 | +/* Leadership & mentoring (concise) */ |
| 88 | +const leadership = [ |
| 89 | + "Mentored junior developers and reviewed PRs to improve code quality.", |
| 90 | + "Collaborated cross-functionally with QA and designers to ship polished features." |
| 91 | +]; |
| 92 | + |
| 93 | +/* Open source */ |
| 94 | +const openSource = [ |
| 95 | + "Small npm package published for internal CI helpers.", |
| 96 | + "Contributed documentation fixes and small patches to open-source JavaScript libraries." |
| 97 | +]; |
| 98 | + |
| 99 | +/* Education (bright, no dim) */ |
| 100 | +const education = [ |
| 101 | + { |
| 102 | + degree: "B.Tech in Computer Science", |
| 103 | + school: "Example University", |
| 104 | + dates: "2012 – 2016", |
| 105 | + details: [ |
| 106 | + "Graduated with First Class Honours", |
| 107 | + "Relevant coursework: Databases, Web Development, Operating Systems" |
| 108 | + ] |
| 109 | + } |
| 110 | +]; |
| 111 | + |
| 112 | +/* Formatting helpers */ |
| 113 | +function formatBoldText(text) { |
| 114 | + return text.replace(/\*\*(.*?)\*\*/g, (match, content) => { |
| 115 | + return chalk.yellowBright.bold(content); |
| 116 | + }); |
| 117 | +} |
| 118 | + |
| 119 | +function formatExperience() { |
| 120 | + return experience.map(e => { |
| 121 | + const header = chalk.greenBright.bold(`${e.company} — ${e.title} (${e.dates})`); |
| 122 | + const bullets = e.bullets.map(b => { |
| 123 | + const formattedText = formatBoldText(b); |
| 124 | + return chalk.white(` • ${formattedText}`); |
| 125 | + }).join("\n"); |
| 126 | + return `${header}\n${bullets}\n`; |
| 127 | + }).join("\n"); |
| 128 | +} |
| 129 | + |
| 130 | +function formatProjects() { |
| 131 | + return projects.map(p => { |
| 132 | + const name = chalk.magentaBright.bold(p.name); |
| 133 | + const desc = chalk.white(` • ${p.desc}`); |
| 134 | + const tech = chalk.white(` • ${p.tech}`); |
| 135 | + return `${name}\n${desc}\n${tech}\n`; |
| 136 | + }).join("\n"); |
| 137 | +} |
| 138 | + |
| 139 | +function formatList(arr, colorFn) { |
| 140 | + return arr.map(i => chalk.white(` • ${i}`)).join("\n"); |
| 141 | +} |
| 142 | + |
| 143 | +function formatEducation() { |
| 144 | + return education.map(ed => { |
| 145 | + const header = chalk.whiteBright.bold(`${ed.degree} — ${ed.school} (${ed.dates})`); |
| 146 | + const details = ed.details.map(d => chalk.white(` • ${d}`)).join("\n"); |
| 147 | + return `${header}\n${details}\n`; |
| 148 | + }).join("\n"); |
| 149 | +} |
| 150 | + |
| 151 | +/* box for tech stack (high contrast yellow bright) */ |
| 152 | +const boxedTech = boxen(chalk.yellowBright(techStack), { |
| 153 | + padding: 1, |
| 154 | + margin: 1, |
| 155 | + borderStyle: "round", |
| 156 | + textAlignment: "center" |
| 157 | +}); |
| 158 | + |
| 159 | +/* Build final output with high-contrast headings and bright content */ |
| 160 | +const output = ` |
| 161 | +${title} |
| 162 | +${role} ${chalk.white("•")} ${location} |
| 163 | +
|
| 164 | +${chalk.bold("Contact")} |
| 165 | +${email} • ${phone} |
| 166 | +${linkedin} |
| 167 | +${github} |
| 168 | +${portfolio} |
| 169 | +
|
| 170 | +${boxedTech} |
| 171 | +
|
| 172 | +${chalk.cyanBright.bold("Profile")} |
| 173 | +${chalk.white(profile)} |
| 174 | +
|
| 175 | +${chalk.yellowBright.bold("Core Skills")} |
| 176 | +${chalk.white(techStack)} |
| 177 | +
|
| 178 | +${chalk.greenBright.bold("Experience")} |
| 179 | +${formatExperience()} |
| 180 | +
|
| 181 | +${chalk.magentaBright.bold("Key Projects")} |
| 182 | +${formatProjects()} |
| 183 | +
|
| 184 | +${chalk.blueBright.bold("Leadership & Mentoring")} |
| 185 | +${formatList(leadership)} |
| 186 | +
|
| 187 | +${chalk.cyanBright.bold("Open-source & Community")} |
| 188 | +${formatList(openSource)} |
| 189 | +
|
| 190 | +${chalk.whiteBright.bold("Education")} |
| 191 | +${formatEducation()} |
| 192 | +
|
| 193 | +${chalk.dim("Run 'npx @bharathkumar-palanisamy' to print this resume.")} |
| 194 | +`.trim(); |
| 195 | + |
| 196 | +/* Print to terminal */ |
| 197 | +console.log(output); |
0 commit comments