hey-alagappan 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/.prettierrc ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "semi": true,
3
+ "singleQuote": true,
4
+ "tabWidth": 2,
5
+ "trailingComma": "es5",
6
+ "printWidth": 80,
7
+ "bracketSpacing": true,
8
+ "arrowParens": "always"
9
+ }
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # hey-alagappan
2
+
3
+ An interactive terminal-based portfolio that showcases my work, projects, and experiences through a command-line interface.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g hey-alagappan
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ After installation, you can start the interactive portfolio by running:
14
+
15
+ ```bash
16
+ hey-alagappan
17
+ ```
18
+
19
+ ### Available Commands
20
+
21
+ - `about` - Learn more about me
22
+ - `profile` - View profile info
23
+ - `projects` - View a list of projects
24
+ - `art` - View my art profiles
25
+ - `social` - View my social media profiles
26
+ - `help` - Show all available commands
27
+ - `exit` - Exit the CLI
28
+
29
+ ## Requirements
30
+
31
+ - Node.js >= 16.0.0
32
+
33
+ ## License
34
+
35
+ MIT
36
+
37
+ ## Author
38
+
39
+ Alagappan N ([@alagappan17](https://github.com/alagappan17))
40
+
41
+ ## Contact
42
+
43
+ - Email: alagappaforwork@gmail.com
44
+ - LinkedIn: [alagappan-n](https://linkedin.com/in/alagappan-n)
package/bun.lockb ADDED
Binary file
package/dist/index.js ADDED
@@ -0,0 +1,196 @@
1
+ #!/usr/bin/env node
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import figlet from 'figlet';
5
+ // Display welcome message
6
+ console.log(chalk.green(figlet.textSync("Hey! I'm Alagappan.", {
7
+ horizontalLayout: 'full',
8
+ font: 'Small',
9
+ })));
10
+ // Add bio and instructions
11
+ console.log(chalk.cyan('\nSoftware Engineer passionate about building innovative solutions and creating impactful applications.'));
12
+ console.log(chalk.cyan('Currently working as a SDE1 at Procedure.\n'));
13
+ console.log(chalk.white('Use commands to explore more information about me.'));
14
+ console.log(chalk.blue("Type 'help' to see all available commands.\n"));
15
+ // Start interactive mode
16
+ const startInteractiveMode = async () => {
17
+ let running = true;
18
+ while (running) {
19
+ const { command } = await inquirer.prompt([
20
+ {
21
+ type: 'input',
22
+ name: 'command',
23
+ message: 'Enter a command:',
24
+ },
25
+ ]);
26
+ switch (command.trim().toLowerCase()) {
27
+ case 'help':
28
+ help();
29
+ break;
30
+ case 'profile':
31
+ profile();
32
+ break;
33
+ case 'projects':
34
+ projects();
35
+ break;
36
+ case 'about':
37
+ about();
38
+ break;
39
+ case 'art':
40
+ art();
41
+ break;
42
+ case 'social':
43
+ social();
44
+ break;
45
+ case 'exit':
46
+ running = false;
47
+ exit();
48
+ break;
49
+ case '':
50
+ // Do nothing for empty input
51
+ break;
52
+ default:
53
+ console.log(chalk.yellow(`Unknown command: ${command}`));
54
+ console.log(chalk.blue("Type 'help' to see available commands"));
55
+ }
56
+ }
57
+ };
58
+ const help = () => {
59
+ console.log(`
60
+ ${chalk.yellow('Available Commands:')}
61
+ - about ${chalk.gray('Learn more about me')}
62
+ - profile ${chalk.gray('View profile info')}
63
+ - projects ${chalk.gray('View a list of projects')}
64
+ - art ${chalk.gray('View my art profiles')}
65
+ - social ${chalk.gray('View my social media profiles')}
66
+ - exit ${chalk.gray('Exit the CLI')}
67
+ `);
68
+ };
69
+ const exit = () => {
70
+ console.log(chalk.red(`
71
+ Goodbye! Thank you for using my CLI!`));
72
+ social();
73
+ };
74
+ const profile = () => {
75
+ console.log(`
76
+ ${chalk.cyan('My Profile')}
77
+ Name: Alagappan N
78
+ Role: Software Engineer
79
+ Location: Hyderabad, Telangana, India
80
+ Email: alagappaforwork@gmail.com
81
+ `);
82
+ };
83
+ const projects = async () => {
84
+ console.log(`${chalk.cyan('Projects')}`);
85
+ const answers = await inquirer.prompt([
86
+ {
87
+ type: 'list',
88
+ name: 'project',
89
+ message: 'Select a project to view details:',
90
+ choices: [
91
+ 'Bloom',
92
+ 'HierBridge',
93
+ 'WorkHero',
94
+ 'Procedure',
95
+ 'Terminal Portfolio',
96
+ ],
97
+ },
98
+ ]);
99
+ projectDetails(answers.project);
100
+ };
101
+ const projectDetails = (project) => {
102
+ console.log(`
103
+ ${chalk.cyan.bold(project)}`);
104
+ switch (project) {
105
+ case 'HierBridge':
106
+ console.log(`
107
+ I am leading the development of a Voice of Employee platform designed to enhance hierarchical transparency and improve workplace decision-making.
108
+ The platform leverages AI strategies like Retrieval-Augmented Generation (RAG) and AI Agents to provide data-driven insights. Through customer discovery interviews,
109
+ I have identified key market challenges to shape the product effectively.
110
+ Backed by CMU's Project Olympus and other esteemed professors, we're in pre-development, laser-focused on building a product that actually moves the needle.
111
+
112
+ ${chalk.yellow('Website:')} https://hierbridge.com/
113
+ ${chalk.blue('LinkedIn:')} https://www.linkedin.com/company/hierbridge
114
+ ${chalk.magenta('Tech Stack (Planned):')} Nx, Node.js, Koa, Next.js, Mongo
115
+ `);
116
+ break;
117
+ case 'Bloom':
118
+ console.log(`
119
+ I'm part of the team building Bloom, an edtech platform designed to make reading engaging for young learners—because reading should be more fun than frustrating.
120
+ I've worked on crafting complex, dynamic lessons that adapt to different inputs, ensuring an interactive experience that keeps kids hooked. I also built the admin portal for
121
+ content creation and data management, making life easier for educators. On the backend, I set up CI pipelines for testing and optimised and standardised the codebase for
122
+ smoother development and long-term scalability.
123
+
124
+ ${chalk.magenta('Tech Stack:')} Nx, Node.js, Koa, React, Mongo
125
+ `);
126
+ break;
127
+ case 'WorkHero':
128
+ console.log(`
129
+ WorkHero pairs a fractional office manager with an LLM-powered platform, ensuring smooth workforce management, customer relations, and administrative operations.
130
+ I built an automated agent testing framework from scratch, designed to evaluate multiple AI agents operating across different LLMs (Claude, Grok, Llama, GPT, etc.).
131
+ These agents handled everything from customer interactions to task management, making rigorous testing essential. The framework introduced a modular design,
132
+ allowing new test executors for evolving tasks. I also developed an AI Test Agent that verified actions, assessed accuracy, and maintained a scoring rubric to track performance.
133
+
134
+ ${chalk.yellow('Website:')} https://www.workhero.pro/
135
+ ${chalk.magenta('Tech Stack:')} Nx, Node.js, Koa, React, Mongo
136
+ `);
137
+ break;
138
+ case 'Procedure':
139
+ console.log(`
140
+ I worked on a range of internal apps. One of these was Ragnarok, an employee appreciation Slack bot that let colleagues give shoutouts and reward points.
141
+ Built on Frappe, it extended ERPNext, our HR platform. I also helped redesign of the Procedure website, rebuilding it from the ground up with Next.js and Tailwind CSS.
142
+ The new design introduced modern UI elements, improved structure, ensuring a sleek and engaging user experience.
143
+
144
+ ${chalk.yellow('Website:')} (To be Hosted Soon)
145
+ `);
146
+ break;
147
+ case 'Terminal Portfolio':
148
+ console.log(`
149
+ I created an interactive terminal-based portfolio. It allows users to navigate through my professional experiences, projects, and skills directly from the command line.
150
+ The portfolio is designed to be both functional and engaging, providing a novel way to showcase my work.
151
+
152
+ This was an experiment to see how well I can leverage AI code editors to their full potential.
153
+
154
+ ${chalk.magenta('Tech Stack:')} Node.js, Inquirer, Chalk
155
+ `);
156
+ break;
157
+ default:
158
+ console.log(chalk.yellow(`Unknown project: ${project}`));
159
+ }
160
+ };
161
+ const about = () => {
162
+ console.log(`
163
+ ${chalk.cyan('About Me')}
164
+ Howdy! I'm Alagappan, a ${chalk.green('full-stack engineer')} with a passion for design, development and digital art.
165
+ Back in school, I eagerly looked forward to my computer lab sessions, only to rush off to art class right after.
166
+ These interest have strongly shaped my career as I found programming to be the right blend of my creative and logical personas.
167
+
168
+ Beyond building applications, I'm also a ${chalk.magenta('3D digital artist')}—a passion that started as a hobby during the pandemic
169
+ and has grown into a dedicated craft. In the art community, I go by ${chalk.blue('skidrrow')}. Use the command ${chalk.yellow('art')} to view my art portfolio.
170
+ `);
171
+ };
172
+ const art = () => {
173
+ console.log(`
174
+ ${chalk.cyan('Art Profiles')} ${chalk.gray('(@skidrrow)')}
175
+ ${chalk.gray('Feel free to follow and reach out for collaborations!')}
176
+
177
+ ${chalk.magenta('Instagram:')} https://instagram.com/skidrrow
178
+ ${chalk.blue('Behance:')} https://behance.net/alagappann
179
+ ${chalk.yellow('ArtGrab:')} https://artgrab.co/art/skidrow
180
+ ${chalk.red('YouTube:')} https://www.youtube.com/channel/UCajdq0CHzumeh7QQi-d0l4w
181
+ ${chalk.cyan('Email:')} skidrrowforwork@gmail.com
182
+ `);
183
+ };
184
+ const social = () => {
185
+ console.log(`
186
+ ${chalk.cyan('Connect with me')}
187
+ ${chalk.gray("Let's stay in touch!")}
188
+
189
+ ${chalk.green('GitHub:')} https://github.com/alagappan17
190
+ ${chalk.blue('LinkedIn:')} https://linkedin.com/in/alagappan-n
191
+ ${chalk.gray('Twitter (X):')} https://x.com/alagappantwt
192
+ ${chalk.cyan('Email:')} alagappaforwork@gmail.com
193
+ `);
194
+ };
195
+ // Start the interactive mode immediately
196
+ startInteractiveMode();
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "hey-alagappan",
3
+ "version": "1.0.0",
4
+ "description": "An interactive terminal-based portfolio showcasing Alagappan's work and experiences",
5
+ "main": "dist/index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "build": "tsc",
9
+ "start": "ts-node src/index.ts",
10
+ "prepublishOnly": "bun run build"
11
+ },
12
+ "keywords": [
13
+ "portfolio",
14
+ "terminal",
15
+ "cli",
16
+ "interactive",
17
+ "resume"
18
+ ],
19
+ "author": "Alagappan N <alagappaforwork@gmail.com>",
20
+ "license": "MIT",
21
+ "dependencies": {
22
+ "chalk": "^5.4.1",
23
+ "commander": "^13.1.0",
24
+ "figlet": "^1.8.0",
25
+ "inquirer": "^12.4.2"
26
+ },
27
+ "devDependencies": {
28
+ "@types/chalk": "^0.4.31",
29
+ "@types/commander": "^2.12.0",
30
+ "@types/figlet": "^1.7.0",
31
+ "@types/inquirer": "^9.0.7",
32
+ "@types/node": "^22.13.10",
33
+ "ts-node": "^10.9.2",
34
+ "typescript": "^5.8.2"
35
+ },
36
+ "bin": {
37
+ "hey-alagappan": "./dist/index.js"
38
+ },
39
+ "type": "module",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/alagappan17/terminal-portfolio"
43
+ },
44
+ "engines": {
45
+ "node": ">=16.0.0"
46
+ }
47
+ }
package/src/index.ts ADDED
@@ -0,0 +1,232 @@
1
+ #!/usr/bin/env node
2
+
3
+ import chalk from 'chalk';
4
+ import inquirer from 'inquirer';
5
+ import figlet from 'figlet';
6
+
7
+ // Display welcome message
8
+ console.log(
9
+ chalk.green(
10
+ figlet.textSync("Hey! I'm Alagappan.", {
11
+ horizontalLayout: 'full',
12
+ font: 'Small',
13
+ })
14
+ )
15
+ );
16
+
17
+ // Add bio and instructions
18
+ console.log(
19
+ chalk.cyan(
20
+ '\nSoftware Engineer passionate about building innovative solutions and creating impactful applications.'
21
+ )
22
+ );
23
+ console.log(chalk.cyan('Currently working as a SDE1 at Procedure.\n'));
24
+
25
+ console.log(chalk.white('Use commands to explore more information about me.'));
26
+ console.log(chalk.blue("Type 'help' to see all available commands.\n"));
27
+
28
+ // Start interactive mode
29
+ const startInteractiveMode = async () => {
30
+ let running = true;
31
+
32
+ while (running) {
33
+ const { command } = await inquirer.prompt([
34
+ {
35
+ type: 'input',
36
+ name: 'command',
37
+ message: 'Enter a command:',
38
+ },
39
+ ]);
40
+
41
+ switch (command.trim().toLowerCase()) {
42
+ case 'help':
43
+ help();
44
+ break;
45
+ case 'profile':
46
+ profile();
47
+ break;
48
+ case 'projects':
49
+ projects();
50
+ break;
51
+ case 'about':
52
+ about();
53
+ break;
54
+ case 'art':
55
+ art();
56
+ break;
57
+ case 'social':
58
+ social();
59
+ break;
60
+ case 'exit':
61
+ running = false;
62
+ exit();
63
+ break;
64
+ case '':
65
+ // Do nothing for empty input
66
+ break;
67
+ default:
68
+ console.log(chalk.yellow(`Unknown command: ${command}`));
69
+ console.log(chalk.blue("Type 'help' to see available commands"));
70
+ }
71
+ }
72
+ };
73
+
74
+ const help = () => {
75
+ console.log(`
76
+ ${chalk.yellow('Available Commands:')}
77
+ - about ${chalk.gray('Learn more about me')}
78
+ - profile ${chalk.gray('View profile info')}
79
+ - projects ${chalk.gray('View a list of projects')}
80
+ - art ${chalk.gray('View my art profiles')}
81
+ - social ${chalk.gray('View my social media profiles')}
82
+ - exit ${chalk.gray('Exit the CLI')}
83
+ `);
84
+ };
85
+
86
+ const exit = () => {
87
+ console.log(
88
+ chalk.red(`
89
+ Goodbye! Thank you for using my CLI!`)
90
+ );
91
+ social();
92
+ };
93
+
94
+ const profile = () => {
95
+ console.log(`
96
+ ${chalk.cyan('My Profile')}
97
+ Name: Alagappan N
98
+ Role: Software Engineer
99
+ Location: Hyderabad, Telangana, India
100
+ Email: alagappaforwork@gmail.com
101
+ `);
102
+ };
103
+
104
+ const projects = async () => {
105
+ console.log(`${chalk.cyan('Projects')}`);
106
+
107
+ const answers = await inquirer.prompt([
108
+ {
109
+ type: 'list',
110
+ name: 'project',
111
+ message: 'Select a project to view details:',
112
+ choices: [
113
+ 'Bloom',
114
+ 'HierBridge',
115
+ 'WorkHero',
116
+ 'Procedure',
117
+ 'Terminal Portfolio',
118
+ ],
119
+ },
120
+ ]);
121
+
122
+ projectDetails(answers.project);
123
+ };
124
+
125
+ const projectDetails = (project: string) => {
126
+ console.log(`
127
+ ${chalk.cyan.bold(project)}`);
128
+ switch (project) {
129
+ case 'HierBridge':
130
+ console.log(`
131
+ I am leading the development of a Voice of Employee platform designed to enhance hierarchical transparency and improve workplace decision-making.
132
+ The platform leverages AI strategies like Retrieval-Augmented Generation (RAG) and AI Agents to provide data-driven insights. Through customer discovery interviews,
133
+ I have identified key market challenges to shape the product effectively.
134
+ Backed by CMU's Project Olympus and other esteemed professors, we're in pre-development, laser-focused on building a product that actually moves the needle.
135
+
136
+ ${chalk.yellow('Website:')} https://hierbridge.com/
137
+ ${chalk.blue('LinkedIn:')} https://www.linkedin.com/company/hierbridge
138
+ ${chalk.magenta('Tech Stack (Planned):')} Nx, Node.js, Koa, Next.js, Mongo
139
+ `);
140
+ break;
141
+ case 'Bloom':
142
+ console.log(`
143
+ I'm part of the team building Bloom, an edtech platform designed to make reading engaging for young learners—because reading should be more fun than frustrating.
144
+ I've worked on crafting complex, dynamic lessons that adapt to different inputs, ensuring an interactive experience that keeps kids hooked. I also built the admin portal for
145
+ content creation and data management, making life easier for educators. On the backend, I set up CI pipelines for testing and optimised and standardised the codebase for
146
+ smoother development and long-term scalability.
147
+
148
+ ${chalk.magenta('Tech Stack:')} Nx, Node.js, Koa, React, Mongo
149
+ `);
150
+ break;
151
+ case 'WorkHero':
152
+ console.log(`
153
+ WorkHero pairs a fractional office manager with an LLM-powered platform, ensuring smooth workforce management, customer relations, and administrative operations.
154
+ I built an automated agent testing framework from scratch, designed to evaluate multiple AI agents operating across different LLMs (Claude, Grok, Llama, GPT, etc.).
155
+ These agents handled everything from customer interactions to task management, making rigorous testing essential. The framework introduced a modular design,
156
+ allowing new test executors for evolving tasks. I also developed an AI Test Agent that verified actions, assessed accuracy, and maintained a scoring rubric to track performance.
157
+
158
+ ${chalk.yellow('Website:')} https://www.workhero.pro/
159
+ ${chalk.magenta('Tech Stack:')} Nx, Node.js, Koa, React, Mongo
160
+ `);
161
+ break;
162
+ case 'Procedure':
163
+ console.log(`
164
+ I worked on a range of internal apps. One of these was Ragnarok, an employee appreciation Slack bot that let colleagues give shoutouts and reward points.
165
+ Built on Frappe, it extended ERPNext, our HR platform. I also helped redesign of the Procedure website, rebuilding it from the ground up with Next.js and Tailwind CSS.
166
+ The new design introduced modern UI elements, improved structure, ensuring a sleek and engaging user experience.
167
+
168
+ ${chalk.yellow('Website:')} (To be Hosted Soon)
169
+ `);
170
+ break;
171
+ case 'Terminal Portfolio':
172
+ console.log(`
173
+ I created an interactive terminal-based portfolio. It allows users to navigate through my professional experiences, projects, and skills directly from the command line.
174
+ The portfolio is designed to be both functional and engaging, providing a novel way to showcase my work.
175
+
176
+ This was an experiment to see how well I can leverage AI code editors to their full potential.
177
+
178
+ ${chalk.magenta('Tech Stack:')} Node.js, Inquirer, Chalk
179
+ `);
180
+ break;
181
+ default:
182
+ console.log(chalk.yellow(`Unknown project: ${project}`));
183
+ }
184
+ };
185
+
186
+ const about = () => {
187
+ console.log(`
188
+ ${chalk.cyan('About Me')}
189
+ Howdy! I'm Alagappan, a ${chalk.green(
190
+ 'full-stack engineer'
191
+ )} with a passion for design, development and digital art.
192
+ Back in school, I eagerly looked forward to my computer lab sessions, only to rush off to art class right after.
193
+ These interest have strongly shaped my career as I found programming to be the right blend of my creative and logical personas.
194
+
195
+ Beyond building applications, I'm also a ${chalk.magenta(
196
+ '3D digital artist'
197
+ )}—a passion that started as a hobby during the pandemic
198
+ and has grown into a dedicated craft. In the art community, I go by ${chalk.blue(
199
+ 'skidrrow'
200
+ )}. Use the command ${chalk.yellow('art')} to view my art portfolio.
201
+ `);
202
+ };
203
+
204
+ const art = () => {
205
+ console.log(`
206
+ ${chalk.cyan('Art Profiles')} ${chalk.gray('(@skidrrow)')}
207
+ ${chalk.gray('Feel free to follow and reach out for collaborations!')}
208
+
209
+ ${chalk.magenta('Instagram:')} https://instagram.com/skidrrow
210
+ ${chalk.blue('Behance:')} https://behance.net/alagappann
211
+ ${chalk.yellow('ArtGrab:')} https://artgrab.co/art/skidrow
212
+ ${chalk.red(
213
+ 'YouTube:'
214
+ )} https://www.youtube.com/channel/UCajdq0CHzumeh7QQi-d0l4w
215
+ ${chalk.cyan('Email:')} skidrrowforwork@gmail.com
216
+ `);
217
+ };
218
+
219
+ const social = () => {
220
+ console.log(`
221
+ ${chalk.cyan('Connect with me')}
222
+ ${chalk.gray("Let's stay in touch!")}
223
+
224
+ ${chalk.green('GitHub:')} https://github.com/alagappan17
225
+ ${chalk.blue('LinkedIn:')} https://linkedin.com/in/alagappan-n
226
+ ${chalk.gray('Twitter (X):')} https://x.com/alagappantwt
227
+ ${chalk.cyan('Email:')} alagappaforwork@gmail.com
228
+ `);
229
+ };
230
+
231
+ // Start the interactive mode immediately
232
+ startInteractiveMode();
package/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Node",
6
+ "outDir": "dist",
7
+ "rootDir": "src",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "forceConsistentCasingInFileNames": true
11
+ },
12
+ "include": ["src"],
13
+ "exclude": ["node_modules", "dist"]
14
+ }