whois-vijay 1.0.2 → 1.0.3
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/bin/index.js +172 -407
- package/package.json +1 -1
package/bin/index.js
CHANGED
|
@@ -3,419 +3,184 @@
|
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import boxen from "boxen";
|
|
5
5
|
import figlet from "figlet";
|
|
6
|
-
import inquirer from "inquirer";
|
|
7
|
-
import { createSpinner } from "nanospinner";
|
|
8
|
-
import { Command } from "commander";
|
|
9
6
|
import gradient from "gradient-string";
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
│ ALB │ ← Application Load Balancer
|
|
66
|
-
└───┬────┘
|
|
67
|
-
│
|
|
68
|
-
┌───┴───────────┐
|
|
69
|
-
│ │
|
|
70
|
-
┌──▼──┐ ┌──▼──┐
|
|
71
|
-
│ ECS │ │ ECS │ ← Container Services
|
|
72
|
-
│Task │ │Task │
|
|
73
|
-
└──┬──┘ └──┬──┘
|
|
74
|
-
│ │
|
|
75
|
-
└───────┬───────┘
|
|
76
|
-
│
|
|
77
|
-
┌────▼────┐
|
|
78
|
-
│ RDS │ ← Database
|
|
79
|
-
└─────────┘
|
|
80
|
-
`,
|
|
81
|
-
|
|
82
|
-
dataFlow: `
|
|
83
|
-
╔════════════════════════════════════════════════════════╗
|
|
84
|
-
║ MESSAGE QUEUE ARCHITECTURE ║
|
|
85
|
-
╚════════════════════════════════════════════════════════╝
|
|
86
|
-
|
|
87
|
-
Producer Queue Consumer
|
|
88
|
-
│ │ │
|
|
89
|
-
├──[Message]──────────►│ │
|
|
90
|
-
│ │ │
|
|
91
|
-
│ ┌───▼────┐ │
|
|
92
|
-
│ │ Kafka │ │
|
|
93
|
-
│ │ Topic │ │
|
|
94
|
-
│ └───┬────┘ │
|
|
95
|
-
│ │ │
|
|
96
|
-
│ ├──[Poll]───────────►│
|
|
97
|
-
│ │ │
|
|
98
|
-
│ │ ┌─────▼─────┐
|
|
99
|
-
│ │ │ Process │
|
|
100
|
-
│ │ │ & Handle │
|
|
101
|
-
│ │ └─────┬─────┘
|
|
102
|
-
│ │ │
|
|
103
|
-
│ │◄──[ACK]────────────┤
|
|
104
|
-
│ │ │
|
|
105
|
-
│ ┌───▼────┐ │
|
|
106
|
-
│ │ DLQ │ ← Dead Letter Queue
|
|
107
|
-
│ └────────┘ │
|
|
108
|
-
`
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
// Display Modes
|
|
112
|
-
const displayModes = {
|
|
113
|
-
async short() {
|
|
114
|
-
console.clear();
|
|
115
|
-
const title = gradient.pastel.multiline(
|
|
116
|
-
figlet.textSync("VIJAY", { horizontalLayout: "full" })
|
|
117
|
-
);
|
|
118
|
-
console.log(title);
|
|
119
|
-
|
|
120
|
-
const content = `
|
|
121
|
-
${chalk.bold.cyan("Backend & Systems Engineer")}
|
|
122
|
-
${chalk.gray("Node.js • Distributed Systems • AWS • Docker")}
|
|
123
|
-
${chalk.gray("Focus: Building resilient, observable systems")}
|
|
124
|
-
`;
|
|
125
|
-
console.log(boxen(content, {
|
|
7
|
+
import ora from "ora";
|
|
8
|
+
|
|
9
|
+
const sleep = (ms) => new Promise(r => setTimeout(r, ms));
|
|
10
|
+
|
|
11
|
+
console.clear();
|
|
12
|
+
|
|
13
|
+
/* =========================
|
|
14
|
+
SOFT BOOT
|
|
15
|
+
========================= */
|
|
16
|
+
|
|
17
|
+
const boot = ora({
|
|
18
|
+
text: chalk.gray("Initializing identity layer"),
|
|
19
|
+
spinner: "line"
|
|
20
|
+
}).start();
|
|
21
|
+
|
|
22
|
+
await sleep(1200);
|
|
23
|
+
boot.text = chalk.gray("Aligning distributed systems profile");
|
|
24
|
+
await sleep(900);
|
|
25
|
+
boot.succeed(chalk.gray("Ready\n"));
|
|
26
|
+
|
|
27
|
+
/* =========================
|
|
28
|
+
SIGNATURE HEADER
|
|
29
|
+
========================= */
|
|
30
|
+
|
|
31
|
+
const name = figlet.textSync("VIJAY", {
|
|
32
|
+
font: "ANSI Shadow",
|
|
33
|
+
horizontalLayout: "fitted"
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
console.log(gradient.mind(name));
|
|
37
|
+
|
|
38
|
+
console.log(
|
|
39
|
+
chalk.hex("#C9A24D").bold("Backend & Systems Engineering\n") +
|
|
40
|
+
chalk.gray(
|
|
41
|
+
"Designing reliable, observable, and scalable backend systems\n" +
|
|
42
|
+
"for real-world production environments.\n"
|
|
43
|
+
)
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
await sleep(600);
|
|
47
|
+
|
|
48
|
+
/* =========================
|
|
49
|
+
EXECUTIVE SUMMARY
|
|
50
|
+
========================= */
|
|
51
|
+
|
|
52
|
+
console.log(
|
|
53
|
+
boxen(
|
|
54
|
+
chalk.hex("#C9A24D").bold("DISTRIBUTED SYSTEMS ENGINEER\n\n") +
|
|
55
|
+
chalk.white(
|
|
56
|
+
"I build backend systems with a focus on longevity, correctness,\n" +
|
|
57
|
+
"and graceful failure under pressure.\n\n" +
|
|
58
|
+
"My work centers around machine-to-machine communication,\n" +
|
|
59
|
+
"event-driven architectures, and production reliability."
|
|
60
|
+
),
|
|
61
|
+
{
|
|
126
62
|
padding: 1,
|
|
127
|
-
margin: 1,
|
|
128
63
|
borderStyle: "round",
|
|
129
|
-
borderColor: "
|
|
130
|
-
|
|
131
|
-
},
|
|
132
|
-
|
|
133
|
-
async tech() {
|
|
134
|
-
console.clear();
|
|
135
|
-
const spinner = createSpinner("Loading tech stack...").start();
|
|
136
|
-
await sleep(1500);
|
|
137
|
-
spinner.success({ text: "Tech profile loaded!" });
|
|
138
|
-
|
|
139
|
-
console.log("\n" + chalk.bold.cyan("━".repeat(60)));
|
|
140
|
-
console.log(chalk.bold.yellow(" TECH STACK & EXPERTISE"));
|
|
141
|
-
console.log(chalk.bold.cyan("━".repeat(60)) + "\n");
|
|
142
|
-
|
|
143
|
-
const techStack = [
|
|
144
|
-
{ category: "Backend Frameworks", items: ["Node.js", "NestJS", "Express"], icon: "🚀" },
|
|
145
|
-
{ category: "Message Queues", items: ["Kafka", "RabbitMQ", "AWS SQS"], icon: "📨" },
|
|
146
|
-
{ category: "Cloud & Infrastructure", items: ["AWS (ECS, EC2, WAF)", "Docker", "Kubernetes"], icon: "☁️" },
|
|
147
|
-
{ category: "Databases", items: ["PostgreSQL", "MongoDB", "Redis"], icon: "🗄️" },
|
|
148
|
-
{ category: "Observability", items: ["Prometheus", "Grafana", "ELK Stack"], icon: "📊" },
|
|
149
|
-
{ category: "Languages", items: ["JavaScript/TypeScript", "Python", "Go"], icon: "💻" }
|
|
150
|
-
];
|
|
151
|
-
|
|
152
|
-
for (const tech of techStack) {
|
|
153
|
-
console.log(chalk.bold(`${tech.icon} ${tech.category}`));
|
|
154
|
-
console.log(chalk.gray(` └─ ${tech.items.join(", ")}\n`));
|
|
155
|
-
await sleep(300);
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
|
|
159
|
-
async systems() {
|
|
160
|
-
console.clear();
|
|
161
|
-
const spinner = createSpinner("Loading system architectures...").start();
|
|
162
|
-
await sleep(1500);
|
|
163
|
-
spinner.success({ text: "Architecture diagrams loaded!" });
|
|
164
|
-
|
|
165
|
-
console.log(chalk.cyan(systemDiagrams.microservices));
|
|
166
|
-
await sleep(1000);
|
|
167
|
-
|
|
168
|
-
console.log(chalk.yellow(systemDiagrams.awsInfra));
|
|
169
|
-
await sleep(1000);
|
|
170
|
-
|
|
171
|
-
console.log(chalk.green(systemDiagrams.dataFlow));
|
|
172
|
-
|
|
173
|
-
console.log("\n" + boxen(
|
|
174
|
-
chalk.bold("Systems Thinking:\n\n") +
|
|
175
|
-
"• Design for failure, not success\n" +
|
|
176
|
-
"• Observability > Debugging\n" +
|
|
177
|
-
"• Async communication patterns\n" +
|
|
178
|
-
"• Circuit breakers & retry strategies\n" +
|
|
179
|
-
"• Event-driven architectures",
|
|
180
|
-
{ padding: 1, borderColor: "cyan", borderStyle: "double" }
|
|
181
|
-
));
|
|
182
|
-
},
|
|
183
|
-
|
|
184
|
-
async philosophy() {
|
|
185
|
-
console.clear();
|
|
186
|
-
const rainbow = chalkAnimation.rainbow("SYSTEMS PHILOSOPHY");
|
|
187
|
-
await sleep(2000);
|
|
188
|
-
rainbow.stop();
|
|
189
|
-
|
|
190
|
-
console.log("\n" + chalk.bold.magenta("━".repeat(60)));
|
|
191
|
-
console.log(chalk.bold.yellow(" ENGINEERING PHILOSOPHY"));
|
|
192
|
-
console.log(chalk.bold.magenta("━".repeat(60)) + "\n");
|
|
193
|
-
|
|
194
|
-
const philosophy = [
|
|
195
|
-
{
|
|
196
|
-
title: "🎯 Reliability First",
|
|
197
|
-
text: "Systems fail. Design for graceful degradation, not perfection."
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
title: "🔍 Observability Over Debugging",
|
|
201
|
-
text: "You can't fix what you can't see. Metrics, logs, traces—always."
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
title: "⚡ Async by Default",
|
|
205
|
-
text: "Synchronous calls create tight coupling. Events create resilience."
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
title: "🛡️ Defense in Depth",
|
|
209
|
-
text: "Rate limiting, circuit breakers, timeouts, retries—layer your defenses."
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
title: "📈 Measure Everything",
|
|
213
|
-
text: "If you can't measure it, you can't improve it. Data drives decisions."
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
title: "🔄 Idempotency Matters",
|
|
217
|
-
text: "Distributed systems retry. Your operations must be safe to repeat."
|
|
218
|
-
}
|
|
219
|
-
];
|
|
220
|
-
|
|
221
|
-
for (const item of philosophy) {
|
|
222
|
-
console.log(chalk.bold.cyan(item.title));
|
|
223
|
-
console.log(chalk.gray(` ${item.text}\n`));
|
|
224
|
-
await sleep(500);
|
|
64
|
+
borderColor: "yellow",
|
|
65
|
+
margin: 1
|
|
225
66
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const profile = `
|
|
260
|
-
${chalk.bold("Backend & Systems Engineer")}
|
|
261
|
-
|
|
262
|
-
${chalk.cyan("Core Skills:")}
|
|
263
|
-
• Distributed Systems Architecture
|
|
264
|
-
• Event-Driven Design (Kafka, RabbitMQ)
|
|
265
|
-
• Cloud Infrastructure (AWS: ECS, EC2, WAF, Lambda)
|
|
266
|
-
• Container Orchestration (Docker, Kubernetes)
|
|
267
|
-
• API Design & Microservices
|
|
268
|
-
• Database Optimization (SQL & NoSQL)
|
|
269
|
-
|
|
270
|
-
${chalk.yellow("Systems Mindset:")}
|
|
271
|
-
• Failure handling over happy paths
|
|
272
|
-
• Observability & monitoring first
|
|
273
|
-
• Machine-to-machine communication
|
|
274
|
-
• Circuit breakers & resilience patterns
|
|
275
|
-
• Performance under pressure
|
|
276
|
-
|
|
277
|
-
${chalk.green("Tech Stack:")}
|
|
278
|
-
• Languages: TypeScript, JavaScript, Python, Go
|
|
279
|
-
• Backend: Node.js, NestJS, Express
|
|
280
|
-
• Messaging: Kafka, RabbitMQ, SQS
|
|
281
|
-
• Data: PostgreSQL, MongoDB, Redis
|
|
282
|
-
• Observability: Prometheus, Grafana, ELK
|
|
283
|
-
|
|
284
|
-
${chalk.magenta("Focus Areas:")}
|
|
285
|
-
• Building systems that scale
|
|
286
|
-
• Designing for reliability
|
|
287
|
-
• Optimizing for observability
|
|
288
|
-
• Creating resilient architectures
|
|
289
|
-
`;
|
|
290
|
-
|
|
291
|
-
console.log(boxen(profile, {
|
|
292
|
-
padding: 1,
|
|
293
|
-
margin: 1,
|
|
294
|
-
borderStyle: "double",
|
|
295
|
-
borderColor: "cyan"
|
|
296
|
-
}));
|
|
297
|
-
|
|
298
|
-
// System diagram
|
|
299
|
-
console.log(chalk.cyan(systemDiagrams.microservices));
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
|
|
303
|
-
// Helper Functions
|
|
304
|
-
async function sleep(ms) {
|
|
305
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
async function fetchGitHubStats(username) {
|
|
309
|
-
const response = await axios.get(`https://api.github.com/users/${username}`);
|
|
310
|
-
return response.data;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
function displayGitHubStats(data) {
|
|
314
|
-
const stats = `
|
|
315
|
-
${chalk.bold("GitHub Stats:")}
|
|
316
|
-
• Public Repos: ${data.public_repos}
|
|
317
|
-
• Followers: ${data.followers}
|
|
318
|
-
• Following: ${data.following}
|
|
319
|
-
• Profile: ${chalk.cyan(data.html_url)}
|
|
320
|
-
`;
|
|
321
|
-
console.log(boxen(stats, {
|
|
322
|
-
padding: 1,
|
|
323
|
-
borderColor: "green",
|
|
324
|
-
borderStyle: "round"
|
|
325
|
-
}));
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
async function showInteractiveMenu() {
|
|
329
|
-
console.clear();
|
|
330
|
-
|
|
331
|
-
const title = gradient.pastel.multiline(
|
|
332
|
-
figlet.textSync("VIJAY", { horizontalLayout: "full" })
|
|
333
|
-
);
|
|
334
|
-
console.log(title);
|
|
335
|
-
|
|
336
|
-
console.log(chalk.gray("\n Backend & Systems Engineer\n"));
|
|
337
|
-
|
|
338
|
-
const answer = await inquirer.prompt([
|
|
67
|
+
)
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
await sleep(700);
|
|
71
|
+
|
|
72
|
+
/* =========================
|
|
73
|
+
CAPABILITY COMPOSITION
|
|
74
|
+
========================= */
|
|
75
|
+
|
|
76
|
+
console.log(
|
|
77
|
+
boxen(
|
|
78
|
+
chalk.bold.hex("#6FA3A8")("CORE CAPABILITIES\n\n") +
|
|
79
|
+
chalk.white(
|
|
80
|
+
"• Distributed system design\n" +
|
|
81
|
+
"• Event-driven messaging\n" +
|
|
82
|
+
"• Failure handling & recovery\n" +
|
|
83
|
+
"• Observability & diagnostics\n" +
|
|
84
|
+
"• System design trade-offs\n\n"
|
|
85
|
+
) +
|
|
86
|
+
chalk.bold.hex("#8FA87F")("ARCHITECTURE\n\n") +
|
|
87
|
+
chalk.white(
|
|
88
|
+
"• API gateways & service boundaries\n" +
|
|
89
|
+
"• Load balancing & auto-scaling\n" +
|
|
90
|
+
"• Kafka, RabbitMQ, async workflows\n" +
|
|
91
|
+
"• Circuit breakers & backpressure\n\n"
|
|
92
|
+
) +
|
|
93
|
+
chalk.bold.hex("#B89B5E")("TECH STACK\n\n") +
|
|
94
|
+
chalk.white(
|
|
95
|
+
"• Node.js, TypeScript, NestJS\n" +
|
|
96
|
+
"• PostgreSQL, MongoDB, Redis\n" +
|
|
97
|
+
"• Docker, CI/CD pipelines\n" +
|
|
98
|
+
"• AWS (ECS, EC2, RDS, WAF)"
|
|
99
|
+
),
|
|
339
100
|
{
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
{ name: "🚀 Tech Stack & Skills", value: "tech" },
|
|
345
|
-
{ name: "🏗️ System Architecture Diagrams", value: "systems" },
|
|
346
|
-
{ name: "💭 Engineering Philosophy", value: "philosophy" },
|
|
347
|
-
{ name: "📊 Full Profile + GitHub Stats", value: "full" },
|
|
348
|
-
{ name: "⚡ Quick Overview", value: "short" },
|
|
349
|
-
{ name: "🔄 Show All (Sequential)", value: "all" },
|
|
350
|
-
{ name: "❌ Exit", value: "exit" }
|
|
351
|
-
]
|
|
101
|
+
padding: 1,
|
|
102
|
+
borderStyle: "round",
|
|
103
|
+
borderColor: "cyan",
|
|
104
|
+
margin: 1
|
|
352
105
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
// Ask if they want to continue
|
|
375
|
-
console.log("\n");
|
|
376
|
-
const continueAnswer = await inquirer.prompt([
|
|
106
|
+
)
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
await sleep(700);
|
|
110
|
+
|
|
111
|
+
/* =========================
|
|
112
|
+
SYSTEM SIGNATURE
|
|
113
|
+
========================= */
|
|
114
|
+
|
|
115
|
+
console.log(
|
|
116
|
+
boxen(
|
|
117
|
+
chalk.bold("SYSTEM FLOW\n\n") +
|
|
118
|
+
chalk.bgHex("#3A3A3A").white(" API-GATEWAY ") +
|
|
119
|
+
chalk.gray(" → ") +
|
|
120
|
+
chalk.bgHex("#2E5EAA").white(" SERVICES ") +
|
|
121
|
+
chalk.gray(" → ") +
|
|
122
|
+
chalk.bgHex("#2E7D32").white(" EVENT BUS ") +
|
|
123
|
+
chalk.gray(" → ") +
|
|
124
|
+
chalk.bgHex("#8D6E63").white(" WORKERS ") +
|
|
125
|
+
chalk.gray(" → ") +
|
|
126
|
+
chalk.bgHex("#455A64").white(" CACHE "),
|
|
377
127
|
{
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
128
|
+
padding: 1,
|
|
129
|
+
borderStyle: "round",
|
|
130
|
+
borderColor: "white",
|
|
131
|
+
margin: 1
|
|
382
132
|
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
.
|
|
395
|
-
.
|
|
396
|
-
.
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
133
|
+
)
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
await sleep(600);
|
|
137
|
+
|
|
138
|
+
/* =========================
|
|
139
|
+
SIGNAL STATUS
|
|
140
|
+
========================= */
|
|
141
|
+
|
|
142
|
+
const signals = [
|
|
143
|
+
chalk.bgHex("#2E7D32").white(" STABLE "),
|
|
144
|
+
chalk.bgHex("#0277BD").white(" OBSERVABLE "),
|
|
145
|
+
chalk.bgHex("#6A1B9A").white(" SCALABLE "),
|
|
146
|
+
chalk.bgHex("#F9A825").black(" RESILIENT ")
|
|
147
|
+
].join(" ");
|
|
148
|
+
|
|
149
|
+
console.log("\n " + signals + "\n");
|
|
150
|
+
|
|
151
|
+
/* =========================
|
|
152
|
+
CONTACT
|
|
153
|
+
========================= */
|
|
154
|
+
|
|
155
|
+
console.log(
|
|
156
|
+
boxen(
|
|
157
|
+
chalk.bold("CONTACT\n\n") +
|
|
158
|
+
chalk.white("Email: ") + chalk.hex("#C9A24D")("vijayguhan10@gmail.com") + "\n" +
|
|
159
|
+
chalk.white("Location: ") + chalk.gray("Salem, Tamil Nadu, India\n\n") +
|
|
160
|
+
chalk.white("Phone: ") + chalk.gray("8438434868\n\n") +
|
|
161
|
+
|
|
162
|
+
chalk.bold("LINKS\n\n") +
|
|
163
|
+
chalk.white("LinkedIn: ") + chalk.gray("linkedin.com/in/vijay-guhan-728299283") + "\n" +
|
|
164
|
+
chalk.white("LeetCode: ") + chalk.gray("leetcode.com/u/vijayguhan12\n\n") +
|
|
165
|
+
|
|
166
|
+
chalk.bold("SELECTED WORK\n\n") +
|
|
167
|
+
chalk.gray("• revozen-partner.vercel.app — Partner Platform\n") +
|
|
168
|
+
chalk.gray("• acs-lead.vercel.app — Lead Management System"),
|
|
169
|
+
{
|
|
170
|
+
padding: 1,
|
|
171
|
+
borderStyle: "round",
|
|
172
|
+
borderColor: "yellow",
|
|
173
|
+
margin: 1
|
|
418
174
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
175
|
+
)
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
/* =========================
|
|
179
|
+
CLOSING MARK
|
|
180
|
+
========================= */
|
|
181
|
+
|
|
182
|
+
console.log(
|
|
183
|
+
chalk.hex("#C9A24D").bold(
|
|
184
|
+
"\nReliable • Observable • Scalable • Resilient\n"
|
|
185
|
+
)
|
|
186
|
+
);
|