whois-vijay 1.0.2
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 +205 -0
- package/bin/index.js +421 -0
- package/package.json +34 -0
package/README.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# whois-vijay
|
|
2
|
+
|
|
3
|
+
> Terminal profile of Vijay ā Backend & Systems Engineer
|
|
4
|
+
> **Interactive CLI with multiple modes, system diagrams, and GitHub integration**
|
|
5
|
+
|
|
6
|
+
## š Quick Start
|
|
7
|
+
|
|
8
|
+
Run anywhere with npx:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npx whois-vijay
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## ⨠Features
|
|
15
|
+
|
|
16
|
+
### š± Interactive Mode (Default)
|
|
17
|
+
|
|
18
|
+
Run without flags to get an interactive menu:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx whois-vijay
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Choose from:
|
|
25
|
+
|
|
26
|
+
- š **Tech Stack & Skills** - Complete technology overview
|
|
27
|
+
- šļø **System Architecture Diagrams** - ASCII art of distributed systems
|
|
28
|
+
- š **Engineering Philosophy** - Systems thinking & principles
|
|
29
|
+
- š **Full Profile + GitHub Stats** - Everything with live GitHub data
|
|
30
|
+
- ā” **Quick Overview** - Fast summary
|
|
31
|
+
|
|
32
|
+
### šÆ Command Flags
|
|
33
|
+
|
|
34
|
+
Run specific modes directly:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx whois-vijay --short # Quick overview
|
|
38
|
+
npx whois-vijay --tech # Tech stack & skills
|
|
39
|
+
npx whois-vijay --systems # System architecture diagrams
|
|
40
|
+
npx whois-vijay --philosophy # Engineering philosophy
|
|
41
|
+
npx whois-vijay --full # Complete profile + GitHub stats
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### šØ What's Included
|
|
45
|
+
|
|
46
|
+
1. **Animated ASCII Art** - Gradient & animated title
|
|
47
|
+
2. **Interactive Menus** - Navigate through different sections
|
|
48
|
+
3. **System Diagrams** - Visual ASCII representations of:
|
|
49
|
+
- Microservices architecture
|
|
50
|
+
- AWS infrastructure
|
|
51
|
+
- Message queue patterns
|
|
52
|
+
- Data flow diagrams
|
|
53
|
+
4. **GitHub Integration** - Live stats from GitHub API
|
|
54
|
+
5. **Loading Spinners** - Smooth animations
|
|
55
|
+
6. **Multiple Display Modes** - Tech, Philosophy, Systems, Full
|
|
56
|
+
7. **Philosophy Section** - Engineering principles & mindset
|
|
57
|
+
|
|
58
|
+
## š ļø Local Development
|
|
59
|
+
|
|
60
|
+
1. **Install dependencies:**
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm install
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
2. **Test locally:**
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
node bin/index.js
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
3. **Link globally:**
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npm link
|
|
76
|
+
whois-vijay
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
4. **Configure GitHub username** (optional):
|
|
80
|
+
- Edit `bin/index.js`
|
|
81
|
+
- Find `fetchGitHubStats("vijay-username")`
|
|
82
|
+
- Replace with your GitHub username
|
|
83
|
+
|
|
84
|
+
## š¦ Publishing to npm
|
|
85
|
+
|
|
86
|
+
1. **Login to npm:**
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npm login
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
2. **Update version** (if republishing):
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm version patch
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
3. **Publish:**
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npm publish
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Note:** If `whois-vijay` is taken, try:
|
|
105
|
+
|
|
106
|
+
- `whois-vijay-dev`
|
|
107
|
+
- `whois-vijay-systems`
|
|
108
|
+
- `@yourusername/whois-vijay` (scoped package)
|
|
109
|
+
|
|
110
|
+
## šÆ What You'll Experience
|
|
111
|
+
|
|
112
|
+
### Interactive Mode
|
|
113
|
+
|
|
114
|
+
- Gradient animated title
|
|
115
|
+
- Menu-driven navigation
|
|
116
|
+
- Smooth transitions
|
|
117
|
+
- Loading animations
|
|
118
|
+
- Multiple exploration paths
|
|
119
|
+
|
|
120
|
+
### Tech Mode
|
|
121
|
+
|
|
122
|
+
- Complete tech stack breakdown
|
|
123
|
+
- Categorized by: Backend, Messaging, Cloud, Databases, Observability
|
|
124
|
+
- Animated display with icons
|
|
125
|
+
|
|
126
|
+
### Systems Mode
|
|
127
|
+
|
|
128
|
+
- **Microservices Architecture** - Service mesh, load balancers, Kafka
|
|
129
|
+
- **AWS Infrastructure** - WAF, ALB, ECS, RDS
|
|
130
|
+
- **Message Queue Patterns** - Producer/Consumer with DLQ
|
|
131
|
+
|
|
132
|
+
### Philosophy Mode
|
|
133
|
+
|
|
134
|
+
- 6 core engineering principles
|
|
135
|
+
- Animated rainbow display
|
|
136
|
+
- Systems thinking approach
|
|
137
|
+
- Reliability-first mindset
|
|
138
|
+
|
|
139
|
+
### Full Mode
|
|
140
|
+
|
|
141
|
+
- Everything combined
|
|
142
|
+
- Live GitHub statistics
|
|
143
|
+
- Complete profile
|
|
144
|
+
- System diagrams
|
|
145
|
+
|
|
146
|
+
## š§° Tech Stack
|
|
147
|
+
|
|
148
|
+
- **Node.js** (ES Modules)
|
|
149
|
+
- **chalk** - Terminal colors
|
|
150
|
+
- **boxen** - Terminal boxes
|
|
151
|
+
- **figlet** - ASCII art
|
|
152
|
+
- **inquirer** - Interactive prompts
|
|
153
|
+
- **nanospinner** - Loading spinners
|
|
154
|
+
- **commander** - CLI argument parsing
|
|
155
|
+
- **axios** - GitHub API calls
|
|
156
|
+
- **gradient-string** - Gradient text
|
|
157
|
+
- **chalk-animation** - Animated text
|
|
158
|
+
|
|
159
|
+
## š Examples
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Interactive mode (recommended first experience)
|
|
163
|
+
npx whois-vijay
|
|
164
|
+
|
|
165
|
+
# Quick check
|
|
166
|
+
npx whois-vijay --short
|
|
167
|
+
|
|
168
|
+
# See the architecture thinking
|
|
169
|
+
npx whois-vijay --systems
|
|
170
|
+
|
|
171
|
+
# Understand the philosophy
|
|
172
|
+
npx whois-vijay --philosophy
|
|
173
|
+
|
|
174
|
+
# Get everything + GitHub stats
|
|
175
|
+
npx whois-vijay --full
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## š Advanced Usage
|
|
179
|
+
|
|
180
|
+
Chain with other commands:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npx whois-vijay --short && npm init
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Use in CI/CD pipelines to show developer info:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
npx whois-vijay --tech > TECH_STACK.txt
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## š Customization
|
|
193
|
+
|
|
194
|
+
Fork and customize:
|
|
195
|
+
|
|
196
|
+
1. Update the profile data in `bin/index.js`
|
|
197
|
+
2. Modify ASCII diagrams in `systemDiagrams` object
|
|
198
|
+
3. Add your own sections to `displayModes`
|
|
199
|
+
4. Change colors and styling
|
|
200
|
+
5. Add your GitHub username for stats
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
**Systems thinking meets developer branding** š
|
|
205
|
+
**v2.0 - Now with full interactivity!**
|
package/bin/index.js
ADDED
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import boxen from "boxen";
|
|
5
|
+
import figlet from "figlet";
|
|
6
|
+
import inquirer from "inquirer";
|
|
7
|
+
import { createSpinner } from "nanospinner";
|
|
8
|
+
import { Command } from "commander";
|
|
9
|
+
import gradient from "gradient-string";
|
|
10
|
+
import chalkAnimation from "chalk-animation";
|
|
11
|
+
import axios from "axios";
|
|
12
|
+
|
|
13
|
+
const program = new Command();
|
|
14
|
+
|
|
15
|
+
// ASCII Art Diagrams
|
|
16
|
+
const systemDiagrams = {
|
|
17
|
+
microservices: `
|
|
18
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
19
|
+
ā DISTRIBUTED SYSTEMS ARCHITECTURE ā
|
|
20
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
21
|
+
|
|
22
|
+
āāāāāāāāāāāāāāā
|
|
23
|
+
ā API GW ā ā Load Balancer
|
|
24
|
+
āāāāāāāā¬āāāāāāā
|
|
25
|
+
ā
|
|
26
|
+
āāāāāāāā“āāāāāāā
|
|
27
|
+
ā ā
|
|
28
|
+
āāāāā¼āāāā āāāāā¼āāāā
|
|
29
|
+
āServiceā āServiceā
|
|
30
|
+
ā A ā ā B ā
|
|
31
|
+
āāāāā¬āāāā āāāāā¬āāāā
|
|
32
|
+
ā ā
|
|
33
|
+
āāāāāāā¬āāāāāāā
|
|
34
|
+
ā
|
|
35
|
+
āāāāāāā¼āāāāāā
|
|
36
|
+
ā Kafka ā ā Event Bus
|
|
37
|
+
āāāāāāāāāāāāā
|
|
38
|
+
ā
|
|
39
|
+
āāāāāāā“āāāāāā
|
|
40
|
+
ā ā
|
|
41
|
+
āāāāā¼āāāā āāāāā¼āāāāā
|
|
42
|
+
āWorker ā āWorker ā
|
|
43
|
+
ā 1 ā ā 2 ā
|
|
44
|
+
āāāāā¬āāāā āāāāā¬āāāāā
|
|
45
|
+
ā ā
|
|
46
|
+
āāāāāā¬āāāāāā
|
|
47
|
+
ā
|
|
48
|
+
āāāāāā¼āāāāā
|
|
49
|
+
ā Redis ā ā Cache Layer
|
|
50
|
+
āāāāāāāāāāā
|
|
51
|
+
`,
|
|
52
|
+
|
|
53
|
+
awsInfra: `
|
|
54
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
55
|
+
ā AWS INFRASTRUCTURE ā
|
|
56
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
57
|
+
|
|
58
|
+
Internet
|
|
59
|
+
ā
|
|
60
|
+
āāāāā¼āāāāā
|
|
61
|
+
ā WAF ā ā Security Layer
|
|
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, {
|
|
126
|
+
padding: 1,
|
|
127
|
+
margin: 1,
|
|
128
|
+
borderStyle: "round",
|
|
129
|
+
borderColor: "cyan"
|
|
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);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
console.log(boxen(
|
|
228
|
+
chalk.italic('"The best system is not the one that never fails,\nbut the one that fails gracefully and recovers quickly."'),
|
|
229
|
+
{ padding: 1, borderColor: "magenta", borderStyle: "round", align: "center" }
|
|
230
|
+
));
|
|
231
|
+
},
|
|
232
|
+
|
|
233
|
+
async full() {
|
|
234
|
+
console.clear();
|
|
235
|
+
|
|
236
|
+
// Animated title
|
|
237
|
+
const rainbow = chalkAnimation.rainbow(
|
|
238
|
+
figlet.textSync("VIJAY", { horizontalLayout: "full" })
|
|
239
|
+
);
|
|
240
|
+
await sleep(2000);
|
|
241
|
+
rainbow.stop();
|
|
242
|
+
|
|
243
|
+
// GitHub stats
|
|
244
|
+
console.log("\n");
|
|
245
|
+
const spinner = createSpinner("Fetching GitHub stats...").start();
|
|
246
|
+
try {
|
|
247
|
+
const githubData = await fetchGitHubStats("vijay-username"); // Replace with actual username
|
|
248
|
+
spinner.success({ text: "GitHub data loaded!" });
|
|
249
|
+
displayGitHubStats(githubData);
|
|
250
|
+
} catch (error) {
|
|
251
|
+
spinner.error({ text: "GitHub stats unavailable (set username in code)" });
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Full profile
|
|
255
|
+
console.log("\n" + chalk.bold.cyan("ā".repeat(60)));
|
|
256
|
+
console.log(chalk.bold.yellow(" COMPLETE PROFILE"));
|
|
257
|
+
console.log(chalk.bold.cyan("ā".repeat(60)) + "\n");
|
|
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([
|
|
339
|
+
{
|
|
340
|
+
type: "list",
|
|
341
|
+
name: "mode",
|
|
342
|
+
message: "What would you like to explore?",
|
|
343
|
+
choices: [
|
|
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
|
+
]
|
|
352
|
+
}
|
|
353
|
+
]);
|
|
354
|
+
|
|
355
|
+
if (answer.mode === "exit") {
|
|
356
|
+
console.log(chalk.cyan("\nš See you later!\n"));
|
|
357
|
+
process.exit(0);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (answer.mode === "all") {
|
|
361
|
+
await displayModes.short();
|
|
362
|
+
await sleep(2000);
|
|
363
|
+
await displayModes.tech();
|
|
364
|
+
await sleep(2000);
|
|
365
|
+
await displayModes.philosophy();
|
|
366
|
+
await sleep(2000);
|
|
367
|
+
await displayModes.systems();
|
|
368
|
+
await sleep(2000);
|
|
369
|
+
await displayModes.full();
|
|
370
|
+
} else {
|
|
371
|
+
await displayModes[answer.mode]();
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// Ask if they want to continue
|
|
375
|
+
console.log("\n");
|
|
376
|
+
const continueAnswer = await inquirer.prompt([
|
|
377
|
+
{
|
|
378
|
+
type: "confirm",
|
|
379
|
+
name: "continue",
|
|
380
|
+
message: "Explore another section?",
|
|
381
|
+
default: true
|
|
382
|
+
}
|
|
383
|
+
]);
|
|
384
|
+
|
|
385
|
+
if (continueAnswer.continue) {
|
|
386
|
+
await showInteractiveMenu();
|
|
387
|
+
} else {
|
|
388
|
+
console.log(chalk.cyan("\n⨠Thanks for visiting!\n"));
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// CLI Setup
|
|
393
|
+
program
|
|
394
|
+
.name("whois-vijay")
|
|
395
|
+
.description("Terminal profile of Vijay - Backend & Systems Engineer")
|
|
396
|
+
.version("2.0.0");
|
|
397
|
+
|
|
398
|
+
program
|
|
399
|
+
.option("-s, --short", "Quick overview")
|
|
400
|
+
.option("-t, --tech", "Tech stack & skills")
|
|
401
|
+
.option("-y, --systems", "System architecture diagrams")
|
|
402
|
+
.option("-p, --philosophy", "Engineering philosophy")
|
|
403
|
+
.option("-f, --full", "Full profile with GitHub stats")
|
|
404
|
+
.action(async (options) => {
|
|
405
|
+
if (options.short) {
|
|
406
|
+
await displayModes.short();
|
|
407
|
+
} else if (options.tech) {
|
|
408
|
+
await displayModes.tech();
|
|
409
|
+
} else if (options.systems) {
|
|
410
|
+
await displayModes.systems();
|
|
411
|
+
} else if (options.philosophy) {
|
|
412
|
+
await displayModes.philosophy();
|
|
413
|
+
} else if (options.full) {
|
|
414
|
+
await displayModes.full();
|
|
415
|
+
} else {
|
|
416
|
+
// Default: Interactive mode
|
|
417
|
+
await showInteractiveMenu();
|
|
418
|
+
}
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
program.parse();
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "whois-vijay",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Terminal profile of Vijay ā backend, systems, distributed thinking",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"whois-vijay": "./bin/index.js"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"cli",
|
|
11
|
+
"backend",
|
|
12
|
+
"systems",
|
|
13
|
+
"developer",
|
|
14
|
+
"terminal",
|
|
15
|
+
"profile"
|
|
16
|
+
],
|
|
17
|
+
"author": "Vijay",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"chalk": "^5.3.0",
|
|
21
|
+
"boxen": "^7.1.1",
|
|
22
|
+
"figlet": "^1.7.0",
|
|
23
|
+
"inquirer": "^9.2.12",
|
|
24
|
+
"ora": "^8.0.1",
|
|
25
|
+
"commander": "^11.1.0",
|
|
26
|
+
"axios": "^1.6.2",
|
|
27
|
+
"gradient-string": "^2.0.2",
|
|
28
|
+
"chalk-animation": "^2.0.3",
|
|
29
|
+
"nanospinner": "^1.1.0"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=18.0.0"
|
|
33
|
+
}
|
|
34
|
+
}
|