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 ADDED
@@ -0,0 +1,79 @@
1
+ # TheNeovimmer CLI šŸš€
2
+
3
+ [![npm version](https://img.shields.io/npm/v/theneovimmer.svg)](https://www.npmjs.com/package/theneovimmer)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
@@ -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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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":"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"}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export declare function displayWelcomeBanner(): void;
2
+ export declare function displayProjects(): void;
3
+ export declare function displayAbout(): void;
4
+ export declare function displayGoodbye(): void;
5
+ //# sourceMappingURL=ui.d.ts.map
@@ -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
+ }