farooq-cv 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/bin/index.js +121 -0
- package/package.json +12 -4
package/README.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
-
#
|
|
1
|
+
# farooq-cv
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Muhammad Farooq's CV, in your terminal.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx farooq-cv
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Skip the animation: `npx farooq-cv --fast`
|
|
10
|
+
|
|
11
|
+
Or install globally:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm i -g farooq-cv
|
|
15
|
+
farooq
|
|
16
|
+
```
|
package/bin/index.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const useColor = process.stdout.isTTY && !process.env.NO_COLOR;
|
|
5
|
+
const c = (code) => (s) => (useColor ? `\x1b[${code}m${s}\x1b[0m` : s);
|
|
6
|
+
const bold = c('1'), dim = c('2'), cyan = c('36'), green = c('32'),
|
|
7
|
+
yellow = c('33'), magenta = c('35'), white = c('97');
|
|
8
|
+
|
|
9
|
+
const fast = process.argv.includes('--fast') || !process.stdout.isTTY;
|
|
10
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
11
|
+
const W = Math.min(process.stdout.columns || 80, 80);
|
|
12
|
+
|
|
13
|
+
const wrap = (text, width, indent = '') => {
|
|
14
|
+
const words = text.split(' ');
|
|
15
|
+
const lines = [];
|
|
16
|
+
let line = '';
|
|
17
|
+
for (const w of words) {
|
|
18
|
+
if ((line + ' ' + w).trim().length > width) { lines.push(line); line = w; }
|
|
19
|
+
else line = (line + ' ' + w).trim();
|
|
20
|
+
}
|
|
21
|
+
if (line) lines.push(line);
|
|
22
|
+
return lines.map((l) => indent + l).join('\n');
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const data = {
|
|
26
|
+
name: 'MUHAMMAD FAROOQ',
|
|
27
|
+
title: 'Generative & Agentic AI Engineer',
|
|
28
|
+
contact: [
|
|
29
|
+
['Email', 'farooq.tech13@gmail.com'],
|
|
30
|
+
['Phone', '03312456771'],
|
|
31
|
+
['Location', 'Pakistan'],
|
|
32
|
+
],
|
|
33
|
+
summary:
|
|
34
|
+
'Final-year Computer Science student at FAST NUCES with hands-on experience building production-grade Generative and Agentic AI systems. Proficient in end-to-end LLM integration, multi-agent orchestration with LangGraph, and RAG pipelines. Comfortable shipping REST APIs with FastAPI and working across multiple frontier models including OpenAI, Gemini, Mistral, and Grok. Passionate about solving real-world problems through autonomous AI workflows.',
|
|
35
|
+
education: [
|
|
36
|
+
['FAST National University of Computer & Emerging Sciences (NUCES)', 'BS Computer Science | 2023 - Present'],
|
|
37
|
+
],
|
|
38
|
+
skills: [
|
|
39
|
+
['Core', 'LLM Integration, LangChain, LangGraph, RAG Pipelines, Vector Databases, FastAPI, Multi-Agent Systems, HuggingFace'],
|
|
40
|
+
['Models & APIs', 'OpenAI API, Gemini API, Mistral, Grok'],
|
|
41
|
+
['Development', 'Prompt Engineering, Python, REST APIs, Agentic Workflows'],
|
|
42
|
+
['Tools', 'VS Code, ChatGPT, Claude, DeepSeek, Gemini, Git'],
|
|
43
|
+
],
|
|
44
|
+
genai: [
|
|
45
|
+
['Movie Summarizer', 'LLM app that takes a movie title and generates concise, well-structured summaries.'],
|
|
46
|
+
['Local Chatbot', 'Locally-running chatbot on open-source LLMs. Private, offline, no cloud dependency.'],
|
|
47
|
+
['HuggingFace Local LLM Chatbot', 'Locally hosted HuggingFace model in a chatbot pipeline with on-device inference.'],
|
|
48
|
+
['Deep Learning Book RAG', 'RAG over a deep learning textbook with a vector DB for grounded Q&A.'],
|
|
49
|
+
['FAST Peshawar Timetable Assistant', 'RAG assistant answering student queries about class schedules from structured timetable data.'],
|
|
50
|
+
['Multi-Agent Research Project', 'Specialized agents collaborate to decompose queries, gather sources, and synthesize results.'],
|
|
51
|
+
],
|
|
52
|
+
agentic: [
|
|
53
|
+
['Weather & World News Agent', 'Autonomous agent using tool-calling and external APIs for live weather and global headlines.'],
|
|
54
|
+
['Roman Urdu Translator Agent', 'Detects Roman Urdu and translates to formal Urdu or English, handling colloquial context.'],
|
|
55
|
+
['Gym Fitness Guide Agent', 'Personalized workout plans and nutrition advice via LLM reasoning and structured tool use.'],
|
|
56
|
+
['Agentic RAG with Human-in-the-Loop', 'LangGraph RAG with agentic decisions and human approval checkpoints before execution.'],
|
|
57
|
+
],
|
|
58
|
+
footer: 'Available for freelance projects, internships, and full-time AI engineering roles.',
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const out = [];
|
|
62
|
+
const push = (s = '') => out.push(s);
|
|
63
|
+
const heading = (t) => {
|
|
64
|
+
push();
|
|
65
|
+
push(bold(cyan(` ${t.toUpperCase()}`)));
|
|
66
|
+
push(dim(' ' + '─'.repeat(W - 4)));
|
|
67
|
+
};
|
|
68
|
+
const items = (list) => {
|
|
69
|
+
for (const [t, d] of list) {
|
|
70
|
+
push(` ${green('▸')} ${bold(white(t))}`);
|
|
71
|
+
push(dim(wrap(d, W - 8, ' ')));
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// header
|
|
76
|
+
const pad = (s, w) => s + ' '.repeat(Math.max(0, w - s.length));
|
|
77
|
+
const inner = W - 2;
|
|
78
|
+
const center = (s) => {
|
|
79
|
+
const l = Math.floor((inner - s.length) / 2);
|
|
80
|
+
return ' '.repeat(l) + s + ' '.repeat(inner - s.length - l);
|
|
81
|
+
};
|
|
82
|
+
push(magenta('╭' + '─'.repeat(inner) + '╮'));
|
|
83
|
+
push(magenta('│') + bold(white(center(data.name))) + magenta('│'));
|
|
84
|
+
push(magenta('│') + cyan(center(data.title)) + magenta('│'));
|
|
85
|
+
push(magenta('╰' + '─'.repeat(inner) + '╯'));
|
|
86
|
+
push();
|
|
87
|
+
for (const [k, v] of data.contact) push(` ${yellow(pad(k, 9))} ${v}`);
|
|
88
|
+
|
|
89
|
+
heading('Summary');
|
|
90
|
+
push(wrap(data.summary, W - 4, ' '));
|
|
91
|
+
|
|
92
|
+
heading('Education');
|
|
93
|
+
for (const [s, d] of data.education) {
|
|
94
|
+
push(` ${green('▸')} ${bold(white(s))}`);
|
|
95
|
+
push(dim(` ${d}`));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
heading('Technical Skills');
|
|
99
|
+
for (const [k, v] of data.skills) {
|
|
100
|
+
push(` ${yellow(k)}`);
|
|
101
|
+
push(wrap(v, W - 8, ' '));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
heading('Generative AI Projects');
|
|
105
|
+
items(data.genai);
|
|
106
|
+
|
|
107
|
+
heading('Agentic AI Projects');
|
|
108
|
+
items(data.agentic);
|
|
109
|
+
|
|
110
|
+
push();
|
|
111
|
+
push(dim(' ' + '─'.repeat(W - 4)));
|
|
112
|
+
push(` ${green('✔')} ${bold(data.footer)}`);
|
|
113
|
+
push(` ${dim('Say hi:')} ${cyan('farooq.tech13@gmail.com')}`);
|
|
114
|
+
push();
|
|
115
|
+
|
|
116
|
+
(async () => {
|
|
117
|
+
for (const line of out) {
|
|
118
|
+
console.log(line);
|
|
119
|
+
if (!fast) await sleep(25);
|
|
120
|
+
}
|
|
121
|
+
})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "farooq-cv",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Muhammad Farooq's CV, in your terminal. Run: npx farooq-cv",
|
|
5
|
+
"bin": {
|
|
6
|
+
"farooq-cv": "bin/index.js",
|
|
7
|
+
"farooq": "bin/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": ["bin"],
|
|
10
|
+
"keywords": ["cv", "resume", "cli", "npx", "ai-engineer"],
|
|
11
|
+
"author": "Muhammad Farooq <farooq.tech13@gmail.com>",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"engines": { "node": ">=14" }
|
|
14
|
+
}
|