theneovimmer 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 +79 -0
- package/dist/data.d.ts +26 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +58 -0
- package/dist/data.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -0
- package/dist/index.js.map +1 -0
- package/dist/ui.d.ts +5 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +134 -0
- package/dist/ui.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# TheNeovimmer CLI š
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/theneovimmer)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
An interactive terminal interface to explore **Ilyes Bouzayen's** portfolio, projects, and contact information.
|
|
7
|
+
|
|
8
|
+
## ⨠Features
|
|
9
|
+
|
|
10
|
+
- šØ **Beautiful Terminal UI** - Colorful gradients and styled boxes using chalk
|
|
11
|
+
- š **Top Projects Showcase** - View featured projects with descriptions and tech stacks
|
|
12
|
+
- š¤ **Profile Information** - Learn about skills, experience, and tech stack
|
|
13
|
+
- š **Quick Links** - Direct access to portfolio, GitHub, and email
|
|
14
|
+
- ā” **Interactive Menu** - Easy navigation with keyboard controls
|
|
15
|
+
|
|
16
|
+
## šÆ Usage
|
|
17
|
+
|
|
18
|
+
Run the CLI directly with npx (no installation required):
|
|
19
|
+
|
|
20
|
+
\`\`\`bash
|
|
21
|
+
npx theneovimmer
|
|
22
|
+
\`\`\`
|
|
23
|
+
|
|
24
|
+
Or install globally:
|
|
25
|
+
|
|
26
|
+
\`\`\`bash
|
|
27
|
+
npm install -g theneovimmer
|
|
28
|
+
theneovimmer
|
|
29
|
+
\`\`\`
|
|
30
|
+
|
|
31
|
+
## š® Menu Options
|
|
32
|
+
|
|
33
|
+
Once you run the command, you'll see an interactive menu with the following options:
|
|
34
|
+
|
|
35
|
+
- **š View Top Projects** - Browse through featured projects with tech stacks and links
|
|
36
|
+
- **š¤ About Me** - View profile information, bio, and complete tech stack
|
|
37
|
+
- **š Visit Portfolio** - Opens the portfolio website in your browser
|
|
38
|
+
- **š§ Send Email** - Opens your default email client to send a message
|
|
39
|
+
- **š» GitHub Profile** - Opens GitHub profile in your browser
|
|
40
|
+
- **š Exit** - Close the CLI
|
|
41
|
+
|
|
42
|
+
## š ļø Tech Stack
|
|
43
|
+
|
|
44
|
+
This CLI is built with:
|
|
45
|
+
|
|
46
|
+
- **TypeScript** - Type-safe development
|
|
47
|
+
- **Chalk** - Terminal string styling
|
|
48
|
+
- **Inquirer** - Interactive command-line prompts
|
|
49
|
+
- **Boxen** - Create boxes in the terminal
|
|
50
|
+
- **Gradient String** - Beautiful gradients in terminal
|
|
51
|
+
- **Open** - Open URLs in the browser
|
|
52
|
+
|
|
53
|
+
## š¦ Development
|
|
54
|
+
|
|
55
|
+
Clone and set up for development:
|
|
56
|
+
|
|
57
|
+
\`\`\`bash
|
|
58
|
+
git clone https://github.com/TheNeovimmer/theneovimmer-cli.git
|
|
59
|
+
cd theneovimmer-cli
|
|
60
|
+
npm install
|
|
61
|
+
npm run build
|
|
62
|
+
npm link
|
|
63
|
+
theneovimmer
|
|
64
|
+
\`\`\`
|
|
65
|
+
|
|
66
|
+
## š License
|
|
67
|
+
|
|
68
|
+
MIT Ā© [Ilyes Bouzayen](https://github.com/TheNeovimmer)
|
|
69
|
+
|
|
70
|
+
## š¤ Connect
|
|
71
|
+
|
|
72
|
+
- š Portfolio: [ilyes-bouzayen.vercel.app](https://ilyes-bouzayen.vercel.app)
|
|
73
|
+
- š¼ GitHub: [@TheNeovimmer](https://github.com/TheNeovimmer)
|
|
74
|
+
- š§ Email: ilyesbouzayen@hotmail.com
|
|
75
|
+
- š LinkedIn: [ilyes-bouzayen](https://linkedin.com/in/ilyes-bouzayen)
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
āļø If you like this project, give it a star on GitHub!
|
package/dist/data.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const profile: {
|
|
2
|
+
name: string;
|
|
3
|
+
role: string;
|
|
4
|
+
location: string;
|
|
5
|
+
email: string;
|
|
6
|
+
portfolio: string;
|
|
7
|
+
github: string;
|
|
8
|
+
linkedin: string;
|
|
9
|
+
twitter: string;
|
|
10
|
+
upwork: string;
|
|
11
|
+
bio: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const topProjects: {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
tech: string[];
|
|
17
|
+
url: string;
|
|
18
|
+
}[];
|
|
19
|
+
export declare const techStack: {
|
|
20
|
+
frontend: string[];
|
|
21
|
+
backend: string[];
|
|
22
|
+
ai: string[];
|
|
23
|
+
devops: string[];
|
|
24
|
+
other: string[];
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;;;;;;;CAWnB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;GAqCvB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC"}
|
package/dist/data.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export const profile = {
|
|
2
|
+
name: "Ilyes Bouzayen",
|
|
3
|
+
role: "Software Developer | Full Stack | AI Enthusiast",
|
|
4
|
+
location: "Tunisia š¹š³",
|
|
5
|
+
email: "ilyesbouzayen@hotmail.com",
|
|
6
|
+
portfolio: "https://ilyes-bouzayen.vercel.app",
|
|
7
|
+
github: "https://github.com/TheNeovimmer",
|
|
8
|
+
linkedin: "https://linkedin.com/in/ilyes-bouzayen",
|
|
9
|
+
twitter: "https://twitter.com/TheNeovimmer",
|
|
10
|
+
upwork: "https://www.upwork.com/freelancers/ilyesb",
|
|
11
|
+
bio: "Building high-performance, intelligent applications for web, desktop, and mobile. Passionate about AI-powered solutions and modern web experiences."
|
|
12
|
+
};
|
|
13
|
+
export const topProjects = [
|
|
14
|
+
{
|
|
15
|
+
name: "Fizzi Fresh",
|
|
16
|
+
description: "Modern web experience with stunning 3D animations and smooth interactions",
|
|
17
|
+
tech: ["Next.js", "Prismic", "Three.js", "GSAP", "Tailwind CSS"],
|
|
18
|
+
url: "https://fizzifresh.vercel.app"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "AI Route",
|
|
22
|
+
description: "AI-powered blockchain solution with MetaMask integration and cryptography",
|
|
23
|
+
tech: ["AI", "Web3", "MetaMask", "Blockchain", "Cryptography"],
|
|
24
|
+
url: "https://aid-route.vercel.app"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "AI Therapist Agent",
|
|
28
|
+
description: "Intelligent therapy assistant using AI and blockchain microservices",
|
|
29
|
+
tech: ["AI", "Blockchain", "Microservices", "TanStack", "Rails"],
|
|
30
|
+
url: "https://ai-therapist-agent.vercel.app"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "Pixasocial",
|
|
34
|
+
description: "Full-featured social media platform with Docker, Kubernetes, and SEO optimization",
|
|
35
|
+
tech: ["Docker", "Kubernetes", "Next.js", "SEO", "Analytics"],
|
|
36
|
+
url: "https://pixasocial.pixelnx.com"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "AI Course Generator",
|
|
40
|
+
description: "AI-driven course creation platform with Stripe payment integration",
|
|
41
|
+
tech: ["OpenAI", "React", "Stripe", "Vercel", "Tailwind CSS"],
|
|
42
|
+
url: "https://aicourse-81b42.web.app"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "Conar App",
|
|
46
|
+
description: "Desktop application built with Electron, Bun, and modern analytics",
|
|
47
|
+
tech: ["Electron", "Bun", "PostHog", "TanStack", "Databases"],
|
|
48
|
+
url: "https://conar.app"
|
|
49
|
+
}
|
|
50
|
+
];
|
|
51
|
+
export const techStack = {
|
|
52
|
+
frontend: ["Vue.js", "React", "Next.js", "TypeScript", "Tailwind CSS"],
|
|
53
|
+
backend: ["Node.js", "Python", "PostgreSQL", "MongoDB"],
|
|
54
|
+
ai: ["OpenAI", "TensorFlow"],
|
|
55
|
+
devops: ["Docker", "Kubernetes", "Git", "Vercel"],
|
|
56
|
+
other: ["Three.js", "GSAP", "Electron", "Laravel"]
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data.js.map
|
package/dist/data.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,iDAAiD;IACvD,QAAQ,EAAE,cAAc;IACxB,KAAK,EAAE,2BAA2B;IAClC,SAAS,EAAE,mCAAmC;IAC9C,MAAM,EAAE,iCAAiC;IACzC,QAAQ,EAAE,wCAAwC;IAClD,OAAO,EAAE,kCAAkC;IAC3C,MAAM,EAAE,2CAA2C;IACnD,GAAG,EAAE,qJAAqJ;CAC3J,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,2EAA2E;QACxF,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC;QAChE,GAAG,EAAE,+BAA+B;KACrC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,2EAA2E;QACxF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC;QAC9D,GAAG,EAAE,8BAA8B;KACpC;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,qEAAqE;QAClF,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC;QAChE,GAAG,EAAE,uCAAuC;KAC7C;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,mFAAmF;QAChG,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC;QAC7D,GAAG,EAAE,gCAAgC;KACtC;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,oEAAoE;QACjF,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC;QAC7D,GAAG,EAAE,gCAAgC;KACtC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,oEAAoE;QACjF,IAAI,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC;QAC7D,GAAG,EAAE,mBAAmB;KACzB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC;IACtE,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC;IACvD,EAAE,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;IAC5B,MAAM,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC;IACjD,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;CACnD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import open from 'open';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { displayWelcomeBanner, displayProjects, displayAbout, displayGoodbye } from './ui.js';
|
|
6
|
+
import { profile } from './data.js';
|
|
7
|
+
async function main() {
|
|
8
|
+
let running = true;
|
|
9
|
+
displayWelcomeBanner();
|
|
10
|
+
while (running) {
|
|
11
|
+
const { action } = await inquirer.prompt([
|
|
12
|
+
{
|
|
13
|
+
type: 'list',
|
|
14
|
+
name: 'action',
|
|
15
|
+
message: chalk.cyan.bold('What would you like to do?'),
|
|
16
|
+
choices: [
|
|
17
|
+
{
|
|
18
|
+
name: 'š View Top Projects',
|
|
19
|
+
value: 'projects'
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'š¤ About Me',
|
|
23
|
+
value: 'about'
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'š Visit Portfolio',
|
|
27
|
+
value: 'portfolio'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'š§ Send Email',
|
|
31
|
+
value: 'email'
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'š» GitHub Profile',
|
|
35
|
+
value: 'github'
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'š Exit',
|
|
39
|
+
value: 'exit'
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
pageSize: 10
|
|
43
|
+
}
|
|
44
|
+
]);
|
|
45
|
+
switch (action) {
|
|
46
|
+
case 'projects':
|
|
47
|
+
displayProjects();
|
|
48
|
+
await promptContinue();
|
|
49
|
+
displayWelcomeBanner();
|
|
50
|
+
break;
|
|
51
|
+
case 'about':
|
|
52
|
+
displayAbout();
|
|
53
|
+
await promptContinue();
|
|
54
|
+
displayWelcomeBanner();
|
|
55
|
+
break;
|
|
56
|
+
case 'portfolio':
|
|
57
|
+
console.log(chalk.green('\n⨠Opening portfolio in your browser...\n'));
|
|
58
|
+
await open(profile.portfolio);
|
|
59
|
+
await promptContinue();
|
|
60
|
+
displayWelcomeBanner();
|
|
61
|
+
break;
|
|
62
|
+
case 'email':
|
|
63
|
+
console.log(chalk.green('\nš§ Opening email client...\n'));
|
|
64
|
+
await open(`mailto:${profile.email}`);
|
|
65
|
+
await promptContinue();
|
|
66
|
+
displayWelcomeBanner();
|
|
67
|
+
break;
|
|
68
|
+
case 'github':
|
|
69
|
+
console.log(chalk.green('\nš» Opening GitHub profile in your browser...\n'));
|
|
70
|
+
await open(profile.github);
|
|
71
|
+
await promptContinue();
|
|
72
|
+
displayWelcomeBanner();
|
|
73
|
+
break;
|
|
74
|
+
case 'exit':
|
|
75
|
+
displayGoodbye();
|
|
76
|
+
running = false;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function promptContinue() {
|
|
82
|
+
await inquirer.prompt([
|
|
83
|
+
{
|
|
84
|
+
type: 'input',
|
|
85
|
+
name: 'continue',
|
|
86
|
+
message: chalk.gray('Press Enter to continue...')
|
|
87
|
+
}
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
main().catch((error) => {
|
|
91
|
+
console.error(chalk.red('An error occurred:'), error);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,oBAAoB,EAAE,CAAC;IAEvB,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACvC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC;gBACtD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,sBAAsB;wBAC5B,KAAK,EAAE,UAAU;qBAClB;oBACD;wBACE,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE,OAAO;qBACf;oBACD;wBACE,IAAI,EAAE,oBAAoB;wBAC1B,KAAK,EAAE,WAAW;qBACnB;oBACD;wBACE,IAAI,EAAE,eAAe;wBACrB,KAAK,EAAE,OAAO;qBACf;oBACD;wBACE,IAAI,EAAE,mBAAmB;wBACzB,KAAK,EAAE,QAAQ;qBAChB;oBACD;wBACE,IAAI,EAAE,SAAS;wBACf,KAAK,EAAE,MAAM;qBACd;iBACF;gBACD,QAAQ,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU;gBACb,eAAe,EAAE,CAAC;gBAClB,MAAM,cAAc,EAAE,CAAC;gBACvB,oBAAoB,EAAE,CAAC;gBACvB,MAAM;YAER,KAAK,OAAO;gBACV,YAAY,EAAE,CAAC;gBACf,MAAM,cAAc,EAAE,CAAC;gBACvB,oBAAoB,EAAE,CAAC;gBACvB,MAAM;YAER,KAAK,WAAW;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;gBACvE,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC9B,MAAM,cAAc,EAAE,CAAC;gBACvB,oBAAoB,EAAE,CAAC;gBACvB,MAAM;YAER,KAAK,OAAO;gBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBAC3D,MAAM,IAAI,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtC,MAAM,cAAc,EAAE,CAAC;gBACvB,oBAAoB,EAAE,CAAC;gBACvB,MAAM;YAER,KAAK,QAAQ;gBACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;gBAC7E,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,cAAc,EAAE,CAAC;gBACvB,oBAAoB,EAAE,CAAC;gBACvB,MAAM;YAER,KAAK,MAAM;gBACT,cAAc,EAAE,CAAC;gBACjB,OAAO,GAAG,KAAK,CAAC;gBAChB,MAAM;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpB;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;SAClD;KACF,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/ui.d.ts
ADDED
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAuBA,wBAAgB,oBAAoB,SAmCnC;AAED,wBAAgB,eAAe,SA2B9B;AAED,wBAAgB,YAAY,SA4C3B;AAED,wBAAgB,cAAc,SA2B7B"}
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import boxen from 'boxen';
|
|
3
|
+
import gradient from 'gradient-string';
|
|
4
|
+
import { profile, topProjects, techStack } from './data.js';
|
|
5
|
+
// Color themes
|
|
6
|
+
const colors = {
|
|
7
|
+
primary: chalk.hex('#4FC08D'),
|
|
8
|
+
secondary: chalk.hex('#61DAFB'),
|
|
9
|
+
accent: chalk.hex('#FF6B6B'),
|
|
10
|
+
success: chalk.hex('#51CF66'),
|
|
11
|
+
info: chalk.hex('#339AF0'),
|
|
12
|
+
warning: chalk.hex('#FFD43B'),
|
|
13
|
+
muted: chalk.gray
|
|
14
|
+
};
|
|
15
|
+
const gradients = {
|
|
16
|
+
rainbow: gradient(['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7']),
|
|
17
|
+
ocean: gradient(['#667eea', '#764ba2', '#f093fb']),
|
|
18
|
+
sunset: gradient(['#fa709a', '#fee140']),
|
|
19
|
+
cool: gradient(['#4facfe', '#00f2fe'])
|
|
20
|
+
};
|
|
21
|
+
export function displayWelcomeBanner() {
|
|
22
|
+
const banner = `
|
|
23
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
24
|
+
ā ā
|
|
25
|
+
ā āāāāāāāāāāāā āāāāāāāāāāāāāāā āāāāāāāāāāā āāāāāāā ā
|
|
26
|
+
ā āāāāāāāāāāāā āāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāā ā
|
|
27
|
+
ā āāā āāāāāāāāāāāāāā āāāāāā āāāāāāāāā āāā āāā ā
|
|
28
|
+
ā āāā āāāāāāāāāāāāāā āāāāāāāāāāāāāāāā āāā āāā ā
|
|
29
|
+
ā āāā āāā āāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāāāā ā
|
|
30
|
+
ā āāā āāā āāāāāāāāāāāāāā āāāāāāāāāāāāā āāāāāāā ā
|
|
31
|
+
ā ā
|
|
32
|
+
ā āāāā āāāāāāāāāāā āāāāāāā āāā āāāāāāāāāā āāāāāāāā āāāāāāāāāāāāāāāāāāā ā
|
|
33
|
+
ā āāāāā āāāāāāāāāāāāāāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāā āāāāāāāāāāāāāāāāāāāāā ā
|
|
34
|
+
ā āāāāāā āāāāāāāāā āāā āāāāāā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā āāāāāāāā ā
|
|
35
|
+
ā āāāāāāāāāāāāāāāā āāā āāāāāāā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā āāāāāāāā ā
|
|
36
|
+
ā āāā āāāāāāāāāāāāāāāāāāāāāāā āāāāāāā āāāāāā āāā āāāāāā āāā āāāāāāāāāāāāāā āāā ā
|
|
37
|
+
ā āāā āāāāāāāāāāāāā āāāāāāā āāāāā āāāāāā āāāāāā āāāāāāāāāāāāāā āāā ā
|
|
38
|
+
ā ā
|
|
39
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
40
|
+
`;
|
|
41
|
+
console.clear();
|
|
42
|
+
console.log(gradients.rainbow(banner));
|
|
43
|
+
console.log();
|
|
44
|
+
console.log(boxen(`${colors.primary.bold(profile.name)}\n${colors.muted(profile.role)}\n\n${colors.info('š ' + profile.location)}`, {
|
|
45
|
+
padding: 1,
|
|
46
|
+
margin: 1,
|
|
47
|
+
borderStyle: 'round',
|
|
48
|
+
borderColor: 'cyan',
|
|
49
|
+
textAlignment: 'center'
|
|
50
|
+
}));
|
|
51
|
+
console.log();
|
|
52
|
+
}
|
|
53
|
+
export function displayProjects() {
|
|
54
|
+
console.clear();
|
|
55
|
+
console.log(gradients.ocean('\nš TOP PROJECTS\n'));
|
|
56
|
+
console.log(colors.muted('ā'.repeat(80)));
|
|
57
|
+
console.log();
|
|
58
|
+
topProjects.forEach((project, index) => {
|
|
59
|
+
const techBadges = project.tech.map(t => colors.info(`[${t}]`)).join(' ');
|
|
60
|
+
const projectBox = boxen(`${colors.primary.bold(`${index + 1}. ${project.name}`)}\n\n` +
|
|
61
|
+
`${chalk.white(project.description)}\n\n` +
|
|
62
|
+
`${colors.muted('Tech Stack:')}\n${techBadges}\n\n` +
|
|
63
|
+
`${colors.accent('š ' + project.url)}`, {
|
|
64
|
+
padding: 1,
|
|
65
|
+
margin: { top: 0, bottom: 1, left: 2, right: 2 },
|
|
66
|
+
borderStyle: 'round',
|
|
67
|
+
borderColor: 'magenta'
|
|
68
|
+
});
|
|
69
|
+
console.log(projectBox);
|
|
70
|
+
});
|
|
71
|
+
console.log(colors.muted('ā'.repeat(80)));
|
|
72
|
+
console.log();
|
|
73
|
+
}
|
|
74
|
+
export function displayAbout() {
|
|
75
|
+
console.clear();
|
|
76
|
+
console.log(gradients.sunset('\nš¤ ABOUT ME\n'));
|
|
77
|
+
console.log(colors.muted('ā'.repeat(80)));
|
|
78
|
+
console.log();
|
|
79
|
+
const aboutBox = boxen(`${colors.primary.bold(profile.name)}\n` +
|
|
80
|
+
`${colors.secondary(profile.role)}\n\n` +
|
|
81
|
+
`${chalk.white(profile.bio)}\n\n` +
|
|
82
|
+
`${colors.info('š Location:')} ${profile.location}\n` +
|
|
83
|
+
`${colors.info('š§ Email:')} ${profile.email}\n` +
|
|
84
|
+
`${colors.info('š Portfolio:')} ${profile.portfolio}\n` +
|
|
85
|
+
`${colors.info('š¼ GitHub:')} ${profile.github}\n` +
|
|
86
|
+
`${colors.info('š LinkedIn:')} ${profile.linkedin}`, {
|
|
87
|
+
padding: 1,
|
|
88
|
+
margin: 1,
|
|
89
|
+
borderStyle: 'double',
|
|
90
|
+
borderColor: 'green',
|
|
91
|
+
textAlignment: 'left'
|
|
92
|
+
});
|
|
93
|
+
console.log(aboutBox);
|
|
94
|
+
console.log();
|
|
95
|
+
// Tech Stack
|
|
96
|
+
console.log(gradients.cool(' š ļø TECH STACK\n'));
|
|
97
|
+
const displayTechCategory = (title, techs) => {
|
|
98
|
+
console.log(` ${colors.accent.bold(title)}`);
|
|
99
|
+
console.log(` ${techs.map(t => colors.success(`ā ${t}`)).join(' ')}`);
|
|
100
|
+
console.log();
|
|
101
|
+
};
|
|
102
|
+
displayTechCategory('Frontend', techStack.frontend);
|
|
103
|
+
displayTechCategory('Backend & Databases', techStack.backend);
|
|
104
|
+
displayTechCategory('AI & Machine Learning', techStack.ai);
|
|
105
|
+
displayTechCategory('DevOps & Tools', techStack.devops);
|
|
106
|
+
displayTechCategory('Other Technologies', techStack.other);
|
|
107
|
+
console.log(colors.muted('ā'.repeat(80)));
|
|
108
|
+
console.log();
|
|
109
|
+
}
|
|
110
|
+
export function displayGoodbye() {
|
|
111
|
+
console.clear();
|
|
112
|
+
const goodbye = `
|
|
113
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
114
|
+
ā ā
|
|
115
|
+
ā Thanks for checking out my portfolio! š ā
|
|
116
|
+
ā ā
|
|
117
|
+
ā Let's build something amazing together! š ā
|
|
118
|
+
ā ā
|
|
119
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
120
|
+
`;
|
|
121
|
+
console.log(gradients.rainbow(goodbye));
|
|
122
|
+
console.log();
|
|
123
|
+
console.log(boxen(`${colors.primary('š§ Email:')} ${profile.email}\n` +
|
|
124
|
+
`${colors.secondary('š Portfolio:')} ${profile.portfolio}\n` +
|
|
125
|
+
`${colors.info('š» GitHub:')} ${profile.github}`, {
|
|
126
|
+
padding: 1,
|
|
127
|
+
margin: 1,
|
|
128
|
+
borderStyle: 'round',
|
|
129
|
+
borderColor: 'yellow',
|
|
130
|
+
textAlignment: 'center'
|
|
131
|
+
}));
|
|
132
|
+
console.log();
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "theneovimmer",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Interactive terminal interface to view TheNeovimmer's portfolio and projects",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"theneovimmer": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"start": "node dist/index.js",
|
|
13
|
+
"dev": "tsc && node dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"cli",
|
|
17
|
+
"portfolio",
|
|
18
|
+
"terminal",
|
|
19
|
+
"interactive",
|
|
20
|
+
"theneovimmer"
|
|
21
|
+
],
|
|
22
|
+
"author": "Ilyes Bouzayen <ilyesbouzayen@hotmail.com>",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"boxen": "^7.1.1",
|
|
26
|
+
"chalk": "^5.3.0",
|
|
27
|
+
"figlet": "^1.7.0",
|
|
28
|
+
"gradient-string": "^2.0.2",
|
|
29
|
+
"inquirer": "^9.2.12",
|
|
30
|
+
"open": "^10.0.3"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/figlet": "^1.5.8",
|
|
34
|
+
"@types/gradient-string": "^1.1.5",
|
|
35
|
+
"@types/inquirer": "^9.0.9",
|
|
36
|
+
"@types/node": "^20.10.6",
|
|
37
|
+
"typescript": "^5.3.3"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=18.0.0"
|
|
41
|
+
}
|
|
42
|
+
}
|